@chanl/widget-sdk 0.2.0-canary.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.
Files changed (128) hide show
  1. package/README.md +257 -0
  2. package/dist/auth.d.ts +26 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +36 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/chat/chat-client.d.ts +81 -0
  7. package/dist/chat/chat-client.d.ts.map +1 -0
  8. package/dist/chat/chat-client.js +192 -0
  9. package/dist/chat/chat-client.js.map +1 -0
  10. package/dist/chat/stream-parser.d.ts +20 -0
  11. package/dist/chat/stream-parser.d.ts.map +1 -0
  12. package/dist/chat/stream-parser.js +134 -0
  13. package/dist/chat/stream-parser.js.map +1 -0
  14. package/dist/chat/widget-config.d.ts +7 -0
  15. package/dist/chat/widget-config.d.ts.map +1 -0
  16. package/dist/chat/widget-config.js +26 -0
  17. package/dist/chat/widget-config.js.map +1 -0
  18. package/dist/client.d.ts +66 -0
  19. package/dist/client.d.ts.map +1 -0
  20. package/dist/client.js +49 -0
  21. package/dist/client.js.map +1 -0
  22. package/dist/defaults.d.ts +12 -0
  23. package/dist/defaults.d.ts.map +1 -0
  24. package/dist/defaults.js +27 -0
  25. package/dist/defaults.js.map +1 -0
  26. package/dist/embed/loader-types.d.ts +119 -0
  27. package/dist/embed/loader-types.d.ts.map +1 -0
  28. package/dist/embed/loader-types.js +20 -0
  29. package/dist/embed/loader-types.js.map +1 -0
  30. package/dist/embed/loader.d.ts +101 -0
  31. package/dist/embed/loader.d.ts.map +1 -0
  32. package/dist/embed/loader.js +439 -0
  33. package/dist/embed/loader.js.map +1 -0
  34. package/dist/embed/v1.global.js +5 -0
  35. package/dist/embed/v1.global.js.map +1 -0
  36. package/dist/events.d.ts +10 -0
  37. package/dist/events.d.ts.map +1 -0
  38. package/dist/events.js +25 -0
  39. package/dist/events.js.map +1 -0
  40. package/dist/index.d.ts +19 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +29 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/logger.d.ts +14 -0
  45. package/dist/logger.d.ts.map +1 -0
  46. package/dist/logger.js +3 -0
  47. package/dist/logger.js.map +1 -0
  48. package/dist/next/index.d.ts +58 -0
  49. package/dist/next/index.d.ts.map +1 -0
  50. package/dist/next/index.js +83 -0
  51. package/dist/next/index.js.map +1 -0
  52. package/dist/react/index.d.ts +16 -0
  53. package/dist/react/index.d.ts.map +1 -0
  54. package/dist/react/index.js +20 -0
  55. package/dist/react/index.js.map +1 -0
  56. package/dist/react/types.d.ts +27 -0
  57. package/dist/react/types.d.ts.map +1 -0
  58. package/dist/react/types.js +8 -0
  59. package/dist/react/types.js.map +1 -0
  60. package/dist/react/use-chanl.d.ts +27 -0
  61. package/dist/react/use-chanl.d.ts.map +1 -0
  62. package/dist/react/use-chanl.js +57 -0
  63. package/dist/react/use-chanl.js.map +1 -0
  64. package/dist/react/use-chat.d.ts +32 -0
  65. package/dist/react/use-chat.d.ts.map +1 -0
  66. package/dist/react/use-chat.js +224 -0
  67. package/dist/react/use-chat.js.map +1 -0
  68. package/dist/react/use-voice.d.ts +37 -0
  69. package/dist/react/use-voice.d.ts.map +1 -0
  70. package/dist/react/use-voice.js +268 -0
  71. package/dist/react/use-voice.js.map +1 -0
  72. package/dist/react/widget.d.ts +43 -0
  73. package/dist/react/widget.d.ts.map +1 -0
  74. package/dist/react/widget.js +188 -0
  75. package/dist/react/widget.js.map +1 -0
  76. package/dist/storage/session-storage.d.ts +48 -0
  77. package/dist/storage/session-storage.d.ts.map +1 -0
  78. package/dist/storage/session-storage.js +84 -0
  79. package/dist/storage/session-storage.js.map +1 -0
  80. package/dist/types.d.ts +140 -0
  81. package/dist/types.d.ts.map +1 -0
  82. package/dist/types.js +7 -0
  83. package/dist/types.js.map +1 -0
  84. package/dist/voice/audio-recorder.d.ts +43 -0
  85. package/dist/voice/audio-recorder.d.ts.map +1 -0
  86. package/dist/voice/audio-recorder.js +127 -0
  87. package/dist/voice/audio-recorder.js.map +1 -0
  88. package/dist/voice/index.d.ts +13 -0
  89. package/dist/voice/index.d.ts.map +1 -0
  90. package/dist/voice/index.js +16 -0
  91. package/dist/voice/index.js.map +1 -0
  92. package/dist/voice/mock-mode.d.ts +93 -0
  93. package/dist/voice/mock-mode.d.ts.map +1 -0
  94. package/dist/voice/mock-mode.js +375 -0
  95. package/dist/voice/mock-mode.js.map +1 -0
  96. package/dist/voice/transports/index.d.ts +5 -0
  97. package/dist/voice/transports/index.d.ts.map +1 -0
  98. package/dist/voice/transports/index.js +10 -0
  99. package/dist/voice/transports/index.js.map +1 -0
  100. package/dist/voice/transports/transport.d.ts +70 -0
  101. package/dist/voice/transports/transport.d.ts.map +1 -0
  102. package/dist/voice/transports/transport.js +12 -0
  103. package/dist/voice/transports/transport.js.map +1 -0
  104. package/dist/voice/transports/vapi.d.ts +147 -0
  105. package/dist/voice/transports/vapi.d.ts.map +1 -0
  106. package/dist/voice/transports/vapi.js +337 -0
  107. package/dist/voice/transports/vapi.js.map +1 -0
  108. package/dist/voice/transports/webrtc.d.ts +58 -0
  109. package/dist/voice/transports/webrtc.d.ts.map +1 -0
  110. package/dist/voice/transports/webrtc.js +318 -0
  111. package/dist/voice/transports/webrtc.js.map +1 -0
  112. package/dist/voice/transports/websocket.d.ts +39 -0
  113. package/dist/voice/transports/websocket.d.ts.map +1 -0
  114. package/dist/voice/transports/websocket.js +280 -0
  115. package/dist/voice/transports/websocket.js.map +1 -0
  116. package/dist/voice/types.d.ts +323 -0
  117. package/dist/voice/types.d.ts.map +1 -0
  118. package/dist/voice/types.js +41 -0
  119. package/dist/voice/types.js.map +1 -0
  120. package/dist/voice/utils.d.ts +22 -0
  121. package/dist/voice/utils.d.ts.map +1 -0
  122. package/dist/voice/utils.js +44 -0
  123. package/dist/voice/utils.js.map +1 -0
  124. package/dist/voice/voice-client.d.ts +231 -0
  125. package/dist/voice/voice-client.d.ts.map +1 -0
  126. package/dist/voice/voice-client.js +1187 -0
  127. package/dist/voice/voice-client.js.map +1 -0
  128. package/package.json +91 -0
