@voxevolv/client 0.3.7 → 0.3.8

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.
@@ -1 +1 @@
1
- sha384-we1jALl2rzlCO9T8PO8LPaRqcqaMCtHQg1B5afqcJGcqKbp4iWgy1IOIC+79sJXE
1
+ sha384-wgvcShiKIEd8bnhA7Tf5ovZswh25fWa46v9wWWYGUzkBx44L1EKFZ8nqc0diRXK2
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "file": "index.js",
3
- "integrity": "sha384-we1jALl2rzlCO9T8PO8LPaRqcqaMCtHQg1B5afqcJGcqKbp4iWgy1IOIC+79sJXE"
3
+ "integrity": "sha384-wgvcShiKIEd8bnhA7Tf5ovZswh25fWa46v9wWWYGUzkBx44L1EKFZ8nqc0diRXK2"
4
4
  }
@@ -1,4 +1,12 @@
1
1
  import type { ContextUpdate, ContextUpdatedPayload } from "./protocol.js";
2
+ /** Delivery may have succeeded even when its acknowledgement was lost. */
3
+ export declare class ContextDeliveryError extends Error {
4
+ readonly retryAfter?: Promise<void>;
5
+ constructor(message: string, options?: ErrorOptions & {
6
+ retryAfter?: Promise<void>;
7
+ });
8
+ }
9
+ export declare function contextRetryDelay(attempt: number): number;
2
10
  /** Only replace updates can be coalesced or restored without duplicating data. */
