@voxevolv/client 0.3.6 → 0.3.7
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 +15 -0
- package/dist/browser/index.js +6 -6
- package/dist/browser/index.js.map +3 -3
- package/dist/browser/index.js.sha384 +1 -1
- package/dist/browser/manifest.json +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +154 -33
- package/dist/index.js.map +1 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +10 -2
- package/dist/protocol.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
sha384-
|
|
1
|
+
sha384-we1jALl2rzlCO9T8PO8LPaRqcqaMCtHQg1B5afqcJGcqKbp4iWgy1IOIC+79sJXE
|
package/dist/index.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export interface SessionCredentials {
|
|
|
19
19
|
access_token: string;
|
|
20
20
|
access_token_expires_at: string;
|
|
21
21
|
}
|
|
22
|
-
export declare const SDK_VERSION = "0.3.
|
|
22
|
+
export declare const SDK_VERSION = "0.3.7";
|
|
23
23
|
type Listener = (event: RealtimeEvent) => void;
|
|
24
24
|
type StateListener = (state: ConnectionState) => void;
|
|
25
25
|
type GapListener = (gap: EventGap) => void;
|
|
@@ -172,11 +172,14 @@ export declare class RealtimeSession {
|
|
|
172
172
|
private hasConnectedValue;
|
|
173
173
|
private sessionEnded;
|
|
174
174
|
private pendingEndEvent;
|
|
175
|
+
private agentDisconnected;
|
|
176
|
+
private terminalSessionError;
|
|
175
177
|
private endNotificationDelivered;
|
|
176
178
|
private disconnectMode;
|
|
177
179
|
private activeRecovery;
|
|
178
180
|
private autoRejoinPromise;
|
|
179
181
|
private autoRejoinController;
|
|
182
|
+
private manualRejoinController;
|
|
180
183
|
private startupConnectController;
|
|
181
184
|
private startupAttemptController;
|
|
182
185
|
private useManagedMicrophone;
|
|
@@ -243,6 +246,8 @@ export declare class RealtimeSession {
|
|
|
243
246
|
private handleLiveKitReconnected;
|
|
244
247
|
private handleLiveKitDisconnected;
|
|
245
248
|
private deliverPendingEndEvent;
|
|
249
|
+
private finishPendingEnd;
|
|
250
|
+
private recoverSessionEnd;
|
|
246
251
|
private notifyEnded;
|
|
247
252
|
private beginRecovery;
|
|
248
253
|
private completeRecovery;
|
|
@@ -250,12 +255,13 @@ export declare class RealtimeSession {
|
|
|
250
255
|
private shouldAutoRejoin;
|
|
251
256
|
private startAutoRejoin;
|
|
252
257
|
private runAutoRejoin;
|
|
253
|
-
private
|
|
258
|
+
private cancelRecovery;
|
|
254
259
|
private notifyListeners;
|
|
255
260
|
private notifyRemoteAudioListeners;
|
|
256
261
|
private validateAudioOptions;
|
|
257
262
|
private fetchRoomToken;
|
|
258
263
|
private refreshCredentials;
|
|
264
|
+
private finishSessionFailure;
|
|
259
265
|
private observeConvenienceEvents;
|
|
260
266
|
private abortStartupConnect;
|
|
261
267
|
private publishApplicationAudioTrack;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,IAAI,EAIL,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAUL,KAAK,iBAAiB,EAEtB,KAAK,aAAa,EAElB,KAAK,qBAAqB,EAC1B,KAAK,QAAQ,EACb,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EACL,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,QAAQ,EACR,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AAExC,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,YAAY,GACZ,qBAAqB,GACrB,WAAW,GACX,cAAc,GACd,UAAU,GACV,cAAc,GACd,QAAQ,CAAC;AAEb,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,WAAW,GACX,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,qBAAqB,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,WAAW,UAAU,CAAC;AAUnC,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAC/C,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;AACtD,KAAK,WAAW,GAAG,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;AAC3C,KAAK,yBAAyB,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;AACtE,KAAK,gBAAgB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AACvD,KAAK,sBAAsB,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;AACnE,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;AACvB,MAAM,MAAM,wBAAwB,GAAG,CACrC,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,WAAW,KAChB,IAAI,CAAC;AACV,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;CACtB;AACD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AACD,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AACD,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AACD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AACD,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACzC,kEAAkE;IAClE,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAC7C,oBAAoB,CAAC,EAAE,kBAAkB,CAAC;CAC3C;AACD,MAAM,WAAW,4BAA6B,SAAQ,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC;IAC3F,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AACD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AACD,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,gBAAgB,CAAC;CACzB;AACD,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AACD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AACD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GACvB,eAAe,GACf,sBAAsB,GACtB,uBAAuB,GACvB,sBAAsB,GACtB,oBAAoB,GACpB,iBAAiB,GACjB,0BAA0B,GAC1B,yBAAyB,CAAC;AAmC9B,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;IAE5B,YACE,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;KACrB,EAQF;CACF;AAsCD,MAAM,MAAM,WAAW,GAAG,CACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,KACxB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,qBAAa,eAAe;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,0BAA0B,CAAwC;IAC1E,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,uBAAuB,CAAqC;IACpE,OAAO,CAAC,yBAAyB,CAAuC;IACxE,OAAO,CAAC,qCAAqC,CAAuC;IACpF,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,uBAAuB,CAA+C;IAC9E,OAAO,CAAC,wBAAwB,CAA+C;IAC/E,OAAO,CAAC,mBAAmB,CAAmD;IAC9E,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,iBAAiB,CAA6C;IACtE,OAAO,CAAC,6BAA6B,CAAyD;IAC9F,OAAO,CAAC,kBAAkB,CAAsC;IAChE,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,uBAAuB,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,YAAY,CAA4E;IAChG,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,gBAAgB,CAIR;IAChB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAEjC;IACF,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,oBAAoB,CAAuC;IACnE,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,oBAAoB,CAAgC;IAC5D,OAAO,CAAC,sBAAsB,CAAgC;IAC9D,OAAO,CAAC,wBAAwB,CAAgC;IAChE,OAAO,CAAC,wBAAwB,CAAgC;IAChE,OAAO,CAAC,oBAAoB,CAAQ;IACpC,OAAO,CAAC,wBAAwB,CAAQ;IACxC,OAAO,CAAC,qBAAqB,CAAiC;IAC9D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAC5C,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAA6C;IACxF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmC;IACrE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqC;IACzE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAqB;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2D;IACvF,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAgC;IAE1E,YAAY,WAAW,EAAE,kBAAkB,EAAE,OAAO,GAAE,sBAA2B,EAkDhF;IAED,OAAa,MAAM,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,eAAe,CAAC,CAgCnF;IAED,IAAI,KAAK,IAAI,eAAe,CAE3B;IAED,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAED;;;;OAIG;IACH,IAAI,YAAY,IAAI,WAAW,CAG9B;IAED,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAGtC;IAED,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,IAAI,CAIjD;IAED,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,IAAI,CAG/C;IAED,mBAAmB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,MAAM,IAAI,CAOnE;IAED,UAAU,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAGjD;IAED,gBAAgB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,IAAI,CAG7D;IAED,YAAY,CACV,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,eAAe,CAAC,CAuC1B;IAED,kBAAkB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,MAAM,IAAI,CAGjE;IAED,8BAA8B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,MAAM,IAAI,CAG7E;IAED,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI,CAG5D;IAED,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI,CAGvE;IAED,iBAAiB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI,CAGxE;IAED,+EAA+E;IAC/E,IAAI,UAAU,IAAI,SAAS,iBAAiB,EAAE,CAE7C;IAED,mBAAmB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI,CAG9E;IAED,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI,CAG5D;IAED,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI,CAG5D;IAED,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI,CAG/D;IAED,sBAAsB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,GAAG,MAAM,IAAI,CAGvF;IAED,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,IAAI,CAe3D;IAEK,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCzD;YAEa,uBAAuB;IAgErC,OAAO,CAAC,oBAAoB;YAgBd,eAAe;IAqF7B,OAAO,CAAC,WAAW;IAiCb,MAAM,CAAC,OAAO,SAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BlD;YAEa,aAAa;IA6DrB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1D;IAEK,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,EACV,SAAS,SAAS,GACjB,OAAO,CAAC,iBAAiB,CAAC,CAQ5B;IAEK,aAAa,CACjB,MAAM,EAAE,aAAa,EACrB,SAAS,SAAS,GACjB,OAAO,CAAC,qBAAqB,CAAC,CAOhC;YAEa,iBAAiB;YAoFjB,iBAAiB;YAmCjB,kBAAkB;IA4C1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBhC;IAEK,GAAG,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BjD;IAEK,MAAM,CAAC,OAAO,SAAe,EAAE,QAAQ,SAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxF;IAED,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,cAAc;IA0GtB,OAAO,CAAC,yBAAyB;YA2BnB,wBAAwB;IAwCtC,OAAO,CAAC,yBAAyB;IAuCjC,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,gBAAgB;YAOV,iBAAiB;IAsB/B,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,eAAe;YA+BT,aAAa;IAuC3B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,oBAAoB;YAgBd,cAAc;YAmBd,kBAAkB;YAWlB,oBAAoB;IAgBlC,OAAO,CAAC,wBAAwB;IAiEhC,OAAO,CAAC,mBAAmB;YAMb,4BAA4B;YAa5B,SAAS;YAkBT,kBAAkB;IAgGhC,OAAO,CAAC,qBAAqB;YAiBf,wBAAwB;YA2DxB,cAAc;IAO5B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,gCAAgC;IASxC,OAAO,CAAC,gBAAgB;YAIV,eAAe;IAkC7B,OAAO,CAAC,uBAAuB;IA4B/B,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,oBAAoB;IAoD5B,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,mBAAmB;YAuBb,WAAW;CAkE1B"}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import { TranscriptStore } from "./transcripts.js";
|
|
|
6
6
|
export { TranscriptStore } from "./transcripts.js";
|
|
7
7
|
export { CommandError, EventCursor, createClientMessage, isCommandAckPayload, isCommandErrorPayload, isContextRejectedPayload, isContextUpdatePayload, isContextUpdatedPayload, isRealtimeEvent, } from "./protocol.js";
|
|
8
8
|
export { decodeAgentSnapshotPayload, decodeClientHelloPayload, decodeClientMessage, decodeCommandAckPayload, decodeCommandErrorPayload, decodeContextRejectedPayload, decodeContextUpdatePayload, decodeContextUpdatedPayload, decodeRealtimeEvent, } from "./generated/protocol-codecs.js";
|
|
9
|
-
export const SDK_VERSION = "0.3.
|
|
9
|
+
export const SDK_VERSION = "0.3.7";
|
|
10
10
|
const CLIENT_HELLO_TIMEOUT_MS = 30_000;
|
|
11
11
|
const DIAGNOSTIC_REPORT_TIMEOUT_MS = 5_000;
|
|
12
12
|
const DEFAULT_STARTUP_ATTEMPTS = [
|
|
@@ -88,11 +88,14 @@ export class RealtimeSession {
|
|
|
88
88
|
hasConnectedValue = false;
|
|
89
89
|
sessionEnded = false;
|
|
90
90
|
pendingEndEvent = null;
|
|
91
|
+
agentDisconnected = false;
|
|
92
|
+
terminalSessionError = null;
|
|
91
93
|
endNotificationDelivered = false;
|
|
92
94
|
disconnectMode = null;
|
|
93
95
|
activeRecovery = null;
|
|
94
96
|
autoRejoinPromise = null;
|
|
95
97
|
autoRejoinController = null;
|
|
98
|
+
manualRejoinController = null;
|
|
96
99
|
startupConnectController = null;
|
|
97
100
|
startupAttemptController = null;
|
|
98
101
|
useManagedMicrophone = true;
|
|
@@ -331,7 +334,7 @@ export class RealtimeSession {
|
|
|
331
334
|
.includes(this.stateValue)) {
|
|
332
335
|
throw new Error(`Cannot connect while session is ${this.stateValue}`);
|
|
333
336
|
}
|
|
334
|
-
this.
|
|
337
|
+
this.cancelRecovery();
|
|
335
338
|
const controller = new AbortController();
|
|
336
339
|
this.startupConnectController = controller;
|
|
337
340
|
try {
|
|
@@ -344,7 +347,11 @@ export class RealtimeSession {
|
|
|
344
347
|
}
|
|
345
348
|
}
|
|
346
349
|
catch (error) {
|
|
347
|
-
if (this.startupConnectController === controller &&
|
|
350
|
+
if (this.startupConnectController === controller && this.terminalSessionError) {
|
|
351
|
+
this.sessionEnded = true;
|
|
352
|
+
this.setState("failed");
|
|
353
|
+
}
|
|
354
|
+
else if (this.startupConnectController === controller && !this.sessionEnded) {
|
|
348
355
|
this.setState("failed");
|
|
349
356
|
}
|
|
350
357
|
throw error;
|
|
@@ -389,6 +396,7 @@ export class RealtimeSession {
|
|
|
389
396
|
markFailureTerminal: false,
|
|
390
397
|
});
|
|
391
398
|
}
|
|
399
|
+
throwIfAborted(controller.signal);
|
|
392
400
|
this.notifyStartupAttempt("succeeded", attemptNumber, attempt.readyTimeoutMs);
|
|
393
401
|
return;
|
|
394
402
|
}
|
|
@@ -451,6 +459,8 @@ export class RealtimeSession {
|
|
|
451
459
|
this.agentStreamId = null;
|
|
452
460
|
this.reconnectStartedAt = null;
|
|
453
461
|
this.pendingEndEvent = null;
|
|
462
|
+
this.agentDisconnected = false;
|
|
463
|
+
this.terminalSessionError = null;
|
|
454
464
|
this.endNotificationDelivered = false;
|
|
455
465
|
this.setState("connecting");
|
|
456
466
|
}
|
|
@@ -541,28 +551,42 @@ export class RealtimeSession {
|
|
|
541
551
|
});
|
|
542
552
|
}
|
|
543
553
|
async rejoin(apiBase = this.apiBase) {
|
|
554
|
+
if (this.sessionEnded) {
|
|
555
|
+
throw this.terminalSessionError ?? new Error("Cannot rejoin a session that has ended");
|
|
556
|
+
}
|
|
544
557
|
if (["connecting", "reconnecting", "resuming"].includes(this.stateValue)) {
|
|
545
558
|
throw new Error(`Cannot rejoin while session is ${this.stateValue}`);
|
|
546
559
|
}
|
|
547
|
-
this.
|
|
560
|
+
this.cancelRecovery();
|
|
548
561
|
const normalizedApiBase = normalizeApiBase(apiBase);
|
|
549
562
|
const recovering = this.hasConnectedValue;
|
|
563
|
+
const controller = new AbortController();
|
|
564
|
+
this.manualRejoinController = controller;
|
|
550
565
|
if (recovering) {
|
|
551
566
|
this.beginRecovery("rejoin", 1, { trigger: "manual_rejoin" });
|
|
552
567
|
this.setState("resuming");
|
|
553
568
|
}
|
|
554
569
|
try {
|
|
555
|
-
await this.performRejoin(normalizedApiBase, { recovering });
|
|
570
|
+
await this.performRejoin(normalizedApiBase, { recovering, signal: controller.signal });
|
|
571
|
+
if (this.sessionEnded)
|
|
572
|
+
return;
|
|
556
573
|
if (recovering)
|
|
557
574
|
this.completeRecovery();
|
|
558
575
|
}
|
|
559
576
|
catch (error) {
|
|
577
|
+
if (controller.signal.aborted && !this.terminalSessionError)
|
|
578
|
+
return;
|
|
560
579
|
const normalizedError = toError(error);
|
|
561
580
|
if (recovering)
|
|
562
581
|
this.failRecovery(normalizedError);
|
|
563
582
|
this.setState("failed");
|
|
564
583
|
throw error;
|
|
565
584
|
}
|
|
585
|
+
finally {
|
|
586
|
+
if (this.manualRejoinController === controller) {
|
|
587
|
+
this.manualRejoinController = null;
|
|
588
|
+
}
|
|
589
|
+
}
|
|
566
590
|
}
|
|
567
591
|
async performRejoin(apiBase, options = {}) {
|
|
568
592
|
const { signal, recovering = true, connect = {}, markFailureTerminal = true, } = options;
|
|
@@ -575,7 +599,15 @@ export class RealtimeSession {
|
|
|
575
599
|
throwIfAborted(signal);
|
|
576
600
|
response = await this.fetchRoomToken(apiBase, signal);
|
|
577
601
|
}
|
|
602
|
+
// A live ending may arrive while token renewal is in flight.
|
|
603
|
+
if (this.sessionEnded) {
|
|
604
|
+
if (this.terminalSessionError)
|
|
605
|
+
throw this.terminalSessionError;
|
|
606
|
+
return;
|
|
607
|
+
}
|
|
578
608
|
if (!response.ok) {
|
|
609
|
+
if (response.status === 409 && await this.recoverSessionEnd(apiBase, signal))
|
|
610
|
+
return;
|
|
579
611
|
throw await raceWithAbort(httpError(response, "Could not renew room token"), signal);
|
|
580
612
|
}
|
|
581
613
|
const payload = (await raceWithAbort(response.json(), signal));
|
|
@@ -583,7 +615,7 @@ export class RealtimeSession {
|
|
|
583
615
|
if (this.room.state !== LiveKitConnectionState.Disconnected) {
|
|
584
616
|
this.disconnectMode = "rejoin";
|
|
585
617
|
try {
|
|
586
|
-
await this.room.disconnect();
|
|
618
|
+
await raceWithAbort(this.room.disconnect(), signal);
|
|
587
619
|
}
|
|
588
620
|
finally {
|
|
589
621
|
this.disconnectMode = null;
|
|
@@ -782,7 +814,8 @@ export class RealtimeSession {
|
|
|
782
814
|
async disconnect() {
|
|
783
815
|
this.abortStartupConnect(new Error("Session disconnected"));
|
|
784
816
|
this.startupConnectController = null;
|
|
785
|
-
this.
|
|
817
|
+
this.failRecovery(new Error("Session disconnected during recovery"));
|
|
818
|
+
this.cancelRecovery();
|
|
786
819
|
this.contextGeneration += 1;
|
|
787
820
|
this.replacementContext.clear(new Error("Session disconnected"));
|
|
788
821
|
if (this.stateValue === "disconnected")
|
|
@@ -801,7 +834,8 @@ export class RealtimeSession {
|
|
|
801
834
|
async end(options = {}) {
|
|
802
835
|
this.abortStartupConnect(new Error("Session ended"));
|
|
803
836
|
this.startupConnectController = null;
|
|
804
|
-
this.
|
|
837
|
+
this.failRecovery(new Error("Session ended during recovery"));
|
|
838
|
+
this.cancelRecovery();
|
|
805
839
|
this.sessionEnded = true;
|
|
806
840
|
const endpoint = options.endpoint ?? this.endEndpoint ?? `${this.apiBase}/sessions/${this.id}`;
|
|
807
841
|
const request = options.request ?? {};
|
|
@@ -849,6 +883,13 @@ export class RealtimeSession {
|
|
|
849
883
|
bindRoomEvents() {
|
|
850
884
|
this.room.on(RoomEvent.ParticipantDisconnected, (participant) => {
|
|
851
885
|
if (participant.isAgent && !this.disconnectMode) {
|
|
886
|
+
this.agentDisconnected = true;
|
|
887
|
+
if (this.terminalSessionError)
|
|
888
|
+
return;
|
|
889
|
+
if (this.sessionEnded) {
|
|
890
|
+
this.finishPendingEnd();
|
|
891
|
+
return;
|
|
892
|
+
}
|
|
852
893
|
this.startAutoRejoin(new Error("Agent disconnected from the room"), { trigger: "agent_disconnected" });
|
|
853
894
|
}
|
|
854
895
|
});
|
|
@@ -861,6 +902,8 @@ export class RealtimeSession {
|
|
|
861
902
|
this.handleLiveKitDisconnected(reason);
|
|
862
903
|
});
|
|
863
904
|
this.room.on(RoomEvent.ConnectionStateChanged, (state) => {
|
|
905
|
+
if (this.sessionEnded || this.terminalSessionError)
|
|
906
|
+
return;
|
|
864
907
|
if (state === LiveKitConnectionState.Connected) {
|
|
865
908
|
const recovering = this.activeRecovery !== null || this.stateValue === "resuming";
|
|
866
909
|
this.setState(this.agentReady
|
|
@@ -1029,6 +1072,8 @@ export class RealtimeSession {
|
|
|
1029
1072
|
this.setState("disconnected");
|
|
1030
1073
|
return;
|
|
1031
1074
|
}
|
|
1075
|
+
if (this.terminalSessionError)
|
|
1076
|
+
return;
|
|
1032
1077
|
if (this.shouldAutoRejoin(reason)) {
|
|
1033
1078
|
this.startAutoRejoin(new Error(`LiveKit disconnected (${disconnectReasonName(reason)})`), { trigger: "livekit_disconnected" });
|
|
1034
1079
|
return;
|
|
@@ -1048,6 +1093,37 @@ export class RealtimeSession {
|
|
|
1048
1093
|
this.pendingEndEvent = null;
|
|
1049
1094
|
this.notifyEnded({ ...ending, type: "session.ended" });
|
|
1050
1095
|
}
|
|
1096
|
+
finishPendingEnd() {
|
|
1097
|
+
this.deliverPendingEndEvent();
|
|
1098
|
+
// The agent can leave while the browser remains in the room. Close that
|
|
1099
|
+
// transport ourselves, after notifying the application of the true reason.
|
|
1100
|
+
void this.disconnect().catch(() => { });
|
|
1101
|
+
}
|
|
1102
|
+
async recoverSessionEnd(apiBase, signal) {
|
|
1103
|
+
const controller = new AbortController();
|
|
1104
|
+
const cancel = () => controller.abort(signal?.reason);
|
|
1105
|
+
signal?.addEventListener("abort", cancel, { once: true });
|
|
1106
|
+
if (signal?.aborted)
|
|
1107
|
+
cancel();
|
|
1108
|
+
const timeout = globalThis.setTimeout(() => controller.abort(), 5_000);
|
|
1109
|
+
try {
|
|
1110
|
+
// A later live event may have advanced the cursor past a missed ending.
|
|
1111
|
+
// Replay from the start; event IDs suppress already delivered messages.
|
|
1112
|
+
await this.fetchReplay(apiBase, 0, { signal: controller.signal, terminalOnly: true });
|
|
1113
|
+
}
|
|
1114
|
+
catch {
|
|
1115
|
+
// A 409 also covers failed sessions. Without an authoritative ending,
|
|
1116
|
+
// retain the original HTTP failure rather than invent a normal end.
|
|
1117
|
+
}
|
|
1118
|
+
finally {
|
|
1119
|
+
globalThis.clearTimeout(timeout);
|
|
1120
|
+
signal?.removeEventListener("abort", cancel);
|
|
1121
|
+
}
|
|
1122
|
+
if (!this.sessionEnded || this.terminalSessionError)
|
|
1123
|
+
return false;
|
|
1124
|
+
this.finishPendingEnd();
|
|
1125
|
+
return true;
|
|
1126
|
+
}
|
|
1051
1127
|
notifyEnded(event) {
|
|
1052
1128
|
if (this.endNotificationDelivered)
|
|
1053
1129
|
return;
|
|
@@ -1156,6 +1232,8 @@ export class RealtimeSession {
|
|
|
1156
1232
|
throwIfAborted(signal);
|
|
1157
1233
|
this.beginRecovery("rejoin", attempt, details);
|
|
1158
1234
|
await this.performRejoin(this.apiBase, { signal });
|
|
1235
|
+
if (this.sessionEnded)
|
|
1236
|
+
return;
|
|
1159
1237
|
throwIfAborted(signal);
|
|
1160
1238
|
this.reconnectStartedAt = null;
|
|
1161
1239
|
this.completeRecovery();
|
|
@@ -1173,9 +1251,11 @@ export class RealtimeSession {
|
|
|
1173
1251
|
this.replacementContext.clear(lastError);
|
|
1174
1252
|
this.setState("failed");
|
|
1175
1253
|
}
|
|
1176
|
-
|
|
1254
|
+
cancelRecovery() {
|
|
1177
1255
|
this.autoRejoinController?.abort();
|
|
1178
1256
|
this.autoRejoinController = null;
|
|
1257
|
+
this.manualRejoinController?.abort();
|
|
1258
|
+
this.manualRejoinController = null;
|
|
1179
1259
|
this.autoRejoinPromise = null;
|
|
1180
1260
|
this.activeRecovery = null;
|
|
1181
1261
|
}
|
|
@@ -1242,44 +1322,76 @@ export class RealtimeSession {
|
|
|
1242
1322
|
this.accessToken = refreshed.access_token;
|
|
1243
1323
|
this.credentials = refreshed.connection;
|
|
1244
1324
|
}
|
|
1325
|
+
async finishSessionFailure(error) {
|
|
1326
|
+
this.sessionEnded = true;
|
|
1327
|
+
this.contextGeneration += 1;
|
|
1328
|
+
this.rejectPendingCommands(error);
|
|
1329
|
+
this.replacementContext.clear(error);
|
|
1330
|
+
this.failRecovery(error);
|
|
1331
|
+
this.cancelRecovery();
|
|
1332
|
+
this.disconnectMode = "connect_failure";
|
|
1333
|
+
try {
|
|
1334
|
+
await this.room.disconnect();
|
|
1335
|
+
}
|
|
1336
|
+
finally {
|
|
1337
|
+
this.disconnectMode = null;
|
|
1338
|
+
this.setState("failed");
|
|
1339
|
+
}
|
|
1340
|
+
}
|
|
1245
1341
|
observeConvenienceEvents(event) {
|
|
1246
1342
|
if (event.type === "session.error") {
|
|
1343
|
+
// Teardown errors must not overwrite an already announced normal ending.
|
|
1344
|
+
if (this.sessionEnded)
|
|
1345
|
+
return;
|
|
1247
1346
|
const error = new SessionErrorEventError(event);
|
|
1248
|
-
|
|
1249
|
-
|
|
1347
|
+
// Retryability applies to an active startup attempt. Once connected,
|
|
1348
|
+
// a durable session.error means the server has failed the session.
|
|
1349
|
+
if (error.retryable && this.startupAttemptController) {
|
|
1350
|
+
this.startupAttemptController.abort(error);
|
|
1250
1351
|
}
|
|
1251
1352
|
else {
|
|
1353
|
+
this.terminalSessionError = error;
|
|
1252
1354
|
this.abortStartupConnect(error);
|
|
1355
|
+
// Startup owns its aborted attempt's cleanup. An established session
|
|
1356
|
+
// needs to release media and settle recovery immediately on failure.
|
|
1357
|
+
if (!this.startupConnectController) {
|
|
1358
|
+
void this.finishSessionFailure(error).catch(() => { });
|
|
1359
|
+
}
|
|
1253
1360
|
}
|
|
1254
1361
|
}
|
|
1255
1362
|
if (event.type === "session.ending" || event.type === "session.ended") {
|
|
1363
|
+
// A worker shutdown event can follow a durable session.error. The server
|
|
1364
|
+
// retains FAILED in that case, so it must not become a normal completion.
|
|
1365
|
+
if (this.terminalSessionError)
|
|
1366
|
+
return;
|
|
1256
1367
|
this.abortStartupConnect(new Error("Session ended during startup"));
|
|
1257
1368
|
this.contextGeneration += 1;
|
|
1258
1369
|
this.rejectPendingCommands(new Error("Session ended"));
|
|
1370
|
+
this.failRecovery(new Error("Session ended during recovery"));
|
|
1259
1371
|
}
|
|
1260
1372
|
if (event.type === "session.ending") {
|
|
1261
1373
|
// The server announced an intentional hang-up before tearing down the
|
|
1262
1374
|
// room, so the coming disconnect must not fail recovery or auto-rejoin.
|
|
1263
1375
|
this.sessionEnded = true;
|
|
1264
|
-
this.
|
|
1376
|
+
this.cancelRecovery();
|
|
1265
1377
|
this.replacementContext.clear(new Error("Session ended"));
|
|
1266
|
-
|
|
1378
|
+
// Match the server's first terminal outcome, even if teardown announces
|
|
1379
|
+
// another ending before the agent has left the room.
|
|
1380
|
+
this.pendingEndEvent ??= event;
|
|
1381
|
+
if (!this.hasConnectedValue
|
|
1382
|
+
|| this.agentDisconnected
|
|
1383
|
+
|| this.room.state === LiveKitConnectionState.Disconnected) {
|
|
1384
|
+
this.finishPendingEnd();
|
|
1385
|
+
}
|
|
1267
1386
|
}
|
|
1268
1387
|
if (event.type === "session.ended") {
|
|
1388
|
+
const ending = this.pendingEndEvent;
|
|
1269
1389
|
this.pendingEndEvent = null;
|
|
1270
|
-
const recoveryWasActive = (this.autoRejoinPromise !== null
|
|
1271
|
-
|| this.activeRecovery !== null
|
|
1272
|
-
|| this.stateValue === "reconnecting"
|
|
1273
|
-
|| this.stateValue === "resuming");
|
|
1274
1390
|
this.sessionEnded = true;
|
|
1275
1391
|
this.replacementContext.clear(new Error("Session ended"));
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
}
|
|
1279
|
-
this.cancelAutoRejoin();
|
|
1280
|
-
this.notifyEnded(event);
|
|
1281
|
-
if (recoveryWasActive)
|
|
1282
|
-
this.setState("disconnected");
|
|
1392
|
+
this.cancelRecovery();
|
|
1393
|
+
this.notifyEnded(ending ? { ...ending, type: "session.ended" } : event);
|
|
1394
|
+
void this.disconnect().catch(() => { });
|
|
1283
1395
|
}
|
|
1284
1396
|
if (event.type.endsWith(".error"))
|
|
1285
1397
|
this.notifyListeners(this.errorListeners, event);
|
|
@@ -1608,6 +1720,7 @@ export class RealtimeSession {
|
|
|
1608
1720
|
return;
|
|
1609
1721
|
}
|
|
1610
1722
|
this.agentStreamId = event.stream_id;
|
|
1723
|
+
this.agentDisconnected = false;
|
|
1611
1724
|
const wasReady = this.agentReady;
|
|
1612
1725
|
this.agentReady = true;
|
|
1613
1726
|
// connect/reconnect owns the transition after hello, audio and context
|
|
@@ -1695,23 +1808,31 @@ export class RealtimeSession {
|
|
|
1695
1808
|
if (durationMs > 2_000)
|
|
1696
1809
|
this.flushDiagnostics("slow_operation");
|
|
1697
1810
|
}
|
|
1698
|
-
async fetchReplay(apiBase, afterSeq) {
|
|
1811
|
+
async fetchReplay(apiBase, afterSeq, options = {}) {
|
|
1812
|
+
const { signal, terminalOnly = false } = options;
|
|
1699
1813
|
let nextAfter = afterSeq;
|
|
1700
1814
|
while (true) {
|
|
1701
|
-
|
|
1815
|
+
throwIfAborted(signal);
|
|
1816
|
+
const url = `${apiBase}/sessions/${this.id}/events?after_seq=${nextAfter}&limit=200`
|
|
1817
|
+
+ (terminalOnly ? "&terminal_only=true" : "");
|
|
1818
|
+
let response = await raceWithAbort(this.fetcher(url, {
|
|
1702
1819
|
headers: { Authorization: `Bearer ${this.accessToken}` },
|
|
1703
1820
|
credentials: this.lifecycleCredentials,
|
|
1704
|
-
|
|
1821
|
+
signal,
|
|
1822
|
+
}), signal);
|
|
1705
1823
|
if (response.status === 401 && this.refreshCredentialsCallback) {
|
|
1706
|
-
await this.refreshCredentials();
|
|
1707
|
-
response = await this.fetcher(
|
|
1824
|
+
await raceWithAbort(this.refreshCredentials(), signal);
|
|
1825
|
+
response = await raceWithAbort(this.fetcher(url, {
|
|
1708
1826
|
headers: { Authorization: `Bearer ${this.accessToken}` },
|
|
1709
1827
|
credentials: this.lifecycleCredentials,
|
|
1710
|
-
|
|
1828
|
+
signal,
|
|
1829
|
+
}), signal);
|
|
1711
1830
|
}
|
|
1712
|
-
if (!response.ok)
|
|
1713
|
-
throw await httpError(response, "Could not replay session events");
|
|
1714
|
-
|
|
1831
|
+
if (!response.ok) {
|
|
1832
|
+
throw await raceWithAbort(httpError(response, "Could not replay session events"), signal);
|
|
1833
|
+
}
|
|
1834
|
+
const page = (await raceWithAbort(response.json(), signal));
|
|
1835
|
+
throwIfAborted(signal);
|
|
1715
1836
|
for (const stored of page.items) {
|
|
1716
1837
|
nextAfter = Math.max(nextAfter, stored.server_seq);
|
|
1717
1838
|
const event = {
|