@@ -0,0 +1,231 @@
1
+ import { EventEmitter } from 'eventemitter3';
2
+ import { AssistantOverrides, AudialConfig, ConnectionStatus, WebsocketCallCreatePayload, ChatSessionCreatePayload, ChatSessionResponse, ChatMessageResponse, ChatMessage, ChatHistoryResponse, ChatSessionState, ChatState, InboundServerMessage, OutboundClientMessage, TranscriptMessage } from './types';
3
+ interface AudialEventMap extends Record<string, (...args: any[]) => void> {
4
+ ready: () => void;
5
+ "speech-start": () => void;
6
+ "speech-end": () => void;
7
+ volumeLevel: (v: number) => void;
8
+ message: (m: InboundServerMessage) => void;
9
+ transcript: (t: TranscriptMessage) => void;
10
+ closed: (code: number, reason: string) => void;
11
+ /**
12
+ * @deprecated Use `audio-deafened` instead
13
+ */
14
+ muted: (m: boolean) => void;
15
+ "audio-deafened": (deafened: boolean) => void;
16
+ "audio-undeafened": (deafened: boolean) => void;
17
+ "mic-muted": () => void;
18
+ "mic-unmuted": () => void;
19
+ error: (e: Error) => void;
20
+ "node-update": (currentNodeId: string) => void;
21
+ "interruption": () => void;
22
+ "chat-session-created": (session: ChatSessionResponse) => void;
23
+ "chat-message": (response: ChatMessageResponse) => void;
24
+ "chat-state-change": (state: ChatState) => void;
25
+ "chat-session-ended": (sessionId: string) => void;
26
+ }
27
+ export declare class VoiceClient extends EventEmitter<AudialEventMap> {
28
+ private publicKey;
29
+ private config;
30
+ private readonly log;
31
+ private state;
32
+ /**
33
+ * Active transport — WebSocket or WebRTC.
34
+ * Created on start(), destroyed on stop().
35
+ */
36
+ private transport;
37
+ /**
38
+ * Which transport is actually in use for the current call.
39
+ */
40
+ private activeTransportType;
41
+ /**
42
+ * Room connection state
43
+ */
44
+ private roomState;
45
+ /**
46
+ * The current node ID
47
+ */
48
+ private currentNodeId;
49
+ private audioDeafened;
50
+ private micMuted;
51
+ private retryPolicy;
52
+ private retryCount;
53
+ private reconnectTimer;
54
+ private connectionTimeoutTimer;
55
+ private lastCallPayload?;
56
+ private lastOverrides?;
57
+ private idempotencyKey;
58
+ private static readonly IDEMPOTENCY_STORAGE_KEY;
59
+ private static readonly IDEMPOTENCY_STORAGE_AT;
60
+ private static readonly IDEMPOTENCY_MAX_AGE_MS;
61
+ private chatState;
62
+ private chatSession;
63
+ private chatMessages;
64
+ constructor(publicKey: string, config?: Partial<AudialConfig>);
65
+ private getAuthHeaders;
66
+ private applyPublicKeyAuth;
67
+ /**
68
+ * Start a call with the specified agent.
69
+ * Creates the appropriate transport (WebRTC or WebSocket) and connects.
70
+ */
71
+ start(agentId: string, overrides?: AssistantOverrides): void;
72
+ start(payload: WebsocketCallCreatePayload, overrides?: AssistantOverrides): void;
73
+ /**
74
+ * Minimal description of a real-time session result returned by a
75
+ * `createSession` function. Mirrors the shape of `RealtimeSessionResult`
76
+ * from `@chanl/sdk` so consumers can pass `sdk.realtime.createSession`'s
77
+ * return value (after unwrapping `{ data }`) directly, without importing
78
+ * that type here (which would create a cross-package dependency).
79
+ *
80
+ * Only the fields needed for wiring are required; everything else is optional
81
+ * so this interface is forward-compatible as new credential types are added.
82
+ */
83
+ /**
84
+ * High-level orchestration method: fetch a provider session via an injected
85
+ * `createSession` function, then wire the credential into `connectProviderSession`.
86
+ *
87
+ * This keeps widget-sdk free of a dependency on `@chanl/sdk`. The consumer
88
+ * (e.g. chanl-admin) injects `sdk.realtime.createSession` as a plain function.
89
+ *
90
+ * Phase 1 only supports `credentialType === 'join-url'` (VAPI Daily rooms).
91
+ * Attempting to start a session with `token` or `ws-url` credentials will
92
+ * throw immediately with a clear "not yet supported" message.
93
+ *
94
+ * @param createSession - Async function that, given an agentId, resolves with
95
+ * a session result containing `{ provider, credentialType, joinUrl?, ... }`.
96
+ * @param agentId - The agent ID to pass to `createSession`.
97
+ * @param opts.overrides - Optional assistant overrides forwarded to the transport.
98
+ *
99
+ * @throws Error if credentialType is not 'join-url' (Phase 1 only).
100
+ * @throws Error if a call is already active.
101
+ * @throws Error (async, via 'error' event) if the transport connect fails.
102
+ */
103
+ startProviderSession(createSession: (agentId: string) => Promise<{
104
+ provider: string;
105
+ credentialType: 'token' | 'join-url' | 'ws-url';
106
+ joinUrl?: string;
107
+ token?: string;
108
+ wsUrl?: string;
109
+ config?: Record<string, unknown>;
110
+ }>, agentId: string, opts?: {
111
+ overrides?: AssistantOverrides;
112
+ }): Promise<void>;
113
+ /**
114
+ * Connect to a provider-managed voice session via a direct join URL.
115
+ *
116
+ * Unlike `start()`, this method does NOT call POST /interactions/websocket
117
+ * to create a room. Instead it instantiates the appropriate provider
118
+ * transport (currently only 'vapi' is supported) and connects directly
119
+ * to the provider's session URL (e.g. a VAPI Daily.co web-call URL).
120
+ *
121
+ * The public event API (ready, closed, transcript, speech-start, etc.)
122
+ * is identical to the room-based flow.
123
+ *
124
+ * @param params.provider - Provider identifier. Currently supports 'vapi'.
125
+ * @param params.joinUrl - The provider's session join URL.
126
+ * @param params.overrides - Optional assistant overrides forwarded to the transport.
127
+ *
128
+ * @throws Error if provider is unsupported or if already in an active call.
129
+ */
130
+ connectProviderSession({ provider, joinUrl, overrides, }: {
131
+ provider: string;
132
+ joinUrl: string;
133
+ overrides?: AssistantOverrides;
134
+ }): void;
135
+ /**
136
+ * Internal async implementation of connectProviderSession.
137
+ * Separated so the public method can remain synchronous (matching start()).
138
+ */
139
+ private _connectVapiProviderSession;
140
+ /**
141
+ * Stop the current call
142
+ */
143
+ stop(code?: number, reason?: string): void;
144
+ /**
145
+ * Send a message to the server
146
+ */
147
+ send(message: OutboundClientMessage, shouldLog?: boolean): void;
148
+ deafen(): void;
149
+ undeafen(): void;
150
+ toggleDeafen(): void;
151
+ setVolume(volume: number): void;
152
+ muteMic(): void;
153
+ unmuteMic(): Promise<void>;
154
+ toggleMicMute(): void;
155
+ /**
156
+ * Create room and connect via the appropriate transport.
157
+ */
158
+ private createRoomAndConnect;
159
+ /**
160
+ * Determine which transport to use based on config + browser capabilities.
161
+ *
162
+ * Default is 'auto': uses WebRTC if browser supports RTCPeerConnection,
163
+ * otherwise falls back to WebSocket. Signaling goes through the platform's
164
+ * /voice-ws/ proxy — no separate bot URL needed.
165
+ */
166
+ private resolveTransportType;
167
+ /**
168
+ * Get the WebRTC signaling relay URL.
169
+ *
170
+ * Points to the platform's bot provider endpoint which relays signaling
171
+ * to the voice-bot. Same URL in dev, staging, prod — no separate bot URL.
172
+ *
173
+ * POST {url}/offer/{interactionId} → platform → voice-bot /offer
174
+ * POST {url}/candidates → platform → voice-bot /candidates
175
+ */
176
+ private resolveSignalingUrl;
177
+ /**
178
+ * Create the callbacks object that wires transport events to Audial.
179
+ */
180
+ private createTransportCallbacks;
181
+ /**
182
+ * Handle messages from the transport. All event routing happens here.
183
+ * Audio handling is done internally by the transport — we only get
184
+ * the message for event emission purposes.
185
+ */
186
+ private handleTransportMessage;
187
+ private handleConnectionError;
188
+ /**
189
+ * Reconnect the transport layer without re-creating the platform room.
190
+ * Used by the retry path to avoid leaking a new "queued" interaction per
191
+ * attempt. The existing roomState is preserved; only a fresh transport
192
+ * is constructed and connected to the same room.
193
+ */
194
+ private retryTransportOnly;
195
+ reconnect(): void;
196
+ getConnectionStatus(): ConnectionStatus;
197
+ private cleanup;
198
+ private getHttpUrl;
199
+ private getBaseUrl;
200
+ private createRoom;
201
+ /**
202
+ * Mint a new Idempotency-Key, or restore one from sessionStorage if a
203
+ * recent key exists (within IDEMPOTENCY_MAX_AGE_MS). Restore path
204
+ * handles the "user refreshed the tab during a pending connect" case:
205
+ * the original interaction is still queued on the server, and reusing
206
+ * the key gets us back the same interaction instead of leaking a new
207
+ * one.
208
+ */
209
+ private restoreOrMintIdempotencyKey;
210
+ private clearIdempotencyKey;
211
+ /**
212
+ * Generate a UUID v4. Prefers crypto.randomUUID() (modern browsers +
213
+ * Node 14.17+); falls back to a getRandomValues-backed implementation,
214
+ * and finally Math.random if neither is available (SSR test envs).
215
+ */
216
+ private mintUuid;
217
+ private expandAgentSettings;
218
+ createChatSession(agentId: string, options?: ChatSessionCreatePayload): Promise<ChatSessionResponse>;
219
+ sendChatMessage(message: string): Promise<ChatMessageResponse>;
220
+ streamChatMessage(message: string, onChunk: (text: string) => void): Promise<ChatMessageResponse>;
221
+ getChatHistory(): Promise<ChatHistoryResponse>;
222
+ endChatSession(): Promise<void>;
223
+ getChatState(): ChatState;
224
+ getChatSession(): ChatSessionState | null;
225
+ getChatMessages(): ChatMessage[];
226
+ hasChatSession(): boolean;
227
+ private setChatState;
228
+ private resetChatState;
229
+ }
230
+ export {};
231
+ //# sourceMappingURL=voice-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-client.d.ts","sourceRoot":"","sources":["../../src/voice/voice-client.ts"],"names":[],"mappings":"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"}