Implementation:Openai Openai node EventEmitter On
| Knowledge Sources | |
|---|---|
| Domains | Realtime, Event_Driven_Architecture |
| Last Updated | 2026-02-15 00:00 GMT |
Overview
Concrete tool for registering typed event listeners on Realtime API connections provided by the openai-node SDK.
Description
The EventEmitter class provides a custom typed event emitter (NOT Node.js EventEmitter) with on(), off(), and once() methods. The Realtime API connections inherit from OpenAIRealtimeEmitter which extends this EventEmitter with Realtime-specific event types.
Key server events include: response.text.delta, response.audio.delta, response.audio_transcript.delta, response.function_call_arguments.delta, response.done, error, session.created, session.updated.
Usage
Use rt.on(eventName, callback) to register event listeners. Use rt.off(eventName, callback) to remove listeners. Use rt.once(eventName, callback) for one-time listeners.
Code Reference
Source Location
- Repository: openai-node
- File: src/lib/EventEmitter.ts
- Lines: L12-98 (EventEmitter class), L24-29 (on method), L38-44 (off method), L51-56 (once method)
Signature
export class EventEmitter<EventTypes extends Record<string, (...args: any[]) => void>> {
on<Event extends keyof EventTypes>(
event: Event,
listener: EventTypes[Event],
): this;
off<Event extends keyof EventTypes>(
event: Event,
listener: EventTypes[Event],
): this;
once<Event extends keyof EventTypes>(
event: Event,
listener: EventTypes[Event],
): this;
}
Import
// EventEmitter is used internally; access via rt.on(), rt.off(), rt.once()
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| event | keyof EventTypes | Yes | Event name (e.g., 'response.text.delta', 'error') |
| listener | Function | Yes | Callback function receiving the typed event payload |
Outputs
| Name | Type | Description |
|---|---|---|
| this | EventEmitter | Returns self for chaining |
| (callback) | void | Listener is invoked with typed event payload when event occurs |
Usage Examples
import { OpenAIRealtimeWS } from 'openai/realtime/ws';
const rt = await OpenAIRealtimeWS.create(client, {
model: 'gpt-4o-realtime-preview',
});
// Handle text deltas
rt.on('response.text.delta', (event) => {
process.stdout.write(event.delta);
});
// Handle audio transcript
rt.on('response.audio_transcript.delta', (event) => {
process.stdout.write(event.delta);
});
// Handle completion
rt.on('response.done', (event) => {
console.log('\nResponse complete');
});
// Handle errors
rt.on('error', (event) => {
console.error('Error:', event.error.message);
});
// One-time session setup
rt.once('session.created', () => {
console.log('Connected to Realtime API');
});