3
11
  export declare class ReplacementContextQueue {
4
12
  private send;
@@ -7,7 +15,9 @@ export declare class ReplacementContextQueue {
7
15
  private latest;
8
16
  private pending;
9
17
  private running;
10
- private failure;
18
+ private retryTimers;
19
+ private retryAttempts;
20
+ private blockedTransfers;
11
21
  constructor(send: (update: ContextUpdate, timeoutMs: number) => Promise<ContextUpdatedPayload>);
12
22
  submit(update: ContextUpdate, timeoutMs: number): Promise<ContextUpdatedPayload>;
13
23
  pause(): void;
@@ -15,5 +25,7 @@ export declare class ReplacementContextQueue {
15
25
  clear(error: Error): void;
16
26
  private start;
17
27
  private drain;
28
+ blockUntilTransferSettles(key: string, settled: Promise<void>): void;
29
+ private scheduleRetry;
18
30
  }
19
31
  //# sourceMappingURL=context-queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-queue.d.ts","sourceRoot":"","sources":["../src/context-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAS1E,kFAAkF;AAClF,qBAAa,uBAAuB;IAQtB,OAAO,CAAC,IAAI;IAPxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,OAAO,CAAsB;IAErC,YAAoB,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,EAAI;IAE1G,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAqB/E;IAED,KAAK,IAAI,IAAI,CAGZ;IAEK,MAAM,CAAC,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB3C;IAED,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAKxB;IAED,OAAO,CAAC,KAAK;YASC,KAAK;CAsBpB"}
1
+ {"version":3,"file":"context-queue.d.ts","sourceRoot":"","sources":["../src/context-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAU1E,0EAA0E;AAC1E,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAY,GAAG;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;KAAO,EAGvF;CACF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,kFAAkF;AAClF,qBAAa,uBAAuB;IAUtB,OAAO,CAAC,IAAI;IATxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,WAAW,CAAoD;IACvE,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,gBAAgB,CAAoC;IAE5D,YAAoB,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,EAAI;IAE1G,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAuB/E;IAED,KAAK,IAAI,IAAI,CAKZ;IAEK,MAAM,CAAC,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB3C;IAED,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAMxB;IAED,OAAO,CAAC,KAAK;YASC,KAAK;IAqCnB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAUnE;IAED,OAAO,CAAC,aAAa;CAStB"}
@@ -1,3 +1,15 @@
1
+ /** Delivery may have succeeded even when its acknowledgement was lost. */
2
+ export class ContextDeliveryError extends Error {
3
+ retryAfter;
4
+ constructor(message, options = {}) {
5
+ super(message, options);
6
+ this.retryAfter = options.retryAfter;
7
+ }
8
+ }
9
+ export function contextRetryDelay(attempt) {
10
+ const delayMs = 1_000 * 2 ** Math.min(Math.max(attempt - 1, 0), 3);
11
+ return Math.min(delayMs * (1 + Math.random() * 0.2), 8_000);
12
+ }
1
13
  /** Only replace updates can be coalesced or restored without duplicating data. */
2
14
  export class ReplacementContextQueue {
3
15
  send;
@@ -6,12 +18,16 @@ export class ReplacementContextQueue {
6
18
  latest = new Map();
7
19
  pending = new Map();
8
20
  running = new Map();
9
- failure = null;
21
+ retryTimers = new Map();
22
+ retryAttempts = new Map();
23
+ blockedTransfers = new Map();
10
24
  constructor(send) {
11
25
  this.send = send;
12
26
  }
13
27
  submit(update, timeoutMs) {
14
- const activeKeys = new Set([...this.pending.keys(), ...this.running.keys()]);
28
+ const activeKeys = new Set([
29
+ ...this.pending.keys(), ...this.running.keys(), ...this.blockedTransfers.keys(),
30
+ ]);
15
31
  if (activeKeys.size >= 64 && !activeKeys.has(update.key)) {
16
32
  return Promise.reject(new Error("Too many pending context keys"));
17
33
  }
@@ -28,7 +44,7 @@ export class ReplacementContextQueue {
28
44
  }
29
45
  const response = new Promise((resolve, reject) => {
30
46
  this.pending.get(update.key)?.reject(new Error("Context update superseded by a newer value"));
31
- this.pending.set(update.key, { update, timeoutMs, resolve, reject });
47
+ this.pending.set(update.key, { update, retainedUpdate: update, timeoutMs, resolve, reject });
32
48
  });
33
49
  this.start(update.key);
34
50
  return response;
@@ -36,6 +52,9 @@ export class ReplacementContextQueue {
36
52
  pause() {
37
53
  this.generation += 1;
38
54
  this.paused = true;
55
+ for (const timer of this.retryTimers.values())
56
+ globalThis.clearTimeout(timer);
57
+ this.retryTimers.clear();
39
58
  }
40
59
  async resume(restore = false) {
41
60
  const generation = this.generation;
@@ -43,13 +62,13 @@ export class ReplacementContextQueue {
43
62
  await Promise.all(this.running.values());
44
63
  if (generation !== this.generation)
45
64
  throw new Error("Context restoration interrupted");
46
- this.failure = null;
47
65
  if (restore) {
48
66
  for (const [key, update] of this.latest) {
49
67
  if (this.pending.has(key))
50
68
  continue;
51
69
  this.pending.set(key, {
52
70
  update: { ...update, respond: false },
71
+ retainedUpdate: update,
53
72
  timeoutMs: 20_000,
54
73
  resolve: () => { },
55
74
  reject: () => { },
@@ -62,18 +81,17 @@ export class ReplacementContextQueue {
62
81
  await Promise.all(this.running.values());
63
82
  if (generation !== this.generation)
64
83
  throw new Error("Context restoration interrupted");
65
- if (this.failure)
66
- throw this.failure;
67
84
  }
68
85
  clear(error) {
69
86
  this.pause();
70
87
  this.latest.clear();
88
+ this.retryAttempts.clear();
71
89
  for (const request of this.pending.values())
72
90
  request.reject(error);
73
91
  this.pending.clear();
74
92
  }
75
93
  start(key) {
76
- if (this.paused || this.running.has(key))
94
+ if (this.paused || this.running.has(key) || this.retryTimers.has(key) || this.blockedTransfers.has(key))
77
95
  return;
78
96
  const task = this.drain(key).finally(() => {
79
97
  this.running.delete(key);
@@ -83,30 +101,67 @@ export class ReplacementContextQueue {
83
101
  this.running.set(key, task);
84
102
  }
85
103
  async drain(key) {
86
- while (!this.paused) {
104
+ while (!this.paused && !this.blockedTransfers.has(key)) {
87
105
  const request = this.pending.get(key);
88
106
  if (!request)
89
107
  return;
90
108
  this.pending.delete(key);
91
109
  try {
92
110
  request.resolve(await this.send(request.update, request.timeoutMs));
111
+ this.retryAttempts.delete(key);
93
112
  }
94
113
  catch (error) {
95
- if (this.paused && !this.pending.has(key) && this.latest.get(key) === request.update) {
114
+ if (error instanceof ContextDeliveryError && error.retryAfter) {
115
+ this.blockUntilTransferSettles(key, error.retryAfter);
116
+ }
117
+ const isLatest = this.latest.get(key) === request.retainedUpdate;
118
+ if (this.paused && !request.update.respond && !this.pending.has(key) && isLatest) {
96
119
  this.pending.set(key, request);
97
120
  }
98
121
  else {
99
122
  request.reject(error instanceof Error ? error : new Error(String(error)));
100
123
  }
101
124
  if (!this.paused) {
125
+ if (error instanceof ContextDeliveryError) {
126
+ // Settle the caller's deadline so it can refresh a stale timer.
127
+ // Background delivery is safe only for silent replacement values.
128
+ if (isLatest && !request.update.respond && !this.pending.has(key)) {
129
+ this.pending.set(key, { ...request, resolve: () => { }, reject: () => { } });
130
+ }
131
+ if (this.pending.has(key))
132
+ this.scheduleRetry(key);
133
+ return;
134
+ }
102
135
  // Invalid/rejected values must not poison the next restoration.
103
- if (this.latest.get(key) === request.update)
136
+ if (isLatest)
104
137
  this.latest.delete(key);
105
- this.failure = error instanceof Error ? error : new Error(String(error));
138
+ this.retryAttempts.delete(key);
106
139
  return;
107
140
  }
108
141
  }
109
142
  }
110
143
  }
144
+ blockUntilTransferSettles(key, settled) {
145
+ // LiveKit's stream writer exposes no cancellation API. A timeout settles
146
+ // the caller, but another upload for this key must wait for the old writer.
147
+ // Keep this guard across pause/clear so rejoin cannot create a second writer.
148
+ this.blockedTransfers.set(key, settled);
149
+ void settled.then(() => {
150
+ if (this.blockedTransfers.get(key) !== settled)
151
+ return;
152
+ this.blockedTransfers.delete(key);
153
+ if (this.pending.has(key))
154
+ this.start(key);
155
+ });
156
+ }
157
+ scheduleRetry(key) {
158
+ const attempt = (this.retryAttempts.get(key) ?? 0) + 1;
159
+ this.retryAttempts.set(key, attempt);
160
+ const timer = globalThis.setTimeout(() => {
161
+ this.retryTimers.delete(key);
162
+ this.start(key);
163
+ }, contextRetryDelay(attempt));
164
+ this.retryTimers.set(key, timer);
165
+ }
111
166
  }
112
167
  //# sourceMappingURL=context-queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-queue.js","sourceRoot":"","sources":["../src/context-queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-queue.js","sourceRoot":"","sources":["../src/context-queue.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,9 @@
1
1
  /** Bounded, content-free diagnostics for realtime connection investigations. */
2
+ export declare class DiagnosticDeliveryError extends Error {
3
+ readonly retryable: boolean;
4
+ readonly retryAfterMs: number;
5
+ constructor(message: string, retryable?: boolean, retryAfterMs?: number);
6
+ }
2
7
  declare const OPERATIONS: Set<"command_result" | "command_send" | "connection_recovery" | "context_transfer">;
3
8
  declare const STATUSES: Set<"acknowledged" | "failed" | "rejected" | "retrying" | "started" | "succeeded" | "timed_out">;
4
9
  declare const CONNECTION_STATES: Set<"connected" | "connected_not_ready" | "connecting" | "disconnected" | "failed" | "idle" | "reconnecting" | "resuming">;
@@ -9,6 +14,7 @@ export type DiagnosticConnectionState = typeof CONNECTION_STATES extends Set<inf
9
14
  export type DiagnosticEventType = typeof EVENT_TYPES extends Set<infer T> ? T : never;
10
15
  export interface ClientDiagnosticEntry {
11
16
  at_ms: number;
17
+ entry_seq: number;
12
18
  operation: DiagnosticOperation;
13
19
  status: DiagnosticStatus;
14
20
  reason?: string;
@@ -24,9 +30,13 @@ export interface ClientDiagnosticEntry {
24
30
  buffered_bytes?: number;
25
31
  event_type?: DiagnosticEventType;
26
32
  }
27
- export type ClientDiagnosticInput = Omit<ClientDiagnosticEntry, "at_ms">;
33
+ export type ClientDiagnosticInput = Omit<ClientDiagnosticEntry, "at_ms" | "entry_seq">;
28
34
  export interface ClientDiagnosticReport {
29
35
  source: "sdk";
36
+ report_id: string;
37
+ sdk_instance_id: string;
38
+ started_at_ms: number;
39
+ dropped_entries: number;
30
40
  sdk_version: string;
31
41
  trigger: string;
32
42
  entries: ClientDiagnosticEntry[];
@@ -38,6 +48,8 @@ type DiagnosticBufferOptions = {
38
48
  now?: () => number;
39
49
  schedule?: (callback: () => void, delayMs: number) => unknown;
40
50
  };
51
+ type DiagnosticSender = (report: ClientDiagnosticReport) => Promise<void>;
52
+ /** One immutable pending batch plus a bounded recent-history buffer. */
41
53
  export declare class ClientDiagnosticBuffer {
42
54
  private readonly entries;
43
55
  private readonly sdkVersion;
@@ -46,16 +58,27 @@ export declare class ClientDiagnosticBuffer {
46
58
  private readonly now;
47
59
  private readonly schedule;
48
60
  private readonly startedAt;
49
- private lastReportAt;
61
+ private readonly wallStartedAt;
62
+ private readonly instanceId;
63
+ private sequence;
64
+ private batchedThrough;
65
+ private droppedEntries;
66
+ private pending;
67
+ private sender;
68
+ private trigger;
50
69
  private reporting;
51
- private pendingReport;
52
- private pendingReportScheduled;
70
+ private scheduled;
71
+ private nextAttemptAt;
72
+ private failures;
53
73
  constructor(options: DiagnosticBufferOptions);
54
74
  record(input: ClientDiagnosticInput): void;
55
75
  snapshot(): ClientDiagnosticEntry[];
56
- flush(trigger: string, send: (report: ClientDiagnosticReport) => Promise<void>): Promise<boolean>;
57
- private isThrottled;
58
- private schedulePendingReport;
76
+ flush(trigger: string, send: DiagnosticSender): Promise<boolean>;
77
+ private prune;
78
+ private makeBatch;
79
+ private hasWork;
80
+ private deliver;
81
+ private scheduleNext;
59
82
  }
60
83
  export {};
61
84
  //# sourceMappingURL=diagnostics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAShF,qBAAa,uBAAwB,SAAQ,KAAK;IACnB,QAAQ,CAAC,SAAS;IAAS,QAAQ,CAAC,YAAY;IAA7E,YAAY,OAAO,EAAE,MAAM,EAAW,SAAS,UAAO,EAAW,YAAY,SAAI,EAGhF;CACF;AAWD,QAAA,MAAM,UAAU,qFAKL,CAAC;AACZ,QAAA,MAAM,QAAQ,kGAQH,CAAC;AACZ,QAAA,MAAM,iBAAiB,4HASZ,CAAC;AACZ,QAAA,MAAM,WAAW,mHAON,CAAC;AAIZ,MAAM,MAAM,mBAAmB,GAAG,OAAO,UAAU,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACrF,MAAM,MAAM,gBAAgB,GAAG,OAAO,QAAQ,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAChF,MAAM,MAAM,yBAAyB,GAAG,OAAO,iBAAiB,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAClG,MAAM,MAAM,mBAAmB,GAAG,OAAO,WAAW,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEtF,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC;AAED,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC;AAEvF,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAED,KAAK,uBAAuB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;CAC/D,CAAC;AAEF,KAAK,gBAAgB,GAAG,CAAC,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1E,wEAAwE;AACxE,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqD;IAC9E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAc;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,OAAO,CAAsE;IACrF,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAK;IAErB,YAAY,OAAO,EAAE,uBAAuB,EAY3C;IAED,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAMzC;IAED,QAAQ,IAAI,qBAAqB,EAAE,CAElC;IAEK,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAKrE;IAED,OAAO,CAAC,KAAK;IAiBb,OAAO,CAAC,SAAS;IAwBjB,OAAO,CAAC,OAAO;YAID,OAAO;IAwCrB,OAAO,CAAC,YAAY;CAQrB"}
@@ -1,6 +1,27 @@
1
1
  /** Bounded, content-free diagnostics for realtime connection investigations. */
2
2
  const DEFAULT_LIMIT = 128;
3
3
  const DEFAULT_THROTTLE_MS = 10_000;
4
+ const MAX_BATCH_BYTES = 16 * 1024;
5
+ const MAX_BUFFER_BYTES = 64 * 1024;
6
+ const MAX_AGE_MS = 5 * 60_000;
7
+ // Transport failures are retryable unless the server explicitly rejects the report.
8
+ export class DiagnosticDeliveryError extends Error {
9
+ retryable;
10
+ retryAfterMs;
11
+ constructor(message, retryable = true, retryAfterMs = 0) {
12
+ super(message);
13
+ this.retryable = retryable;
14
+ this.retryAfterMs = retryAfterMs;
15
+ this.name = "DiagnosticDeliveryError";
16
+ }
17
+ }
18
+ function diagnosticId() {
19
+ return globalThis.crypto?.randomUUID?.()
20
+ ?? `diag_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`;
21
+ }
22
+ function encodedBytes(value) {
23
+ return new TextEncoder().encode(JSON.stringify(value)).byteLength;
24
+ }
4
25
  const OPERATIONS = new Set([
5
26
  "context_transfer",
6
27
  "command_send",
@@ -36,6 +57,7 @@ const EVENT_TYPES = new Set([
36
57
  ]);
37
58
  const SAFE_CODE = /^[a-z0-9_.:-]+$/;
38
59
  const SAFE_CONTEXT_KEY = /^[A-Za-z0-9][A-Za-z0-9._:-]*$/;
60
+ /** One immutable pending batch plus a bounded recent-history buffer. */
39
61
  export class ClientDiagnosticBuffer {
40
62
  entries = [];
41
63
  sdkVersion;
@@ -44,85 +66,149 @@ export class ClientDiagnosticBuffer {
44
66
  now;
45
67
  schedule;
46
68
  startedAt;
47
- lastReportAt = null;
69
+ wallStartedAt = Date.now();
70
+ instanceId = diagnosticId();
71
+ sequence = 0;
72
+ batchedThrough = 0;
73
+ droppedEntries = 0;
74
+ pending = null;
75
+ sender = null;
76
+ trigger = "slow_operation";
48
77
  reporting = false;
49
- pendingReport = null;
50
- pendingReportScheduled = false;
78
+ scheduled = false;
79
+ nextAttemptAt = 0;
80
+ failures = 0;
51
81
  constructor(options) {
52
82
  this.sdkVersion = options.sdkVersion;
53
83
  this.limit = Math.max(1, Math.min(Math.trunc(options.limit ?? DEFAULT_LIMIT), DEFAULT_LIMIT));
54
84
  this.throttleMs = Math.max(0, options.throttleMs ?? DEFAULT_THROTTLE_MS);
55
- this.now = options.now ?? (() => Date.now());
56
- this.schedule = options.schedule
57
- ?? ((callback, delayMs) => globalThis.setTimeout(callback, delayMs));
85
+ this.now = options.now ?? (() => performance.now());
86
+ this.schedule = options.schedule ?? ((callback, delayMs) => {
87
+ const timer = globalThis.setTimeout(callback, delayMs);
88
+ // Node consumers should not stay alive just to deliver optional diagnostics.
89
+ timer.unref?.();
90
+ return timer;
91
+ });
58
92
  this.startedAt = this.now();
59
93
  }
60
94
  record(input) {
61
95
  const entry = sanitizeEntry(input, Math.max(this.now() - this.startedAt, 0));
62
96
  if (!entry)
63
97
  return;
98
+ entry.entry_seq = ++this.sequence;
64
99
  this.entries.push(entry);
65
- while (this.entries.length > this.limit)
66
- this.entries.shift();
100
+ this.prune();
67
101
  }
68
102
  snapshot() {
69
103
  return this.entries.map((entry) => ({ ...entry }));
70
104
  }
71
105
  async flush(trigger, send) {
72
- const now = this.now();
73
106
  if (!SAFE_CODE.test(trigger) || trigger.length > 100)
74
107
  return false;
75
- if (this.entries.length === 0)
108
+ this.trigger = trigger;
109
+ this.sender = send;
110
+ return this.deliver();
111
+ }
112
+ prune() {
113
+ const oldestAtMs = this.now() - this.startedAt - MAX_AGE_MS;
114
+ while (this.entries.length && (this.entries.length > this.limit
115
+ || encodedBytes(this.entries) > MAX_BUFFER_BYTES
116
+ || this.entries[0].at_ms <= oldestAtMs)) {
117
+ const removed = this.entries.shift();
118
+ if (removed.entry_seq > this.batchedThrough)
119
+ this.droppedEntries += 1;
120
+ }
121
+ if (!this.reporting && this.pending && this.now() - this.pending.createdAt >= MAX_AGE_MS) {
122
+ this.droppedEntries += this.pending.report.entries.length;
123
+ this.pending = null;
124
+ this.failures = 0;
125
+ }
126
+ }
127
+ makeBatch() {
128
+ const report = {
129
+ source: "sdk",
130
+ report_id: diagnosticId(),
131
+ sdk_instance_id: this.instanceId,
132
+ started_at_ms: this.wallStartedAt,
133
+ dropped_entries: this.droppedEntries,
134
+ sdk_version: this.sdkVersion,
135
+ trigger: this.trigger,
136
+ entries: [],
137
+ };
138
+ for (const entry of this.entries) {
139
+ if (entry.entry_seq <= this.batchedThrough)
140
+ continue;
141
+ report.entries.push({ ...entry });
142
+ if (encodedBytes(report) > MAX_BATCH_BYTES) {
143
+ report.entries.pop();
144
+ break;
145
+ }
146
+ }
147
+ if (!report.entries.length)
148
+ return;
149
+ this.batchedThrough = report.entries.at(-1).entry_seq;
150
+ this.pending = { report, createdAt: this.now() };
151
+ }
152
+ hasWork() {
153
+ return this.pending !== null || this.entries.some((entry) => entry.entry_seq > this.batchedThrough);
154
+ }
155
+ async deliver() {
156
+ if (this.reporting || !this.sender)
76
157
  return false;
77
- if (this.reporting || this.pendingReportScheduled || this.isThrottled(now)) {
78
- this.pendingReport = { trigger, send };
79
- this.schedulePendingReport();
158
+ this.prune();
159
+ if (!this.hasWork())
160
+ return false;
161
+ if (this.now() < this.nextAttemptAt) {
162
+ this.scheduleNext();
80
163
  return false;
81
164
  }
165
+ if (!this.pending)
166
+ this.makeBatch();
167
+ if (!this.pending)
168
+ return false;
169
+ const batch = this.pending;
82
170
  this.reporting = true;
171
+ let delayMs = this.throttleMs;
83
172
  try {
84
- await send({
85
- source: "sdk",
86
- sdk_version: this.sdkVersion,
87
- trigger,
88
- entries: this.snapshot(),
89
- });
173
+ await this.sender(batch.report);
174
+ this.pending = null;
175
+ this.failures = 0;
90
176
  return true;
91
177
  }
92
- catch {
93
- // Diagnostics are always best effort and must never affect the call.
178
+ catch (error) {
179
+ if (error instanceof DiagnosticDeliveryError && !error.retryable) {
180
+ this.droppedEntries += batch.report.entries.length;
181
+ this.pending = null;
182
+ this.failures = 0;
183
+ }
184
+ else {
185
+ this.failures += 1;
186
+ const backoffMs = Math.min(2_000 * 2 ** Math.min(this.failures - 1, 5), 60_000);
187
+ delayMs = Math.max(this.throttleMs, backoffMs * (1 + Math.random() * 0.2), error instanceof DiagnosticDeliveryError ? error.retryAfterMs : 0);
188
+ }
94
189
  return false;
95
190
  }
96
191
  finally {
97
- // Anchor throttling after the request settles. The server received the
98
- // preceding report before this point, so its own throttle has time to expire.
99
- this.lastReportAt = this.now();
100
192
  this.reporting = false;
101
- this.schedulePendingReport();
193
+ this.nextAttemptAt = this.now() + delayMs;
194
+ this.scheduleNext();
102
195
  }
103
196
  }
104
- isThrottled(now) {
105
- return this.lastReportAt !== null && now - this.lastReportAt < this.throttleMs;
106
- }
107
- schedulePendingReport() {
108
- if (this.reporting || this.pendingReport === null || this.pendingReportScheduled)
197
+ scheduleNext() {
198
+ if (this.reporting || this.scheduled || !this.hasWork())
109
199
  return;
110
- const elapsedMs = this.lastReportAt === null ? this.throttleMs : this.now() - this.lastReportAt;
111
- const delayMs = Math.max(this.throttleMs - elapsedMs, 0);
112
- this.pendingReportScheduled = true;
200
+ this.scheduled = true;
113
201
  this.schedule(() => {
114
- this.pendingReportScheduled = false;
115
- const pending = this.pendingReport;
116
- this.pendingReport = null;
117
- if (pending)
118
- void this.flush(pending.trigger, pending.send);
119
- }, delayMs);
202
+ this.scheduled = false;
203
+ void this.deliver();
204
+ }, Math.min(Math.max(this.nextAttemptAt - this.now(), 0), MAX_AGE_MS));
120
205
  }
121
206
  }
122
207
  function sanitizeEntry(input, atMs) {
123
208
  if (!OPERATIONS.has(input.operation) || !STATUSES.has(input.status))
124
209
  return null;
125
210
  const entry = {
211
+ entry_seq: 0,
126
212
  at_ms: boundedNumber(atMs, 0, 86_400_000) ?? 0,
127
213
  operation: input.operation,
128
214
  status: input.status,
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
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.7";
22
+ export declare const SDK_VERSION = "0.3.8";
23
23
  type Listener = (event: RealtimeEvent) => void;
24
24
  type StateListener = (state: ConnectionState) => void;
25
25
  type GapListener = (gap: EventGap) => void;
@@ -194,6 +194,7 @@ export declare class RealtimeSession {
194
194
  private readonly lifecycleCredentials;
195
195
  private readonly diagnostics;
196
196
  private readonly diagnosticReportTimeoutMs;
197
+ private readonly onDiagnosticVisibilityChange;
197
198
  constructor(credentials: SessionCredentials, options?: RealtimeSessionOptions);
198
199
  static create(options: RealtimeSessionCreateOptions): Promise<RealtimeSession>;
199
200
  get state(): ConnectionState;
@@ -226,6 +227,7 @@ export declare class RealtimeSession {
226
227
  registerTool(name: string, handler: ToolHandler): () => void;
227
228
  connect(options?: ConnectOptions): Promise<void>;
228
229
  private connectWithStartupRetry;
230
+ private registerStartupRecovery;
229
231
  private notifyStartupAttempt;
230
232
  private connectWithMode;
231
233
  private connectRoom;
@@ -235,6 +237,7 @@ export declare class RealtimeSession {
235
237
  sendCommand<T extends Record<string, unknown>>(type: string, payload: T, timeoutMs?: number): Promise<CommandAckPayload>;
236
238
  updateContext(update: ContextUpdate, timeoutMs?: number): Promise<ContextUpdatedPayload>;
237
239
  private sendContextUpdate;
240
+ private resumeContextDelivery;
238
241
  private uploadTextContext;
239
242
  private uploadImageContext;
240
243
  disconnect(): Promise<void>;
@@ -267,6 +270,8 @@ export declare class RealtimeSession {
267
270
  private publishApplicationAudioTrack;
268
271
  private sendHello;
269
272
  private sendTrackedCommand;
273
+ private scheduleCommandRetry;
274
+ private retryCommand;
270
275
  private publishCommandAttempt;
271
276
  private publishCommandAttemptNow;
272
277
  private publishCommand;