@signalwire/js 4.0.0-dev-20260326210326 → 4.0.0-dev-20260401154549

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,4 +1,4 @@
1
- const require_operators = require('../operators-mm21prWr.cjs');
1
+ const require_operators = require('../operators-DuprVgnV.cjs');
2
2
 
3
3
  exports.filterAs = require_operators.filterAs;
4
4
  exports.filterNull = require_operators.filterNull;
@@ -1,3 +1,3 @@
1
- import { a as filterNull, n as filterAs, r as ifIsMap, t as throwOnRPCError } from "../operators-uT_fb8ba.mjs";
1
+ import { a as filterNull, n as filterAs, r as ifIsMap, t as throwOnRPCError } from "../operators-MaKNoyky.mjs";
2
2
 
3
3
  export { filterAs, filterNull, ifIsMap, throwOnRPCError };
@@ -228,6 +228,27 @@ var MediaTrackError = class extends Error {
228
228
  this.name = "MediaTrackError";
229
229
  }
230
230
  };
231
+ var DPoPInitError = class extends Error {
232
+ constructor(originalError, message = "Failed to initialize DPoP key pair") {
233
+ super(message, { cause: originalError instanceof Error ? originalError : void 0 });
234
+ this.originalError = originalError;
235
+ this.name = "DPoPInitError";
236
+ }
237
+ };
238
+ var DeviceTokenError = class extends Error {
239
+ constructor(message, originalError) {
240
+ super(message, { cause: originalError instanceof Error ? originalError : void 0 });
241
+ this.originalError = originalError;
242
+ this.name = "DeviceTokenError";
243
+ }
244
+ };
245
+ var TokenRefreshError = class extends Error {
246
+ constructor(message, originalError) {
247
+ super(message, { cause: originalError instanceof Error ? originalError : void 0 });
248
+ this.originalError = originalError;
249
+ this.name = "TokenRefreshError";
250
+ }
251
+ };
231
252
 
232
253
  //#endregion
233
254
  //#region src/utils/logger.ts
@@ -421,6 +442,12 @@ Object.defineProperty(exports, 'ConversationError', {
421
442
  return ConversationError;
422
443
  }
423
444
  });
