@voxevolv/client 0.3.3 → 0.3.5
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 +29 -0
- package/README.md +85 -7
- package/dist/browser/index.js +6 -6
- package/dist/browser/index.js.map +4 -4
- package/dist/browser/index.js.sha384 +1 -1
- package/dist/browser/manifest.json +1 -1
- package/dist/diagnostics.d.ts +61 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +176 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/index.d.ts +44 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +636 -54
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
sha384-
|
|
1
|
+
sha384-dhXJWgVAbUEWiULaYiaGXhqHYNZjF0rxrBiOf3TOxomvddgkIsvdpVtdK/egO5WT
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/** Bounded, content-free diagnostics for realtime connection investigations. */
|
|
2
|
+
declare const OPERATIONS: Set<"command_result" | "command_send" | "connection_recovery" | "context_transfer">;
|
|
3
|
+
declare const STATUSES: Set<"acknowledged" | "failed" | "rejected" | "retrying" | "started" | "succeeded" | "timed_out">;
|
|
4
|
+
declare const CONNECTION_STATES: Set<"connected" | "connected_not_ready" | "connecting" | "disconnected" | "failed" | "idle" | "reconnecting" | "resuming">;
|
|
5
|
+
declare const EVENT_TYPES: Set<"client.hello" | "command.ack" | "command.error" | "context.rejected" | "context.update" | "context.updated">;
|
|
6
|
+
export type DiagnosticOperation = typeof OPERATIONS extends Set<infer T> ? T : never;
|
|
7
|
+
export type DiagnosticStatus = typeof STATUSES extends Set<infer T> ? T : never;
|
|
8
|
+
export type DiagnosticConnectionState = typeof CONNECTION_STATES extends Set<infer T> ? T : never;
|
|
9
|
+
export type DiagnosticEventType = typeof EVENT_TYPES extends Set<infer T> ? T : never;
|
|
10
|
+
export interface ClientDiagnosticEntry {
|
|
11
|
+
at_ms: number;
|
|
12
|
+
operation: DiagnosticOperation;
|
|
13
|
+
status: DiagnosticStatus;
|
|
14
|
+
reason?: string;
|
|
15
|
+
message_id?: string;
|
|
16
|
+
connection_id?: string;
|
|
17
|
+
client_seq?: number;
|
|
18
|
+
context_key?: string;
|
|
19
|
+
payload_bytes?: number;
|
|
20
|
+
duration_ms?: number;
|
|
21
|
+
retry_count?: number;
|
|
22
|
+
timeout_ms?: number;
|
|
23
|
+
connection_state?: DiagnosticConnectionState;
|
|
24
|
+
buffered_bytes?: number;
|
|
25
|
+
event_type?: DiagnosticEventType;
|
|
26
|
+
}
|
|
27
|
+
export type ClientDiagnosticInput = Omit<ClientDiagnosticEntry, "at_ms">;
|
|
28
|
+
export interface ClientDiagnosticReport {
|
|
29
|
+
source: "sdk";
|
|
30
|
+
sdk_version: string;
|
|
31
|
+
trigger: string;
|
|
32
|
+
entries: ClientDiagnosticEntry[];
|
|
33
|
+
}
|
|
34
|
+
type DiagnosticBufferOptions = {
|
|
35
|
+
sdkVersion: string;
|
|
36
|
+
limit?: number;
|
|
37
|
+
throttleMs?: number;
|
|
38
|
+
now?: () => number;
|
|
39
|
+
schedule?: (callback: () => void, delayMs: number) => unknown;
|
|
40
|
+
};
|
|
41
|
+
export declare class ClientDiagnosticBuffer {
|
|
42
|
+
private readonly entries;
|
|
43
|
+
private readonly sdkVersion;
|
|
44
|
+
private readonly limit;
|
|
45
|
+
private readonly throttleMs;
|
|
46
|
+
private readonly now;
|
|
47
|
+
private readonly schedule;
|
|
48
|
+
private readonly startedAt;
|
|
49
|
+
private lastReportAt;
|
|
50
|
+
private reporting;
|
|
51
|
+
private pendingReport;
|
|
52
|
+
private pendingReportScheduled;
|
|
53
|
+
constructor(options: DiagnosticBufferOptions);
|
|
54
|
+
record(input: ClientDiagnosticInput): void;
|
|
55
|
+
snapshot(): ClientDiagnosticEntry[];
|
|
56
|
+
flush(trigger: string, send: (report: ClientDiagnosticReport) => Promise<void>): Promise<boolean>;
|
|
57
|
+
private isThrottled;
|
|
58
|
+
private schedulePendingReport;
|
|
59
|
+
}
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/** Bounded, content-free diagnostics for realtime connection investigations. */
|
|
2
|
+
const DEFAULT_LIMIT = 128;
|
|
3
|
+
const DEFAULT_THROTTLE_MS = 10_000;
|
|
4
|
+
const OPERATIONS = new Set([
|
|
5
|
+
"context_transfer",
|
|
6
|
+
"command_send",
|
|
7
|
+
"command_result",
|
|
8
|
+
"connection_recovery",
|
|
9
|
+
]);
|
|
10
|
+
const STATUSES = new Set([
|
|
11
|
+
"started",
|
|
12
|
+
"succeeded",
|
|
13
|
+
"failed",
|
|
14
|
+
"retrying",
|
|
15
|
+
"acknowledged",
|
|
16
|
+
"rejected",
|
|
17
|
+
"timed_out",
|
|
18
|
+
]);
|
|
19
|
+
const CONNECTION_STATES = new Set([
|
|
20
|
+
"idle",
|
|
21
|
+
"connecting",
|
|
22
|
+
"connected_not_ready",
|
|
23
|
+
"connected",
|
|
24
|
+
"reconnecting",
|
|
25
|
+
"resuming",
|
|
26
|
+
"disconnected",
|
|
27
|
+
"failed",
|
|
28
|
+
]);
|
|
29
|
+
const EVENT_TYPES = new Set([
|
|
30
|
+
"client.hello",
|
|
31
|
+
"context.update",
|
|
32
|
+
"command.ack",
|
|
33
|
+
"command.error",
|
|
34
|
+
"context.updated",
|
|
35
|
+
"context.rejected",
|
|
36
|
+
]);
|
|
37
|
+
const SAFE_CODE = /^[a-z0-9_.:-]+$/;
|
|
38
|
+
const SAFE_CONTEXT_KEY = /^[A-Za-z0-9][A-Za-z0-9._:-]*$/;
|
|
39
|
+
export class ClientDiagnosticBuffer {
|
|
40
|
+
entries = [];
|
|
41
|
+
sdkVersion;
|
|
42
|
+
limit;
|
|
43
|
+
throttleMs;
|
|
44
|
+
now;
|
|
45
|
+
schedule;
|
|
46
|
+
startedAt;
|
|
47
|
+
lastReportAt = null;
|
|
48
|
+
reporting = false;
|
|
49
|
+
pendingReport = null;
|
|
50
|
+
pendingReportScheduled = false;
|
|
51
|
+
constructor(options) {
|
|
52
|
+
this.sdkVersion = options.sdkVersion;
|
|
53
|
+
this.limit = Math.max(1, Math.min(Math.trunc(options.limit ?? DEFAULT_LIMIT), DEFAULT_LIMIT));
|
|
54
|
+
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));
|
|
58
|
+
this.startedAt = this.now();
|
|
59
|
+
}
|
|
60
|
+
record(input) {
|
|
61
|
+
const entry = sanitizeEntry(input, Math.max(this.now() - this.startedAt, 0));
|
|
62
|
+
if (!entry)
|
|
63
|
+
return;
|
|
64
|
+
this.entries.push(entry);
|
|
65
|
+
while (this.entries.length > this.limit)
|
|
66
|
+
this.entries.shift();
|
|
67
|
+
}
|
|
68
|
+
snapshot() {
|
|
69
|
+
return this.entries.map((entry) => ({ ...entry }));
|
|
70
|
+
}
|
|
71
|
+
async flush(trigger, send) {
|
|
72
|
+
const now = this.now();
|
|
73
|
+
if (!SAFE_CODE.test(trigger) || trigger.length > 100)
|
|
74
|
+
return false;
|
|
75
|
+
if (this.entries.length === 0)
|
|
76
|
+
return false;
|
|
77
|
+
if (this.reporting || this.pendingReportScheduled || this.isThrottled(now)) {
|
|
78
|
+
this.pendingReport = { trigger, send };
|
|
79
|
+
this.schedulePendingReport();
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
this.reporting = true;
|
|
83
|
+
try {
|
|
84
|
+
await send({
|
|
85
|
+
source: "sdk",
|
|
86
|
+
sdk_version: this.sdkVersion,
|
|
87
|
+
trigger,
|
|
88
|
+
entries: this.snapshot(),
|
|
89
|
+
});
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// Diagnostics are always best effort and must never affect the call.
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
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
|
+
this.reporting = false;
|
|
101
|
+
this.schedulePendingReport();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
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)
|
|
109
|
+
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;
|
|
113
|
+
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);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function sanitizeEntry(input, atMs) {
|
|
123
|
+
if (!OPERATIONS.has(input.operation) || !STATUSES.has(input.status))
|
|
124
|
+
return null;
|
|
125
|
+
const entry = {
|
|
126
|
+
at_ms: boundedNumber(atMs, 0, 86_400_000) ?? 0,
|
|
127
|
+
operation: input.operation,
|
|
128
|
+
status: input.status,
|
|
129
|
+
};
|
|
130
|
+
const reason = safeString(input.reason, 100, SAFE_CODE);
|
|
131
|
+
const messageId = safeString(input.message_id, 120);
|
|
132
|
+
const connectionId = safeString(input.connection_id, 120);
|
|
133
|
+
const contextKey = safeString(input.context_key, 120, SAFE_CONTEXT_KEY);
|
|
134
|
+
if (reason !== undefined)
|
|
135
|
+
entry.reason = reason;
|
|
136
|
+
if (messageId !== undefined)
|
|
137
|
+
entry.message_id = messageId;
|
|
138
|
+
if (connectionId !== undefined)
|
|
139
|
+
entry.connection_id = connectionId;
|
|
140
|
+
if (contextKey !== undefined)
|
|
141
|
+
entry.context_key = contextKey;
|
|
142
|
+
assignNumber(entry, "client_seq", input.client_seq, 1, Number.MAX_SAFE_INTEGER, true);
|
|
143
|
+
assignNumber(entry, "payload_bytes", input.payload_bytes, 0, 5_242_880, true);
|
|
144
|
+
assignNumber(entry, "duration_ms", input.duration_ms, 0, 3_600_000);
|
|
145
|
+
assignNumber(entry, "retry_count", input.retry_count, 0, 1_000, true);
|
|
146
|
+
assignNumber(entry, "timeout_ms", input.timeout_ms, 1, 3_600_000, true);
|
|
147
|
+
assignNumber(entry, "buffered_bytes", input.buffered_bytes, 0, 1_073_741_824, true);
|
|
148
|
+
if (input.connection_state && CONNECTION_STATES.has(input.connection_state)) {
|
|
149
|
+
entry.connection_state = input.connection_state;
|
|
150
|
+
}
|
|
151
|
+
if (input.event_type && EVENT_TYPES.has(input.event_type)) {
|
|
152
|
+
entry.event_type = input.event_type;
|
|
153
|
+
}
|
|
154
|
+
return entry;
|
|
155
|
+
}
|
|
156
|
+
function safeString(value, maxLength, pattern) {
|
|
157
|
+
if (typeof value !== "string" || value.length === 0 || value.length > maxLength)
|
|
158
|
+
return undefined;
|
|
159
|
+
if (pattern && !pattern.test(value))
|
|
160
|
+
return undefined;
|
|
161
|
+
return value;
|
|
162
|
+
}
|
|
163
|
+
function boundedNumber(value, minimum, maximum, integer = false) {
|
|
164
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
165
|
+
return undefined;
|
|
166
|
+
if (value < minimum || value > maximum)
|
|
167
|
+
return undefined;
|
|
168
|
+
return integer ? Math.trunc(value) : Math.round(value * 10) / 10;
|
|
169
|
+
}
|
|
170
|
+
function assignNumber(entry, key, value, minimum, maximum, integer = false) {
|
|
171
|
+
const normalized = boundedNumber(value, minimum, maximum, integer);
|
|
172
|
+
if (normalized !== undefined) {
|
|
173
|
+
entry[key] = normalized;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Room } from "livekit-client";
|
|
2
2
|
import { type CommandAckPayload, type ContextUpdate, type ContextUpdatedPayload, type EventGap, type RealtimeEvent } from "./protocol.js";
|
|
3
|
+
import { type DiagnosticOperation } from "./diagnostics.js";
|
|
3
4
|
import { type TranscriptMessage } from "./transcripts.js";
|
|
4
5
|
export { TranscriptStore, type TranscriptMessage } from "./transcripts.js";
|
|
5
6
|
export { CommandError, EventCursor, createClientMessage, isCommandAckPayload, isCommandErrorPayload, isContextRejectedPayload, isContextUpdatePayload, isContextUpdatedPayload, isRealtimeEvent, } from "./protocol.js";
|
|
@@ -18,12 +19,13 @@ export interface SessionCredentials {
|
|
|
18
19
|
access_token: string;
|
|
19
20
|
access_token_expires_at: string;
|
|
20
21
|
}
|
|
21
|
-
export declare const SDK_VERSION = "0.3.
|
|
22
|
+
export declare const SDK_VERSION = "0.3.5";
|
|
22
23
|
type Listener = (event: RealtimeEvent) => void;
|
|
23
24
|
type StateListener = (state: ConnectionState) => void;
|
|
24
25
|
type GapListener = (gap: EventGap) => void;
|
|
25
26
|
type ConnectionQualityListener = (quality: ConnectionQuality) => void;
|
|
26
27
|
type RecoveryListener = (event: RecoveryEvent) => void;
|
|
28
|
+
type StartupAttemptListener = (event: StartupAttemptEvent) => void;
|
|
27
29
|
export type FetchLike = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
28
30
|
export type RemoteAudioTrackListener = (track: MediaStreamTrack, stream: MediaStream) => void;
|
|
29
31
|
export interface TranscriptEvent {
|
|
@@ -50,6 +52,14 @@ export interface AutoRejoinOptions {
|
|
|
50
52
|
maxDelayMs?: number;
|
|
51
53
|
timeoutMs?: number;
|
|
52
54
|
}
|
|
55
|
+
export interface StartupAttempt {
|
|
56
|
+
readyTimeoutMs: number;
|
|
57
|
+
delayBeforeMs?: number;
|
|
58
|
+
}
|
|
59
|
+
export interface StartupRetryOptions {
|
|
60
|
+
attempts?: readonly StartupAttempt[];
|
|
61
|
+
timeoutMs?: number;
|
|
62
|
+
}
|
|
53
63
|
export interface RealtimeSessionOptions {
|
|
54
64
|
connect?: ConnectOptions;
|
|
55
65
|
tools?: Record<string, ToolHandler>;
|
|
@@ -57,6 +67,7 @@ export interface RealtimeSessionOptions {
|
|
|
57
67
|
endEndpoint?: string;
|
|
58
68
|
refreshCredentials?: () => Promise<SessionCredentials>;
|
|
59
69
|
autoRejoin?: boolean | AutoRejoinOptions;
|
|
70
|
+
startupRetry?: boolean | StartupRetryOptions;
|
|
60
71
|
lifecycleCredentials?: RequestCredentials;
|
|
61
72
|
}
|
|
62
73
|
export interface RealtimeSessionCreateOptions extends Omit<RealtimeSessionOptions, "connect"> {
|
|
@@ -85,8 +96,21 @@ export interface RecoveryEvent {
|
|
|
85
96
|
status: "started" | "succeeded" | "failed";
|
|
86
97
|
strategy: "livekit" | "rejoin";
|
|
87
98
|
attempt: number;
|
|
99
|
+
trigger: RecoveryTrigger;
|
|
100
|
+
operation?: DiagnosticOperation;
|
|
101
|
+
messageId?: string;
|
|
102
|
+
contextKey?: string;
|
|
103
|
+
timeoutMs?: number;
|
|
104
|
+
error?: Error;
|
|
105
|
+
}
|
|
106
|
+
export interface StartupAttemptEvent {
|
|
107
|
+
status: "started" | "succeeded" | "failed";
|
|
108
|
+
attempt: number;
|
|
109
|
+
maxAttempts: number;
|
|
110
|
+
readyTimeoutMs: number;
|
|
88
111
|
error?: Error;
|
|
89
112
|
}
|
|
113
|
+
export type RecoveryTrigger = "manual_rejoin" | "livekit_reconnecting" | "livekit_resume_failed" | "livekit_disconnected" | "agent_disconnected" | "worker_replaced" | "context_transfer_timeout" | "context_command_timeout";
|
|
90
114
|
export declare class RealtimeSessionHttpError extends Error {
|
|
91
115
|
readonly status: number;
|
|
92
116
|
readonly code: string | null;
|
|
@@ -113,6 +137,7 @@ export declare class RealtimeSession {
|
|
|
113
137
|
private gapListeners;
|
|
114
138
|
private connectionQualityListeners;
|
|
115
139
|
private recoveryListeners;
|
|
140
|
+
private startupAttemptListeners;
|
|
116
141
|
private remoteAudioTrackListeners;
|
|
117
142
|
private remoteAudioTrackUnsubscribedListeners;
|
|
118
143
|
private readyListeners;
|
|
@@ -140,6 +165,7 @@ export declare class RealtimeSession {
|
|
|
140
165
|
private readyResolve;
|
|
141
166
|
private replayPromise;
|
|
142
167
|
private pendingCommands;
|
|
168
|
+
private commandPublishTail;
|
|
143
169
|
private toolHandlers;
|
|
144
170
|
private apiBase;
|
|
145
171
|
private hasConnectedValue;
|
|
@@ -150,6 +176,8 @@ export declare class RealtimeSession {
|
|
|
150
176
|
private activeRecovery;
|
|
151
177
|
private autoRejoinPromise;
|
|
152
178
|
private autoRejoinController;
|
|
179
|
+
private startupConnectController;
|
|
180
|
+
private startupAttemptController;
|
|
153
181
|
private useManagedMicrophone;
|
|
154
182
|
private managedMicrophoneEnabled;
|
|
155
183
|
private applicationAudioTrack;
|
|
@@ -158,7 +186,10 @@ export declare class RealtimeSession {
|
|
|
158
186
|
private readonly endEndpoint;
|
|
159
187
|
private readonly refreshCredentialsCallback;
|
|
160
188
|
private readonly autoRejoinOptions;
|
|
189
|
+
private readonly startupRetryOptions;
|
|
161
190
|
private readonly lifecycleCredentials;
|
|
191
|
+
private readonly diagnostics;
|
|
192
|
+
private readonly diagnosticReportTimeoutMs;
|
|
162
193
|
constructor(credentials: SessionCredentials, options?: RealtimeSessionOptions);
|
|
163
194
|
static create(options: RealtimeSessionCreateOptions): Promise<RealtimeSession>;
|
|
164
195
|
get state(): ConnectionState;
|
|
@@ -174,6 +205,7 @@ export declare class RealtimeSession {
|
|
|
174
205
|
onProtocolGap(listener: GapListener): () => void;
|
|
175
206
|
onConnectionQuality(listener: ConnectionQualityListener): () => void;
|
|
176
207
|
onRecovery(listener: RecoveryListener): () => void;
|
|
208
|
+
onStartupAttempt(listener: StartupAttemptListener): () => void;
|
|
177
209
|
waitForState(states: readonly ConnectionState[], timeoutMs: number, options?: WaitForStateOptions): Promise<ConnectionState>;
|
|
178
210
|
onRemoteAudioTrack(listener: RemoteAudioTrackListener): () => void;
|
|
179
211
|
onRemoteAudioTrackUnsubscribed(listener: RemoteAudioTrackListener): () => void;
|
|
@@ -189,7 +221,10 @@ export declare class RealtimeSession {
|
|
|
189
221
|
onAudioPlaybackBlocked(listener: (event: AudioPlaybackBlockedEvent) => void): () => void;
|
|
190
222
|
registerTool(name: string, handler: ToolHandler): () => void;
|
|
191
223
|
connect(options?: ConnectOptions): Promise<void>;
|
|
224
|
+
private connectWithStartupRetry;
|
|
225
|
+
private notifyStartupAttempt;
|
|
192
226
|
private connectWithMode;
|
|
227
|
+
private connectRoom;
|
|
193
228
|
rejoin(apiBase?: string): Promise<void>;
|
|
194
229
|
private performRejoin;
|
|
195
230
|
setMicrophoneEnabled(enabled: boolean): Promise<void>;
|
|
@@ -221,15 +256,23 @@ export declare class RealtimeSession {
|
|
|
221
256
|
private fetchRoomToken;
|
|
222
257
|
private refreshCredentials;
|
|
223
258
|
private observeConvenienceEvents;
|
|
259
|
+
private abortStartupConnect;
|
|
224
260
|
private publishApplicationAudioTrack;
|
|
225
261
|
private sendHello;
|
|
226
262
|
private sendTrackedCommand;
|
|
263
|
+
private publishCommandAttempt;
|
|
264
|
+
private publishCommandAttemptNow;
|
|
227
265
|
private publishCommand;
|
|
266
|
+
private recordDiagnostic;
|
|
267
|
+
private reliableDataChannelBufferedBytes;
|
|
268
|
+
private flushDiagnostics;
|
|
269
|
+
private postDiagnostics;
|
|
228
270
|
private waitForRemoteAudioTrack;
|
|
229
271
|
private waitForAgentReady;
|
|
230
272
|
private observeReadiness;
|
|
231
273
|
private observeCommandResult;
|
|
232
274
|
private rejectPendingCommands;
|
|
275
|
+
private recordCommandResult;
|
|
233
276
|
private fetchReplay;
|
|
234
277
|
}
|
|
235
278
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|