@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.
- package/README.md +257 -0
- package/dist/auth.d.ts +26 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +36 -0
- package/dist/auth.js.map +1 -0
- package/dist/chat/chat-client.d.ts +81 -0
- package/dist/chat/chat-client.d.ts.map +1 -0
- package/dist/chat/chat-client.js +192 -0
- package/dist/chat/chat-client.js.map +1 -0
- package/dist/chat/stream-parser.d.ts +20 -0
- package/dist/chat/stream-parser.d.ts.map +1 -0
- package/dist/chat/stream-parser.js +134 -0
- package/dist/chat/stream-parser.js.map +1 -0
- package/dist/chat/widget-config.d.ts +7 -0
- package/dist/chat/widget-config.d.ts.map +1 -0
- package/dist/chat/widget-config.js +26 -0
- package/dist/chat/widget-config.js.map +1 -0
- package/dist/client.d.ts +66 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +49 -0
- package/dist/client.js.map +1 -0
- package/dist/defaults.d.ts +12 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/defaults.js +27 -0
- package/dist/defaults.js.map +1 -0
- package/dist/embed/loader-types.d.ts +119 -0
- package/dist/embed/loader-types.d.ts.map +1 -0
- package/dist/embed/loader-types.js +20 -0
- package/dist/embed/loader-types.js.map +1 -0
- package/dist/embed/loader.d.ts +101 -0
- package/dist/embed/loader.d.ts.map +1 -0
- package/dist/embed/loader.js +439 -0
- package/dist/embed/loader.js.map +1 -0
- package/dist/embed/v1.global.js +5 -0
- package/dist/embed/v1.global.js.map +1 -0
- package/dist/events.d.ts +10 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +25 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +14 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +3 -0
- package/dist/logger.js.map +1 -0
- package/dist/next/index.d.ts +58 -0
- package/dist/next/index.d.ts.map +1 -0
- package/dist/next/index.js +83 -0
- package/dist/next/index.js.map +1 -0
- package/dist/react/index.d.ts +16 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +20 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/types.d.ts +27 -0
- package/dist/react/types.d.ts.map +1 -0
- package/dist/react/types.js +8 -0
- package/dist/react/types.js.map +1 -0
- package/dist/react/use-chanl.d.ts +27 -0
- package/dist/react/use-chanl.d.ts.map +1 -0
- package/dist/react/use-chanl.js +57 -0
- package/dist/react/use-chanl.js.map +1 -0
- package/dist/react/use-chat.d.ts +32 -0
- package/dist/react/use-chat.d.ts.map +1 -0
- package/dist/react/use-chat.js +224 -0
- package/dist/react/use-chat.js.map +1 -0
- package/dist/react/use-voice.d.ts +37 -0
- package/dist/react/use-voice.d.ts.map +1 -0
- package/dist/react/use-voice.js +268 -0
- package/dist/react/use-voice.js.map +1 -0
- package/dist/react/widget.d.ts +43 -0
- package/dist/react/widget.d.ts.map +1 -0
- package/dist/react/widget.js +188 -0
- package/dist/react/widget.js.map +1 -0
- package/dist/storage/session-storage.d.ts +48 -0
- package/dist/storage/session-storage.d.ts.map +1 -0
- package/dist/storage/session-storage.js +84 -0
- package/dist/storage/session-storage.js.map +1 -0
- package/dist/types.d.ts +140 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/voice/audio-recorder.d.ts +43 -0
- package/dist/voice/audio-recorder.d.ts.map +1 -0
- package/dist/voice/audio-recorder.js +127 -0
- package/dist/voice/audio-recorder.js.map +1 -0
- package/dist/voice/index.d.ts +13 -0
- package/dist/voice/index.d.ts.map +1 -0
- package/dist/voice/index.js +16 -0
- package/dist/voice/index.js.map +1 -0
- package/dist/voice/mock-mode.d.ts +93 -0
- package/dist/voice/mock-mode.d.ts.map +1 -0
- package/dist/voice/mock-mode.js +375 -0
- package/dist/voice/mock-mode.js.map +1 -0
- package/dist/voice/transports/index.d.ts +5 -0
- package/dist/voice/transports/index.d.ts.map +1 -0
- package/dist/voice/transports/index.js +10 -0
- package/dist/voice/transports/index.js.map +1 -0
- package/dist/voice/transports/transport.d.ts +70 -0
- package/dist/voice/transports/transport.d.ts.map +1 -0
- package/dist/voice/transports/transport.js +12 -0
- package/dist/voice/transports/transport.js.map +1 -0
- package/dist/voice/transports/vapi.d.ts +147 -0
- package/dist/voice/transports/vapi.d.ts.map +1 -0
- package/dist/voice/transports/vapi.js +337 -0
- package/dist/voice/transports/vapi.js.map +1 -0
- package/dist/voice/transports/webrtc.d.ts +58 -0
- package/dist/voice/transports/webrtc.d.ts.map +1 -0
- package/dist/voice/transports/webrtc.js +318 -0
- package/dist/voice/transports/webrtc.js.map +1 -0
- package/dist/voice/transports/websocket.d.ts +39 -0
- package/dist/voice/transports/websocket.d.ts.map +1 -0
- package/dist/voice/transports/websocket.js +280 -0
- package/dist/voice/transports/websocket.js.map +1 -0
- package/dist/voice/types.d.ts +323 -0
- package/dist/voice/types.d.ts.map +1 -0
- package/dist/voice/types.js +41 -0
- package/dist/voice/types.js.map +1 -0
- package/dist/voice/utils.d.ts +22 -0
- package/dist/voice/utils.d.ts.map +1 -0
- package/dist/voice/utils.js +44 -0
- package/dist/voice/utils.js.map +1 -0
- package/dist/voice/voice-client.d.ts +231 -0
- package/dist/voice/voice-client.d.ts.map +1 -0
- package/dist/voice/voice-client.js +1187 -0
- package/dist/voice/voice-client.js.map +1 -0
- 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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"}
|