445
+ Object.defineProperty(exports, 'DPoPInitError', {
446
+ enumerable: true,
447
+ get: function () {
448
+ return DPoPInitError;
449
+ }
450
+ });
424
451
  Object.defineProperty(exports, 'DependencyError', {
425
452
  enumerable: true,
426
453
  get: function () {
@@ -433,6 +460,12 @@ Object.defineProperty(exports, 'DeserializationError', {
433
460
  return DeserializationError;
434
461
  }
435
462
  });
463
+ Object.defineProperty(exports, 'DeviceTokenError', {
464
+ enumerable: true,
465
+ get: function () {
466
+ return DeviceTokenError;
467
+ }
468
+ });
436
469
  Object.defineProperty(exports, 'InvalidCredentialsError', {
437
470
  enumerable: true,
438
471
  get: function () {
@@ -505,6 +538,12 @@ Object.defineProperty(exports, 'StorageWriteError', {
505
538
  return StorageWriteError;
506
539
  }
507
540
  });
541
+ Object.defineProperty(exports, 'TokenRefreshError', {
542
+ enumerable: true,
543
+ get: function () {
544
+ return TokenRefreshError;
545
+ }
546
+ });
508
547
  Object.defineProperty(exports, 'TransportConnectionError', {
509
548
  enumerable: true,
510
549
  get: function () {
@@ -595,4 +634,4 @@ Object.defineProperty(exports, 'throwOnRPCError', {
595
634
  return throwOnRPCError;
596
635
  }
597
636
  });
598
- //# sourceMappingURL=operators-mm21prWr.cjs.map
637
+ //# sourceMappingURL=operators-DuprVgnV.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operators-DuprVgnV.cjs","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","originalError?: unknown","log","userLogger: SDKLogger | null","debugOptions: LoggerOptions['debug']","wsTraffic: InternalSDKLogger['wsTraffic']","logger"],"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 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\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\ninterface LogFn {\n <T extends object>(obj: T, msg?: string, ...args: unknown[]): void;\n (obj: unknown, msg?: string, ...args: unknown[]): void;\n (msg: string, ...args: unknown[]): void;\n}\nexport interface SDKLogger {\n fatal: LogFn;\n error: LogFn;\n warn: LogFn;\n info: LogFn;\n debug: LogFn;\n trace: LogFn;\n}\n\nexport interface WsTrafficOptions {\n type: 'send' | 'recv' | 'http';\n payload: unknown;\n}\n\nexport interface LoggerOptions {\n /** @internal */\n devTools?: boolean;\n /** @internal */\n debug?: {\n logWsTraffic?: boolean;\n };\n /** @internal */\n logger?: SDKLogger;\n}\n\nexport interface InternalSDKLogger extends SDKLogger {\n wsTraffic: (options: WsTrafficOptions) => void;\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 args.unshift(datetime(), '-');\n // eslint-disable-next-line prefer-spread\n rawMethod.apply(undefined, args);\n };\n};\n\nconst defaultLoggerLevel = defaultLogger.levels.DEBUG;\ndefaultLogger.setLevel(defaultLoggerLevel);\n\nlet userLogger: SDKLogger | null;\nconst setLogger = (logger: SDKLogger | null): void => {\n userLogger = logger;\n};\n\nlet debugOptions: LoggerOptions['debug'] = {};\nconst setDebugOptions = (options: unknown): void => {\n if (options == null) {\n debugOptions = {};\n return;\n }\n debugOptions = {\n ...debugOptions,\n ...options\n } as LoggerOptions['debug'];\n};\n\nconst getLoggerInstance = (): SDKLogger => {\n return userLogger ?? (defaultLogger as unknown as SDKLogger);\n};\n\nconst shouldStringify = (payload: WsTrafficOptions['payload']) => {\n //@ts-expect-error we don;t cara that payload is unknown\n if ('method' in payload && payload.method === 'signalwire.ping') {\n return false;\n }\n\n return true;\n};\n\nconst wsTraffic: InternalSDKLogger['wsTraffic'] = ({ type, payload }) => {\n const logger = getLoggerInstance();\n const { logWsTraffic } = debugOptions ?? {};\n\n if (!logWsTraffic) {\n return undefined;\n }\n\n const msg = shouldStringify(payload) ? JSON.stringify(payload, null, 2) : payload;\n\n return logger.debug(`${type.toUpperCase()}: \\n`, msg, '\\n');\n};\n\nconst getLogger = (): InternalSDKLogger => {\n const logger = getLoggerInstance();\n\n return new Proxy(logger, {\n get(target, prop: keyof InternalSDKLogger, receiver) {\n if (prop === 'wsTraffic') {\n return wsTraffic;\n }\n\n return Reflect.get(target, prop, receiver);\n }\n }) as InternalSDKLogger;\n};\n\nexport { setLogger, getLogger, setDebugOptions };\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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"}
@@ -200,6 +200,27 @@ var MediaTrackError = class extends Error {
200
200
  this.name = "MediaTrackError";
201
201
  }
202
202
  };
203
+ var DPoPInitError = class extends Error {
204
+ constructor(originalError, message = "Failed to initialize DPoP key pair") {
205
+ super(message, { cause: originalError instanceof Error ? originalError : void 0 });
206
+ this.originalError = originalError;
207
+ this.name = "DPoPInitError";
208
+ }
209
+ };
210
+ var DeviceTokenError = class extends Error {
211
+ constructor(message, originalError) {
212
+ super(message, { cause: originalError instanceof Error ? originalError : void 0 });
213
+ this.originalError = originalError;
214
+ this.name = "DeviceTokenError";
215
+ }
216
+ };
217
+ var TokenRefreshError = class extends Error {
218
+ constructor(message, originalError) {
219
+ super(message, { cause: originalError instanceof Error ? originalError : void 0 });
220
+ this.originalError = originalError;
221
+ this.name = "TokenRefreshError";
222
+ }
223
+ };
203
224
 
204
225
  //#endregion
205
226
  //#region src/utils/logger.ts
@@ -369,5 +390,5 @@ function throwOnRPCError() {
369
390
  }
370
391
 
371
392
  //#endregion
372
- export { VertoPongError as A, StorageReadError as C, UnimplementedError as D, UnexpectedError as E, WebSocketTimeoutError as M, ValidationError as O, StorageNotAvailableError as S, TransportConnectionError as T, MessageParseError as _, filterNull as a, RequestTimeoutError as b, CallCreateError as c, DependencyError as d, DeserializationError as f, MediaTrackError as g, JSONRPCError as h, getValueFrom as i, WebSocketConnectionError as j, VertoInviteHandlerError as k, CollectionFetchError as l, InvalidParams as m, filterAs as n, getLogger as o, InvalidCredentialsError as p, ifIsMap as r, AuthStateHandlerError as s, throwOnRPCError as t, ConversationError as u, RPCTimeoutError as v, StorageWriteError as w, SerializationError as x, RequestError as y };
373
- //# sourceMappingURL=operators-uT_fb8ba.mjs.map
393
+ export { UnimplementedError as A, SerializationError as C, TokenRefreshError as D, StorageWriteError as E, WebSocketTimeoutError as F, VertoInviteHandlerError as M, VertoPongError as N, TransportConnectionError as O, WebSocketConnectionError as P, RequestTimeoutError as S, StorageReadError as T, JSONRPCError as _, filterNull as a, RPCTimeoutError as b, CallCreateError as c, DPoPInitError as d, DependencyError as f, InvalidParams as g, InvalidCredentialsError as h, getValueFrom as i, ValidationError as j, UnexpectedError as k, CollectionFetchError as l, DeviceTokenError as m, filterAs as n, getLogger as o, DeserializationError as p, ifIsMap as r, AuthStateHandlerError as s, throwOnRPCError as t, ConversationError as u, MediaTrackError as v, StorageNotAvailableError as w, RequestError as x, MessageParseError as y };
394
+ //# sourceMappingURL=operators-MaKNoyky.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operators-MaKNoyky.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","originalError?: unknown","userLogger: SDKLogger | null","debugOptions: LoggerOptions['debug']","wsTraffic: InternalSDKLogger['wsTraffic']","logger","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 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\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\ninterface LogFn {\n <T extends object>(obj: T, msg?: string, ...args: unknown[]): void;\n (obj: unknown, msg?: string, ...args: unknown[]): void;\n (msg: string, ...args: unknown[]): void;\n}\nexport interface SDKLogger {\n fatal: LogFn;\n error: LogFn;\n warn: LogFn;\n info: LogFn;\n debug: LogFn;\n trace: LogFn;\n}\n\nexport interface WsTrafficOptions {\n type: 'send' | 'recv' | 'http';\n payload: unknown;\n}\n\nexport interface LoggerOptions {\n /** @internal */\n devTools?: boolean;\n /** @internal */\n debug?: {\n logWsTraffic?: boolean;\n };\n /** @internal */\n logger?: SDKLogger;\n}\n\nexport interface InternalSDKLogger extends SDKLogger {\n wsTraffic: (options: WsTrafficOptions) => void;\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 args.unshift(datetime(), '-');\n // eslint-disable-next-line prefer-spread\n rawMethod.apply(undefined, args);\n };\n};\n\nconst defaultLoggerLevel = defaultLogger.levels.DEBUG;\ndefaultLogger.setLevel(defaultLoggerLevel);\n\nlet userLogger: SDKLogger | null;\nconst setLogger = (logger: SDKLogger | null): void => {\n userLogger = logger;\n};\n\nlet debugOptions: LoggerOptions['debug'] = {};\nconst setDebugOptions = (options: unknown): void => {\n if (options == null) {\n debugOptions = {};\n return;\n }\n debugOptions = {\n ...debugOptions,\n ...options\n } as LoggerOptions['debug'];\n};\n\nconst getLoggerInstance = (): SDKLogger => {\n return userLogger ?? (defaultLogger as unknown as SDKLogger);\n};\n\nconst shouldStringify = (payload: WsTrafficOptions['payload']) => {\n //@ts-expect-error we don;t cara that payload is unknown\n if ('method' in payload && payload.method === 'signalwire.ping') {\n return false;\n }\n\n return true;\n};\n\nconst wsTraffic: InternalSDKLogger['wsTraffic'] = ({ type, payload }) => {\n const logger = getLoggerInstance();\n const { logWsTraffic } = debugOptions ?? {};\n\n if (!logWsTraffic) {\n return undefined;\n }\n\n const msg = shouldStringify(payload) ? JSON.stringify(payload, null, 2) : payload;\n\n return logger.debug(`${type.toUpperCase()}: \\n`, msg, '\\n');\n};\n\nconst getLogger = (): InternalSDKLogger => {\n const logger = getLoggerInstance();\n\n return new Proxy(logger, {\n get(target, prop: keyof InternalSDKLogger, receiver) {\n if (prop === 'wsTraffic') {\n return wsTraffic;\n }\n\n return Reflect.get(target, prop, receiver);\n }\n }) as InternalSDKLogger;\n};\n\nexport { setLogger, getLogger, setDebugOptions };\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signalwire/js",
3
- "version": "4.0.0-dev-20260326210326",
3
+ "version": "4.0.0-dev-20260401154549",
4
4
  "description": "SignalWire Browser SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -1 +0,0 @@
1
- {"version":3,"file":"operators-mm21prWr.cjs","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","log","userLogger: SDKLogger | null","debugOptions: LoggerOptions['debug']","wsTraffic: InternalSDKLogger['wsTraffic']","logger"],"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 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","import log from 'loglevel';\n\ninterface LogFn {\n <T extends object>(obj: T, msg?: string, ...args: unknown[]): void;\n (obj: unknown, msg?: string, ...args: unknown[]): void;\n (msg: string, ...args: unknown[]): void;\n}\nexport interface SDKLogger {\n fatal: LogFn;\n error: LogFn;\n warn: LogFn;\n info: LogFn;\n debug: LogFn;\n trace: LogFn;\n}\n\nexport interface WsTrafficOptions {\n type: 'send' | 'recv' | 'http';\n payload: unknown;\n}\n\nexport interface LoggerOptions {\n /** @internal */\n devTools?: boolean;\n /** @internal */\n debug?: {\n logWsTraffic?: boolean;\n };\n /** @internal */\n logger?: SDKLogger;\n}\n\nexport interface InternalSDKLogger extends SDKLogger {\n wsTraffic: (options: WsTrafficOptions) => void;\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 args.unshift(datetime(), '-');\n // eslint-disable-next-line prefer-spread\n rawMethod.apply(undefined, args);\n };\n};\n\nconst defaultLoggerLevel = defaultLogger.levels.DEBUG;\ndefaultLogger.setLevel(defaultLoggerLevel);\n\nlet userLogger: SDKLogger | null;\nconst setLogger = (logger: SDKLogger | null): void => {\n userLogger = logger;\n};\n\nlet debugOptions: LoggerOptions['debug'] = {};\nconst setDebugOptions = (options: unknown): void => {\n if (options == null) {\n debugOptions = {};\n return;\n }\n debugOptions = {\n ...debugOptions,\n ...options\n } as LoggerOptions['debug'];\n};\n\nconst getLoggerInstance = (): SDKLogger => {\n return userLogger ?? (defaultLogger as unknown as SDKLogger);\n};\n\nconst shouldStringify = (payload: WsTrafficOptions['payload']) => {\n //@ts-expect-error we don;t cara that payload is unknown\n if ('method' in payload && payload.method === 'signalwire.ping') {\n return false;\n }\n\n return true;\n};\n\nconst wsTraffic: InternalSDKLogger['wsTraffic'] = ({ type, payload }) => {\n const logger = getLoggerInstance();\n const { logWsTraffic } = debugOptions ?? {};\n\n if (!logWsTraffic) {\n return undefined;\n }\n\n const msg = shouldStringify(payload) ? JSON.stringify(payload, null, 2) : payload;\n\n return logger.debug(`${type.toUpperCase()}: \\n`, msg, '\\n');\n};\n\nconst getLogger = (): InternalSDKLogger => {\n const logger = getLoggerInstance();\n\n return new Proxy(logger, {\n get(target, prop: keyof InternalSDKLogger, receiver) {\n if (prop === 'wsTraffic') {\n return wsTraffic;\n }\n\n return Reflect.get(target, prop, receiver);\n }\n }) as InternalSDKLogger;\n};\n\nexport { setLogger, getLogger, setDebugOptions };\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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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"operators-uT_fb8ba.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","userLogger: SDKLogger | null","debugOptions: LoggerOptions['debug']","wsTraffic: InternalSDKLogger['wsTraffic']","logger","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 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","import log from 'loglevel';\n\ninterface LogFn {\n <T extends object>(obj: T, msg?: string, ...args: unknown[]): void;\n (obj: unknown, msg?: string, ...args: unknown[]): void;\n (msg: string, ...args: unknown[]): void;\n}\nexport interface SDKLogger {\n fatal: LogFn;\n error: LogFn;\n warn: LogFn;\n info: LogFn;\n debug: LogFn;\n trace: LogFn;\n}\n\nexport interface WsTrafficOptions {\n type: 'send' | 'recv' | 'http';\n payload: unknown;\n}\n\nexport interface LoggerOptions {\n /** @internal */\n devTools?: boolean;\n /** @internal */\n debug?: {\n logWsTraffic?: boolean;\n };\n /** @internal */\n logger?: SDKLogger;\n}\n\nexport interface InternalSDKLogger extends SDKLogger {\n wsTraffic: (options: WsTrafficOptions) => void;\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 args.unshift(datetime(), '-');\n // eslint-disable-next-line prefer-spread\n rawMethod.apply(undefined, args);\n };\n};\n\nconst defaultLoggerLevel = defaultLogger.levels.DEBUG;\ndefaultLogger.setLevel(defaultLoggerLevel);\n\nlet userLogger: SDKLogger | null;\nconst setLogger = (logger: SDKLogger | null): void => {\n userLogger = logger;\n};\n\nlet debugOptions: LoggerOptions['debug'] = {};\nconst setDebugOptions = (options: unknown): void => {\n if (options == null) {\n debugOptions = {};\n return;\n }\n debugOptions = {\n ...debugOptions,\n ...options\n } as LoggerOptions['debug'];\n};\n\nconst getLoggerInstance = (): SDKLogger => {\n return userLogger ?? (defaultLogger as unknown as SDKLogger);\n};\n\nconst shouldStringify = (payload: WsTrafficOptions['payload']) => {\n //@ts-expect-error we don;t cara that payload is unknown\n if ('method' in payload && payload.method === 'signalwire.ping') {\n return false;\n }\n\n return true;\n};\n\nconst wsTraffic: InternalSDKLogger['wsTraffic'] = ({ type, payload }) => {\n const logger = getLoggerInstance();\n const { logWsTraffic } = debugOptions ?? {};\n\n if (!logWsTraffic) {\n return undefined;\n }\n\n const msg = shouldStringify(payload) ? JSON.stringify(payload, null, 2) : payload;\n\n return logger.debug(`${type.toUpperCase()}: \\n`, msg, '\\n');\n};\n\nconst getLogger = (): InternalSDKLogger => {\n const logger = getLoggerInstance();\n\n return new Proxy(logger, {\n get(target, prop: keyof InternalSDKLogger, receiver) {\n if (prop === 'wsTraffic') {\n return wsTraffic;\n }\n\n return Reflect.get(target, prop, receiver);\n }\n }) as InternalSDKLogger;\n};\n\nexport { setLogger, getLogger, setDebugOptions };\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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"}