openai 7.13.0 → 7.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/client.d.mts +6 -1
- package/client.d.mts.map +1 -1
- package/client.d.ts +6 -1
- package/client.d.ts.map +1 -1
- package/client.js +3 -0
- package/client.js.map +1 -1
- package/client.mjs +3 -0
- package/client.mjs.map +1 -1
- package/core/pagination.d.mts +19 -1
- package/core/pagination.d.mts.map +1 -1
- package/core/pagination.d.ts +19 -1
- package/core/pagination.d.ts.map +1 -1
- package/core/pagination.js +32 -1
- package/core/pagination.js.map +1 -1
- package/core/pagination.mjs +30 -0
- package/core/pagination.mjs.map +1 -1
- package/helpers/live.d.mts +2 -0
- package/helpers/live.d.mts.map +1 -0
- package/helpers/live.d.ts +2 -0
- package/helpers/live.d.ts.map +1 -0
- package/helpers/live.js +6 -0
- package/helpers/live.js.map +1 -0
- package/helpers/live.mjs +2 -0
- package/helpers/live.mjs.map +1 -0
- package/lib/agents/agent-session-stream.d.mts +41 -0
- package/lib/agents/agent-session-stream.d.mts.map +1 -0
- package/lib/agents/agent-session-stream.d.ts +41 -0
- package/lib/agents/agent-session-stream.d.ts.map +1 -0
- package/lib/agents/agent-session-stream.js +271 -0
- package/lib/agents/agent-session-stream.js.map +1 -0
- package/lib/agents/agent-session-stream.mjs +267 -0
- package/lib/agents/agent-session-stream.mjs.map +1 -0
- package/lib/agents/output-text.d.mts +4 -0
- package/lib/agents/output-text.d.mts.map +1 -0
- package/lib/agents/output-text.d.ts +4 -0
- package/lib/agents/output-text.d.ts.map +1 -0
- package/lib/agents/output-text.js +8 -0
- package/lib/agents/output-text.js.map +1 -0
- package/lib/agents/output-text.mjs +5 -0
- package/lib/agents/output-text.mjs.map +1 -0
- package/lib/agents/turn-state.d.mts +14 -0
- package/lib/agents/turn-state.d.mts.map +1 -0
- package/lib/agents/turn-state.d.ts +14 -0
- package/lib/agents/turn-state.d.ts.map +1 -0
- package/lib/agents/turn-state.js +62 -0
- package/lib/agents/turn-state.js.map +1 -0
- package/lib/agents/turn-state.mjs +58 -0
- package/lib/agents/turn-state.mjs.map +1 -0
- package/lib/live/transcript-grouper.d.mts +96 -0
- package/lib/live/transcript-grouper.d.mts.map +1 -0
- package/lib/live/transcript-grouper.d.ts +96 -0
- package/lib/live/transcript-grouper.d.ts.map +1 -0
- package/lib/live/transcript-grouper.js +223 -0
- package/lib/live/transcript-grouper.js.map +1 -0
- package/lib/live/transcript-grouper.mjs +219 -0
- package/lib/live/transcript-grouper.mjs.map +1 -0
- package/lib/live/transcript-grouping.d.mts +49 -0
- package/lib/live/transcript-grouping.d.mts.map +1 -0
- package/lib/live/transcript-grouping.d.ts +49 -0
- package/lib/live/transcript-grouping.d.ts.map +1 -0
- package/lib/live/transcript-grouping.js +287 -0
- package/lib/live/transcript-grouping.js.map +1 -0
- package/lib/live/transcript-grouping.mjs +283 -0
- package/lib/live/transcript-grouping.mjs.map +1 -0
- package/lib/live/webrtc.d.mts +13 -0
- package/lib/live/webrtc.d.mts.map +1 -0
- package/lib/live/webrtc.d.ts +13 -0
- package/lib/live/webrtc.d.ts.map +1 -0
- package/lib/live/webrtc.js +16 -0
- package/lib/live/webrtc.js.map +1 -0
- package/lib/live/webrtc.mjs +10 -0
- package/lib/live/webrtc.mjs.map +1 -0
- package/lib/realtime/webrtc.d.mts +13 -0
- package/lib/realtime/webrtc.d.mts.map +1 -0
- package/lib/realtime/webrtc.d.ts +13 -0
- package/lib/realtime/webrtc.d.ts.map +1 -0
- package/lib/realtime/webrtc.js +16 -0
- package/lib/realtime/webrtc.js.map +1 -0
- package/lib/realtime/webrtc.mjs +10 -0
- package/lib/realtime/webrtc.mjs.map +1 -0
- package/lib/webrtc/connection.d.mts +40 -0
- package/lib/webrtc/connection.d.mts.map +1 -0
- package/lib/webrtc/connection.d.ts +40 -0
- package/lib/webrtc/connection.d.ts.map +1 -0
- package/lib/webrtc/connection.js +228 -0
- package/lib/webrtc/connection.js.map +1 -0
- package/lib/webrtc/connection.mjs +224 -0
- package/lib/webrtc/connection.mjs.map +1 -0
- package/lib/webrtc/data-channel.d.mts +32 -0
- package/lib/webrtc/data-channel.d.mts.map +1 -0
- package/lib/webrtc/data-channel.d.ts +32 -0
- package/lib/webrtc/data-channel.d.ts.map +1 -0
- package/lib/webrtc/data-channel.js +125 -0
- package/lib/webrtc/data-channel.js.map +1 -0
- package/lib/webrtc/data-channel.mjs +121 -0
- package/lib/webrtc/data-channel.mjs.map +1 -0
- package/lib/webrtc/errors.d.mts +19 -0
- package/lib/webrtc/errors.d.mts.map +1 -0
- package/lib/webrtc/errors.d.ts +19 -0
- package/lib/webrtc/errors.d.ts.map +1 -0
- package/lib/webrtc/errors.js +18 -0
- package/lib/webrtc/errors.js.map +1 -0
- package/lib/webrtc/errors.mjs +14 -0
- package/lib/webrtc/errors.mjs.map +1 -0
- package/lib/webrtc/subscriptions.d.mts +13 -0
- package/lib/webrtc/subscriptions.d.mts.map +1 -0
- package/lib/webrtc/subscriptions.d.ts +13 -0
- package/lib/webrtc/subscriptions.d.ts.map +1 -0
- package/lib/webrtc/subscriptions.js +62 -0
- package/lib/webrtc/subscriptions.js.map +1 -0
- package/lib/webrtc/subscriptions.mjs +58 -0
- package/lib/webrtc/subscriptions.mjs.map +1 -0
- package/lib/webrtc/types.d.mts +99 -0
- package/lib/webrtc/types.d.mts.map +1 -0
- package/lib/webrtc/types.d.ts +99 -0
- package/lib/webrtc/types.d.ts.map +1 -0
- package/lib/webrtc/types.js +3 -0
- package/lib/webrtc/types.js.map +1 -0
- package/lib/webrtc/types.mjs +2 -0
- package/lib/webrtc/types.mjs.map +1 -0
- package/live/webrtc.d.mts +3 -0
- package/live/webrtc.d.mts.map +1 -0
- package/live/webrtc.d.ts +3 -0
- package/live/webrtc.d.ts.map +1 -0
- package/live/webrtc.js +8 -0
- package/live/webrtc.js.map +1 -0
- package/live/webrtc.mjs +2 -0
- package/live/webrtc.mjs.map +1 -0
- package/package.json +11 -1
- package/realtime/webrtc.d.mts +3 -0
- package/realtime/webrtc.d.mts.map +1 -0
- package/realtime/webrtc.d.ts +3 -0
- package/realtime/webrtc.d.ts.map +1 -0
- package/realtime/webrtc.js +8 -0
- package/realtime/webrtc.js.map +1 -0
- package/realtime/webrtc.mjs +2 -0
- package/realtime/webrtc.mjs.map +1 -0
- package/resources/beta/agents/agents.d.mts +3678 -0
- package/resources/beta/agents/agents.d.mts.map +1 -0
- package/resources/beta/agents/agents.d.ts +3678 -0
- package/resources/beta/agents/agents.d.ts.map +1 -0
- package/resources/beta/agents/agents.js +118 -0
- package/resources/beta/agents/agents.js.map +1 -0
- package/resources/beta/agents/agents.mjs +113 -0
- package/resources/beta/agents/agents.mjs.map +1 -0
- package/resources/beta/agents/environments/environments.d.mts +65 -0
- package/resources/beta/agents/environments/environments.d.mts.map +1 -0
- package/resources/beta/agents/environments/environments.d.ts +65 -0
- package/resources/beta/agents/environments/environments.d.ts.map +1 -0
- package/resources/beta/agents/environments/environments.js +43 -0
- package/resources/beta/agents/environments/environments.js.map +1 -0
- package/resources/beta/agents/environments/environments.mjs +38 -0
- package/resources/beta/agents/environments/environments.mjs.map +1 -0
- package/resources/beta/agents/environments/files.d.mts +111 -0
- package/resources/beta/agents/environments/files.d.mts.map +1 -0
- package/resources/beta/agents/environments/files.d.ts +111 -0
- package/resources/beta/agents/environments/files.d.ts.map +1 -0
- package/resources/beta/agents/environments/files.js +61 -0
- package/resources/beta/agents/environments/files.js.map +1 -0
- package/resources/beta/agents/environments/files.mjs +57 -0
- package/resources/beta/agents/environments/files.mjs.map +1 -0
- package/resources/beta/agents/environments/index.d.mts +4 -0
- package/resources/beta/agents/environments/index.d.mts.map +1 -0
- package/resources/beta/agents/environments/index.d.ts +4 -0
- package/resources/beta/agents/environments/index.d.ts.map +1 -0
- package/resources/beta/agents/environments/index.js +11 -0
- package/resources/beta/agents/environments/index.js.map +1 -0
- package/resources/beta/agents/environments/index.mjs +5 -0
- package/resources/beta/agents/environments/index.mjs.map +1 -0
- package/resources/beta/agents/environments/templates.d.mts +415 -0
- package/resources/beta/agents/environments/templates.d.mts.map +1 -0
- package/resources/beta/agents/environments/templates.d.ts +415 -0
- package/resources/beta/agents/environments/templates.d.ts.map +1 -0
- package/resources/beta/agents/environments/templates.js +112 -0
- package/resources/beta/agents/environments/templates.js.map +1 -0
- package/resources/beta/agents/environments/templates.mjs +108 -0
- package/resources/beta/agents/environments/templates.mjs.map +1 -0
- package/resources/beta/agents/environments.d.mts +2 -0
- package/resources/beta/agents/environments.d.mts.map +1 -0
- package/resources/beta/agents/environments.d.ts +2 -0
- package/resources/beta/agents/environments.d.ts.map +1 -0
- package/resources/beta/agents/environments.js +6 -0
- package/resources/beta/agents/environments.js.map +1 -0
- package/resources/beta/agents/environments.mjs +3 -0
- package/resources/beta/agents/environments.mjs.map +1 -0
- package/resources/beta/agents/index.d.mts +5 -0
- package/resources/beta/agents/index.d.mts.map +1 -0
- package/resources/beta/agents/index.d.ts +5 -0
- package/resources/beta/agents/index.d.ts.map +1 -0
- package/resources/beta/agents/index.js +13 -0
- package/resources/beta/agents/index.js.map +1 -0
- package/resources/beta/agents/index.mjs +6 -0
- package/resources/beta/agents/index.mjs.map +1 -0
- package/resources/beta/agents/sessions/artifacts.d.mts +158 -0
- package/resources/beta/agents/sessions/artifacts.d.mts.map +1 -0
- package/resources/beta/agents/sessions/artifacts.d.ts +158 -0
- package/resources/beta/agents/sessions/artifacts.d.ts.map +1 -0
- package/resources/beta/agents/sessions/artifacts.js +106 -0
- package/resources/beta/agents/sessions/artifacts.js.map +1 -0
- package/resources/beta/agents/sessions/artifacts.mjs +102 -0
- package/resources/beta/agents/sessions/artifacts.mjs.map +1 -0
- package/resources/beta/agents/sessions/events.d.mts +61 -0
- package/resources/beta/agents/sessions/events.d.mts.map +1 -0
- package/resources/beta/agents/sessions/events.d.ts +61 -0
- package/resources/beta/agents/sessions/events.d.ts.map +1 -0
- package/resources/beta/agents/sessions/events.js +72 -0
- package/resources/beta/agents/sessions/events.js.map +1 -0
- package/resources/beta/agents/sessions/events.mjs +68 -0
- package/resources/beta/agents/sessions/events.mjs.map +1 -0
- package/resources/beta/agents/sessions/index.d.mts +7 -0
- package/resources/beta/agents/sessions/index.d.mts.map +1 -0
- package/resources/beta/agents/sessions/index.d.ts +7 -0
- package/resources/beta/agents/sessions/index.d.ts.map +1 -0
- package/resources/beta/agents/sessions/index.js +17 -0
- package/resources/beta/agents/sessions/index.js.map +1 -0
- package/resources/beta/agents/sessions/index.mjs +8 -0
- package/resources/beta/agents/sessions/index.mjs.map +1 -0
- package/resources/beta/agents/sessions/items.d.mts +37 -0
- package/resources/beta/agents/sessions/items.d.mts.map +1 -0
- package/resources/beta/agents/sessions/items.d.ts +37 -0
- package/resources/beta/agents/sessions/items.d.ts.map +1 -0
- package/resources/beta/agents/sessions/items.js +35 -0
- package/resources/beta/agents/sessions/items.js.map +1 -0
- package/resources/beta/agents/sessions/items.mjs +31 -0
- package/resources/beta/agents/sessions/items.mjs.map +1 -0
- package/resources/beta/agents/sessions/sessions.d.mts +220 -0
- package/resources/beta/agents/sessions/sessions.d.mts.map +1 -0
- package/resources/beta/agents/sessions/sessions.d.ts +220 -0
- package/resources/beta/agents/sessions/sessions.d.ts.map +1 -0
- package/resources/beta/agents/sessions/sessions.js +124 -0
- package/resources/beta/agents/sessions/sessions.js.map +1 -0
- package/resources/beta/agents/sessions/sessions.mjs +119 -0
- package/resources/beta/agents/sessions/sessions.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/index.d.mts +4 -0
- package/resources/beta/agents/sessions/subagents/index.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/index.d.ts +4 -0
- package/resources/beta/agents/sessions/subagents/index.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/index.js +11 -0
- package/resources/beta/agents/sessions/subagents/index.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/index.mjs +5 -0
- package/resources/beta/agents/sessions/subagents/index.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/items.d.mts +41 -0
- package/resources/beta/agents/sessions/subagents/items.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/items.d.ts +41 -0
- package/resources/beta/agents/sessions/subagents/items.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/items.js +36 -0
- package/resources/beta/agents/sessions/subagents/items.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/items.mjs +32 -0
- package/resources/beta/agents/sessions/subagents/items.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/subagents.d.mts +65 -0
- package/resources/beta/agents/sessions/subagents/subagents.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/subagents.d.ts +65 -0
- package/resources/beta/agents/sessions/subagents/subagents.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/subagents.js +67 -0
- package/resources/beta/agents/sessions/subagents/subagents.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/subagents.mjs +62 -0
- package/resources/beta/agents/sessions/subagents/subagents.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/index.d.mts +3 -0
- package/resources/beta/agents/sessions/subagents/turns/index.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/index.d.ts +3 -0
- package/resources/beta/agents/sessions/subagents/turns/index.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/index.js +9 -0
- package/resources/beta/agents/sessions/subagents/turns/index.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/index.mjs +4 -0
- package/resources/beta/agents/sessions/subagents/turns/index.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/items.d.mts +45 -0
- package/resources/beta/agents/sessions/subagents/turns/items.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/items.d.ts +45 -0
- package/resources/beta/agents/sessions/subagents/turns/items.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/items.js +36 -0
- package/resources/beta/agents/sessions/subagents/turns/items.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/items.mjs +32 -0
- package/resources/beta/agents/sessions/subagents/turns/items.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.d.mts +73 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.d.ts +73 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.js +68 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.mjs +63 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns.d.mts +2 -0
- package/resources/beta/agents/sessions/subagents/turns.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns.d.ts +2 -0
- package/resources/beta/agents/sessions/subagents/turns.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns.js +6 -0
- package/resources/beta/agents/sessions/subagents/turns.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns.mjs +3 -0
- package/resources/beta/agents/sessions/subagents/turns.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents.d.mts +2 -0
- package/resources/beta/agents/sessions/subagents.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents.d.ts +2 -0
- package/resources/beta/agents/sessions/subagents.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents.js +6 -0
- package/resources/beta/agents/sessions/subagents.js.map +1 -0
- package/resources/beta/agents/sessions/subagents.mjs +3 -0
- package/resources/beta/agents/sessions/subagents.mjs.map +1 -0
- package/resources/beta/agents/sessions/turns.d.mts +116 -0
- package/resources/beta/agents/sessions/turns.d.mts.map +1 -0
- package/resources/beta/agents/sessions/turns.d.ts +116 -0
- package/resources/beta/agents/sessions/turns.d.ts.map +1 -0
- package/resources/beta/agents/sessions/turns.js +57 -0
- package/resources/beta/agents/sessions/turns.js.map +1 -0
- package/resources/beta/agents/sessions/turns.mjs +53 -0
- package/resources/beta/agents/sessions/turns.mjs.map +1 -0
- package/resources/beta/agents/sessions.d.mts +2 -0
- package/resources/beta/agents/sessions.d.mts.map +1 -0
- package/resources/beta/agents/sessions.d.ts +2 -0
- package/resources/beta/agents/sessions.d.ts.map +1 -0
- package/resources/beta/agents/sessions.js +6 -0
- package/resources/beta/agents/sessions.js.map +1 -0
- package/resources/beta/agents/sessions.mjs +3 -0
- package/resources/beta/agents/sessions.mjs.map +1 -0
- package/resources/beta/agents/vaults/credentials.d.mts +526 -0
- package/resources/beta/agents/vaults/credentials.d.mts.map +1 -0
- package/resources/beta/agents/vaults/credentials.d.ts +526 -0
- package/resources/beta/agents/vaults/credentials.d.ts.map +1 -0
- package/resources/beta/agents/vaults/credentials.js +132 -0
- package/resources/beta/agents/vaults/credentials.js.map +1 -0
- package/resources/beta/agents/vaults/credentials.mjs +128 -0
- package/resources/beta/agents/vaults/credentials.mjs.map +1 -0
- package/resources/beta/agents/vaults/index.d.mts +3 -0
- package/resources/beta/agents/vaults/index.d.mts.map +1 -0
- package/resources/beta/agents/vaults/index.d.ts +3 -0
- package/resources/beta/agents/vaults/index.d.ts.map +1 -0
- package/resources/beta/agents/vaults/index.js +9 -0
- package/resources/beta/agents/vaults/index.js.map +1 -0
- package/resources/beta/agents/vaults/index.mjs +4 -0
- package/resources/beta/agents/vaults/index.mjs.map +1 -0
- package/resources/beta/agents/vaults/vaults.d.mts +145 -0
- package/resources/beta/agents/vaults/vaults.d.mts.map +1 -0
- package/resources/beta/agents/vaults/vaults.d.ts +145 -0
- package/resources/beta/agents/vaults/vaults.d.ts.map +1 -0
- package/resources/beta/agents/vaults/vaults.js +93 -0
- package/resources/beta/agents/vaults/vaults.js.map +1 -0
- package/resources/beta/agents/vaults/vaults.mjs +88 -0
- package/resources/beta/agents/vaults/vaults.mjs.map +1 -0
- package/resources/beta/agents/vaults.d.mts +2 -0
- package/resources/beta/agents/vaults.d.mts.map +1 -0
- package/resources/beta/agents/vaults.d.ts +2 -0
- package/resources/beta/agents/vaults.d.ts.map +1 -0
- package/resources/beta/agents/vaults.js +6 -0
- package/resources/beta/agents/vaults.js.map +1 -0
- package/resources/beta/agents/vaults.mjs +3 -0
- package/resources/beta/agents/vaults.mjs.map +1 -0
- package/resources/beta/agents.d.mts +2 -0
- package/resources/beta/agents.d.mts.map +1 -0
- package/resources/beta/agents.d.ts +2 -0
- package/resources/beta/agents.d.ts.map +1 -0
- package/resources/beta/agents.js +6 -0
- package/resources/beta/agents.js.map +1 -0
- package/resources/beta/agents.mjs +3 -0
- package/resources/beta/agents.mjs.map +1 -0
- package/resources/beta/beta.d.mts +4 -1
- package/resources/beta/beta.d.mts.map +1 -1
- package/resources/beta/beta.d.ts +4 -1
- package/resources/beta/beta.d.ts.map +1 -1
- package/resources/beta/beta.js +4 -0
- package/resources/beta/beta.js.map +1 -1
- package/resources/beta/beta.mjs +4 -0
- package/resources/beta/beta.mjs.map +1 -1
- package/resources/beta/index.d.mts +1 -0
- package/resources/beta/index.d.mts.map +1 -1
- package/resources/beta/index.d.ts +1 -0
- package/resources/beta/index.d.ts.map +1 -1
- package/resources/beta/index.js +11 -9
- package/resources/beta/index.js.map +1 -1
- package/resources/beta/index.mjs +1 -0
- package/resources/beta/index.mjs.map +1 -1
- package/resources/beta/responses/responses.d.mts +48 -0
- package/resources/beta/responses/responses.d.mts.map +1 -1
- package/resources/beta/responses/responses.d.ts +48 -0
- package/resources/beta/responses/responses.d.ts.map +1 -1
- package/resources/beta/responses/responses.js.map +1 -1
- package/resources/beta/responses/responses.mjs.map +1 -1
- package/resources/conversations/items.d.mts +16 -0
- package/resources/conversations/items.d.mts.map +1 -1
- package/resources/conversations/items.d.ts +16 -0
- package/resources/conversations/items.d.ts.map +1 -1
- package/resources/index.d.mts +1 -0
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +1 -0
- package/resources/index.d.ts.map +1 -1
- package/resources/index.js +3 -1
- package/resources/index.js.map +1 -1
- package/resources/index.mjs +1 -0
- package/resources/index.mjs.map +1 -1
- package/resources/live/forks/forks.d.mts +110 -0
- package/resources/live/forks/forks.d.mts.map +1 -0
- package/resources/live/forks/forks.d.ts +110 -0
- package/resources/live/forks/forks.d.ts.map +1 -0
- package/resources/live/forks/forks.js +9 -0
- package/resources/live/forks/forks.js.map +1 -0
- package/resources/live/forks/forks.mjs +5 -0
- package/resources/live/forks/forks.mjs.map +1 -0
- package/resources/live/forks/index.d.mts +4 -0
- package/resources/live/forks/index.d.mts.map +1 -0
- package/resources/live/forks/index.d.ts +4 -0
- package/resources/live/forks/index.d.ts.map +1 -0
- package/resources/live/forks/index.js +7 -0
- package/resources/live/forks/index.js.map +1 -0
- package/resources/live/forks/index.mjs +3 -0
- package/resources/live/forks/index.mjs.map +1 -0
- package/resources/live/forks/internal-base.d.mts +73 -0
- package/resources/live/forks/internal-base.d.mts.map +1 -0
- package/resources/live/forks/internal-base.d.ts +73 -0
- package/resources/live/forks/internal-base.d.ts.map +1 -0
- package/resources/live/forks/internal-base.js +49 -0
- package/resources/live/forks/internal-base.js.map +1 -0
- package/resources/live/forks/internal-base.mjs +43 -0
- package/resources/live/forks/internal-base.mjs.map +1 -0
- package/resources/live/forks/ws-base.d.mts +109 -0
- package/resources/live/forks/ws-base.d.mts.map +1 -0
- package/resources/live/forks/ws-base.d.ts +109 -0
- package/resources/live/forks/ws-base.d.ts.map +1 -0
- package/resources/live/forks/ws-base.js +476 -0
- package/resources/live/forks/ws-base.js.map +1 -0
- package/resources/live/forks/ws-base.mjs +472 -0
- package/resources/live/forks/ws-base.mjs.map +1 -0
- package/resources/live/forks/ws.d.mts +13 -0
- package/resources/live/forks/ws.d.mts.map +1 -0
- package/resources/live/forks/ws.d.ts +13 -0
- package/resources/live/forks/ws.d.ts.map +1 -0
- package/resources/live/forks/ws.js +34 -0
- package/resources/live/forks/ws.js.map +1 -0
- package/resources/live/forks/ws.mjs +29 -0
- package/resources/live/forks/ws.mjs.map +1 -0
- package/resources/live/forks.d.mts +2 -0
- package/resources/live/forks.d.mts.map +1 -0
- package/resources/live/forks.d.ts +2 -0
- package/resources/live/forks.d.ts.map +1 -0
- package/resources/live/forks.js +6 -0
- package/resources/live/forks.js.map +1 -0
- package/resources/live/forks.mjs +3 -0
- package/resources/live/forks.mjs.map +1 -0
- package/resources/live/index.d.mts +7 -0
- package/resources/live/index.d.mts.map +1 -0
- package/resources/live/index.d.ts +7 -0
- package/resources/live/index.d.ts.map +1 -0
- package/resources/live/index.js +13 -0
- package/resources/live/index.js.map +1 -0
- package/resources/live/index.mjs +6 -0
- package/resources/live/index.mjs.map +1 -0
- package/resources/live/internal-base.d.mts +71 -0
- package/resources/live/internal-base.d.mts.map +1 -0
- package/resources/live/internal-base.d.ts +71 -0
- package/resources/live/internal-base.d.ts.map +1 -0
- package/resources/live/internal-base.js +48 -0
- package/resources/live/internal-base.js.map +1 -0
- package/resources/live/internal-base.mjs +42 -0
- package/resources/live/internal-base.mjs.map +1 -0
- package/resources/live/live.d.mts +1864 -0
- package/resources/live/live.d.mts.map +1 -0
- package/resources/live/live.d.ts +1864 -0
- package/resources/live/live.d.ts.map +1 -0
- package/resources/live/live.js +40 -0
- package/resources/live/live.js.map +1 -0
- package/resources/live/live.mjs +35 -0
- package/resources/live/live.mjs.map +1 -0
- package/resources/live/sessions.d.mts +260 -0
- package/resources/live/sessions.d.mts.map +1 -0
- package/resources/live/sessions.d.ts +260 -0
- package/resources/live/sessions.d.ts.map +1 -0
- package/resources/live/sessions.js +124 -0
- package/resources/live/sessions.js.map +1 -0
- package/resources/live/sessions.mjs +120 -0
- package/resources/live/sessions.mjs.map +1 -0
- package/resources/live/sideband/index.d.mts +4 -0
- package/resources/live/sideband/index.d.mts.map +1 -0
- package/resources/live/sideband/index.d.ts +4 -0
- package/resources/live/sideband/index.d.ts.map +1 -0
- package/resources/live/sideband/index.js +7 -0
- package/resources/live/sideband/index.js.map +1 -0
- package/resources/live/sideband/index.mjs +3 -0
- package/resources/live/sideband/index.mjs.map +1 -0
- package/resources/live/sideband/internal-base.d.mts +73 -0
- package/resources/live/sideband/internal-base.d.mts.map +1 -0
- package/resources/live/sideband/internal-base.d.ts +73 -0
- package/resources/live/sideband/internal-base.d.ts.map +1 -0
- package/resources/live/sideband/internal-base.js +49 -0
- package/resources/live/sideband/internal-base.js.map +1 -0
- package/resources/live/sideband/internal-base.mjs +43 -0
- package/resources/live/sideband/internal-base.mjs.map +1 -0
- package/resources/live/sideband/sideband.d.mts +25 -0
- package/resources/live/sideband/sideband.d.mts.map +1 -0
- package/resources/live/sideband/sideband.d.ts +25 -0
- package/resources/live/sideband/sideband.d.ts.map +1 -0
- package/resources/live/sideband/sideband.js +9 -0
- package/resources/live/sideband/sideband.js.map +1 -0
- package/resources/live/sideband/sideband.mjs +5 -0
- package/resources/live/sideband/sideband.mjs.map +1 -0
- package/resources/live/sideband/ws-base.d.mts +114 -0
- package/resources/live/sideband/ws-base.d.mts.map +1 -0
- package/resources/live/sideband/ws-base.d.ts +114 -0
- package/resources/live/sideband/ws-base.d.ts.map +1 -0
- package/resources/live/sideband/ws-base.js +476 -0
- package/resources/live/sideband/ws-base.js.map +1 -0
- package/resources/live/sideband/ws-base.mjs +472 -0
- package/resources/live/sideband/ws-base.mjs.map +1 -0
- package/resources/live/sideband/ws.d.mts +13 -0
- package/resources/live/sideband/ws.d.mts.map +1 -0
- package/resources/live/sideband/ws.d.ts +13 -0
- package/resources/live/sideband/ws.d.ts.map +1 -0
- package/resources/live/sideband/ws.js +34 -0
- package/resources/live/sideband/ws.js.map +1 -0
- package/resources/live/sideband/ws.mjs +29 -0
- package/resources/live/sideband/ws.mjs.map +1 -0
- package/resources/live/sideband.d.mts +2 -0
- package/resources/live/sideband.d.mts.map +1 -0
- package/resources/live/sideband.d.ts +2 -0
- package/resources/live/sideband.d.ts.map +1 -0
- package/resources/live/sideband.js +6 -0
- package/resources/live/sideband.js.map +1 -0
- package/resources/live/sideband.mjs +3 -0
- package/resources/live/sideband.mjs.map +1 -0
- package/resources/live/ws-base.d.mts +106 -0
- package/resources/live/ws-base.d.mts.map +1 -0
- package/resources/live/ws-base.d.ts +106 -0
- package/resources/live/ws-base.d.ts.map +1 -0
- package/resources/live/ws-base.js +476 -0
- package/resources/live/ws-base.js.map +1 -0
- package/resources/live/ws-base.mjs +472 -0
- package/resources/live/ws-base.mjs.map +1 -0
- package/resources/live/ws.d.mts +13 -0
- package/resources/live/ws.d.mts.map +1 -0
- package/resources/live/ws.d.ts +13 -0
- package/resources/live/ws.d.ts.map +1 -0
- package/resources/live/ws.js +34 -0
- package/resources/live/ws.js.map +1 -0
- package/resources/live/ws.mjs +29 -0
- package/resources/live/ws.mjs.map +1 -0
- package/resources/live.d.mts +2 -0
- package/resources/live.d.mts.map +1 -0
- package/resources/live.d.ts +2 -0
- package/resources/live.d.ts.map +1 -0
- package/resources/live.js +6 -0
- package/resources/live.js.map +1 -0
- package/resources/live.mjs +3 -0
- package/resources/live.mjs.map +1 -0
- package/resources/responses/responses.d.mts +48 -0
- package/resources/responses/responses.d.mts.map +1 -1
- package/resources/responses/responses.d.ts +48 -0
- package/resources/responses/responses.d.ts.map +1 -1
- package/resources/responses/responses.js.map +1 -1
- package/resources/responses/responses.mjs.map +1 -1
- package/resources/webhooks/webhooks.d.mts +72 -5
- package/resources/webhooks/webhooks.d.mts.map +1 -1
- package/resources/webhooks/webhooks.d.ts +72 -5
- package/resources/webhooks/webhooks.d.ts.map +1 -1
- package/src/client.ts +10 -0
- package/src/core/pagination.ts +63 -1
- package/src/helpers/live.ts +8 -0
- package/src/lib/agents/agent-session-stream.ts +326 -0
- package/src/lib/agents/output-text.ts +6 -0
- package/src/lib/agents/turn-state.ts +61 -0
- package/src/lib/live/transcript-grouper.ts +303 -0
- package/src/lib/live/transcript-grouping.ts +362 -0
- package/src/lib/live/webrtc.ts +23 -0
- package/src/lib/realtime/webrtc.ts +20 -0
- package/src/lib/webrtc/connection.ts +309 -0
- package/src/lib/webrtc/data-channel.ts +144 -0
- package/src/lib/webrtc/errors.ts +38 -0
- package/src/lib/webrtc/subscriptions.ts +62 -0
- package/src/lib/webrtc/types.ts +109 -0
- package/src/live/webrtc.ts +10 -0
- package/src/realtime/webrtc.ts +10 -0
- package/src/resources/beta/agents/agents.ts +4621 -0
- package/src/resources/beta/agents/environments/environments.ts +111 -0
- package/src/resources/beta/agents/environments/files.ts +164 -0
- package/src/resources/beta/agents/environments/index.ts +19 -0
- package/src/resources/beta/agents/environments/templates.ts +537 -0
- package/src/resources/beta/agents/environments.ts +3 -0
- package/src/resources/beta/agents/index.ts +127 -0
- package/src/resources/beta/agents/sessions/artifacts.ts +239 -0
- package/src/resources/beta/agents/sessions/events.ts +91 -0
- package/src/resources/beta/agents/sessions/index.ts +24 -0
- package/src/resources/beta/agents/sessions/items.ts +59 -0
- package/src/resources/beta/agents/sessions/sessions.ts +350 -0
- package/src/resources/beta/agents/sessions/subagents/index.ts +5 -0
- package/src/resources/beta/agents/sessions/subagents/items.ts +65 -0
- package/src/resources/beta/agents/sessions/subagents/subagents.ts +113 -0
- package/src/resources/beta/agents/sessions/subagents/turns/index.ts +4 -0
- package/src/resources/beta/agents/sessions/subagents/turns/items.ts +70 -0
- package/src/resources/beta/agents/sessions/subagents/turns/turns.ts +111 -0
- package/src/resources/beta/agents/sessions/subagents/turns.ts +3 -0
- package/src/resources/beta/agents/sessions/subagents.ts +3 -0
- package/src/resources/beta/agents/sessions/turns.ts +159 -0
- package/src/resources/beta/agents/sessions.ts +3 -0
- package/src/resources/beta/agents/vaults/credentials.ts +687 -0
- package/src/resources/beta/agents/vaults/index.ts +29 -0
- package/src/resources/beta/agents/vaults/vaults.ts +237 -0
- package/src/resources/beta/agents/vaults.ts +3 -0
- package/src/resources/beta/agents.ts +3 -0
- package/src/resources/beta/beta.ts +207 -0
- package/src/resources/beta/index.ts +106 -0
- package/src/resources/beta/responses/responses.ts +60 -0
- package/src/resources/conversations/items.ts +20 -0
- package/src/resources/index.ts +1 -0
- package/src/resources/live/api.md +87 -0
- package/src/resources/live/forks/forks.ts +169 -0
- package/src/resources/live/forks/index.ts +5 -0
- package/src/resources/live/forks/internal-base.ts +107 -0
- package/src/resources/live/forks/ws-base.ts +611 -0
- package/src/resources/live/forks/ws.ts +46 -0
- package/src/resources/live/forks.ts +3 -0
- package/src/resources/live/index.ts +20 -0
- package/src/resources/live/internal-base.ts +104 -0
- package/src/resources/live/live.ts +2296 -0
- package/src/resources/live/sessions.ts +343 -0
- package/src/resources/live/sideband/index.ts +10 -0
- package/src/resources/live/sideband/internal-base.ts +107 -0
- package/src/resources/live/sideband/sideband.ts +58 -0
- package/src/resources/live/sideband/ws-base.ts +621 -0
- package/src/resources/live/sideband/ws.ts +46 -0
- package/src/resources/live/sideband.ts +3 -0
- package/src/resources/live/ws-base.ts +607 -0
- package/src/resources/live/ws.ts +42 -0
- package/src/resources/live.ts +3 -0
- package/src/resources/responses/responses.ts +60 -0
- package/src/resources/webhooks/api.md +1 -0
- package/src/resources/webhooks/webhooks.ts +82 -3
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { DataChannel } from './data-channel';
|
|
2
|
+
import { WebRTCError } from './errors';
|
|
3
|
+
import type { WebRTCErrorPhase } from './errors';
|
|
4
|
+
import { Subscriptions } from './subscriptions';
|
|
5
|
+
import type {
|
|
6
|
+
BrowserDataChannel,
|
|
7
|
+
BrowserPeerConnection,
|
|
8
|
+
WebRTCConfiguration,
|
|
9
|
+
WebRTCConnectOptions,
|
|
10
|
+
WebRTCConnectionEvent,
|
|
11
|
+
WebRTCCloseReason,
|
|
12
|
+
WebRTCPeerConnection,
|
|
13
|
+
WebRTCState,
|
|
14
|
+
} from './types';
|
|
15
|
+
|
|
16
|
+
interface Attempt {
|
|
17
|
+
controller: AbortController;
|
|
18
|
+
phase: WebRTCErrorPhase;
|
|
19
|
+
answered: boolean;
|
|
20
|
+
resolve: () => void;
|
|
21
|
+
reject: (error: WebRTCError) => void;
|
|
22
|
+
cleanup: () => void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Browser-native WebRTC negotiation with application-owned SDP signaling. */
|
|
26
|
+
export class WebRTCConnection<ClientEvent, ServerEvent extends { type: string }> {
|
|
27
|
+
/** Native peer connection; configure application-owned media before connect(). */
|
|
28
|
+
readonly peerConnection: BrowserPeerConnection;
|
|
29
|
+
/** Native ordered, reliable channel carrying protocol events. */
|
|
30
|
+
readonly dataChannel: BrowserDataChannel;
|
|
31
|
+
private readonly peer: WebRTCPeerConnection;
|
|
32
|
+
private readonly adapter: DataChannel<ClientEvent, ServerEvent>;
|
|
33
|
+
private readonly connectionEvents = new Subscriptions<WebRTCConnectionEvent>();
|
|
34
|
+
private currentState: WebRTCState = 'new';
|
|
35
|
+
private attempt: Attempt | undefined;
|
|
36
|
+
|
|
37
|
+
/** Creates native resources, but does not request media, contact a server, or begin negotiation. */
|
|
38
|
+
constructor(configuration?: WebRTCConfiguration) {
|
|
39
|
+
const host = globalThis as typeof globalThis & {
|
|
40
|
+
RTCPeerConnection?: new (configuration?: WebRTCConfiguration) => WebRTCPeerConnection;
|
|
41
|
+
};
|
|
42
|
+
if (!host.RTCPeerConnection) {
|
|
43
|
+
throw new WebRTCError(
|
|
44
|
+
'unsupported_environment',
|
|
45
|
+
'transport',
|
|
46
|
+
'WebRTC requires a browser with RTCPeerConnection.',
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
const peer = new host.RTCPeerConnection(configuration);
|
|
50
|
+
try {
|
|
51
|
+
this.adapter = new DataChannel(peer.createDataChannel('oai-events'));
|
|
52
|
+
} catch (error) {
|
|
53
|
+
peer.close();
|
|
54
|
+
throw new WebRTCError(
|
|
55
|
+
'negotiation_failed',
|
|
56
|
+
'transport',
|
|
57
|
+
'Could not create the WebRTC data channel.',
|
|
58
|
+
error,
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
this.peer = peer;
|
|
62
|
+
this.peerConnection = peer as BrowserPeerConnection;
|
|
63
|
+
this.dataChannel = this.adapter.dataChannel;
|
|
64
|
+
peer.addEventListener('connectionstatechange', this.onPeerState);
|
|
65
|
+
this.adapter.onConnectionEvent(this.onChannelEvent);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Current state, including before subscriptions are registered; notifications are not replayed. */
|
|
69
|
+
get state(): WebRTCState {
|
|
70
|
+
return this.currentState;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Subscribes to one server event type with its generated payload; returns an independent unsubscribe function. */
|
|
74
|
+
on<Type extends ServerEvent['type']>(
|
|
75
|
+
type: Type,
|
|
76
|
+
handler: (event: Extract<ServerEvent, { type: Type }>) => unknown,
|
|
77
|
+
): () => void {
|
|
78
|
+
return this.adapter.on(type, handler);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Subscribes before connecting so initial server events are observable. API errors remain protocol data. */
|
|
82
|
+
onEvent(handler: (event: ServerEvent) => unknown): () => void {
|
|
83
|
+
return this.adapter.onEvent(handler);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** Subscribes to local diagnostics and lifecycle. Setup failures reject connect() instead of emitting errors here. */
|
|
87
|
+
onConnectionEvent(handler: (event: WebRTCConnectionEvent) => unknown): () => void {
|
|
88
|
+
if (this.currentState === 'closed') {
|
|
89
|
+
throw new WebRTCError('invalid_state', 'transport', 'The WebRTC connection is closed.');
|
|
90
|
+
}
|
|
91
|
+
return this.connectionEvents.add(handler);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Sends without buffering; returning means local submission, not server acceptance. */
|
|
95
|
+
send(event: ClientEvent): void {
|
|
96
|
+
this.adapter.send(event);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Negotiates once and waits for both native connection and data-channel readiness. Defaults to a 30-second deadline. */
|
|
100
|
+
connect(options: WebRTCConnectOptions): Promise<void> {
|
|
101
|
+
if (this.currentState !== 'new') {
|
|
102
|
+
return Promise.reject(
|
|
103
|
+
new WebRTCError('invalid_state', 'transport', 'connect() may only be called once per connection.'),
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
const timeoutMs = options.timeoutMs ?? 30_000;
|
|
107
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0 || timeoutMs > 2_147_483_647) {
|
|
108
|
+
return Promise.reject(
|
|
109
|
+
new WebRTCError('invalid_state', 'transport', 'timeoutMs must be a positive finite timer duration.'),
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
const controller = new AbortController();
|
|
113
|
+
// oxlint-disable-next-line promise/avoid-new -- Native readiness, timeout, and abort events settle one connection attempt.
|
|
114
|
+
const result = new Promise<void>((resolve, reject) => {
|
|
115
|
+
const onAbort = () =>
|
|
116
|
+
this.failSetup(
|
|
117
|
+
new WebRTCError(
|
|
118
|
+
'aborted',
|
|
119
|
+
this.attempt?.phase ?? 'offer',
|
|
120
|
+
'WebRTC setup was cancelled.',
|
|
121
|
+
options.signal?.reason,
|
|
122
|
+
),
|
|
123
|
+
'aborted',
|
|
124
|
+
);
|
|
125
|
+
const timer = setTimeout(
|
|
126
|
+
() =>
|
|
127
|
+
this.failSetup(
|
|
128
|
+
new WebRTCError('timeout', this.attempt?.phase ?? 'offer', 'WebRTC setup timed out.'),
|
|
129
|
+
'timeout',
|
|
130
|
+
),
|
|
131
|
+
timeoutMs,
|
|
132
|
+
);
|
|
133
|
+
this.attempt = {
|
|
134
|
+
controller,
|
|
135
|
+
phase: 'offer',
|
|
136
|
+
answered: false,
|
|
137
|
+
resolve,
|
|
138
|
+
reject,
|
|
139
|
+
cleanup: () => {
|
|
140
|
+
clearTimeout(timer);
|
|
141
|
+
options.signal?.removeEventListener('abort', onAbort);
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
this.currentState = 'connecting';
|
|
145
|
+
options.signal?.addEventListener('abort', onAbort, { once: true });
|
|
146
|
+
if (options.signal?.aborted) {
|
|
147
|
+
onAbort();
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
this.connectionEvents.emit({ type: 'state.changed', state: 'connecting' });
|
|
151
|
+
});
|
|
152
|
+
const { attempt } = this;
|
|
153
|
+
if (attempt) {
|
|
154
|
+
void this.negotiate(options, attempt);
|
|
155
|
+
}
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** Idempotently closes owned native resources. It never stops application-supplied media tracks. */
|
|
160
|
+
close(): void {
|
|
161
|
+
if (this.attempt) {
|
|
162
|
+
this.failSetup(
|
|
163
|
+
new WebRTCError('aborted', this.attempt.phase, 'WebRTC setup was closed by the application.'),
|
|
164
|
+
'local',
|
|
165
|
+
);
|
|
166
|
+
} else {
|
|
167
|
+
this.finish('local');
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
private async negotiate(options: WebRTCConnectOptions, attempt: Attempt): Promise<void> {
|
|
172
|
+
try {
|
|
173
|
+
const offer = await this.peer.createOffer();
|
|
174
|
+
if (this.attempt !== attempt) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
await this.peer.setLocalDescription(offer);
|
|
178
|
+
if (this.attempt !== attempt) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const sdp = this.peer.localDescription?.sdp;
|
|
182
|
+
if (!sdp) {
|
|
183
|
+
throw new Error('The local description has no SDP.');
|
|
184
|
+
}
|
|
185
|
+
attempt.phase = 'signaling';
|
|
186
|
+
const answer = await options.exchangeSdp(sdp, { signal: attempt.controller.signal });
|
|
187
|
+
if (this.attempt !== attempt) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (typeof answer !== 'string' || answer.length === 0) {
|
|
191
|
+
throw new TypeError('The SDP callback must return a nonempty string.');
|
|
192
|
+
}
|
|
193
|
+
attempt.phase = 'answer';
|
|
194
|
+
await this.peer.setRemoteDescription({ type: 'answer', sdp: answer });
|
|
195
|
+
if (this.attempt !== attempt) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
attempt.answered = true;
|
|
199
|
+
attempt.phase = 'transport';
|
|
200
|
+
this.checkReady();
|
|
201
|
+
} catch (error) {
|
|
202
|
+
if (this.attempt !== attempt) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
this.failSetup(
|
|
206
|
+
new WebRTCError(
|
|
207
|
+
attempt.phase === 'signaling' ? 'signaling_failed' : 'negotiation_failed',
|
|
208
|
+
attempt.phase,
|
|
209
|
+
'Could not establish the WebRTC connection.',
|
|
210
|
+
error,
|
|
211
|
+
),
|
|
212
|
+
'failed',
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
private checkReady(): void {
|
|
218
|
+
const { attempt } = this;
|
|
219
|
+
if (
|
|
220
|
+
!attempt?.answered ||
|
|
221
|
+
this.peer.connectionState !== 'connected' ||
|
|
222
|
+
this.dataChannel.readyState !== 'open'
|
|
223
|
+
) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
this.attempt = undefined;
|
|
227
|
+
attempt.cleanup();
|
|
228
|
+
this.currentState = 'connected';
|
|
229
|
+
attempt.resolve();
|
|
230
|
+
this.connectionEvents.emit({ type: 'state.changed', state: 'connected' });
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
private failSetup(error: WebRTCError, reason: WebRTCCloseReason): void {
|
|
234
|
+
const { attempt } = this;
|
|
235
|
+
if (!attempt) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
this.attempt = undefined;
|
|
239
|
+
attempt.cleanup();
|
|
240
|
+
attempt.reject(error);
|
|
241
|
+
// Change state and detach first: abort callbacks cannot resurrect setup.
|
|
242
|
+
this.finish(reason);
|
|
243
|
+
attempt.controller.abort(error);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
private finish(reason: WebRTCCloseReason, error?: WebRTCError): void {
|
|
247
|
+
if (this.currentState === 'closed') {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
this.currentState = 'closed';
|
|
251
|
+
this.peer.removeEventListener('connectionstatechange', this.onPeerState);
|
|
252
|
+
this.adapter.dispose();
|
|
253
|
+
this.peer.close();
|
|
254
|
+
if (error) {
|
|
255
|
+
this.connectionEvents.emit({ type: 'error', error, fatal: true });
|
|
256
|
+
}
|
|
257
|
+
this.connectionEvents.emit({ type: 'closed', reason });
|
|
258
|
+
this.connectionEvents.clear();
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
private readonly onPeerState = (): void => {
|
|
262
|
+
if (this.currentState === 'closed') {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
if (this.peer.connectionState === 'failed' || this.peer.connectionState === 'closed') {
|
|
266
|
+
const failed = this.peer.connectionState === 'failed';
|
|
267
|
+
const error = new WebRTCError(
|
|
268
|
+
failed ? 'transport_failed' : 'connection_closed',
|
|
269
|
+
'transport',
|
|
270
|
+
'The WebRTC peer connection ended.',
|
|
271
|
+
);
|
|
272
|
+
if (this.attempt) {
|
|
273
|
+
this.failSetup(error, failed ? 'failed' : 'remote');
|
|
274
|
+
} else {
|
|
275
|
+
this.finish(failed ? 'failed' : 'remote', failed ? error : undefined);
|
|
276
|
+
}
|
|
277
|
+
} else {
|
|
278
|
+
this.checkReady();
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
private readonly onChannelEvent = (event: WebRTCConnectionEvent): void => {
|
|
283
|
+
if (this.currentState === 'closed') {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
if (event.type === 'closed') {
|
|
287
|
+
if (this.attempt) {
|
|
288
|
+
this.failSetup(
|
|
289
|
+
new WebRTCError('connection_closed', 'transport', 'The data channel closed during setup.'),
|
|
290
|
+
'remote',
|
|
291
|
+
);
|
|
292
|
+
} else {
|
|
293
|
+
this.finish('remote');
|
|
294
|
+
}
|
|
295
|
+
} else if (event.type === 'error') {
|
|
296
|
+
if (event.error.phase === 'transport') {
|
|
297
|
+
if (this.attempt) {
|
|
298
|
+
this.failSetup(event.error, 'failed');
|
|
299
|
+
} else {
|
|
300
|
+
this.finish('failed', event.error);
|
|
301
|
+
}
|
|
302
|
+
} else {
|
|
303
|
+
this.connectionEvents.emit(event);
|
|
304
|
+
}
|
|
305
|
+
} else {
|
|
306
|
+
this.checkReady();
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { WebRTCError } from './errors';
|
|
2
|
+
import { Subscriptions } from './subscriptions';
|
|
3
|
+
import type { BrowserDataChannel, WebRTCConnectionEvent, WebRTCDataChannel } from './types';
|
|
4
|
+
|
|
5
|
+
/** Typed protocol messages on an application-owned native RTCDataChannel. */
|
|
6
|
+
export class DataChannel<ClientEvent, ServerEvent extends { type: string }> {
|
|
7
|
+
/** The borrowed native channel. dispose() never closes it. */
|
|
8
|
+
readonly dataChannel: BrowserDataChannel;
|
|
9
|
+
private readonly channel: WebRTCDataChannel;
|
|
10
|
+
private readonly events = new Subscriptions<ServerEvent>();
|
|
11
|
+
private readonly connectionEvents = new Subscriptions<WebRTCConnectionEvent>();
|
|
12
|
+
private disposed = false;
|
|
13
|
+
|
|
14
|
+
/** Attaches listeners without negotiating, opening, or taking ownership of the channel. */
|
|
15
|
+
constructor(channel: WebRTCDataChannel) {
|
|
16
|
+
this.channel = channel;
|
|
17
|
+
this.dataChannel = channel as BrowserDataChannel;
|
|
18
|
+
channel.addEventListener('message', this.onMessage);
|
|
19
|
+
channel.addEventListener('error', this.onError);
|
|
20
|
+
channel.addEventListener('open', this.onOpen);
|
|
21
|
+
channel.addEventListener('close', this.onClose);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Subscribes to one server event type with its generated payload; returns an independent unsubscribe function. */
|
|
25
|
+
on<Type extends ServerEvent['type']>(
|
|
26
|
+
type: Type,
|
|
27
|
+
handler: (event: Extract<ServerEvent, { type: Type }>) => unknown,
|
|
28
|
+
): () => void {
|
|
29
|
+
this.assertActive();
|
|
30
|
+
// The shared dispatcher matches the original discriminator before invoking this callback.
|
|
31
|
+
return this.events.add((event) => handler(event as Extract<ServerEvent, { type: Type }>), type);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Subscribes to future server events, including raw API errors; returns an unsubscribe function. */
|
|
35
|
+
onEvent(handler: (event: ServerEvent) => unknown): () => void {
|
|
36
|
+
this.assertActive();
|
|
37
|
+
return this.events.add(handler);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Observes only this channel's local errors and lifecycle, not its owning peer connection. */
|
|
41
|
+
onConnectionEvent(handler: (event: WebRTCConnectionEvent) => unknown): () => void {
|
|
42
|
+
this.assertActive();
|
|
43
|
+
return this.connectionEvents.add(handler);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Sends immediately on an open channel. Throws on local failure; API acceptance is reported by server events. */
|
|
47
|
+
send(event: ClientEvent): void {
|
|
48
|
+
this.assertActive();
|
|
49
|
+
if (this.channel.readyState !== 'open') {
|
|
50
|
+
throw new WebRTCError('not_open', 'send', 'The WebRTC data channel is not open.');
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const data = JSON.stringify(event);
|
|
54
|
+
if (data === undefined) {
|
|
55
|
+
throw new TypeError('The event is not JSON serializable.');
|
|
56
|
+
}
|
|
57
|
+
this.channel.send(data);
|
|
58
|
+
} catch (error) {
|
|
59
|
+
throw new WebRTCError('send_failed', 'send', 'Could not send the WebRTC event.', error);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Detaches all SDK listeners and subscriptions, without closing the channel or stopping tracks. */
|
|
64
|
+
dispose(): void {
|
|
65
|
+
if (this.disposed) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
this.disposed = true;
|
|
69
|
+
this.channel.removeEventListener('message', this.onMessage);
|
|
70
|
+
this.channel.removeEventListener('error', this.onError);
|
|
71
|
+
this.channel.removeEventListener('open', this.onOpen);
|
|
72
|
+
this.channel.removeEventListener('close', this.onClose);
|
|
73
|
+
this.events.clear();
|
|
74
|
+
this.connectionEvents.clear();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
private assertActive(): void {
|
|
78
|
+
if (this.disposed) {
|
|
79
|
+
throw new WebRTCError('invalid_state', 'transport', 'The WebRTC data-channel adapter is disposed.');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private readonly onMessage = (message: unknown): void => {
|
|
84
|
+
if (this.disposed) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
let event: unknown;
|
|
88
|
+
try {
|
|
89
|
+
const { data } = message as { data?: unknown };
|
|
90
|
+
if (typeof data !== 'string') {
|
|
91
|
+
throw new TypeError('Invalid protocol message.');
|
|
92
|
+
}
|
|
93
|
+
event = JSON.parse(data);
|
|
94
|
+
if (
|
|
95
|
+
typeof event !== 'object' ||
|
|
96
|
+
event === null ||
|
|
97
|
+
Array.isArray(event) ||
|
|
98
|
+
typeof Object.getOwnPropertyDescriptor(event, 'type')?.value !== 'string'
|
|
99
|
+
) {
|
|
100
|
+
throw new TypeError('Invalid protocol message.');
|
|
101
|
+
}
|
|
102
|
+
} catch {
|
|
103
|
+
// JSON SyntaxErrors can contain the payload. Do not retain their cause.
|
|
104
|
+
this.connectionEvents.emit({
|
|
105
|
+
type: 'error',
|
|
106
|
+
fatal: false,
|
|
107
|
+
error: new WebRTCError('invalid_message', 'message', 'Received an invalid WebRTC protocol message.'),
|
|
108
|
+
});
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
// Like the generated SDK, accept future event types without a runtime schema registry.
|
|
112
|
+
this.events.emit(event as ServerEvent);
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
private readonly onError = (cause: unknown): void => {
|
|
116
|
+
if (this.disposed) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this.connectionEvents.emit({
|
|
120
|
+
type: 'error',
|
|
121
|
+
fatal: false,
|
|
122
|
+
error: new WebRTCError(
|
|
123
|
+
'transport_failed',
|
|
124
|
+
'transport',
|
|
125
|
+
'The WebRTC data channel reported an error.',
|
|
126
|
+
cause,
|
|
127
|
+
),
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
private readonly onOpen = (): void => {
|
|
132
|
+
if (!this.disposed) {
|
|
133
|
+
this.connectionEvents.emit({ type: 'state.changed', state: 'connected' });
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
private readonly onClose = (): void => {
|
|
138
|
+
if (this.disposed) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
this.connectionEvents.emit({ type: 'closed', reason: 'remote' });
|
|
142
|
+
this.dispose();
|
|
143
|
+
};
|
|
144
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { OpenAIError } from '../../core/error';
|
|
2
|
+
|
|
3
|
+
/** Stable classifications of local WebRTC failures, independent of API error codes. */
|
|
4
|
+
export type WebRTCErrorCode =
|
|
5
|
+
| 'invalid_state'
|
|
6
|
+
| 'not_open'
|
|
7
|
+
| 'send_failed'
|
|
8
|
+
| 'invalid_message'
|
|
9
|
+
| 'signaling_failed'
|
|
10
|
+
| 'negotiation_failed'
|
|
11
|
+
| 'transport_failed'
|
|
12
|
+
| 'connection_closed'
|
|
13
|
+
| 'timeout'
|
|
14
|
+
| 'aborted'
|
|
15
|
+
| 'unsupported_environment';
|
|
16
|
+
|
|
17
|
+
/** The operation in which a local error originated. */
|
|
18
|
+
export type WebRTCErrorPhase = 'offer' | 'signaling' | 'answer' | 'transport' | 'message' | 'send';
|
|
19
|
+
|
|
20
|
+
/** A local SDK/transport failure. Server error events remain unchanged in onEvent(). */
|
|
21
|
+
export class WebRTCError extends OpenAIError {
|
|
22
|
+
/** Distinguishes this error from API errors and application callback exceptions. */
|
|
23
|
+
override readonly name = 'WebRTCError';
|
|
24
|
+
/** Stable failure classification, suitable for detecting expected cancellation. */
|
|
25
|
+
readonly code: WebRTCErrorCode;
|
|
26
|
+
/** The failing setup, transport, or message operation. */
|
|
27
|
+
readonly phase: WebRTCErrorPhase;
|
|
28
|
+
/** Original exception or abort reason. It may contain application-sensitive details; do not log blindly. */
|
|
29
|
+
readonly cause: unknown;
|
|
30
|
+
|
|
31
|
+
/** Creates a safe diagnostic while retaining the original cause separately. */
|
|
32
|
+
constructor(code: WebRTCErrorCode, phase: WebRTCErrorPhase, message: string, cause?: unknown) {
|
|
33
|
+
super(message);
|
|
34
|
+
this.code = code;
|
|
35
|
+
this.phase = phase;
|
|
36
|
+
this.cause = cause;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
function reportApplicationError(error: unknown): void {
|
|
2
|
+
const host = globalThis as typeof globalThis & { reportError?: (error: unknown) => void };
|
|
3
|
+
if (typeof host.reportError === 'function') {
|
|
4
|
+
host.reportError(error);
|
|
5
|
+
} else {
|
|
6
|
+
setTimeout(() => {
|
|
7
|
+
throw error;
|
|
8
|
+
}, 0);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async function observeResult(result: unknown): Promise<void> {
|
|
13
|
+
try {
|
|
14
|
+
await result;
|
|
15
|
+
} catch (error) {
|
|
16
|
+
reportApplicationError(error);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Internal callback subscriptions with optional discriminator filters; no buffering or replay. */
|
|
21
|
+
export class Subscriptions<Event extends { type: string }> {
|
|
22
|
+
private readonly listeners = new Set<{
|
|
23
|
+
listener: (event: Event) => unknown;
|
|
24
|
+
type: Event['type'] | undefined;
|
|
25
|
+
}>();
|
|
26
|
+
|
|
27
|
+
/** Registers independently, including when the same function is supplied twice. */
|
|
28
|
+
add(listener: (event: Event) => unknown, type?: Event['type']): () => void {
|
|
29
|
+
const registration = { listener, type };
|
|
30
|
+
this.listeners.add(registration);
|
|
31
|
+
return () => {
|
|
32
|
+
this.listeners.delete(registration);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Delivers in registration order, isolating application exceptions from the transport. */
|
|
37
|
+
emit(event: Event): void {
|
|
38
|
+
const { type } = event;
|
|
39
|
+
const snapshot = [...this.listeners];
|
|
40
|
+
for (const registration of snapshot) {
|
|
41
|
+
if (
|
|
42
|
+
!this.listeners.has(registration) ||
|
|
43
|
+
(registration.type !== undefined && registration.type !== type)
|
|
44
|
+
) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const result = registration.listener(event);
|
|
49
|
+
if (result !== null && (typeof result === 'object' || typeof result === 'function')) {
|
|
50
|
+
void observeResult(result);
|
|
51
|
+
}
|
|
52
|
+
} catch (error) {
|
|
53
|
+
reportApplicationError(error);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Releases all subscriber references. Existing unsubscribe functions remain safe. */
|
|
59
|
+
clear(): void {
|
|
60
|
+
this.listeners.clear();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { WebRTCError } from './errors';
|
|
2
|
+
|
|
3
|
+
/** A native event source, without requiring DOM declarations in server projects. */
|
|
4
|
+
export interface WebRTCEventTarget {
|
|
5
|
+
/** Registers a native event listener. */
|
|
6
|
+
addEventListener: (type: string, listener: (event: unknown) => void) => void;
|
|
7
|
+
/** Removes a previously registered native event listener. */
|
|
8
|
+
removeEventListener: (type: string, listener: (event: unknown) => void) => void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** The subset of a native data channel used by the SDK. */
|
|
12
|
+
export interface WebRTCDataChannel extends WebRTCEventTarget {
|
|
13
|
+
/** Native channel readiness; sending requires `open`. */
|
|
14
|
+
readonly readyState: string;
|
|
15
|
+
/** Sends one serialized protocol message. */
|
|
16
|
+
send: (data: string) => void;
|
|
17
|
+
/** Closes this channel. Borrowed adapters never call this method. */
|
|
18
|
+
close: () => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** The subset of a native peer connection used by negotiation. */
|
|
22
|
+
export interface WebRTCPeerConnection extends WebRTCEventTarget {
|
|
23
|
+
/** Native connection state, including transient `disconnected` states. */
|
|
24
|
+
readonly connectionState: string;
|
|
25
|
+
/** The local description after `setLocalDescription`. */
|
|
26
|
+
readonly localDescription: { readonly sdp: string } | null;
|
|
27
|
+
/** Creates the protocol data channel before generating an SDP offer. */
|
|
28
|
+
createDataChannel: (label: string) => WebRTCDataChannel;
|
|
29
|
+
/** Generates the local SDP offer. */
|
|
30
|
+
createOffer: () => Promise<{ type: 'answer' | 'offer' | 'pranswer' | 'rollback'; sdp?: string }>;
|
|
31
|
+
/** Applies the offer to the local peer. */
|
|
32
|
+
setLocalDescription: (description: {
|
|
33
|
+
type?: 'answer' | 'offer' | 'pranswer' | 'rollback';
|
|
34
|
+
sdp?: string;
|
|
35
|
+
}) => Promise<void>;
|
|
36
|
+
/** Applies the application's SDP answer. */
|
|
37
|
+
setRemoteDescription: (description: { type: 'answer'; sdp: string }) => Promise<void>;
|
|
38
|
+
/** Releases the peer connection, without stopping application-owned tracks. */
|
|
39
|
+
close: () => void;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Native browser peer type when DOM types are available; otherwise the SDK's minimal view. */
|
|
43
|
+
export type BrowserPeerConnection = typeof globalThis extends {
|
|
44
|
+
RTCPeerConnection: { prototype: infer Peer };
|
|
45
|
+
}
|
|
46
|
+
? Peer
|
|
47
|
+
: WebRTCPeerConnection;
|
|
48
|
+
|
|
49
|
+
/** Native browser channel type when DOM types are available. */
|
|
50
|
+
export type BrowserDataChannel = typeof globalThis extends {
|
|
51
|
+
RTCDataChannel: { prototype: infer Channel };
|
|
52
|
+
}
|
|
53
|
+
? Channel
|
|
54
|
+
: WebRTCDataChannel;
|
|
55
|
+
|
|
56
|
+
/** Standard RTCConfiguration in a browser project; no runtime polyfill is installed. */
|
|
57
|
+
export type WebRTCConfiguration = typeof globalThis extends {
|
|
58
|
+
RTCPeerConnection: new (configuration?: infer Configuration) => unknown;
|
|
59
|
+
}
|
|
60
|
+
? Configuration
|
|
61
|
+
: object;
|
|
62
|
+
|
|
63
|
+
/** Exchanges a local SDP offer for an SDP answer using application-owned signaling. */
|
|
64
|
+
export type ExchangeSdp = (
|
|
65
|
+
offer: string,
|
|
66
|
+
options: {
|
|
67
|
+
/** Aborted when setup is cancelled, times out, or fails; pass it to fetch. */
|
|
68
|
+
signal: AbortSignal;
|
|
69
|
+
},
|
|
70
|
+
) => Promise<string>;
|
|
71
|
+
|
|
72
|
+
/** Options for one connection attempt. No retries or reconnection are performed. */
|
|
73
|
+
export interface WebRTCConnectOptions {
|
|
74
|
+
/** Application callback that submits the offer and returns the SDP answer. */
|
|
75
|
+
exchangeSdp: ExchangeSdp;
|
|
76
|
+
/** Cancels setup only. After connection succeeds, use close() to end the connection. */
|
|
77
|
+
signal?: AbortSignal;
|
|
78
|
+
/** Total setup deadline in milliseconds; defaults to 30,000. Must be positive and finite. */
|
|
79
|
+
timeoutMs?: number;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** SDK connection state. A closed instance cannot be connected again. */
|
|
83
|
+
export type WebRTCState = 'new' | 'connecting' | 'connected' | 'closed';
|
|
84
|
+
|
|
85
|
+
/** Why a connection ended. Setup failures are also returned by connect(). */
|
|
86
|
+
export type WebRTCCloseReason = 'local' | 'remote' | 'failed' | 'aborted' | 'timeout';
|
|
87
|
+
|
|
88
|
+
/** Local lifecycle and diagnostics, separate from server protocol events. */
|
|
89
|
+
export type WebRTCConnectionEvent =
|
|
90
|
+
| {
|
|
91
|
+
/** A connection became usable or began setup. */
|
|
92
|
+
type: 'state.changed';
|
|
93
|
+
/** The new state. There is no replay on subscription. */
|
|
94
|
+
state: 'connecting' | 'connected';
|
|
95
|
+
}
|
|
96
|
+
| {
|
|
97
|
+
/** An unsolicited local failure, not an API error event. */
|
|
98
|
+
type: 'error';
|
|
99
|
+
/** The local diagnostic. Messages never contain raw protocol payloads. */
|
|
100
|
+
error: WebRTCError;
|
|
101
|
+
/** Whether the managed helper is ending this connection. */
|
|
102
|
+
fatal: boolean;
|
|
103
|
+
}
|
|
104
|
+
| {
|
|
105
|
+
/** The connection ended; emitted at most once. */
|
|
106
|
+
type: 'closed';
|
|
107
|
+
/** Whether closure was requested, observed, or caused by a setup/transport failure. */
|
|
108
|
+
reason: WebRTCCloseReason;
|
|
109
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { OpenAILiveWebRTC, LiveDataChannel, WebRTCError } from '../lib/live/webrtc';
|
|
2
|
+
export type {
|
|
3
|
+
ExchangeSdp,
|
|
4
|
+
WebRTCConnectOptions,
|
|
5
|
+
WebRTCConnectionEvent,
|
|
6
|
+
WebRTCConfiguration,
|
|
7
|
+
WebRTCErrorCode,
|
|
8
|
+
WebRTCErrorPhase,
|
|
9
|
+
WebRTCState,
|
|
10
|
+
} from '../lib/live/webrtc';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { OpenAIRealtimeWebRTC, RealtimeDataChannel, WebRTCError } from '../lib/realtime/webrtc';
|
|
2
|
+
export type {
|
|
3
|
+
ExchangeSdp,
|
|
4
|
+
WebRTCConnectOptions,
|
|
5
|
+
WebRTCConnectionEvent,
|
|
6
|
+
WebRTCConfiguration,
|
|
7
|
+
WebRTCErrorCode,
|
|
8
|
+
WebRTCErrorPhase,
|
|
9
|
+
WebRTCState,
|
|
10
|
+
} from '../lib/realtime/webrtc';
|