@signalwire/js 4.0.0-beta.1 → 4.0.0-beta.11
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/dist/base-CQPEW1lJ.d.mts +31 -0
- package/dist/base-CQPEW1lJ.d.mts.map +1 -0
- package/dist/base-Cif20s3C.d.cts +31 -0
- package/dist/base-Cif20s3C.d.cts.map +1 -0
- package/dist/browser.mjs +5865 -1054
- package/dist/browser.mjs.map +1 -1
- package/dist/browser.umd.js +5876 -1053
- package/dist/browser.umd.js.map +1 -1
- package/dist/index.cjs +5554 -839
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2027 -316
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +2026 -315
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +5534 -831
- package/dist/index.mjs.map +1 -1
- package/dist/operators/index.cjs +1 -1
- package/dist/operators/index.d.cts +1 -1
- package/dist/operators/index.d.mts +1 -1
- package/dist/operators/index.mjs +1 -1
- package/dist/{operators-BHQMSEzq.mjs → operators-B1xH6k06.mjs} +122 -15
- package/dist/operators-B1xH6k06.mjs.map +1 -0
- package/dist/{operators-DT4UB24-.cjs → operators-BT3jl--r.cjs} +181 -14
- package/dist/operators-BT3jl--r.cjs.map +1 -0
- package/package.json +1 -1
- package/dist/base-A5AZTrAd.d.cts +0 -23
- package/dist/base-A5AZTrAd.d.cts.map +0 -1
- package/dist/base-aVtoG8Wk.d.mts +0 -23
- package/dist/base-aVtoG8Wk.d.mts.map +0 -1
- package/dist/operators-BHQMSEzq.mjs.map +0 -1
- package/dist/operators-DT4UB24-.cjs.map +0 -1
package/dist/operators/index.cjs
CHANGED
package/dist/operators/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as filterNull, n as filterAs, r as ifIsMap, t as throwOnRPCError } from "../operators-
|
|
1
|
+
import { a as filterNull, n as filterAs, r as ifIsMap, t as throwOnRPCError } from "../operators-B1xH6k06.mjs";
|
|
2
2
|
|
|
3
3
|
export { filterAs, filterNull, ifIsMap, throwOnRPCError };
|
|
@@ -119,21 +119,23 @@ var DependencyError = class extends Error {
|
|
|
119
119
|
}
|
|
120
120
|
};
|
|
121
121
|
var CallCreateError = class extends Error {
|
|
122
|
-
constructor(message, error = null, options) {
|
|
122
|
+
constructor(message, error = null, direction = "outbound", options) {
|
|
123
123
|
super(message, {
|
|
124
124
|
...options,
|
|
125
125
|
cause: options?.cause ?? (error instanceof Error ? error : void 0)
|
|
126
126
|
});
|
|
127
127
|
this.message = message;
|
|
128
128
|
this.error = error;
|
|
129
|
+
this.direction = direction;
|
|
129
130
|
this.name = "CallCreateError";
|
|
130
131
|
}
|
|
131
132
|
};
|
|
132
133
|
var JSONRPCError = class extends Error {
|
|
133
|
-
constructor(code, message, data, options) {
|
|
134
|
+
constructor(code, message, data, options, requestId) {
|
|
134
135
|
super(message, options);
|
|
135
136
|
this.code = code;
|
|
136
137
|
this.data = data;
|
|
138
|
+
this.requestId = requestId;
|
|
137
139
|
this.name = "JSONRPCError";
|
|
138
140
|
}
|
|
139
141
|
};
|
|
@@ -161,6 +163,16 @@ var VertoInviteHandlerError = class extends Error {
|
|
|
161
163
|
this.name = "VertoInviteHandlerError";
|
|
162
164
|
}
|
|
163
165
|
};
|
|
166
|
+
var VertoAttachHandlerError = class extends Error {
|
|
167
|
+
constructor(error = null, options) {
|
|
168
|
+
super("Error handling Verto attach", {
|
|
169
|
+
...options,
|
|
170
|
+
cause: options?.cause ?? (error instanceof Error ? error : void 0)
|
|
171
|
+
});
|
|
172
|
+
this.error = error;
|
|
173
|
+
this.name = "VertoAttachHandlerError";
|
|
174
|
+
}
|
|
175
|
+
};
|
|
164
176
|
var ValidationError = class extends Error {
|
|
165
177
|
constructor(message, options) {
|
|
166
178
|
super(message, options);
|
|
@@ -198,6 +210,64 @@ var MediaTrackError = class extends Error {
|
|
|
198
210
|
this.name = "MediaTrackError";
|
|
199
211
|
}
|
|
200
212
|
};
|
|
213
|
+
var DPoPInitError = class extends Error {
|
|
214
|
+
constructor(originalError, message = "Failed to initialize DPoP key pair") {
|
|
215
|
+
super(message, { cause: originalError instanceof Error ? originalError : void 0 });
|
|
216
|
+
this.originalError = originalError;
|
|
217
|
+
this.name = "DPoPInitError";
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* Error thrown when a recovery attempt fails.
|
|
222
|
+
*
|
|
223
|
+
* Carries the recovery action and attempt number for diagnostic purposes.
|
|
224
|
+
*/
|
|
225
|
+
var RecoveryError = class extends Error {
|
|
226
|
+
constructor(action, attempt, originalError) {
|
|
227
|
+
super(`Recovery failed: ${action} (attempt ${attempt})`, { cause: originalError instanceof Error ? originalError : void 0 });
|
|
228
|
+
this.action = action;
|
|
229
|
+
this.attempt = attempt;
|
|
230
|
+
this.originalError = originalError;
|
|
231
|
+
this.name = "RecoveryError";
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
/**
|
|
235
|
+
* Error thrown when getUserMedia fails with OverconstrainedError
|
|
236
|
+
* and all fallback levels have been exhausted.
|
|
237
|
+
*/
|
|
238
|
+
var OverconstrainedFallbackError = class extends Error {
|
|
239
|
+
constructor(deviceKind, originalError) {
|
|
240
|
+
super(`All constraint fallback levels exhausted for ${deviceKind}`, { cause: originalError instanceof Error ? originalError : void 0 });
|
|
241
|
+
this.deviceKind = deviceKind;
|
|
242
|
+
this.originalError = originalError;
|
|
243
|
+
this.name = "OverconstrainedFallbackError";
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
/**
|
|
247
|
+
* Error thrown when the preflight connectivity test fails.
|
|
248
|
+
*/
|
|
249
|
+
var PreflightError = class extends Error {
|
|
250
|
+
constructor(phase, originalError) {
|
|
251
|
+
super(`Preflight test failed during ${phase}`, { cause: originalError instanceof Error ? originalError : void 0 });
|
|
252
|
+
this.phase = phase;
|
|
253
|
+
this.originalError = originalError;
|
|
254
|
+
this.name = "PreflightError";
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
var DeviceTokenError = class extends Error {
|
|
258
|
+
constructor(message, originalError) {
|
|
259
|
+
super(message, { cause: originalError instanceof Error ? originalError : void 0 });
|
|
260
|
+
this.originalError = originalError;
|
|
261
|
+
this.name = "DeviceTokenError";
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
var TokenRefreshError = class extends Error {
|
|
265
|
+
constructor(message, originalError) {
|
|
266
|
+
super(message, { cause: originalError instanceof Error ? originalError : void 0 });
|
|
267
|
+
this.originalError = originalError;
|
|
268
|
+
this.name = "TokenRefreshError";
|
|
269
|
+
}
|
|
270
|
+
};
|
|
201
271
|
|
|
202
272
|
//#endregion
|
|
203
273
|
//#region src/utils/logger.ts
|
|
@@ -207,33 +277,70 @@ const originalFactory = defaultLogger.methodFactory;
|
|
|
207
277
|
defaultLogger.methodFactory = (methodName, logLevel, loggerName) => {
|
|
208
278
|
const rawMethod = originalFactory(methodName, logLevel, loggerName);
|
|
209
279
|
return function(...args) {
|
|
210
|
-
|
|
211
|
-
|
|
280
|
+
const prefixed = [
|
|
281
|
+
datetime(),
|
|
282
|
+
"-",
|
|
283
|
+
...args
|
|
284
|
+
];
|
|
285
|
+
rawMethod.apply(void 0, prefixed);
|
|
212
286
|
};
|
|
213
287
|
};
|
|
214
|
-
const defaultLoggerLevel = defaultLogger.levels.
|
|
288
|
+
const defaultLoggerLevel = defaultLogger.levels.WARN;
|
|
215
289
|
defaultLogger.setLevel(defaultLoggerLevel);
|
|
216
|
-
let userLogger;
|
|
290
|
+
let userLogger = null;
|
|
291
|
+
/** Replace the built-in logger with a custom implementation. Pass `null` to restore defaults. */
|
|
292
|
+
const setLogger = (logger$1) => {
|
|
293
|
+
userLogger = logger$1;
|
|
294
|
+
};
|
|
217
295
|
let debugOptions = {};
|
|
296
|
+
/** Configure debug options (e.g., `{ logWsTraffic: true }`). */
|
|
297
|
+
const setDebugOptions = (options) => {
|
|
298
|
+
if (options == null) {
|
|
299
|
+
debugOptions = {};
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
debugOptions = {
|
|
303
|
+
...debugOptions,
|
|
304
|
+
...options
|
|
305
|
+
};
|
|
306
|
+
};
|
|
307
|
+
/**
|
|
308
|
+
* Set the log level for the built-in logger.
|
|
309
|
+
* Has no effect when a custom logger is set via `setLogger()`.
|
|
310
|
+
*/
|
|
311
|
+
const setLogLevel = (level) => {
|
|
312
|
+
defaultLogger.setLevel(level);
|
|
313
|
+
};
|
|
218
314
|
const getLoggerInstance = () => {
|
|
219
315
|
return userLogger ?? defaultLogger;
|
|
220
316
|
};
|
|
221
317
|
const shouldStringify = (payload) => {
|
|
222
|
-
if ("method" in payload
|
|
318
|
+
if (payload != null && typeof payload === "object" && "method" in payload) return payload.method !== "signalwire.ping";
|
|
223
319
|
return true;
|
|
224
320
|
};
|
|
225
|
-
const wsTraffic = (
|
|
226
|
-
const
|
|
227
|
-
const { logWsTraffic } = debugOptions ?? {};
|
|
321
|
+
const wsTraffic = (options) => {
|
|
322
|
+
const { logWsTraffic } = debugOptions;
|
|
228
323
|
if (!logWsTraffic) return;
|
|
324
|
+
const loggerInstance = getLoggerInstance();
|
|
325
|
+
let payload;
|
|
326
|
+
if ("raw" in options) try {
|
|
327
|
+
payload = JSON.parse(options.raw);
|
|
328
|
+
} catch {
|
|
329
|
+
loggerInstance.debug(`[WebSocket] ${options.type.toUpperCase()}: non-JSON message`);
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
else payload = options.payload;
|
|
229
333
|
const msg = shouldStringify(payload) ? JSON.stringify(payload, null, 2) : payload;
|
|
230
|
-
|
|
334
|
+
loggerInstance.debug(`${options.type.toUpperCase()}: \n`, msg, "\n");
|
|
231
335
|
};
|
|
232
336
|
const getLogger = () => {
|
|
233
337
|
const logger$1 = getLoggerInstance();
|
|
234
|
-
return new Proxy(logger$1, { get(
|
|
338
|
+
return new Proxy(logger$1, { get(_target, prop, _receiver) {
|
|
235
339
|
if (prop === "wsTraffic") return wsTraffic;
|
|
236
|
-
|
|
340
|
+
const instance = getLoggerInstance();
|
|
341
|
+
const value = Reflect.get(instance, prop);
|
|
342
|
+
if (typeof value === "function") return value.bind(instance);
|
|
343
|
+
return value;
|
|
237
344
|
} });
|
|
238
345
|
};
|
|
239
346
|
|
|
@@ -367,5 +474,5 @@ function throwOnRPCError() {
|
|
|
367
474
|
}
|
|
368
475
|
|
|
369
476
|
//#endregion
|
|
370
|
-
export {
|
|
371
|
-
//# sourceMappingURL=operators-
|
|
477
|
+
export { StorageNotAvailableError as A, VertoPongError as B, OverconstrainedFallbackError as C, RequestError as D, RecoveryError as E, UnexpectedError as F, WebSocketTimeoutError as H, UnimplementedError as I, ValidationError as L, StorageWriteError as M, TokenRefreshError as N, RequestTimeoutError as O, TransportConnectionError as P, VertoAttachHandlerError as R, MessageParseError as S, RPCTimeoutError as T, WebSocketConnectionError as V, DeviceTokenError as _, filterNull as a, JSONRPCError as b, setLogLevel as c, CallCreateError as d, CollectionFetchError as f, DeserializationError as g, DependencyError as h, getValueFrom as i, StorageReadError as j, SerializationError as k, setLogger as l, DPoPInitError as m, filterAs as n, getLogger as o, ConversationError as p, ifIsMap as r, setDebugOptions as s, throwOnRPCError as t, AuthStateHandlerError as u, InvalidCredentialsError as v, PreflightError as w, MediaTrackError as x, InvalidParams as y, VertoInviteHandlerError as z };
|
|
478
|
+
//# sourceMappingURL=operators-B1xH6k06.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operators-B1xH6k06.mjs","names":["at?: string","requestId: string","timeoutMs: number","error: unknown","storageType: string","key: string","originalError: Error","description: string","message: string","direction: 'inbound' | 'outbound'","code: number | string","data?: unknown","requestId?: string","originalError: unknown","operation: string","kind: string","action: string","attempt: number","originalError?: unknown","deviceKind: string","phase: string","userLogger: SDKLogger | null","logger","debugOptions: DebugOptions","wsTraffic: InternalSDKLogger['wsTraffic']","payload: unknown","value: unknown","filter","map"],"sources":["../src/core/errors.ts","../src/utils/logger.ts","../src/operators/filterNull.ts","../src/utils/getValueFrom.ts","../src/operators/filterEventAs.ts","../src/operators/throwOnRPCError.ts"],"sourcesContent":["export class UnexpectedError extends Error {\n constructor(\n public at?: string,\n options?: ErrorOptions\n ) {\n super(`Unexpected Error${at ? ` at ${at}` : ''}`, options);\n this.name = 'UnexpectedError';\n }\n}\n\nexport class UnimplementedError extends Error {\n constructor(\n public reason = 'Not Implemented',\n options?: ErrorOptions\n ) {\n super(reason, options);\n this.name = 'UnimplementedError';\n }\n}\n\nexport class NotConnectedError extends Error {\n constructor(\n public reason = 'Not Connected',\n options?: ErrorOptions\n ) {\n super(reason, options);\n this.name = 'NotConnectedError';\n }\n}\n\nexport class InvalidCredentialsError extends Error {\n constructor(\n public reason = 'Invalid Credentials',\n options?: ErrorOptions\n ) {\n super(reason, options);\n this.name = 'InvalidCredentialsError';\n }\n}\n\nexport class WebSocketConnectionError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'WebSocketConnectionError';\n }\n}\n\nexport class TransportConnectionError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'TransportConnectionError';\n }\n}\n\nexport class WebSocketTimeoutError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'WebSocketTimeoutError';\n }\n}\n\nexport class RequestTimeoutError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'RequestTimeoutError';\n }\n}\n\nexport class RequestError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'RequestError';\n }\n}\n\nexport class InvalidListenerError extends Error {\n constructor(options?: ErrorOptions) {\n super('listener is not a function', options);\n this.name = 'InvalidListenerError';\n }\n}\n\nexport class RPCTimeoutError extends Error {\n constructor(\n public requestId: string,\n public timeoutMs: number,\n options?: ErrorOptions\n ) {\n super(`RPC request ${requestId} timed out after ${timeoutMs}ms`, options);\n this.name = 'RPCTimeoutError';\n }\n}\n\nexport class AuthStateHandlerError extends Error {\n constructor(\n public error: unknown = null,\n options?: ErrorOptions\n ) {\n super('Error handling authorization state update', {\n ...options,\n cause: options?.cause ?? (error instanceof Error ? error : undefined)\n });\n this.name = 'AuthStateHandlerError';\n }\n}\n\nexport class InvalidStateTransitionError extends Error {\n constructor(\n public currentState: string,\n public targetState: string,\n options?: ErrorOptions\n ) {\n super(\n `Invalid transition: cannot transition from \"${currentState}\" to \"${targetState}\"`,\n options\n );\n this.name = 'InvalidStateTransitionError';\n }\n}\n\nexport class InvalidOptionError extends Error {\n constructor(\n public value: string,\n public availableOptions: string[],\n options?: ErrorOptions\n ) {\n super(\n `Invalid option: \"${value}\" must be one of the available options: ${availableOptions.join(', ')}`,\n options\n );\n this.name = 'InvalidOptionError';\n }\n}\n\nexport class StorageNotAvailableError extends Error {\n constructor(\n public storageType: string = 'localStorage',\n options?: ErrorOptions\n ) {\n super(`${storageType} is not available in this environment`, options);\n this.name = 'StorageNotAvailableError';\n }\n}\n\nexport class SerializationError extends Error {\n constructor(\n public key: string,\n public originalError: Error\n ) {\n super(`Failed to serialize value for key \"${key}\": ${originalError.message}`, {\n cause: originalError\n });\n this.name = 'SerializationError';\n }\n}\n\nexport class DeserializationError extends Error {\n constructor(\n public key: string,\n public originalError: Error\n ) {\n super(`Failed to deserialize value for key \"${key}\": ${originalError.message}`, {\n cause: originalError\n });\n this.name = 'DeserializationError';\n }\n}\n\nexport class StorageWriteError extends Error {\n constructor(\n public key: string,\n public originalError: Error\n ) {\n super(`Failed to write to storage for key \"${key}\": ${originalError.message}`, {\n cause: originalError\n });\n this.name = 'StorageWriteError';\n }\n}\n\nexport class StorageReadError extends Error {\n constructor(\n public key: string,\n public originalError: Error\n ) {\n super(`Failed to read from storage \"${key}\": ${originalError.message}`, {\n cause: originalError\n });\n this.name = 'StorageReadError';\n }\n}\n\nexport class InvalidStorageValueError extends Error {\n constructor(\n public key: string,\n public valueType: string,\n options?: ErrorOptions\n ) {\n super(\n `Cannot serialize value of type \"${valueType}\" for key \"${key}\": This type cannot be serialized to JSON`,\n options\n );\n this.name = 'InvalidStorageValueError';\n }\n}\n\nexport class DependencyError extends Error {\n constructor(\n public description: string,\n options?: ErrorOptions\n ) {\n super(`Dependency ${description} is not set or available.`, options);\n this.name = 'DependencyError';\n }\n}\n\nexport class DeviceNotFoundError extends Error {\n constructor(\n public message: string,\n options?: ErrorOptions\n ) {\n super(message, options);\n this.name = 'DeviceNotFoundError';\n }\n}\n\n// =============================================================================\n// CALL ERROR TYPES\n// =============================================================================\n\n/**\n * Semantic category of a call-lifecycle error.\n *\n * - `'media'` – RTCPeerConnection / media device failure\n * - `'signaling'` – Verto / JSON-RPC protocol error\n * - `'timeout'` – Call setup timed out waiting for a response\n * - `'rejected'` – Remote side rejected the call\n * - `'network'` – Transport lost during an active call\n * - `'internal'` – Unexpected / unknown error\n */\nexport type CallErrorKind = 'media' | 'signaling' | 'timeout' | 'rejected' | 'network' | 'internal';\n\n/**\n * Structured error emitted on `call.errors$`.\n *\n * Provides actionable metadata so consumers can react without\n * resorting to `instanceof` checks on raw `Error` objects.\n */\nexport interface CallError {\n /** Semantic category of the error. */\n readonly kind: CallErrorKind;\n /**\n * Whether the error terminates the call.\n * When `true`, the call will automatically transition to `'failed'`\n * and be destroyed — no further action is needed from the consumer.\n */\n readonly fatal: boolean;\n /** The underlying error. */\n readonly error: Error;\n /** ID of the call that produced this error. */\n readonly callId: string;\n}\n\nexport class CallCreateError extends Error {\n constructor(\n public message: string,\n public error: unknown = null,\n public direction: 'inbound' | 'outbound' = 'outbound',\n options?: ErrorOptions\n ) {\n super(message, {\n ...options,\n cause: options?.cause ?? (error instanceof Error ? error : undefined)\n });\n this.name = 'CallCreateError';\n }\n}\n\nexport class JSONRPCError extends Error {\n constructor(\n public code: number | string,\n message: string,\n public data?: unknown,\n options?: ErrorOptions,\n public requestId?: string\n ) {\n super(message, options);\n this.name = 'JSONRPCError';\n }\n}\n\nexport class InvalidParams extends Error {\n constructor(\n public message: string,\n options?: ErrorOptions\n ) {\n super(message, options);\n this.name = 'InvalidParams';\n }\n}\n\nexport class ConversationError extends Error {\n constructor(\n public message: string,\n options?: ErrorOptions\n ) {\n super(message, options);\n this.name = 'ConversationError';\n }\n}\n\nexport class VertoInviteHandlerError extends Error {\n constructor(\n public error: unknown = null,\n options?: ErrorOptions\n ) {\n super('Error handling Verto invite', {\n ...options,\n cause: options?.cause ?? (error instanceof Error ? error : undefined)\n });\n this.name = 'VertoInviteHandlerError';\n }\n}\n\nexport class VertoAttachHandlerError extends Error {\n constructor(\n public error: unknown = null,\n options?: ErrorOptions\n ) {\n super('Error handling Verto attach', {\n ...options,\n cause: options?.cause ?? (error instanceof Error ? error : undefined)\n });\n this.name = 'VertoAttachHandlerError';\n }\n}\n\nexport class HttpRequestError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'HttpRequestError';\n }\n}\n\nexport class ValidationError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'ValidationError';\n }\n}\n\nexport class VertoPongError extends Error {\n constructor(public originalError: unknown) {\n super('Failed to send Verto pong - call may disconnect', {\n cause: originalError instanceof Error ? originalError : undefined\n });\n this.name = 'VertoPongError';\n }\n}\n\nexport class MessageParseError extends Error {\n constructor(public originalError: unknown) {\n super('Failed to parse incoming WebSocket message', {\n cause: originalError instanceof Error ? originalError : undefined\n });\n this.name = 'MessageParseError';\n }\n}\n\nexport class CollectionFetchError extends Error {\n constructor(\n public operation: string,\n public originalError: unknown\n ) {\n super(`Collection fetch failed during ${operation}`, {\n cause: originalError instanceof Error ? originalError : undefined\n });\n this.name = 'CollectionFetchError';\n }\n}\n\nexport class MediaTrackError extends Error {\n constructor(\n public operation: string,\n public kind: string,\n public originalError: unknown\n ) {\n super(`Media track ${operation} failed for ${kind}`, {\n cause: originalError instanceof Error ? originalError : undefined\n });\n this.name = 'MediaTrackError';\n }\n}\n\n// =============================================================================\n// DPOP / CLIENT BOUND SAT ERROR TYPES\n// =============================================================================\n\nexport class DPoPInitError extends Error {\n constructor(\n public originalError: unknown,\n message = 'Failed to initialize DPoP key pair'\n ) {\n super(message, {\n cause: originalError instanceof Error ? originalError : undefined\n });\n this.name = 'DPoPInitError';\n }\n}\n\n// =============================================================================\n// RESILIENCE ERROR TYPES\n// =============================================================================\n\n/**\n * Error thrown when a recovery attempt fails.\n *\n * Carries the recovery action and attempt number for diagnostic purposes.\n */\nexport class RecoveryError extends Error {\n constructor(\n public action: string,\n public attempt: number,\n public originalError?: unknown\n ) {\n super(`Recovery failed: ${action} (attempt ${attempt})`, {\n cause: originalError instanceof Error ? originalError : undefined\n });\n this.name = 'RecoveryError';\n }\n}\n\n/**\n * Error thrown when getUserMedia fails with OverconstrainedError\n * and all fallback levels have been exhausted.\n */\nexport class OverconstrainedFallbackError extends Error {\n constructor(\n public deviceKind: string,\n public originalError?: unknown\n ) {\n super(`All constraint fallback levels exhausted for ${deviceKind}`, {\n cause: originalError instanceof Error ? originalError : undefined\n });\n this.name = 'OverconstrainedFallbackError';\n }\n}\n\n/**\n * Error thrown when the preflight connectivity test fails.\n */\nexport class PreflightError extends Error {\n constructor(\n public phase: string,\n public originalError?: unknown\n ) {\n super(`Preflight test failed during ${phase}`, {\n cause: originalError instanceof Error ? originalError : undefined\n });\n this.name = 'PreflightError';\n }\n}\n\n// =============================================================================\n// DPOP / CLIENT BOUND SAT ERROR TYPES\n// =============================================================================\n\nexport class DeviceTokenError extends Error {\n constructor(\n message: string,\n public originalError?: unknown\n ) {\n super(message, {\n cause: originalError instanceof Error ? originalError : undefined\n });\n this.name = 'DeviceTokenError';\n }\n}\n\nexport class TokenRefreshError extends Error {\n constructor(\n message: string,\n public originalError?: unknown\n ) {\n super(message, {\n cause: originalError instanceof Error ? originalError : undefined\n });\n this.name = 'TokenRefreshError';\n }\n}\n","import log from 'loglevel';\n\n// =============================================================================\n// Public Interfaces\n// =============================================================================\n\n/** Log level names supported by the SDK. */\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent';\n\n/**\n * Logger interface that consumers can implement to replace the built-in logger.\n * All methods accept variadic arguments matching the browser console API.\n */\nexport interface SDKLogger {\n error(...args: unknown[]): void;\n warn(...args: unknown[]): void;\n info(...args: unknown[]): void;\n debug(...args: unknown[]): void;\n trace(...args: unknown[]): void;\n}\n\n/** Options for WebSocket traffic logging. */\nexport interface WsTrafficOptions {\n type: 'send' | 'recv' | 'http';\n /** Parsed object or raw string — will be JSON.stringify'd for display if an object. */\n payload: unknown;\n}\n\n/**\n * Options for WebSocket traffic logging using raw strings.\n * The string is only parsed when logging is enabled, avoiding\n * unnecessary JSON.parse on every message.\n */\nexport interface WsTrafficRawOptions {\n type: 'send' | 'recv';\n raw: string;\n}\n\n/** Debug options that control verbose SDK logging. */\nexport interface DebugOptions {\n /** Log all WebSocket send/recv traffic to the console. */\n logWsTraffic?: boolean;\n}\n\n/** Extended logger with SDK-internal helpers (wsTraffic). */\nexport interface InternalSDKLogger extends SDKLogger {\n wsTraffic: (options: WsTrafficOptions | WsTrafficRawOptions) => void;\n}\n\n// =============================================================================\n// Default Logger (loglevel)\n// =============================================================================\n\nconst datetime = () => new Date().toISOString();\nconst defaultLogger = log.getLogger('signalwire');\n\nconst originalFactory = defaultLogger.methodFactory;\ndefaultLogger.methodFactory = (methodName, logLevel, loggerName) => {\n const rawMethod = originalFactory(methodName, logLevel, loggerName);\n\n return function (...args: unknown[]) {\n const prefixed = [datetime(), '-', ...args];\n // eslint-disable-next-line prefer-spread\n rawMethod.apply(undefined, prefixed);\n };\n};\n\n// Default to WARN in production; consumers opt in to verbose logging\nconst defaultLoggerLevel = defaultLogger.levels.WARN;\ndefaultLogger.setLevel(defaultLoggerLevel);\n\n// =============================================================================\n// Logger State\n// =============================================================================\n\nlet userLogger: SDKLogger | null = null;\n\n/** Replace the built-in logger with a custom implementation. Pass `null` to restore defaults. */\nconst setLogger = (logger: SDKLogger | null): void => {\n userLogger = logger;\n};\n\nlet debugOptions: DebugOptions = {};\n\n/** Configure debug options (e.g., `{ logWsTraffic: true }`). */\nconst setDebugOptions = (options: DebugOptions | null): void => {\n if (options == null) {\n debugOptions = {};\n return;\n }\n debugOptions = { ...debugOptions, ...options };\n};\n\n/**\n * Set the log level for the built-in logger.\n * Has no effect when a custom logger is set via `setLogger()`.\n */\nconst setLogLevel = (level: LogLevel): void => {\n defaultLogger.setLevel(level);\n};\n\n// =============================================================================\n// Logger Instance\n// =============================================================================\n\nconst getLoggerInstance = (): SDKLogger => {\n // loglevel's Logger matches SDKLogger (error, warn, info, debug, trace)\n return userLogger ?? (defaultLogger as SDKLogger);\n};\n\nconst shouldStringify = (payload: unknown): boolean => {\n if (payload != null && typeof payload === 'object' && 'method' in payload) {\n return (payload as Record<string, unknown>).method !== 'signalwire.ping';\n }\n return true;\n};\n\nconst wsTraffic: InternalSDKLogger['wsTraffic'] = (options) => {\n const { logWsTraffic } = debugOptions;\n\n if (!logWsTraffic) {\n return;\n }\n\n const loggerInstance = getLoggerInstance();\n\n // Support raw string payloads — parse only when logging is enabled\n let payload: unknown;\n if ('raw' in options) {\n try {\n payload = JSON.parse(options.raw);\n } catch {\n loggerInstance.debug(`[WebSocket] ${options.type.toUpperCase()}: non-JSON message`);\n return;\n }\n } else {\n payload = options.payload;\n }\n\n const msg = shouldStringify(payload) ? JSON.stringify(payload, null, 2) : payload;\n loggerInstance.debug(`${options.type.toUpperCase()}: \\n`, msg, '\\n');\n};\n\nconst getLogger = (): InternalSDKLogger => {\n const logger = getLoggerInstance();\n\n return new Proxy(logger, {\n get(_target, prop: string | symbol, _receiver) {\n if (prop === 'wsTraffic') {\n return wsTraffic;\n }\n // Always resolve from the current logger instance so that\n // setLogger() takes effect for all existing references.\n const instance = getLoggerInstance();\n const value: unknown = Reflect.get(instance, prop);\n if (typeof value === 'function') {\n return (value as (...args: unknown[]) => unknown).bind(instance);\n }\n return value;\n }\n }) as InternalSDKLogger;\n};\n\nexport { setLogger, getLogger, setDebugOptions, setLogLevel };\n","import { filter } from 'rxjs';\n\nimport type { OperatorFunction } from 'rxjs';\n\n/**\n * RxJS operator that filters out `null` and `undefined` values with type narrowing.\n *\n * @example\n * ```ts\n * source$.pipe(filterNull()).subscribe(value => {\n * // value is guaranteed non-null\n * });\n * ```\n */\nexport function filterNull<T>(): OperatorFunction<T | null | undefined, T> {\n return filter((value): value is T => value != null);\n}\n","export const getValueFrom = <T = unknown>(\n obj: unknown,\n path: string,\n defaultValue?: T\n): T | undefined => {\n const keys = path.split('.');\n let result = obj;\n for (const key of keys) {\n if (result && typeof result === 'object' && key in result) {\n result = (result as Record<string, unknown>)[key];\n } else {\n return defaultValue;\n }\n }\n return (result === undefined ? defaultValue : result) as T;\n};\n","import { pipe } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { getValueFrom } from '../utils/getValueFrom';\n\nimport type { OperatorFunction } from 'rxjs';\n\n/**\n * Type helper to extract nested property types using dot notation.\n * Supports up to 4 levels of nesting.\n *\n * @example\n * type Example = { a: { b: { c: string } } }\n * type Result = PathValue<Example, 'a.b.c'> // string\n */\ntype PathValue<T, P extends string> = P extends `${infer Key}.${infer Rest}`\n ? Key extends keyof T\n ? PathValue<T[Key], Rest>\n : never\n : P extends keyof T\n ? T[P]\n : never;\n\n// Usage:\n// source$.pipe(\n// isEvent(\n// (event) => event.type === 'call.started',\n// (event) => ({ id: event.id, timestamp: event.timestamp })\n// )\n// );\n\n/**\n * RxJS operator that filters events based on a predicate and maps matching events.\n *\n * This operator combines filter and map operations:\n * 1. Only events that match the predicate are emitted\n * 2. Matching events are transformed using the map function\n *\n * @template TInput - The type of input events\n * @template TOutput - The type of output after mapping\n * @param predicate - Function to test each event. Returns true to include the event.\n * @param mapFn - Function to transform matching events\n * @returns An operator function that filters and maps events\n *\n * @example\n * ```typescript\n * interface CallEvent {\n * type: 'call.started' | 'call.ended';\n * id: string;\n * timestamp: number;\n * }\n *\n * events$.pipe(\n * isEvent(\n * (event: CallEvent) => event.type === 'call.started',\n * (event: CallEvent) => ({ id: event.id, timestamp: event.timestamp })\n * )\n * ).subscribe(startEvent => {\n * console.log('Call started:', startEvent);\n * });\n * ```\n */\nexport function ifIsMap<TInput, TOutput>(\n predicate: (event: unknown) => event is TInput,\n mapFn: (event: TInput) => TOutput\n): OperatorFunction<unknown, TOutput> {\n return pipe(filter(predicate), map(mapFn));\n}\n\n/**\n * Generic RxJS operator that filters events using a type guard and extracts a property.\n *\n * This is the generic version that works with any type, not just JSONRPCRequest.\n * Use this when you need to filter and extract properties from already-narrowed types.\n *\n * **Type inference**: The output type is automatically inferred from the input type and path!\n *\n * @template TInput - The type to narrow to (via type guard)\n * @template TPath - The dot-notation path to extract (inferred from parameter)\n * @param predicate - Type guard function to filter events\n * @param resultPath - Dot-notation path to extract (e.g., 'params', 'params.data')\n * @returns An operator function that filters and extracts\n *\n * @example\n * ```typescript\n * interface EventParams {\n * event_type: string;\n * data: { value: number };\n * }\n *\n * const isAuthEvent = (e: unknown): e is EventParams =>\n * typeof e === 'object' && e !== null && 'event_type' in e;\n *\n * // Type of 'data' is automatically inferred as { value: number }\n * params$.pipe(\n * filterAs(isAuthEvent, 'data')\n * ).subscribe(data => {\n * console.log('Event data:', data.value); // TypeScript knows about .value!\n * });\n *\n * // Deeply nested properties are also inferred\n * params$.pipe(\n * filterAs(isAuthEvent, 'data.value')\n * ).subscribe(value => {\n * console.log(value); // Type is 'number'\n * });\n * ```\n */\nexport function filterAs<TInput, TPath extends string>(\n predicate: (event: unknown) => event is TInput,\n resultPath: TPath\n): OperatorFunction<unknown, PathValue<TInput, TPath>> {\n return pipe(\n ifIsMap(predicate, (event) => {\n const result = getValueFrom<PathValue<TInput, TPath>>(event, resultPath);\n return result;\n }),\n filter((value): value is PathValue<TInput, TPath> => value !== undefined)\n );\n}\n","import { map, type OperatorFunction } from 'rxjs';\n\nimport { JSONRPCError } from '../core/errors';\nimport { getLogger } from '../utils/logger';\n\nimport type { JSONRPCResponse } from '../core/RPCMessages/types/base';\n\nconst logger = getLogger();\n\n/**\n * RxJS operator that throws a {@link JSONRPCError} when the RPC response contains an error.\n * Passes successful responses through unchanged.\n */\nexport function throwOnRPCError<T extends JSONRPCResponse>(): OperatorFunction<T, T> {\n return map((response: T) => {\n if (response.error) {\n logger.error('[throwOnRPCError] RPC error response:', {\n code: response.error.code,\n message: response.error.message,\n data: response.error.data\n });\n\n throw new JSONRPCError(response.error.code, response.error.message, response.error.data);\n }\n logger.debug('[throwOnRPCError] RPC successful response:', response);\n return response;\n });\n}\n"],"mappings":"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"}
|
|
@@ -147,21 +147,23 @@ var DependencyError = class extends Error {
|
|
|
147
147
|
}
|
|
148
148
|
};
|
|
149
149
|
var CallCreateError = class extends Error {
|
|
150
|
-
constructor(message, error = null, options) {
|
|
150
|
+
constructor(message, error = null, direction = "outbound", options) {
|
|
151
151
|
super(message, {
|
|
152
152
|
...options,
|
|
153
153
|
cause: options?.cause ?? (error instanceof Error ? error : void 0)
|
|
154
154
|
});
|
|
155
155
|
this.message = message;
|
|
156
156
|
this.error = error;
|
|
157
|
+
this.direction = direction;
|
|
157
158
|
this.name = "CallCreateError";
|
|
158
159
|
}
|
|
159
160
|
};
|
|
160
161
|
var JSONRPCError = class extends Error {
|
|
161
|
-
constructor(code, message, data, options) {
|
|
162
|
+
constructor(code, message, data, options, requestId) {
|
|
162
163
|
super(message, options);
|
|
163
164
|
this.code = code;
|
|
164
165
|
this.data = data;
|
|
166
|
+
this.requestId = requestId;
|
|
165
167
|
this.name = "JSONRPCError";
|
|
166
168
|
}
|
|
167
169
|
};
|
|
@@ -189,6 +191,16 @@ var VertoInviteHandlerError = class extends Error {
|
|
|
189
191
|
this.name = "VertoInviteHandlerError";
|
|
190
192
|
}
|
|
191
193
|
};
|
|
194
|
+
var VertoAttachHandlerError = class extends Error {
|
|
195
|
+
constructor(error = null, options) {
|
|
196
|
+
super("Error handling Verto attach", {
|
|
197
|
+
...options,
|
|
198
|
+
cause: options?.cause ?? (error instanceof Error ? error : void 0)
|
|
199
|
+
});
|
|
200
|
+
this.error = error;
|
|
201
|
+
this.name = "VertoAttachHandlerError";
|
|
202
|
+
}
|
|
203
|
+
};
|
|
192
204
|
var ValidationError = class extends Error {
|
|
193
205
|
constructor(message, options) {
|
|
194
206
|
super(message, options);
|
|
@@ -226,6 +238,64 @@ var MediaTrackError = class extends Error {
|
|
|
226
238
|
this.name = "MediaTrackError";
|
|
227
239
|
}
|
|
228
240
|
};
|
|
241
|
+
var DPoPInitError = class extends Error {
|
|
242
|
+
constructor(originalError, message = "Failed to initialize DPoP key pair") {
|
|
243
|
+
super(message, { cause: originalError instanceof Error ? originalError : void 0 });
|
|
244
|
+
this.originalError = originalError;
|
|
245
|
+
this.name = "DPoPInitError";
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
/**
|
|
249
|
+
* Error thrown when a recovery attempt fails.
|
|
250
|
+
*
|
|
251
|
+
* Carries the recovery action and attempt number for diagnostic purposes.
|
|
252
|
+
*/
|
|
253
|
+
var RecoveryError = class extends Error {
|
|
254
|
+
constructor(action, attempt, originalError) {
|
|
255
|
+
super(`Recovery failed: ${action} (attempt ${attempt})`, { cause: originalError instanceof Error ? originalError : void 0 });
|
|
256
|
+
this.action = action;
|
|
257
|
+
this.attempt = attempt;
|
|
258
|
+
this.originalError = originalError;
|
|
259
|
+
this.name = "RecoveryError";
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* Error thrown when getUserMedia fails with OverconstrainedError
|
|
264
|
+
* and all fallback levels have been exhausted.
|
|
265
|
+
*/
|
|
266
|
+
var OverconstrainedFallbackError = class extends Error {
|
|
267
|
+
constructor(deviceKind, originalError) {
|
|
268
|
+
super(`All constraint fallback levels exhausted for ${deviceKind}`, { cause: originalError instanceof Error ? originalError : void 0 });
|
|
269
|
+
this.deviceKind = deviceKind;
|
|
270
|
+
this.originalError = originalError;
|
|
271
|
+
this.name = "OverconstrainedFallbackError";
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
/**
|
|
275
|
+
* Error thrown when the preflight connectivity test fails.
|
|
276
|
+
*/
|
|
277
|
+
var PreflightError = class extends Error {
|
|
278
|
+
constructor(phase, originalError) {
|
|
279
|
+
super(`Preflight test failed during ${phase}`, { cause: originalError instanceof Error ? originalError : void 0 });
|
|
280
|
+
this.phase = phase;
|
|
281
|
+
this.originalError = originalError;
|
|
282
|
+
this.name = "PreflightError";
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
var DeviceTokenError = class extends Error {
|
|
286
|
+
constructor(message, originalError) {
|
|
287
|
+
super(message, { cause: originalError instanceof Error ? originalError : void 0 });
|
|
288
|
+
this.originalError = originalError;
|
|
289
|
+
this.name = "DeviceTokenError";
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
var TokenRefreshError = class extends Error {
|
|
293
|
+
constructor(message, originalError) {
|
|
294
|
+
super(message, { cause: originalError instanceof Error ? originalError : void 0 });
|
|
295
|
+
this.originalError = originalError;
|
|
296
|
+
this.name = "TokenRefreshError";
|
|
297
|
+
}
|
|
298
|
+
};
|
|
229
299
|
|
|
230
300
|
//#endregion
|
|
231
301
|
//#region src/utils/logger.ts
|
|
@@ -235,33 +305,70 @@ const originalFactory = defaultLogger.methodFactory;
|
|
|
235
305
|
defaultLogger.methodFactory = (methodName, logLevel, loggerName) => {
|
|
236
306
|
const rawMethod = originalFactory(methodName, logLevel, loggerName);
|
|
237
307
|
return function(...args) {
|
|
238
|
-
|
|
239
|
-
|
|
308
|
+
const prefixed = [
|
|
309
|
+
datetime(),
|
|
310
|
+
"-",
|
|
311
|
+
...args
|
|
312
|
+
];
|
|
313
|
+
rawMethod.apply(void 0, prefixed);
|
|
240
314
|
};
|
|
241
315
|
};
|
|
242
|
-
const defaultLoggerLevel = defaultLogger.levels.
|
|
316
|
+
const defaultLoggerLevel = defaultLogger.levels.WARN;
|
|
243
317
|
defaultLogger.setLevel(defaultLoggerLevel);
|
|
244
|
-
let userLogger;
|
|
318
|
+
let userLogger = null;
|
|
319
|
+
/** Replace the built-in logger with a custom implementation. Pass `null` to restore defaults. */
|
|
320
|
+
const setLogger = (logger$1) => {
|
|
321
|
+
userLogger = logger$1;
|
|
322
|
+
};
|
|
245
323
|
let debugOptions = {};
|
|
324
|
+
/** Configure debug options (e.g., `{ logWsTraffic: true }`). */
|
|
325
|
+
const setDebugOptions = (options) => {
|
|
326
|
+
if (options == null) {
|
|
327
|
+
debugOptions = {};
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
debugOptions = {
|
|
331
|
+
...debugOptions,
|
|
332
|
+
...options
|
|
333
|
+
};
|
|
334
|
+
};
|
|
335
|
+
/**
|
|
336
|
+
* Set the log level for the built-in logger.
|
|
337
|
+
* Has no effect when a custom logger is set via `setLogger()`.
|
|
338
|
+
*/
|
|
339
|
+
const setLogLevel = (level) => {
|
|
340
|
+
defaultLogger.setLevel(level);
|
|
341
|
+
};
|
|
246
342
|
const getLoggerInstance = () => {
|
|
247
343
|
return userLogger ?? defaultLogger;
|
|
248
344
|
};
|
|
249
345
|
const shouldStringify = (payload) => {
|
|
250
|
-
if ("method" in payload
|
|
346
|
+
if (payload != null && typeof payload === "object" && "method" in payload) return payload.method !== "signalwire.ping";
|
|
251
347
|
return true;
|
|
252
348
|
};
|
|
253
|
-
const wsTraffic = (
|
|
254
|
-
const
|
|
255
|
-
const { logWsTraffic } = debugOptions ?? {};
|
|
349
|
+
const wsTraffic = (options) => {
|
|
350
|
+
const { logWsTraffic } = debugOptions;
|
|
256
351
|
if (!logWsTraffic) return;
|
|
352
|
+
const loggerInstance = getLoggerInstance();
|
|
353
|
+
let payload;
|
|
354
|
+
if ("raw" in options) try {
|
|
355
|
+
payload = JSON.parse(options.raw);
|
|
356
|
+
} catch {
|
|
357
|
+
loggerInstance.debug(`[WebSocket] ${options.type.toUpperCase()}: non-JSON message`);
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
else payload = options.payload;
|
|
257
361
|
const msg = shouldStringify(payload) ? JSON.stringify(payload, null, 2) : payload;
|
|
258
|
-
|
|
362
|
+
loggerInstance.debug(`${options.type.toUpperCase()}: \n`, msg, "\n");
|
|
259
363
|
};
|
|
260
364
|
const getLogger = () => {
|
|
261
365
|
const logger$1 = getLoggerInstance();
|
|
262
|
-
return new Proxy(logger$1, { get(
|
|
366
|
+
return new Proxy(logger$1, { get(_target, prop, _receiver) {
|
|
263
367
|
if (prop === "wsTraffic") return wsTraffic;
|
|
264
|
-
|
|
368
|
+
const instance = getLoggerInstance();
|
|
369
|
+
const value = Reflect.get(instance, prop);
|
|
370
|
+
if (typeof value === "function") return value.bind(instance);
|
|
371
|
+
return value;
|
|
265
372
|
} });
|
|
266
373
|
};
|
|
267
374
|
|
|
@@ -419,6 +526,12 @@ Object.defineProperty(exports, 'ConversationError', {
|
|
|
419
526
|
return ConversationError;
|
|
420
527
|
}
|
|
421
528
|
});
|
|
529
|
+
Object.defineProperty(exports, 'DPoPInitError', {
|
|
530
|
+
enumerable: true,
|
|
531
|
+
get: function () {
|
|
532
|
+
return DPoPInitError;
|
|
533
|
+
}
|
|
534
|
+
});
|
|
422
535
|
Object.defineProperty(exports, 'DependencyError', {
|
|
423
536
|
enumerable: true,
|
|
424
537
|
get: function () {
|
|
@@ -431,6 +544,12 @@ Object.defineProperty(exports, 'DeserializationError', {
|
|
|
431
544
|
return DeserializationError;
|
|
432
545
|
}
|
|
433
546
|
});
|
|
547
|
+
Object.defineProperty(exports, 'DeviceTokenError', {
|
|
548
|
+
enumerable: true,
|
|
549
|
+
get: function () {
|
|
550
|
+
return DeviceTokenError;
|
|
551
|
+
}
|
|
552
|
+
});
|
|
434
553
|
Object.defineProperty(exports, 'InvalidCredentialsError', {
|
|
435
554
|
enumerable: true,
|
|
436
555
|
get: function () {
|
|
@@ -461,12 +580,30 @@ Object.defineProperty(exports, 'MessageParseError', {
|
|
|
461
580
|
return MessageParseError;
|
|
462
581
|
}
|
|
463
582
|
});
|
|
583
|
+
Object.defineProperty(exports, 'OverconstrainedFallbackError', {
|
|
584
|
+
enumerable: true,
|
|
585
|
+
get: function () {
|
|
586
|
+
return OverconstrainedFallbackError;
|
|
587
|
+
}
|
|
588
|
+
});
|
|
589
|
+
Object.defineProperty(exports, 'PreflightError', {
|
|
590
|
+
enumerable: true,
|
|
591
|
+
get: function () {
|
|
592
|
+
return PreflightError;
|
|
593
|
+
}
|
|
594
|
+
});
|
|
464
595
|
Object.defineProperty(exports, 'RPCTimeoutError', {
|
|
465
596
|
enumerable: true,
|
|
466
597
|
get: function () {
|
|
467
598
|
return RPCTimeoutError;
|
|
468
599
|
}
|
|
469
600
|
});
|
|
601
|
+
Object.defineProperty(exports, 'RecoveryError', {
|
|
602
|
+
enumerable: true,
|
|
603
|
+
get: function () {
|
|
604
|
+
return RecoveryError;
|
|
605
|
+
}
|
|
606
|
+
});
|
|
470
607
|
Object.defineProperty(exports, 'RequestError', {
|
|
471
608
|
enumerable: true,
|
|
472
609
|
get: function () {
|
|
@@ -503,6 +640,12 @@ Object.defineProperty(exports, 'StorageWriteError', {
|
|
|
503
640
|
return StorageWriteError;
|
|
504
641
|
}
|
|
505
642
|
});
|
|
643
|
+
Object.defineProperty(exports, 'TokenRefreshError', {
|
|
644
|
+
enumerable: true,
|
|
645
|
+
get: function () {
|
|
646
|
+
return TokenRefreshError;
|
|
647
|
+
}
|
|
648
|
+
});
|
|
506
649
|
Object.defineProperty(exports, 'TransportConnectionError', {
|
|
507
650
|
enumerable: true,
|
|
508
651
|
get: function () {
|
|
@@ -527,6 +670,12 @@ Object.defineProperty(exports, 'ValidationError', {
|
|
|
527
670
|
return ValidationError;
|
|
528
671
|
}
|
|
529
672
|
});
|
|
673
|
+
Object.defineProperty(exports, 'VertoAttachHandlerError', {
|
|
674
|
+
enumerable: true,
|
|
675
|
+
get: function () {
|
|
676
|
+
return VertoAttachHandlerError;
|
|
677
|
+
}
|
|
678
|
+
});
|
|
530
679
|
Object.defineProperty(exports, 'VertoInviteHandlerError', {
|
|
531
680
|
enumerable: true,
|
|
532
681
|
get: function () {
|
|
@@ -587,10 +736,28 @@ Object.defineProperty(exports, 'ifIsMap', {
|
|
|
587
736
|
return ifIsMap;
|
|
588
737
|
}
|
|
589
738
|
});
|
|
739
|
+
Object.defineProperty(exports, 'setDebugOptions', {
|
|
740
|
+
enumerable: true,
|
|
741
|
+
get: function () {
|
|
742
|
+
return setDebugOptions;
|
|
743
|
+
}
|
|
744
|
+
});
|
|
745
|
+
Object.defineProperty(exports, 'setLogLevel', {
|
|
746
|
+
enumerable: true,
|
|
747
|
+
get: function () {
|
|
748
|
+
return setLogLevel;
|
|
749
|
+
}
|
|
750
|
+
});
|
|
751
|
+
Object.defineProperty(exports, 'setLogger', {
|
|
752
|
+
enumerable: true,
|
|
753
|
+
get: function () {
|
|
754
|
+
return setLogger;
|
|
755
|
+
}
|
|
756
|
+
});
|
|
590
757
|
Object.defineProperty(exports, 'throwOnRPCError', {
|
|
591
758
|
enumerable: true,
|
|
592
759
|
get: function () {
|
|
593
760
|
return throwOnRPCError;
|
|
594
761
|
}
|
|
595
762
|
});
|
|
596
|
-
//# sourceMappingURL=operators-
|
|
763
|
+
//# sourceMappingURL=operators-BT3jl--r.cjs.map
|