vg-x07df 1.9.5 → 1.10.6
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/channel/index.cjs.map +1 -1
- package/dist/channel/index.d.cts +1 -1
- package/dist/channel/index.d.ts +1 -1
- package/dist/channel/index.mjs.map +1 -1
- package/dist/index.cjs +121 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +39 -5
- package/dist/index.d.ts +39 -5
- package/dist/index.mjs +121 -10
- package/dist/index.mjs.map +1 -1
- package/dist/{types-CCWG5LpL.d.cts → types-BbdWZE4Y.d.cts} +1 -1
- package/dist/{types-CCWG5LpL.d.ts → types-BbdWZE4Y.d.ts} +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/generated/api/core/ApiError.ts","../src/generated/api/core/CancelablePromise.ts","../src/generated/api/core/OpenAPI.ts","../src/generated/api/core/request.ts","../src/generated/api/services.ts","../src/clients/signal/services/calls.ts","../src/clients/signal/services/health.ts","../src/clients/signal/services/meetings.ts","../src/clients/signal/services/presence.ts","../src/clients/signal/client.ts","../src/clients/signal/hooks.ts","../src/utils/logger.ts","../src/utils/duration.ts","../src/clients/signal/config.ts","../src/core/session-storage.ts","../src/core/auth.manager.ts","../src/core/guest-auth.manager.ts","../src/state/types.ts","../src/state/store.ts","../src/core/socketio/handlers/base.handler.ts","../src/channel/chat/store.ts","../src/channel/raiseHand/store.ts","../src/channel/spotlight/store.ts","../src/generated/socket/events.ts","../src/state/errors.ts","../src/clients/signal/services/users.ts","../src/state/profileCache.ts","../src/state/recording.store.ts","../src/core/events/event-bus.ts","../src/core/events/types.ts","../src/core/socketio/handlers/call-ended.handler.ts","../src/core/socketio/handlers/call-participant-kicked.handler.ts","../src/core/socketio/handlers/call-ready.handler.ts","../src/core/socketio/handlers/call-started.handler.ts","../src/core/socketio/handlers/invite-accepted.handler.ts","../src/core/socketio/handlers/invite-cancelled.handler.ts","../src/core/socketio/handlers/invite-declined.handler.ts","../src/core/socketio/handlers/invite-missed.handler.ts","../src/core/socketio/handlers/invite.handler.ts","../src/core/socketio/handlers/participant-added.handler.ts","../src/core/socketio/handlers/participant-profiles.handler.ts","../src/core/socketio/handlers/recording-started.handler.ts","../src/core/socketio/handlers/recording-stopped.handler.ts","../src/core/socketio/handlers/handler.registry.ts","../src/core/socketio/socket.manager.ts","../src/services/calls.service.ts","../src/services/livekitRoomManager.ts","../src/services/meetings.service.ts","../src/state/presence.types.ts","../src/services/presence.service.ts","../src/services/sdk-builder.ts","../src/provider/RtcProvider.tsx","../src/hooks/useCallState.ts","../src/hooks/useIncomingInvite.ts","../src/hooks/useSessionId.ts","../src/hooks/useCallActions.ts","../src/hooks/useConnectionState.ts","../src/hooks/useEvent.ts","../src/hooks/useOutgoingInvites.ts","../src/hooks/useInviteAccepted.ts","../src/hooks/useCallInitiated.ts","../src/hooks/useSessionDuration.ts","../src/hooks/useParticipantMetadata.ts","../src/hooks/useLivekitInfo.ts","../src/hooks/useHasActiveSession.ts","../src/hooks/useRoomReady.ts","../src/hooks/useAutoConnectRoom.ts","../src/hooks/useParticipantPermissions.ts","../src/hooks/useTimeout.ts","../src/hooks/useRingTimeout.ts","../src/hooks/useParticipantProfile.ts","../src/hooks/useVirtualBackground.ts","../src/hooks/useTerminate.ts","../src/state/participantListStore.ts","../src/hooks/useParticipantList.ts","../src/hooks/useRecording.ts","../src/hooks/useScreenShare.ts","../src/hooks/usePresence.ts","../src/hooks/useMeetingActions.ts","../src/hooks/useMeetingState.ts","../src/hooks/useMeeting.ts","../src/hooks/useGuestJoin.ts","../src/hooks/useGuestIdentity.ts","../src/hooks/useIsGuestMode.ts","../src/hooks/useGuestPermissions.ts"],"names":["request","resolve","headers","logger","create","immer","entry","defaultState","z","enableMapSet","mitt","SdkEventType","io","response","RoomEvent","state","config","createContext","useMemo","useEffect","React","useContext","useLivekitConnectionState","LivekitConnectionState","useState","useRef","useReducer","VideoPresets","Room","useCallback","rtcStore","useRoomContext","useLocalParticipant","Track","BackgroundProcessor","useParticipants","useTracks"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\n\nexport class ApiError extends Error {\n\tpublic readonly url: string;\n\tpublic readonly status: number;\n\tpublic readonly statusText: string;\n\tpublic readonly body: unknown;\n\tpublic readonly request: ApiRequestOptions;\n\n\tconstructor(request: ApiRequestOptions, response: ApiResult, message: string) {\n\t\tsuper(message);\n\n\t\tthis.name = 'ApiError';\n\t\tthis.url = response.url;\n\t\tthis.status = response.status;\n\t\tthis.statusText = response.statusText;\n\t\tthis.body = response.body;\n\t\tthis.request = request;\n\t}\n}","export class CancelError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = 'CancelError';\n\t}\n\n\tpublic get isCancelled(): boolean {\n\t\treturn true;\n\t}\n}\n\nexport interface OnCancel {\n\treadonly isResolved: boolean;\n\treadonly isRejected: boolean;\n\treadonly isCancelled: boolean;\n\n\t(cancelHandler: () => void): void;\n}\n\nexport class CancelablePromise<T> implements Promise<T> {\n\tprivate _isResolved: boolean;\n\tprivate _isRejected: boolean;\n\tprivate _isCancelled: boolean;\n\treadonly cancelHandlers: (() => void)[];\n\treadonly promise: Promise<T>;\n\tprivate _resolve?: (value: T | PromiseLike<T>) => void;\n\tprivate _reject?: (reason?: unknown) => void;\n\n\tconstructor(\n\t\texecutor: (\n\t\t\tresolve: (value: T | PromiseLike<T>) => void,\n\t\t\treject: (reason?: unknown) => void,\n\t\t\tonCancel: OnCancel\n\t\t) => void\n\t) {\n\t\tthis._isResolved = false;\n\t\tthis._isRejected = false;\n\t\tthis._isCancelled = false;\n\t\tthis.cancelHandlers = [];\n\t\tthis.promise = new Promise<T>((resolve, reject) => {\n\t\t\tthis._resolve = resolve;\n\t\t\tthis._reject = reject;\n\n\t\t\tconst onResolve = (value: T | PromiseLike<T>): void => {\n\t\t\t\tif (this._isResolved || this._isRejected || this._isCancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._isResolved = true;\n\t\t\t\tif (this._resolve) this._resolve(value);\n\t\t\t};\n\n\t\t\tconst onReject = (reason?: unknown): void => {\n\t\t\t\tif (this._isResolved || this._isRejected || this._isCancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._isRejected = true;\n\t\t\t\tif (this._reject) this._reject(reason);\n\t\t\t};\n\n\t\t\tconst onCancel = (cancelHandler: () => void): void => {\n\t\t\t\tif (this._isResolved || this._isRejected || this._isCancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.cancelHandlers.push(cancelHandler);\n\t\t\t};\n\n\t\t\tObject.defineProperty(onCancel, 'isResolved', {\n\t\t\t\tget: (): boolean => this._isResolved,\n\t\t\t});\n\n\t\t\tObject.defineProperty(onCancel, 'isRejected', {\n\t\t\t\tget: (): boolean => this._isRejected,\n\t\t\t});\n\n\t\t\tObject.defineProperty(onCancel, 'isCancelled', {\n\t\t\t\tget: (): boolean => this._isCancelled,\n\t\t\t});\n\n\t\t\treturn executor(onResolve, onReject, onCancel as OnCancel);\n\t\t});\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn \"Cancellable Promise\";\n\t}\n\n\tpublic then<TResult1 = T, TResult2 = never>(\n\t\tonFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n\t\tonRejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n\t): Promise<TResult1 | TResult2> {\n\t\treturn this.promise.then(onFulfilled, onRejected);\n\t}\n\n\tpublic catch<TResult = never>(\n\t\tonRejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null\n\t): Promise<T | TResult> {\n\t\treturn this.promise.catch(onRejected);\n\t}\n\n\tpublic finally(onFinally?: (() => void) | null): Promise<T> {\n\t\treturn this.promise.finally(onFinally);\n\t}\n\n\tpublic cancel(): void {\n\t\tif (this._isResolved || this._isRejected || this._isCancelled) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isCancelled = true;\n\t\tif (this.cancelHandlers.length) {\n\t\t\ttry {\n\t\t\t\tfor (const cancelHandler of this.cancelHandlers) {\n\t\t\t\t\tcancelHandler();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn('Cancellation threw an error', error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tthis.cancelHandlers.length = 0;\n\t\tif (this._reject) this._reject(new CancelError('Request aborted'));\n\t}\n\n\tpublic get isCancelled(): boolean {\n\t\treturn this._isCancelled;\n\t}\n}","import type { ApiRequestOptions } from './ApiRequestOptions';\n\ntype Headers = Record<string, string>;\ntype Middleware<T> = (value: T) => T | Promise<T>;\ntype Resolver<T> = (options: ApiRequestOptions) => Promise<T>;\n\nexport class Interceptors<T> {\n _fns: Middleware<T>[];\n\n constructor() {\n this._fns = [];\n }\n\n eject(fn: Middleware<T>) {\n const index = this._fns.indexOf(fn);\n if (index !== -1) {\n this._fns = [\n ...this._fns.slice(0, index),\n ...this._fns.slice(index + 1),\n ];\n }\n }\n\n use(fn: Middleware<T>) {\n this._fns = [...this._fns, fn];\n }\n}\n\nexport type OpenAPIConfig = {\n\tBASE: string;\n\tCREDENTIALS: 'include' | 'omit' | 'same-origin';\n\tENCODE_PATH?: ((path: string) => string) | undefined;\n\tHEADERS?: Headers | Resolver<Headers> | undefined;\n\tPASSWORD?: string | Resolver<string> | undefined;\n\tTOKEN?: string | Resolver<string> | undefined;\n\tUSERNAME?: string | Resolver<string> | undefined;\n\tVERSION: string;\n\tWITH_CREDENTIALS: boolean;\n\tinterceptors: {request: Interceptors<RequestInit>;\n\t\tresponse: Interceptors<Response>;};\n};\n\nexport const OpenAPI: OpenAPIConfig = {\n\tBASE: '',\n\tCREDENTIALS: 'include',\n\tENCODE_PATH: undefined,\n\tHEADERS: undefined,\n\tPASSWORD: undefined,\n\tTOKEN: undefined,\n\tUSERNAME: undefined,\n\tVERSION: '0.0.1',\n\tWITH_CREDENTIALS: false,\n\tinterceptors: {request: new Interceptors(),response: new Interceptors(),\n\t},\n};","import { ApiError } from './ApiError';\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\nimport { CancelablePromise } from './CancelablePromise';\nimport type { OnCancel } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\n\nexport const isString = (value: unknown): value is string => {\n\treturn typeof value === 'string';\n};\n\nexport const isStringWithValue = (value: unknown): value is string => {\n\treturn isString(value) && value !== '';\n};\n\nexport const isBlob = (value: any): value is Blob => {\n\treturn value instanceof Blob;\n};\n\nexport const isFormData = (value: unknown): value is FormData => {\n\treturn value instanceof FormData;\n};\n\nexport const base64 = (str: string): string => {\n\ttry {\n\t\treturn btoa(str);\n\t} catch (err) {\n\t\t// @ts-ignore\n\t\treturn Buffer.from(str).toString('base64');\n\t}\n};\n\nexport const getQueryString = (params: Record<string, unknown>): string => {\n\tconst qs: string[] = [];\n\n\tconst append = (key: string, value: unknown) => {\n\t\tqs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n\t};\n\n\tconst encodePair = (key: string, value: unknown) => {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue.forEach(v => encodePair(key, v));\n\t\t} else if (typeof value === 'object') {\n\t\t\tObject.entries(value).forEach(([k, v]) => encodePair(`${key}[${k}]`, v));\n\t\t} else {\n\t\t\tappend(key, value);\n\t\t}\n\t};\n\n\tObject.entries(params).forEach(([key, value]) => encodePair(key, value));\n\n\treturn qs.length ? `?${qs.join('&')}` : '';\n};\n\nconst getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => {\n\tconst encoder = config.ENCODE_PATH || encodeURI;\n\n\tconst path = options.url\n\t\t.replace('{api-version}', config.VERSION)\n\t\t.replace(/{(.*?)}/g, (substring: string, group: string) => {\n\t\t\tif (options.path?.hasOwnProperty(group)) {\n\t\t\t\treturn encoder(String(options.path[group]));\n\t\t\t}\n\t\t\treturn substring;\n\t\t});\n\n\tconst url = config.BASE + path;\n\treturn options.query ? url + getQueryString(options.query) : url;\n};\n\nexport const getFormData = (options: ApiRequestOptions): FormData | undefined => {\n\tif (options.formData) {\n\t\tconst formData = new FormData();\n\n\t\tconst process = (key: string, value: unknown) => {\n\t\t\tif (isString(value) || isBlob(value)) {\n\t\t\t\tformData.append(key, value);\n\t\t\t} else {\n\t\t\t\tformData.append(key, JSON.stringify(value));\n\t\t\t}\n\t\t};\n\n\t\tObject.entries(options.formData)\n\t\t\t.filter(([, value]) => value !== undefined && value !== null)\n\t\t\t.forEach(([key, value]) => {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tvalue.forEach(v => process(key, v));\n\t\t\t\t} else {\n\t\t\t\t\tprocess(key, value);\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn formData;\n\t}\n\treturn undefined;\n};\n\ntype Resolver<T> = (options: ApiRequestOptions) => Promise<T>;\n\nexport const resolve = async <T>(options: ApiRequestOptions, resolver?: T | Resolver<T>): Promise<T | undefined> => {\n\tif (typeof resolver === 'function') {\n\t\treturn (resolver as Resolver<T>)(options);\n\t}\n\treturn resolver;\n};\n\nexport const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptions): Promise<Headers> => {\n\tconst [token, username, password, additionalHeaders] = await Promise.all([\n\t\tresolve(options, config.TOKEN),\n\t\tresolve(options, config.USERNAME),\n\t\tresolve(options, config.PASSWORD),\n\t\tresolve(options, config.HEADERS),\n\t]);\n\n\tconst headers = Object.entries({\n\t\tAccept: 'application/json',\n\t\t...additionalHeaders,\n\t\t...options.headers,\n\t})\n\t\t.filter(([, value]) => value !== undefined && value !== null)\n\t\t.reduce((headers, [key, value]) => ({\n\t\t\t...headers,\n\t\t\t[key]: String(value),\n\t\t}), {} as Record<string, string>);\n\n\tif (isStringWithValue(token)) {\n\t\theaders['Authorization'] = `Bearer ${token}`;\n\t}\n\n\tif (isStringWithValue(username) && isStringWithValue(password)) {\n\t\tconst credentials = base64(`${username}:${password}`);\n\t\theaders['Authorization'] = `Basic ${credentials}`;\n\t}\n\n\tif (options.body !== undefined) {\n\t\tif (options.mediaType) {\n\t\t\theaders['Content-Type'] = options.mediaType;\n\t\t} else if (isBlob(options.body)) {\n\t\t\theaders['Content-Type'] = options.body.type || 'application/octet-stream';\n\t\t} else if (isString(options.body)) {\n\t\t\theaders['Content-Type'] = 'text/plain';\n\t\t} else if (!isFormData(options.body)) {\n\t\t\theaders['Content-Type'] = 'application/json';\n\t\t}\n\t}\n\n\treturn new Headers(headers);\n};\n\nexport const getRequestBody = (options: ApiRequestOptions): unknown => {\n\tif (options.body !== undefined) {\n\t\tif (options.mediaType?.includes('application/json') || options.mediaType?.includes('+json')) {\n\t\t\treturn JSON.stringify(options.body)\n\t\t} else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {\n\t\t\treturn options.body;\n\t\t} else {\n\t\t\treturn JSON.stringify(options.body);\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexport const sendRequest = async (\n\tconfig: OpenAPIConfig,\n\toptions: ApiRequestOptions,\n\turl: string,\n\tbody: any,\n\tformData: FormData | undefined,\n\theaders: Headers,\n\tonCancel: OnCancel\n): Promise<Response> => {\n\tconst controller = new AbortController();\n\n\tlet request: RequestInit = {\n\t\theaders,\n\t\tbody: body ?? formData,\n\t\tmethod: options.method,\n\t\tsignal: controller.signal,\n\t};\n\n\tif (config.WITH_CREDENTIALS) {\n\t\trequest.credentials = config.CREDENTIALS;\n\t}\n\n\tfor (const fn of config.interceptors.request._fns) {\n\t\trequest = await fn(request)\n\t}\n\n\tonCancel(() => controller.abort());\n\n\treturn await fetch(url, request);\n};\n\nexport const getResponseHeader = (response: Response, responseHeader?: string): string | undefined => {\n\tif (responseHeader) {\n\t\tconst content = response.headers.get(responseHeader);\n\t\tif (isString(content)) {\n\t\t\treturn content;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexport const getResponseBody = async (response: Response): Promise<unknown> => {\n\tif (response.status !== 204) {\n\t\ttry {\n\t\t\tconst contentType = response.headers.get('Content-Type');\n\t\t\tif (contentType) {\n\t\t\t\tconst binaryTypes = ['application/octet-stream', 'application/pdf', 'application/zip', 'audio/', 'image/', 'video/'];\n\t\t\t\tif (contentType.includes('application/json') || contentType.includes('+json')) {\n\t\t\t\t\treturn await response.json();\n\t\t\t\t} else if (binaryTypes.some(type => contentType.includes(type))) {\n\t\t\t\t\treturn await response.blob();\n\t\t\t\t} else if (contentType.includes('multipart/form-data')) {\n\t\t\t\t\treturn await response.formData();\n\t\t\t\t} else if (contentType.includes('text/')) {\n\t\t\t\t\treturn await response.text();\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexport const catchErrorCodes = (options: ApiRequestOptions, result: ApiResult): void => {\n\tconst errors: Record<number, string> = {\n\t\t400: 'Bad Request',\n\t\t401: 'Unauthorized',\n\t\t402: 'Payment Required',\n\t\t403: 'Forbidden',\n\t\t404: 'Not Found',\n\t\t405: 'Method Not Allowed',\n\t\t406: 'Not Acceptable',\n\t\t407: 'Proxy Authentication Required',\n\t\t408: 'Request Timeout',\n\t\t409: 'Conflict',\n\t\t410: 'Gone',\n\t\t411: 'Length Required',\n\t\t412: 'Precondition Failed',\n\t\t413: 'Payload Too Large',\n\t\t414: 'URI Too Long',\n\t\t415: 'Unsupported Media Type',\n\t\t416: 'Range Not Satisfiable',\n\t\t417: 'Expectation Failed',\n\t\t418: 'Im a teapot',\n\t\t421: 'Misdirected Request',\n\t\t422: 'Unprocessable Content',\n\t\t423: 'Locked',\n\t\t424: 'Failed Dependency',\n\t\t425: 'Too Early',\n\t\t426: 'Upgrade Required',\n\t\t428: 'Precondition Required',\n\t\t429: 'Too Many Requests',\n\t\t431: 'Request Header Fields Too Large',\n\t\t451: 'Unavailable For Legal Reasons',\n\t\t500: 'Internal Server Error',\n\t\t501: 'Not Implemented',\n\t\t502: 'Bad Gateway',\n\t\t503: 'Service Unavailable',\n\t\t504: 'Gateway Timeout',\n\t\t505: 'HTTP Version Not Supported',\n\t\t506: 'Variant Also Negotiates',\n\t\t507: 'Insufficient Storage',\n\t\t508: 'Loop Detected',\n\t\t510: 'Not Extended',\n\t\t511: 'Network Authentication Required',\n\t\t...options.errors,\n\t}\n\n\tconst error = errors[result.status];\n\tif (error) {\n\t\tthrow new ApiError(options, result, error);\n\t}\n\n\tif (!result.ok) {\n\t\tconst errorStatus = result.status ?? 'unknown';\n\t\tconst errorStatusText = result.statusText ?? 'unknown';\n\t\tconst errorBody = (() => {\n\t\t\ttry {\n\t\t\t\treturn JSON.stringify(result.body, null, 2);\n\t\t\t} catch (e) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t})();\n\n\t\tthrow new ApiError(options, result,\n\t\t\t`Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`\n\t\t);\n\t}\n};\n\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise<T>\n * @throws ApiError\n */\nexport const request = <T>(config: OpenAPIConfig, options: ApiRequestOptions): CancelablePromise<T> => {\n\treturn new CancelablePromise(async (resolve, reject, onCancel) => {\n\t\ttry {\n\t\t\tconst url = getUrl(config, options);\n\t\t\tconst formData = getFormData(options);\n\t\t\tconst body = getRequestBody(options);\n\t\t\tconst headers = await getHeaders(config, options);\n\n\t\t\tif (!onCancel.isCancelled) {\n\t\t\t\tlet response = await sendRequest(config, options, url, body, formData, headers, onCancel);\n\n\t\t\t\tfor (const fn of config.interceptors.response._fns) {\n\t\t\t\t\tresponse = await fn(response)\n\t\t\t\t}\n\n\t\t\t\tconst responseBody = await getResponseBody(response);\n\t\t\t\tconst responseHeader = getResponseHeader(response, options.responseHeader);\n\n\t\t\t\tconst result: ApiResult = {\n\t\t\t\t\turl,\n\t\t\t\t\tok: response.ok,\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t\tstatusText: response.statusText,\n\t\t\t\t\tbody: responseHeader ?? responseBody,\n\t\t\t\t};\n\n\t\t\t\tcatchErrorCodes(options, result);\n\n\t\t\t\tresolve(result.body);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\t});\n};","import type { CancelablePromise } from './core/CancelablePromise';\nimport { OpenAPI } from './core/OpenAPI';\nimport { request as __request } from './core/request';\nimport type { HealthData, LiveKitData, CallsData, MeetingsData, UsersData, PresenceData, InitData } from './models';\n\nexport class HealthService {\n\n\t/**\n\t * @returns any Service is healthy\n\t * @throws ApiError\n\t */\n\tpublic static getHealth(): CancelablePromise<HealthData['responses']['GetHealth']> {\n\t\t\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'GET',\n\t\t\turl: '/health',\n\t\t});\n\t}\n\n}\n\nexport class LiveKitService {\n\n\t/**\n\t * @returns any Webhook processed successfully\n\t * @throws ApiError\n\t */\n\tpublic static postLivekitWebhook(data: LiveKitData['payloads']['PostLivekitWebhook'] = {}): CancelablePromise<LiveKitData['responses']['PostLivekitWebhook']> {\n\t\tconst {\n \n authorization,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/livekit/webhook',\n\t\t\theaders: {\n\t\t\t\tauthorization\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'text/plain',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid webhook`,\n\t\t\t\t500: `Failed to process webhook`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Webhook processed successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalLivekitWebhook(data: LiveKitData['payloads']['PostSignalLivekitWebhook'] = {}): CancelablePromise<LiveKitData['responses']['PostSignalLivekitWebhook']> {\n\t\tconst {\n \n authorization,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/livekit/webhook',\n\t\t\theaders: {\n\t\t\t\tauthorization\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'text/plain',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid webhook`,\n\t\t\t\t500: `Failed to process webhook`,\n\t\t\t},\n\t\t});\n\t}\n\n}\n\nexport class CallsService {\n\n\t/**\n\t * @returns any Call retrieved successfully\n\t * @throws ApiError\n\t */\n\tpublic static getSignalCallsByCallId(data: CallsData['payloads']['GetSignalCallsByCallId']): CancelablePromise<CallsData['responses']['GetSignalCallsByCallId']> {\n\t\tconst {\n \n callId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'GET',\n\t\t\turl: '/signal/calls/{callId}',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t404: `Call not found`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Left call successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdLeave(data: CallsData['payloads']['PostSignalCallsByCallIdLeave']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdLeave']> {\n\t\tconst {\n \n callId,\nappId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/leave',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User is not a participant`,\n\t\t\t\t404: `Call not found`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Call initiated successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsInitiate(data: CallsData['payloads']['PostSignalCallsInitiate']): CancelablePromise<CallsData['responses']['PostSignalCallsInitiate']> {\n\t\tconst {\n \n appId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/initiate',\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Invites sent successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsInvite(data: CallsData['payloads']['PostSignalCallsInvite']): CancelablePromise<CallsData['responses']['PostSignalCallsInvite']> {\n\t\tconst {\n \n appId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/invite',\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User does not have permission to invite`,\n\t\t\t\t404: `Call not found`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Call accepted successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdAccept(data: CallsData['payloads']['PostSignalCallsByCallIdAccept']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdAccept']> {\n\t\tconst {\n \n callId,\nappId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/accept',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User is not a participant`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `Call cannot be accepted in current state`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Call declined successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdDecline(data: CallsData['payloads']['PostSignalCallsByCallIdDecline']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdDecline']> {\n\t\tconst {\n \n callId,\nappId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/decline',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User is not a participant`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `Call cannot be declined in current state`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Call cancelled successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdCancel(data: CallsData['payloads']['PostSignalCallsByCallIdCancel']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdCancel']> {\n\t\tconst {\n \n callId,\nappId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/cancel',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User does not have permission to cancel`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `Call cannot be cancelled in current state`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Transfer initiated successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdTransfer(data: CallsData['payloads']['PostSignalCallsByCallIdTransfer']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdTransfer']> {\n\t\tconst {\n \n callId,\nappId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/transfer',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User does not have permission to transfer`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `Call cannot be transferred in current state`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Participant kicked successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdKick(data: CallsData['payloads']['PostSignalCallsByCallIdKick']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdKick']> {\n\t\tconst {\n \n callId,\nappId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/kick',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User does not have permission to kick`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `Participant cannot be kicked in current state`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Participant muted successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdMute(data: CallsData['payloads']['PostSignalCallsByCallIdMute']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdMute']> {\n\t\tconst {\n \n callId,\nappId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/mute',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User does not have permission to mute`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `Participant cannot be muted in current state`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns void Call ended successfully. Room deleted from LiveKit.\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdEnd(data: CallsData['payloads']['PostSignalCallsByCallIdEnd']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdEnd']> {\n\t\tconst {\n \n callId,\nappId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/end',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `Only host can end the call`,\n\t\t\t\t404: `Call not found`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Recording started successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdRecordingsStart(data: CallsData['payloads']['PostSignalCallsByCallIdRecordingsStart']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdRecordingsStart']> {\n\t\tconst {\n \n callId,\nappId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/recordings/start',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `Only host can start recording`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `A recording is already active`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Recording stopped successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdRecordingsByRecordingIdStop(data: CallsData['payloads']['PostSignalCallsByCallIdRecordingsByRecordingIdStop']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdRecordingsByRecordingIdStop']> {\n\t\tconst {\n \n callId,\nrecordingId,\nappId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/recordings/{recordingId}/stop',\n\t\t\tpath: {\n\t\t\t\tcallId, recordingId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `Only host can stop recording`,\n\t\t\t\t404: `Call or recording not found`,\n\t\t\t},\n\t\t});\n\t}\n\n}\n\nexport class MeetingsService {\n\n\t/**\n\t * @returns any Ad-hoc meeting created successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalMeetingsCreate(data: MeetingsData['payloads']['PostSignalMeetingsCreate'] = {}): CancelablePromise<MeetingsData['responses']['PostSignalMeetingsCreate']> {\n\t\tconst {\n \n requestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/meetings/create',\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t500: `Internal server error`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Scheduled meeting started successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalMeetingsByMeetingIdStart(data: MeetingsData['payloads']['PostSignalMeetingsByMeetingIdStart']): CancelablePromise<MeetingsData['responses']['PostSignalMeetingsByMeetingIdStart']> {\n\t\tconst {\n \n meetingId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/meetings/{meetingId}/start',\n\t\t\tpath: {\n\t\t\t\tmeetingId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `Only the organizer can start the meeting`,\n\t\t\t\t404: `Meeting not found`,\n\t\t\t\t500: `Internal server error`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Joined meeting successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalMeetingsJoin(data: MeetingsData['payloads']['PostSignalMeetingsJoin'] = {}): CancelablePromise<MeetingsData['responses']['PostSignalMeetingsJoin']> {\n\t\tconst {\n \n requestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/meetings/join',\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t404: `Meeting not found`,\n\t\t\t\t500: `Internal server error`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Meeting ended successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalMeetingsByMeetingIdEnd(data: MeetingsData['payloads']['PostSignalMeetingsByMeetingIdEnd']): CancelablePromise<MeetingsData['responses']['PostSignalMeetingsByMeetingIdEnd']> {\n\t\tconst {\n \n meetingId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/meetings/{meetingId}/end',\n\t\t\tpath: {\n\t\t\t\tmeetingId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `Only the organizer can end the meeting`,\n\t\t\t\t404: `Meeting not found`,\n\t\t\t\t500: `Internal server error`,\n\t\t\t},\n\t\t});\n\t}\n\n}\n\nexport class UsersService {\n\n\t/**\n\t * @returns any User profile retrieved successfully\n\t * @throws ApiError\n\t */\n\tpublic static getSignalUsersById(data: UsersData['payloads']['GetSignalUsersById']): CancelablePromise<UsersData['responses']['GetSignalUsersById']> {\n\t\tconst {\n \n id\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'GET',\n\t\t\turl: '/signal/users/{id}',\n\t\t\tpath: {\n\t\t\t\tid\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t404: `User not found`,\n\t\t\t},\n\t\t});\n\t}\n\n}\n\nexport class PresenceService {\n\n\t/**\n\t * @returns any Presence retrieved successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalPresence(data: PresenceData['payloads']['PostSignalPresence'] = {}): CancelablePromise<PresenceData['responses']['PostSignalPresence']> {\n\t\tconst {\n \n requestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/presence',\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t},\n\t\t});\n\t}\n\n}\n\nexport class InitService {\n\n\t/**\n\t * @returns any Initialized\n\t * @throws ApiError\n\t */\n\tpublic static getSignalInit(data: InitData['payloads']['GetSignalInit']): CancelablePromise<InitData['responses']['GetSignalInit']> {\n\t\tconst {\n \n appId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'GET',\n\t\t\turl: '/signal/init',\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t500: `Internal server error`,\n\t\t\t},\n\t\t});\n\t}\n\n}","import { CallsService } from \"../../../generated/api\";\nimport type { CallsData } from \"../../../generated/api/models\";\n\nexport class SignalCallsService {\n constructor(private appId: string) {}\n\n async initiate(\n params: Omit<CallsData[\"payloads\"][\"PostSignalCallsInitiate\"], \"appId\">\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsInitiate\"]> {\n return CallsService.postSignalCallsInitiate({\n ...params,\n appId: this.appId,\n });\n }\n\n async invite(\n params: Omit<CallsData[\"payloads\"][\"PostSignalCallsInvite\"], \"appId\">\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsInvite\"]> {\n return CallsService.postSignalCallsInvite({\n ...params,\n appId: this.appId,\n });\n }\n\n async accept(\n params: Omit<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdAccept\"],\n \"appId\"\n >\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdAccept\"]> {\n return CallsService.postSignalCallsByCallIdAccept({\n ...params,\n appId: this.appId,\n });\n }\n\n async decline(\n params: Omit<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdDecline\"],\n \"appId\"\n >\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdDecline\"]> {\n return CallsService.postSignalCallsByCallIdDecline({\n ...params,\n appId: this.appId,\n });\n }\n\n async cancel(\n params: Omit<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdCancel\"],\n \"appId\"\n >\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdCancel\"]> {\n return CallsService.postSignalCallsByCallIdCancel({\n ...params,\n appId: this.appId,\n });\n }\n\n async transfer(\n params: Omit<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdTransfer\"],\n \"appId\"\n >\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdTransfer\"]> {\n return CallsService.postSignalCallsByCallIdTransfer({\n ...params,\n appId: this.appId,\n });\n }\n\n async kick(\n params: Omit<CallsData[\"payloads\"][\"PostSignalCallsByCallIdKick\"], \"appId\">\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdKick\"]> {\n return CallsService.postSignalCallsByCallIdKick({\n ...params,\n appId: this.appId,\n });\n }\n\n async mute(\n params: Omit<CallsData[\"payloads\"][\"PostSignalCallsByCallIdMute\"], \"appId\">\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdMute\"]> {\n return CallsService.postSignalCallsByCallIdMute({\n ...params,\n appId: this.appId,\n });\n }\n\n async end(\n params: Omit<CallsData[\"payloads\"][\"PostSignalCallsByCallIdEnd\"], \"appId\">\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdEnd\"]> {\n return CallsService.postSignalCallsByCallIdEnd({\n ...params,\n appId: this.appId,\n });\n }\n\n async get(\n params: Omit<CallsData[\"payloads\"][\"GetSignalCallsByCallId\"], \"appId\">\n ): Promise<CallsData[\"responses\"][\"GetSignalCallsByCallId\"]> {\n return CallsService.getSignalCallsByCallId({\n ...params,\n });\n }\n\n async startRecording(\n params: Omit<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdRecordingsStart\"],\n \"appId\"\n >\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdRecordingsStart\"]> {\n return CallsService.postSignalCallsByCallIdRecordingsStart({\n ...params,\n appId: this.appId,\n });\n }\n\n async stopRecording(\n params: Omit<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdRecordingsByRecordingIdStop\"],\n \"appId\"\n >\n ): Promise<\n CallsData[\"responses\"][\"PostSignalCallsByCallIdRecordingsByRecordingIdStop\"]\n > {\n return CallsService.postSignalCallsByCallIdRecordingsByRecordingIdStop({\n ...params,\n appId: this.appId,\n });\n }\n}\n","import { HealthService } from \"../../../generated/api\";\nimport type { HealthData } from \"../../../generated/api/models\";\n\nexport class SignalHealthService {\n async check(): Promise<HealthData[\"responses\"][\"GetHealth\"]> {\n return HealthService.getHealth();\n }\n}\n","import { MeetingsService } from \"../../../generated/api\";\nimport type { MeetingsData } from \"../../../generated/api/models\";\n\nexport interface GuestJoinParams {\n meetingCode: string;\n displayName: string;\n passcode?: string;\n appId: string;\n deviceId: string;\n}\n\nexport interface GuestJoinResponse {\n meeting: {\n id: string;\n code: string;\n status: \"ACTIVE\";\n callId: string;\n };\n joinInfo: {\n token: string;\n lkUrl: string;\n };\n sessionToken: string;\n guestId: string;\n sessionType: \"MEETING\";\n}\n\nexport type GuestErrorCode =\n | \"SESSION_NOT_FOUND\"\n | \"GUEST_ACCESS_DISABLED\"\n | \"INVALID_PASSCODE\"\n | \"MEETING_NOT_ACTIVE\"\n | \"VALIDATION_ERROR\"\n | \"UNKNOWN\";\n\nexport class GuestJoinError extends Error {\n public readonly code: GuestErrorCode;\n\n constructor(\n message: string,\n public readonly statusCode: number,\n code?: GuestErrorCode\n ) {\n super(message);\n this.name = \"GuestJoinError\";\n this.code = code || this.mapStatusToCode(statusCode);\n }\n\n private mapStatusToCode(status: number): GuestErrorCode {\n switch (status) {\n case 404:\n return \"SESSION_NOT_FOUND\";\n case 403:\n return \"GUEST_ACCESS_DISABLED\";\n case 401:\n return \"INVALID_PASSCODE\";\n case 400:\n return \"MEETING_NOT_ACTIVE\";\n case 422:\n return \"VALIDATION_ERROR\";\n default:\n return \"UNKNOWN\";\n }\n }\n}\n\nexport class SignalMeetingsService {\n constructor(private appId: string) {}\n\n async createAdHoc(\n params: MeetingsData[\"payloads\"][\"PostSignalMeetingsCreate\"]\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsCreate\"]> {\n return MeetingsService.postSignalMeetingsCreate(params);\n }\n\n async start(\n params: MeetingsData[\"payloads\"][\"PostSignalMeetingsByMeetingIdStart\"]\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsByMeetingIdStart\"]> {\n return MeetingsService.postSignalMeetingsByMeetingIdStart(params);\n }\n\n async join(\n params: MeetingsData[\"payloads\"][\"PostSignalMeetingsJoin\"]\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsJoin\"]> {\n return MeetingsService.postSignalMeetingsJoin(params);\n }\n\n async end(\n params: MeetingsData[\"payloads\"][\"PostSignalMeetingsByMeetingIdEnd\"]\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsByMeetingIdEnd\"]> {\n return MeetingsService.postSignalMeetingsByMeetingIdEnd(params);\n }\n\n async guestJoin(\n params: GuestJoinParams,\n baseUrl: string\n ): Promise<GuestJoinResponse> {\n const response = await fetch(`${baseUrl}/signal/meetings/guest-join`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(params),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new GuestJoinError(\n error.message || error.error?.message || \"Failed to join meeting\",\n response.status\n );\n }\n\n return response.json();\n }\n}\n","import { PresenceService } from \"../../../generated/api\";\nimport type { PresenceData } from \"../../../generated/api/models\";\n\nexport class SignalPresenceService {\n constructor(private appId: string) {}\n\n /**\n * Query presence for multiple user IDs\n */\n async queryPresence(\n userIds: string[]\n ): Promise<PresenceData[\"responses\"][\"PostSignalPresence\"]> {\n return PresenceService.postSignalPresence({\n requestBody: { userIds },\n });\n }\n}\n","import { OpenAPI } from \"../../generated/api\";\nimport {\n SignalCallsService,\n SignalHealthService,\n SignalMeetingsService,\n SignalPresenceService,\n} from \"./services\";\nimport type { SignalClientConfig } from \"./types\";\n\nexport class SignalClient {\n public readonly calls: SignalCallsService;\n public readonly health: SignalHealthService;\n public readonly meetings: SignalMeetingsService;\n public readonly presence: SignalPresenceService;\n\n constructor(config: SignalClientConfig) {\n this.configure(config);\n\n // Initialize services\n this.calls = new SignalCallsService(config.appId);\n this.health = new SignalHealthService();\n this.meetings = new SignalMeetingsService(config.appId);\n this.presence = new SignalPresenceService(config.appId);\n }\n\n private configure(config: SignalClientConfig): void {\n OpenAPI.BASE = config.baseUrl;\n\n // Handle token - OpenAPI expects string | Resolver<string>\n if (typeof config.token === \"function\") {\n const tokenFn = config.token;\n OpenAPI.TOKEN = async (_options) => {\n const result = tokenFn();\n return typeof result === \"string\" ? result : await result;\n };\n } else {\n OpenAPI.TOKEN = config.token;\n }\n\n OpenAPI.CREDENTIALS = config.credentials ?? \"include\";\n OpenAPI.WITH_CREDENTIALS = config.withCredentials ?? false;\n\n if (config.headers) {\n OpenAPI.HEADERS = config.headers;\n }\n }\n\n public reconfigure(config: Partial<SignalClientConfig>): void {\n // Update existing config with new values\n const newConfig: SignalClientConfig = {\n baseUrl: OpenAPI.BASE,\n appId: this.calls ? (this.calls as any).appId : \"\",\n credentials: OpenAPI.CREDENTIALS as any,\n withCredentials: OpenAPI.WITH_CREDENTIALS,\n ...config,\n };\n\n this.configure(newConfig);\n\n // Update appId in services if it changed\n if (config.appId) {\n if (this.calls) {\n (this.calls as any).appId = config.appId;\n }\n if (this.meetings) {\n (this.meetings as any).appId = config.appId;\n }\n }\n }\n}\n","import { useSdk } from \"../../provider/RtcProvider\";\nimport type { SignalClient } from \"./client\";\n\n/**\n * Hook to access the Signal client directly from the SDK\n * @returns The SignalClient instance\n */\nexport function useSignalClient(): SignalClient {\n const sdk = useSdk();\n return sdk.signal;\n}\n","/**\n * Comprehensive logging system for the Callpad Web SDK\n *\n * Features:\n * - Log level filtering (debug, info, warn, error)\n * - Environment variable configuration (DEBUG, CALLPAD_LOG_LEVEL)\n * - Hierarchical namespacing (callpad:socket:connection)\n * - Custom logger integration\n * - Zero-cost when disabled\n */\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport interface LoggerOptions {\n level?: LogLevel;\n enableDebug?: boolean;\n customLogger?: (level: LogLevel, message: string, meta?: any) => void;\n}\n\nexport interface CallpadLogger {\n debug(message: string, meta?: any): void;\n info(message: string, meta?: any): void;\n warn(message: string, meta?: any): void;\n error(message: string, meta?: any): void;\n child(namespace: string): CallpadLogger;\n setLevel(level: LogLevel): void;\n isLevelEnabled(level: LogLevel): boolean;\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\nclass CallpadLoggerImpl implements CallpadLogger {\n private namespace: string;\n private level: LogLevel;\n private enableDebug: boolean;\n private customLogger?: (level: LogLevel, message: string, meta?: any) => void;\n\n constructor(namespace = \"callpad\", options: LoggerOptions = {}) {\n this.namespace = namespace;\n this.level = options.level ?? this.getDefaultLevel();\n this.enableDebug = options.enableDebug ?? this.shouldEnableDebug();\n if (options.customLogger) {\n this.customLogger = options.customLogger;\n }\n }\n\n private getDefaultLevel(): LogLevel {\n const envLevel =\n typeof window !== \"undefined\"\n ? (window as any).__CALLPAD_LOG_LEVEL__\n : typeof globalThis !== \"undefined\" &&\n (globalThis as any).process?.env?.CALLPAD_LOG_LEVEL;\n\n if (envLevel && this.isValidLogLevel(envLevel)) {\n return envLevel as LogLevel;\n }\n\n const isProduction =\n typeof globalThis !== \"undefined\" &&\n (globalThis as any).process?.env?.NODE_ENV === \"production\";\n\n return isProduction ? \"warn\" : \"info\";\n }\n\n private shouldEnableDebug(): boolean {\n const debugEnv =\n typeof window !== \"undefined\"\n ? (window as any).__DEBUG__\n : typeof globalThis !== \"undefined\" &&\n (globalThis as any).process?.env?.DEBUG;\n\n if (!debugEnv) return false;\n\n const debugPatterns = debugEnv.split(/[\\s,]+/);\n return debugPatterns.some((pattern: string) => {\n if (pattern === \"*\") return true;\n if (pattern.endsWith(\"*\")) {\n const prefix = pattern.slice(0, -1);\n return this.namespace.startsWith(prefix);\n }\n return this.namespace === pattern;\n });\n }\n\n private isValidLogLevel(level: string): boolean {\n return Object.keys(LOG_LEVELS).includes(level);\n }\n\n private shouldLog(level: LogLevel): boolean {\n if (level === \"debug\" && !this.enableDebug) {\n return false;\n }\n return LOG_LEVELS[level] >= LOG_LEVELS[this.level];\n }\n\n private formatMessage(level: LogLevel, message: string, meta?: any): void {\n if (!this.shouldLog(level)) return;\n\n const timestamp = new Date().toISOString();\n const prefix = `[${timestamp}] [${this.namespace}] [${level.toUpperCase()}]`;\n\n if (this.customLogger) {\n this.customLogger(level, message, meta);\n return;\n }\n\n const logMethod =\n level === \"error\"\n ? console.error\n : level === \"warn\"\n ? console.warn\n : level === \"info\"\n ? console.info\n : console.log;\n\n if (meta !== undefined) {\n logMethod(`${prefix} ${message}`, meta);\n } else {\n logMethod(`${prefix} ${message}`);\n }\n }\n\n debug(message: string, meta?: any): void {\n this.formatMessage(\"debug\", message, meta);\n }\n\n info(message: string, meta?: any): void {\n this.formatMessage(\"info\", message, meta);\n }\n\n warn(message: string, meta?: any): void {\n this.formatMessage(\"warn\", message, meta);\n }\n\n error(message: string, meta?: any): void {\n this.formatMessage(\"error\", message, meta);\n }\n\n child(namespace: string): CallpadLogger {\n const childNamespace = `${this.namespace}:${namespace}`;\n const childOptions: LoggerOptions = {\n level: this.level,\n enableDebug: this.enableDebug,\n };\n if (this.customLogger) {\n childOptions.customLogger = this.customLogger;\n }\n return new CallpadLoggerImpl(childNamespace, childOptions);\n }\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n isLevelEnabled(level: LogLevel): boolean {\n return this.shouldLog(level);\n }\n}\n\nlet rootLogger: CallpadLogger | null = null;\n\nexport function createLogger(\n namespace?: string,\n options?: LoggerOptions\n): CallpadLogger {\n if (!namespace) {\n if (!rootLogger) {\n rootLogger = new CallpadLoggerImpl(\"callpad\", options);\n }\n return rootLogger;\n }\n\n return new CallpadLoggerImpl(`callpad:${namespace}`, options);\n}\n\nexport function setGlobalLoggerOptions(options: LoggerOptions): void {\n rootLogger = new CallpadLoggerImpl(\"callpad\", options);\n}\n","export interface DurationResult {\n seconds: number;\n minutes: number;\n hours: number;\n formatted: string;\n}\n\nexport const computeDuration = (\n startTime: string | Date | number,\n endTime?: string | Date | number\n): DurationResult => {\n const startTimestamp = parseTimeInput(startTime);\n if (startTimestamp === null) {\n throw new Error(\"Invalid start time provided\");\n }\n\n const endTimestamp = endTime ? parseTimeInput(endTime) : Date.now();\n if (endTimestamp === null) {\n throw new Error(\"Invalid end time provided\");\n }\n\n let durationMs = endTimestamp - startTimestamp;\n if (durationMs < 0) {\n durationMs = 0;\n // throw new Error(\"End time cannot be before start time\");\n }\n\n const totalSeconds = Math.round(durationMs / 1000);\n const totalMinutes = Math.round(totalSeconds / 60);\n const totalHours = Math.round(totalSeconds / 3600);\n\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n\n const formatted =\n hours === 0\n ? `${minutes.toString().padStart(2, \"0\")}:${seconds.toString().padStart(2, \"0\")}`\n : `${hours}:${minutes.toString().padStart(2, \"0\")}:${seconds.toString().padStart(2, \"0\")}`;\n\n return {\n seconds: totalSeconds,\n minutes: totalMinutes,\n hours: totalHours,\n formatted,\n };\n};\n\nconst parseTimeInput = (input: string | Date | number): number | null => {\n if (typeof input === \"number\") {\n return Number.isFinite(input) ? input : null;\n }\n\n if (input instanceof Date) {\n return Number.isFinite(input.getTime()) ? input.getTime() : null;\n }\n\n const timestamp = Date.parse(input);\n return Number.isFinite(timestamp) ? timestamp : null;\n};\n","import { OpenAPI } from \"../../generated/api\";\nimport { createLogger } from \"../../utils\";\nimport type { ApiConfig } from \"./types\";\n\nconst logger = createLogger(\"api-config\");\n\nexport class OpenApiConfigService {\n private static instance: OpenApiConfigService;\n\n private constructor() {\n // Add request interceptor to log authorization headers\n OpenAPI.interceptors.request.use((request) => {\n // Request headers can be Headers object or plain object\n const headers = request.headers as Headers | Record<string, string>;\n let authHeader: string | null = null;\n\n if (headers instanceof Headers) {\n authHeader = headers.get(\"Authorization\") || null;\n } else if (headers && typeof headers === \"object\") {\n authHeader = (headers as Record<string, string>).Authorization || null;\n }\n\n if (authHeader) {\n logger.debug(\"API Request with Authorization header\", {\n hasAuth: true,\n authPrefix: `${authHeader.substring(0, 20)}...`,\n });\n } else {\n logger.warn(\"API Request WITHOUT Authorization header\", {\n hasAuth: false,\n });\n }\n\n return request;\n });\n }\n\n static getInstance(): OpenApiConfigService {\n if (!OpenApiConfigService.instance) {\n OpenApiConfigService.instance = new OpenApiConfigService();\n }\n return OpenApiConfigService.instance;\n }\n\n configure(config: ApiConfig): void {\n OpenAPI.BASE = config.baseUrl;\n\n // Handle token - OpenAPI expects string | Resolver<string>\n // Resolver<string> = (options: ApiRequestOptions) => Promise<string>\n if (typeof config.token === \"function\") {\n const tokenFn = config.token; // Capture the function reference\n OpenAPI.TOKEN = async (_options) => {\n const result = tokenFn();\n const token = typeof result === \"string\" ? result : await result;\n\n if (!token) {\n logger.warn(\"Token provider returned empty token\");\n } else {\n logger.debug(\"Token resolved successfully\", {\n tokenPrefix: `${token.substring(0, 10)}...`,\n });\n }\n\n return token;\n };\n } else {\n OpenAPI.TOKEN = config.token;\n }\n\n OpenAPI.CREDENTIALS = config.credentials ?? \"include\";\n OpenAPI.WITH_CREDENTIALS = config.withCredentials ?? false;\n\n if (config.headers) {\n OpenAPI.HEADERS = config.headers;\n }\n\n logger.info(\"Signal svc configuration completed\", {\n baseUrl: config.baseUrl,\n hasToken: !!config.token,\n });\n }\n}\n\nexport const apiConfig = OpenApiConfigService.getInstance();\n\nexport { OpenAPI };\n\n// Re-export ApiConfig type\nexport type { ApiConfig } from \"./types/api.types\";\n","import type { Nullable } from \"./types\";\n\nexport class SessionStorage<T> {\n private readonly key: string;\n\n constructor(key: string) {\n this.key = key;\n }\n\n set(data: T): void {\n const serialized = JSON.stringify(data);\n sessionStorage.setItem(this.key, serialized);\n }\n\n get(): Nullable<T> {\n const stored = sessionStorage.getItem(this.key);\n if (!stored) {\n return null;\n }\n\n try {\n return JSON.parse(stored) as T;\n } catch {\n return null;\n }\n }\n\n clear(): void {\n sessionStorage.removeItem(this.key);\n }\n\n exists(): boolean {\n return sessionStorage.getItem(this.key) !== null;\n }\n}\n","import { InitService, OpenAPI } from \"../generated/api\";\nimport { createLogger } from \"../utils/logger\";\nimport { SessionStorage } from \"./session-storage\";\nimport type {\n AuthProvider,\n AuthRetryConfig,\n Nullable,\n SessionInfo,\n} from \"./types\";\n\nconst logger = createLogger(\"auth-manager\");\n\nconst DEFAULT_AUTH_RETRY_CONFIG: AuthRetryConfig = {\n maxRetries: 10,\n initialDelayMs: 200,\n maxDelayMs: 5000,\n backoffMultiplier: 2,\n};\n\nexport class AuthManager {\n private readonly authProvider: AuthProvider;\n private lastToken: Nullable<string> = null;\n private readonly sessionStorage: SessionStorage<SessionInfo>;\n private readonly appId: string;\n private initializePromise: Nullable<Promise<void>> = null;\n private readonly retryConfig: AuthRetryConfig;\n\n constructor(\n authProvider: AuthProvider,\n appId: string,\n retryConfig?: Partial<AuthRetryConfig>\n ) {\n this.authProvider = authProvider;\n this.appId = appId;\n this.sessionStorage = new SessionStorage<SessionInfo>(\n \"callpad_session_info\"\n );\n this.retryConfig = { ...DEFAULT_AUTH_RETRY_CONFIG, ...retryConfig };\n }\n\n private async acquireTokenWithRetry(): Promise<string> {\n const { maxRetries, initialDelayMs, maxDelayMs, backoffMultiplier } =\n this.retryConfig;\n\n let delay = initialDelayMs;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const token = this.authProvider();\n if (token) {\n if (attempt > 0) {\n logger.debug(\"Token acquired after retry\", { attempt });\n }\n return token;\n }\n\n if (attempt < maxRetries) {\n logger.debug(\"Auth token not available, retrying\", {\n attempt: attempt + 1,\n maxRetries,\n delayMs: delay,\n });\n\n await new Promise((resolve) => setTimeout(resolve, delay));\n delay = Math.min(delay * backoffMultiplier, maxDelayMs);\n }\n }\n\n throw new Error(\n `No authentication token available after ${maxRetries} retries. This may indicate the auth provider is temporarily unavailable (e.g., token refresh in progress).`\n );\n }\n\n async initialize(appId: string): Promise<void> {\n try {\n const token = await this.acquireTokenWithRetry();\n\n // Temporarily configure OpenAPI to use GetToken for the init call only\n // This prevents circular dependency (init call → session token → init call)\n const originalToken = OpenAPI.TOKEN;\n OpenAPI.TOKEN = token;\n\n try {\n logger.debug(\"Initializing session\", { appId });\n const response = await InitService.getSignalInit({ appId });\n\n const sessionInfo: SessionInfo = {\n sessionToken: response.sessionToken,\n sessionId: response.sessionId,\n userId: response.userId,\n deviceId: response.deviceId,\n expiresAt: response.expiresAt,\n };\n\n this.sessionStorage.set(sessionInfo);\n logger.info(\"Session initialized successfully\", {\n sessionId: sessionInfo.sessionId,\n userId: sessionInfo.userId,\n });\n } finally {\n // Restore original OpenAPI.TOKEN configuration\n OpenAPI.TOKEN = originalToken;\n }\n } catch (error) {\n logger.error(\"Failed to initialize session\", { appId, error });\n throw new Error(`Session initialization failed: ${error}`);\n }\n }\n\n async getSessionToken(): Promise<string | null> {\n // Check if session already exists\n const sessionInfo = this.sessionStorage.get();\n if (sessionInfo) {\n return sessionInfo.sessionToken;\n }\n\n // If no session exists and no initialization is in progress, start initialization\n if (!this.initializePromise) {\n this.initializePromise = this.initialize(this.appId);\n }\n\n // Wait for initialization to complete\n try {\n await this.initializePromise;\n const newSessionInfo = this.sessionStorage.get();\n return newSessionInfo?.sessionToken || null;\n } catch (error) {\n logger.error(\"Failed to get session token\", { error });\n return null;\n }\n }\n\n getSessionInfo(): SessionInfo | null {\n return this.sessionStorage.get();\n }\n\n getCurrentToken(): string | null {\n const token = this.authProvider();\n if (token !== this.lastToken) {\n this.lastToken = token;\n }\n\n return token;\n }\n}\n","import { SessionStorage } from \"./session-storage\";\n\nexport interface GuestSessionInfo {\n sessionToken: string;\n guestId: string;\n displayName: string;\n callId: string;\n meetingId: string;\n meetingCode: string;\n}\n\nexport class GuestAuthManager {\n private readonly sessionStorage: SessionStorage<GuestSessionInfo>;\n private readonly appId: string;\n private readonly deviceId: string;\n\n constructor(appId: string, deviceId: string) {\n this.appId = appId;\n this.deviceId = deviceId;\n this.sessionStorage = new SessionStorage<GuestSessionInfo>(\n \"callpad_guest_session\"\n );\n }\n\n getAppId(): string {\n return this.appId;\n }\n\n getDeviceId(): string {\n return this.deviceId;\n }\n\n setSession(session: GuestSessionInfo): void {\n this.sessionStorage.set(session);\n }\n\n async getSessionToken(): Promise<string | null> {\n return this.sessionStorage.get()?.sessionToken || null;\n }\n\n getSessionInfo(): GuestSessionInfo | null {\n return this.sessionStorage.get();\n }\n\n clearSession(): void {\n this.sessionStorage.clear();\n }\n}\n","type Nullable<T> = T | null;\n\nexport type CallParticipantRole = \"HOST\" | \"PARTICIPANT\" | \"GUEST\";\n\nexport interface Profile {\n userId: string;\n username: string | null;\n firstName: string | null;\n lastName: string | null;\n profilePhoto: string | null;\n}\n\nexport interface ParticipantPermissions {\n canMute: boolean;\n canKick: boolean;\n canTransfer: boolean;\n canEnd: boolean;\n canRecord: boolean;\n canShareScreen: boolean;\n}\n\nexport interface ParticipantMetadata {\n userId: string | number;\n firstName: Nullable<string>;\n lastName: Nullable<string>;\n username: Nullable<string>;\n email: Nullable<string>;\n profilePhoto: Nullable<string>;\n role: CallParticipantRole;\n permissions: ParticipantPermissions;\n}\n\nexport interface LiveKitJoinInfo {\n token: string;\n roomName: string;\n url: string;\n}\n\nexport interface RecordingInfo {\n recordingId: string;\n egressId: string;\n startedAt: string;\n initiatedBy?: string;\n}\n\nexport type SessionType = \"CALL\" | \"MEETING\";\n\nexport interface MeetingInfo {\n meetingId: string;\n meetingCode: string;\n}\n\nexport interface Session {\n id: string;\n status: \"initializing\" | \"pending\" | \"ready\" | \"active\" | \"ended\";\n mode: \"AUDIO\" | \"VIDEO\";\n role: \"HOST\" | \"PARTICIPANT\" | \"GUEST\";\n livekitInfo?: LiveKitJoinInfo;\n startedAt?: string;\n ringTimeoutMs?: number;\n recording?: RecordingInfo | null;\n sessionType?: SessionType;\n meetingInfo?: MeetingInfo;\n}\n\nexport interface IncomingInvite {\n callId: string;\n inviteId: string;\n caller: ParticipantMetadata;\n mode: \"AUDIO\" | \"VIDEO\";\n expiresAt: string;\n expiresInMs: number;\n ringTimeoutMs: number;\n}\n\nexport interface OutgoingInvite {\n userId: string;\n status: \"sent\" | \"accepted\" | \"declined\" | \"missed\";\n participant?: Omit<ParticipantMetadata, \"permissions\"> | undefined;\n}\n\nexport interface RtcError {\n code: string;\n message: string;\n timestamp: number;\n context?: any;\n}\n\nexport interface GuestIdentity {\n guestId: string;\n displayName: string;\n}\n\nexport interface RtcState {\n // Did we initiate the current call?\n initiated: boolean;\n\n // Active session (null when no active call)\n session: Session | null;\n\n // Incoming invitation (null when no pending invite)\n incomingInvite: IncomingInvite | null;\n\n outgoingInvites: Record<string, OutgoingInvite>;\n\n // Error tracking\n errors: RtcError[];\n\n // Guest mode state\n guestIdentity: GuestIdentity | null;\n isGuestMode: boolean;\n}\n\nexport const defaultState: RtcState = {\n initiated: false,\n session: null,\n incomingInvite: null,\n outgoingInvites: {},\n errors: [],\n guestIdentity: null,\n isGuestMode: false,\n};\n\nimport type { Participant } from \"livekit-client\";\n\nexport interface ParticipantListOptions {\n pageSize?: number;\n includeLocalParticipant?: boolean;\n sortBy?: \"speaking\" | \"name\" | \"raised-hand\";\n}\n\nexport interface ParticipantListReturn {\n participants: Participant[];\n pinnedParticipants: Participant[];\n currentPage: number;\n totalPages: number;\n pageSize: number;\n totalParticipants: number;\n hasNextPage: boolean;\n hasPrevPage: boolean;\n nextPage: () => void;\n prevPage: () => void;\n setPageSize: (size: number) => void;\n togglePin: (participantId: string) => void;\n clearPinned: () => void;\n isPinned: (participantId: string) => boolean;\n}\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport type { RtcError, RtcState } from \"./types\";\nimport { defaultState } from \"./types\";\n\ntype Actions = {\n patch: (fn: (draft: RtcState) => void) => void;\n reset: () => void;\n addError: (error: RtcError) => void;\n clearErrors: () => void;\n};\n\nexport const useRtcStore = create<RtcState & Actions>()(\n immer((set) => ({\n ...defaultState,\n\n patch: (fn) =>\n set((state) => {\n fn(state);\n }),\n\n reset: () => set(() => defaultState),\n\n addError: (error) =>\n set((state) => {\n state.errors.push(error);\n }),\n\n clearErrors: () =>\n set((state) => {\n state.errors = [];\n }),\n }))\n);\n\nexport const rtcStore = useRtcStore;\n","import type { ZodSchema } from \"zod\";\nimport { pushSocketValidationError } from \"../../../state/errors\";\nimport { rtcStore } from \"../../../state/store\";\nimport { createLogger } from \"../../../utils/logger\";\nimport type { CallpadLogger } from \"../../../utils/logger\";\nimport type { AuthManager } from \"../../auth.manager\";\n\nexport interface SocketHandlerOptions {\n livekit?: any;\n authManager?: AuthManager;\n}\n\n/**\n * Base handler for Socket.IO events with automatic validation and type safety.\n *\n * @template TPayload - The type of the event payload\n */\nexport abstract class BaseSocketHandler<TPayload = any> {\n protected abstract readonly eventName: string;\n protected abstract readonly schema: ZodSchema<TPayload>;\n private _logger?: CallpadLogger;\n\n constructor(protected readonly options: SocketHandlerOptions = {}) {}\n\n protected get logger(): CallpadLogger {\n if (!this._logger) {\n this._logger = createLogger(`socketio:${this.eventName}`);\n }\n return this._logger;\n }\n\n async handleRaw(rawData: unknown): Promise<void> {\n this.logger.info(`${this.eventName} received`, rawData);\n\n // const result = this.schema.safeParse(rawData);\n // if (!result.success) {\n // this.logger.error(\n // `${this.eventName} validation failed`,\n // result.error.issues\n // );\n // pushSocketValidationError(\n // this.eventName,\n // result.error.issues,\n // rawData,\n // (level, message, meta) => {\n // switch (level) {\n // case \"debug\":\n // this.logger.debug(message, meta);\n // break;\n // case \"info\":\n // this.logger.info(message, meta);\n // break;\n // case \"warn\":\n // this.logger.warn(message, meta);\n // break;\n // case \"error\":\n // this.logger.error(message, meta);\n // break;\n // }\n // }\n // );\n // return;\n // }\n\n try {\n // TODO fix validation\n await this.handle(JSON.parse(JSON.stringify(rawData)));\n // await this.handle(result.data);\n this.logger.debug(`${this.eventName} handled successfully`);\n } catch (error) {\n this.logger.error(`${this.eventName} handler error`, error);\n throw error;\n }\n }\n\n protected abstract handle(data: TPayload): Promise<void> | void;\n\n protected updateStore(updater: (state: any) => void): void {\n rtcStore.getState().patch(updater);\n }\n\n protected get livekit() {\n return this.options.livekit;\n }\n}\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport type { ChatEntry, ChatState, Envelope } from \"./types\";\n\ninterface ChatActions {\n patch: (fn: (draft: ChatState) => void) => void;\n applyIncoming: (envelope: Envelope) => void;\n addFile: (file: File, filename: string) => void;\n addEntryOptimistic: (entry: ChatEntry) => void;\n markEntrySent: (entryId: string) => void;\n markEntryFailed: (entryId: string) => void;\n applyEdit: (entryId: string, newContent: string, version: number) => void;\n applyRemove: (entryId: string) => void;\n applyReaction: (\n entryId: string,\n emoji: string,\n participantId: string,\n op: \"add\" | \"remove\"\n ) => void;\n queuePendingOp: (entryId: string, envelope: Envelope) => void;\n processPendingOps: (entryId: string) => void;\n trimOldEntries: () => void;\n clearChat: () => void;\n}\n\nconst defaultChatState: ChatState = {\n byId: {},\n order: [],\n pendingOps: {},\n participantCache: {},\n maxEntries: 1000,\n};\n\nfunction applyReactionToEntry(\n entry: ChatEntry,\n emoji: string,\n participantId: string,\n op: \"add\" | \"remove\"\n) {\n const emojiSet = entry.reactions[emoji];\n if (!emojiSet) {\n entry.reactions[emoji] = new Set();\n }\n if (op === \"add\") {\n entry.reactions[emoji]?.add(participantId);\n } else {\n entry.reactions[emoji]?.delete(participantId);\n if (entry.reactions[emoji]?.size === 0) {\n delete entry.reactions[emoji];\n }\n }\n}\n\nfunction trimEntriesIfNeeded(state: ChatState) {\n if (Object.keys(state.byId).length > state.maxEntries) {\n const entriesToRemove = Object.keys(state.byId).length - state.maxEntries;\n for (let i = 0; i < entriesToRemove; i++) {\n const oldestId = state.order[i];\n if (oldestId) {\n delete state.byId[oldestId];\n }\n }\n state.order = state.order.slice(entriesToRemove);\n }\n}\n\nexport const useChatStore = create<ChatState & ChatActions>()(\n immer((set) => ({\n ...defaultChatState,\n\n patch: (fn) =>\n set((state) => {\n fn(state);\n }),\n\n applyIncoming: (envelope) =>\n set((state) => {\n if (envelope.kind === \"entry\") {\n if (state.byId[envelope.entryId]) {\n return;\n }\n\n if (envelope.sender.info) {\n state.participantCache[envelope.sender.id] = envelope.sender.info;\n }\n\n const entry: ChatEntry = {\n id: envelope.entryId,\n content: envelope.payload.content,\n sender: {\n id: envelope.sender.id,\n },\n createdAt: envelope.ts,\n version: 1,\n reactions: {},\n status: \"sent\",\n filename: envelope.payload?.meta?.filename,\n };\n\n state.byId[envelope.entryId] = entry;\n state.order.push(envelope.entryId);\n\n trimEntriesIfNeeded(state);\n\n const pendingOps = state.pendingOps[envelope.entryId];\n if (pendingOps) {\n delete state.pendingOps[envelope.entryId];\n\n for (const op of pendingOps) {\n if (op.kind === \"edit\") {\n const entry = state.byId[op.entryId];\n if (entry && op.payload.version > entry.version) {\n entry.content = op.payload.newContent;\n entry.version = op.payload.version;\n entry.editedAt = op.ts;\n }\n } else if (op.kind === \"remove\") {\n const entry = state.byId[op.entryId];\n if (entry && !entry.removedAt) {\n entry.removedAt = op.ts;\n }\n } else if (op.kind === \"reaction\") {\n if (op.sender.info) {\n state.participantCache[op.sender.id] = op.sender.info;\n }\n\n const entry = state.byId[op.entryId];\n if (entry) {\n applyReactionToEntry(\n entry,\n op.payload.emoji,\n op.sender.id,\n op.payload.op\n );\n }\n }\n }\n }\n } else if (envelope.kind === \"edit\") {\n const entry = state.byId[envelope.entryId];\n if (entry) {\n if (envelope.payload.version > entry.version) {\n entry.content = envelope.payload.newContent;\n entry.version = envelope.payload.version;\n entry.editedAt = envelope.ts;\n }\n } else {\n if (!state.pendingOps[envelope.entryId]) {\n state.pendingOps[envelope.entryId] = [];\n }\n state.pendingOps[envelope.entryId]?.push(envelope);\n }\n } else if (envelope.kind === \"remove\") {\n const entry = state.byId[envelope.entryId];\n if (entry) {\n if (!entry.removedAt) {\n entry.removedAt = envelope.ts;\n }\n } else {\n if (!state.pendingOps[envelope.entryId]) {\n state.pendingOps[envelope.entryId] = [];\n }\n state.pendingOps[envelope.entryId]?.push(envelope);\n }\n } else if (envelope.kind === \"reaction\") {\n if (envelope.sender.info) {\n state.participantCache[envelope.sender.id] = envelope.sender.info;\n }\n\n const entry = state.byId[envelope.entryId];\n if (entry) {\n applyReactionToEntry(\n entry,\n envelope.payload.emoji,\n envelope.sender.id,\n envelope.payload.op\n );\n } else {\n if (!state.pendingOps[envelope.entryId]) {\n state.pendingOps[envelope.entryId] = [];\n }\n state.pendingOps[envelope.entryId]?.push(envelope);\n }\n }\n }),\n\n addFile: (file, filename) =>\n set((state) => {\n const values = Object.values(state.byId);\n const entryArr = values.filter((val) => val.filename === filename);\n const entry = entryArr[0];\n entry!.file = file;\n state.byId[entry!.id] = entry!;\n }),\n\n addEntryOptimistic: (entry) =>\n set((state) => {\n state.byId[entry.id] = entry;\n state.order.push(entry.id);\n\n trimEntriesIfNeeded(state);\n }),\n\n markEntrySent: (entryId) =>\n set((state) => {\n const entry = state.byId[entryId];\n if (entry) {\n entry.status = \"sent\";\n }\n }),\n\n markEntryFailed: (entryId) =>\n set((state) => {\n const entry = state.byId[entryId];\n if (entry) {\n entry.status = \"failed\";\n }\n }),\n\n applyEdit: (entryId, newContent, version) =>\n set((state) => {\n const entry = state.byId[entryId];\n if (entry && version > entry.version) {\n entry.content = newContent;\n entry.version = version;\n entry.editedAt = Date.now();\n }\n }),\n\n applyRemove: (entryId) =>\n set((state) => {\n const entry = state.byId[entryId];\n if (entry && !entry.removedAt) {\n entry.removedAt = Date.now();\n }\n }),\n\n applyReaction: (entryId, emoji, participantId, op) =>\n set((state) => {\n const entry = state.byId[entryId];\n if (entry) {\n applyReactionToEntry(entry, emoji, participantId, op);\n }\n }),\n\n queuePendingOp: (entryId, envelope) =>\n set((state) => {\n if (!state.pendingOps[entryId]) {\n state.pendingOps[entryId] = [];\n }\n state.pendingOps[entryId].push(envelope);\n }),\n\n processPendingOps: (entryId) =>\n set((state) => {\n const pendingOps = state.pendingOps[entryId];\n if (!pendingOps) {\n return;\n }\n\n delete state.pendingOps[entryId];\n\n for (const envelope of pendingOps) {\n if (envelope.kind === \"edit\") {\n const entry = state.byId[envelope.entryId];\n if (entry && envelope.payload.version > entry.version) {\n entry.content = envelope.payload.newContent;\n entry.version = envelope.payload.version;\n entry.editedAt = envelope.ts;\n }\n } else if (envelope.kind === \"remove\") {\n const entry = state.byId[envelope.entryId];\n if (entry && !entry.removedAt) {\n entry.removedAt = envelope.ts;\n }\n } else if (envelope.kind === \"reaction\") {\n if (envelope.sender.info) {\n state.participantCache[envelope.sender.id] = envelope.sender.info;\n }\n\n const entry = state.byId[envelope.entryId];\n if (entry) {\n applyReactionToEntry(\n entry,\n envelope.payload.emoji,\n envelope.sender.id,\n envelope.payload.op\n );\n }\n }\n }\n }),\n\n trimOldEntries: () =>\n set((state) => {\n trimEntriesIfNeeded(state);\n }),\n\n clearChat: () => set(() => defaultChatState),\n }))\n);\n\nexport const chatStore = useChatStore;\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport type { ParticipantMetadata } from \"../../state/types\";\nimport type { RaiseHandEnvelope, RaiseHandState, RaisedHand } from \"./types\";\n\ninterface RaiseHandActions {\n raiseHand: (participantId: string) => void;\n lowerHand: (participantId: string) => void;\n lowerAllHands: () => void;\n isHandRaised: (participantId: string) => boolean;\n getRaisedHandOrder: (participantId: string) => number | null;\n upsertParticipantInfo: (id: string, info: ParticipantMetadata) => void;\n clear: () => void;\n}\n\nconst defaultState: RaiseHandState = {\n raisedHands: new Map(),\n nextOrder: 1,\n};\n\nexport const useRaiseHandStore = create<RaiseHandState & RaiseHandActions>()(\n immer((set, get) => ({\n ...defaultState,\n\n raiseHand: (participantId) =>\n set((state) => {\n if (!state.raisedHands.has(participantId)) {\n state.raisedHands.set(participantId, {\n ts: Date.now(),\n order: state.nextOrder++,\n });\n }\n }),\n\n lowerHand: (participantId) =>\n set((state) => {\n state.raisedHands.delete(participantId);\n // Reset order counter when all hands are lowered\n if (state.raisedHands.size === 0) {\n state.nextOrder = 1;\n }\n }),\n\n lowerAllHands: () =>\n set((state) => {\n state.raisedHands.clear();\n state.nextOrder = 1;\n }),\n\n isHandRaised: (participantId) => get().raisedHands.has(participantId),\n\n getRaisedHandOrder: (participantId) => {\n const hand = get().raisedHands.get(participantId);\n return hand?.order ?? null;\n },\n\n upsertParticipantInfo: (id, info) => {\n // No-op for now, can be extended if needed\n },\n\n clear: () =>\n set(() => ({\n raisedHands: new Map(),\n nextOrder: 1,\n })),\n }))\n);\n\nexport function applyIncomingRaiseHand(envelope: RaiseHandEnvelope): void {\n const { raiseHand, lowerHand, lowerAllHands, upsertParticipantInfo } =\n useRaiseHandStore.getState();\n\n if (envelope.sender.info) {\n upsertParticipantInfo(envelope.sender.id, envelope.sender.info);\n }\n\n switch (envelope.payload.action) {\n case \"raise\": {\n raiseHand(envelope.sender.id);\n break;\n }\n case \"lower\": {\n const targetId = envelope.payload.targetId || envelope.sender.id;\n lowerHand(targetId);\n break;\n }\n case \"lower-all\": {\n lowerAllHands();\n break;\n }\n }\n}\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport type { ParticipantMetadata } from \"../../state/types\";\nimport type {\n SpotlightEnvelope,\n SpotlightState,\n SpotlightedUser,\n} from \"./types\";\n\ninterface SpotlightActions {\n spotlight: (participantId: string, info?: ParticipantMetadata) => void;\n unspotlight: () => void;\n getSpotlightedUser: () => SpotlightedUser | null;\n clear: () => void;\n}\n\nconst defaultState: SpotlightState = {\n spotlightedUser: null,\n isSpotlighted: false,\n};\n\nexport const useSpotlightStore = create<SpotlightState & SpotlightActions>()(\n immer((set, get) => ({\n ...defaultState,\n\n spotlight: (participantId, info) =>\n set((state) => {\n state.spotlightedUser = {\n participantId,\n ts: Date.now(),\n ...(info && { info }),\n };\n state.isSpotlighted = true;\n }),\n\n unspotlight: () =>\n set((state) => {\n state.spotlightedUser = null;\n state.isSpotlighted = false;\n }),\n\n getSpotlightedUser: () => get().spotlightedUser,\n\n clear: () =>\n set(() => ({\n spotlightedUser: null,\n isSpotlighted: false,\n })),\n }))\n);\n\nexport function applyIncomingSpotlight(envelope: SpotlightEnvelope): void {\n const { spotlight, unspotlight } = useSpotlightStore.getState();\n\n switch (envelope.payload.action) {\n case \"spotlight\": {\n // Note: We don't have the target's info in the envelope, only the sender's\n // The info can be populated later if needed from the room's participant list\n spotlight(envelope.payload.targetId, envelope.payload.info);\n break;\n }\n case \"unspotlight\": {\n unspotlight();\n break;\n }\n }\n}\n","// Generated by scripts/generate-socket-types.ts\n// Do not edit this file manually\n\nimport { z } from \"zod\";\n\n// Event: call:ended\n// Event: call:ended\nexport const callEndedSchema = z.object({\n callId: z.string(),\n endedAt: z.string(),\n endedByUserId: z.string().optional(),\n}).strict();\n\nexport type CallEndedEvent = z.infer<typeof callEndedSchema>;\n\n// Event: call:invite\n// Event: call:invite\nexport const callInviteSchema = z.object({\n inviteId: z.string(),\n callId: z.string(),\n userId: z.string(),\n callerId: z.string(),\n mode: z.enum([\"VIDEO\", \"AUDIO\"]),\n invitedAt: z.string(),\n}).strict();\n\nexport type CallInviteEvent = z.infer<typeof callInviteSchema>;\n\n// Event: call:inviteAccepted\n// Event: call:inviteAccepted\nexport const callInviteAcceptedSchema = z.object({\n callId: z.string(),\n userId: z.string(),\n acceptedAt: z.string(),\n}).strict();\n\nexport type CallInviteAcceptedEvent = z.infer<typeof callInviteAcceptedSchema>;\n\n// Event: call:inviteCancelled\n// Event: call:inviteCancelled\nexport const callInviteCancelledSchema = z.object({\n callId: z.string(),\n cancelledByUserId: z.string(),\n cancelledAt: z.string(),\n reason: z.string(),\n}).strict();\n\nexport type CallInviteCancelledEvent = z.infer<typeof callInviteCancelledSchema>;\n\n// Event: call:inviteDeclined\n// Event: call:inviteDeclined\nexport const callInviteDeclinedSchema = z.object({\n callId: z.string(),\n userId: z.string(),\n reason: z.string().optional(),\n declinedAt: z.string(),\n}).strict();\n\nexport type CallInviteDeclinedEvent = z.infer<typeof callInviteDeclinedSchema>;\n\n// Event: call:inviteMissed\n// Event: call:inviteMissed\nexport const callInviteMissedSchema = z.object({\n callId: z.string(),\n userId: z.string(),\n missedAt: z.string(),\n}).strict();\n\nexport type CallInviteMissedEvent = z.infer<typeof callInviteMissedSchema>;\n\n// Event: call:participantAdded\n// Event: call:participantAdded\nexport const callParticipantAddedSchema = z.object({\n callId: z.string(),\n userId: z.string(),\n participantId: z.string(),\n}).strict();\n\nexport type CallParticipantAddedEvent = z.infer<typeof callParticipantAddedSchema>;\n\n// Event: call:participantKicked\n// Event: call:participantKicked\nexport const callParticipantKickedSchema = z.object({\n callId: z.string(),\n participantId: z.string(),\n reason: z.string().optional(),\n}).strict();\n\nexport type CallParticipantKickedEvent = z.infer<typeof callParticipantKickedSchema>;\n\n// Event: call:ready\n// Event: call:ready\nexport const callReadySchema = z.object({\n callId: z.string(),\n participantId: z.string().optional(),\n userId: z.string(),\n message: z.string(),\n}).strict();\n\nexport type CallReadyEvent = z.infer<typeof callReadySchema>;\n\n// Event: call:recordingStarted\n// Event: call:recordingStarted\nexport const callRecordingStartedSchema = z.object({\n callId: z.string(),\n recordingId: z.string(),\n egressId: z.string(),\n initiatedBy: z.string().optional(),\n startedAt: z.string(),\n}).strict();\n\nexport type CallRecordingStartedEvent = z.infer<typeof callRecordingStartedSchema>;\n\n// Event: call:recordingStopped\n// Event: call:recordingStopped\nexport const callRecordingStoppedSchema = z.object({\n callId: z.string(),\n recordingId: z.string(),\n egressId: z.string(),\n stoppedAt: z.string(),\n}).strict();\n\nexport type CallRecordingStoppedEvent = z.infer<typeof callRecordingStoppedSchema>;\n\n// Event: call:started\n// Event: call:started\nexport const callStartedSchema = z.object({\n callId: z.string(),\n startedAt: z.string(),\n}).strict();\n\nexport type CallStartedEvent = z.infer<typeof callStartedSchema>;\n\n// Event: participant:profiles\n// Event: participant:profiles\nexport const participantProfilesSchema = z.object({\n profiles: z.array(z.object({\n userId: z.string(),\n username: z.string().nullable(),\n firstName: z.string().nullable(),\n lastName: z.string().nullable(),\n profilePhoto: z.string().nullable(),\n }).strict()),\n}).strict();\n\nexport type ParticipantProfilesEvent = z.infer<typeof participantProfilesSchema>;\n\n// Event: presence:ping\n// Event: presence:ping\nexport const presencePingSchema = z.object({\n\n}).strict();\n\nexport type PresencePingEvent = z.infer<typeof presencePingSchema>;\n","import type { LogLevel } from \"../utils/logger\";\nimport { rtcStore } from \"./store\";\nimport type { RtcError } from \"./types\";\n\n// Re-export RtcError type for external consumption\nexport type { RtcError } from \"./types\";\n\nexport type ErrorCode =\n | \"NETWORK\"\n | \"SOCKET_PAYLOAD\"\n | \"JOIN_FLOW\"\n | \"LIVEKIT_CONNECT\"\n | \"LIVEKIT_MEDIA\"\n | \"MEDIA_PERMISSION\"\n | \"DEVICE_SWITCH\"\n | \"API_ERROR\"\n | \"UNEXPECTED\"\n | \"GUEST_JOIN_FAILED\"\n | \"GUEST_ACCESS_DISABLED\"\n | \"INVALID_PASSCODE\"\n | \"MEETING_NOT_ACTIVE\"\n | \"GUEST_SESSION_EXPIRED\"\n | \"GUEST_KICKED\";\n\nexport function pushError(\n code: ErrorCode,\n message: string,\n context?: any,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n const error: RtcError = {\n code,\n message,\n timestamp: Date.now(),\n context,\n };\n\n // Log the error if logger is provided\n logger?.(\"error\", message, { code, context });\n rtcStore.getState().addError(error);\n}\n\n/**\n * Clear errors from the store\n * @param predicate Optional filter function - if provided, only matching errors are removed\n */\nexport function clearErrors(predicate?: (error: RtcError) => boolean): void {\n rtcStore.getState().patch((state) => {\n if (predicate) {\n // Remove only errors matching the predicate\n state.errors = state.errors.filter((error) => !predicate(error));\n } else {\n // Clear all errors\n state.errors = [];\n }\n });\n}\n\n// Convenience helpers for common error scenarios\nexport function pushSocketValidationError(\n eventType: string,\n issues: any,\n payload?: any,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n pushError(\n \"SOCKET_PAYLOAD\",\n `Invalid ${eventType} event payload`,\n { eventType, issues, payload },\n logger\n );\n}\n\nexport function pushIdentityGuardError(\n reason: string,\n expected?: string,\n received?: string,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n pushError(\n \"JOIN_FLOW\", // Use new error code\n `Identity guard failed: ${reason}`,\n { expected, received },\n logger\n );\n}\n\nexport function pushLiveKitConnectError(\n message: string,\n error: unknown,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n pushError(\n \"LIVEKIT_CONNECT\",\n `LiveKit connection failed: ${message}`,\n { originalError: error },\n logger\n );\n}\n\nexport function pushStaleEventError(\n eventType: string,\n reason: string,\n context?: any,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n pushError(\n \"JOIN_FLOW\", // Use new error code\n `Ignored stale ${eventType} event: ${reason}`,\n context,\n logger\n );\n}\n\nexport function pushApiError(\n operation: string,\n error: unknown,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n const errorMessage = error instanceof Error ? error.message : String(error);\n pushError(\n \"API_ERROR\",\n `API ${operation} failed: ${errorMessage}`,\n { operation, originalError: error },\n logger\n );\n}\n\nexport function pushNetworkError(\n operation: string,\n error: unknown,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n const errorMessage = error instanceof Error ? error.message : String(error);\n pushError(\n \"NETWORK\",\n `Network error during ${operation}: ${errorMessage}`,\n { operation, originalError: error },\n logger\n );\n}\n\nexport function pushMediaPermissionError(\n device: string,\n error?: unknown,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n pushError(\n \"MEDIA_PERMISSION\",\n `${device} permission denied`,\n { device, originalError: error },\n logger\n );\n}\n\nexport function pushDeviceError(\n operation: string,\n device: string,\n error: unknown,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n const errorMessage = error instanceof Error ? error.message : String(error);\n pushError(\n \"DEVICE_SWITCH\",\n `Failed to ${operation} ${device}: ${errorMessage}`,\n { operation, device, originalError: error },\n logger\n );\n}\n","import { UsersService } from \"../../../generated/api\";\nimport type { UsersData } from \"../../../generated/api/models\";\n\nexport class SignalUsersService {\n constructor(private appId: string) {}\n\n async getById(\n params: Omit<UsersData[\"payloads\"][\"GetSignalUsersById\"], \"appId\">\n ): Promise<UsersData[\"responses\"][\"GetSignalUsersById\"]> {\n return UsersService.getSignalUsersById({\n ...params,\n });\n }\n}\n","import { enableMapSet } from \"immer\";\nimport { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport { SignalUsersService } from \"../clients/signal/services/users\";\nimport type { Profile } from \"./types\";\n\nenableMapSet();\n\ninterface ProfileCacheState {\n profiles: Map<string, Profile>;\n pending: Set<string>;\n inFlight: Map<string, Promise<Profile | undefined>>;\n usersService?: SignalUsersService;\n}\n\ninterface ProfileCacheActions {\n addMany: (profiles: Profile[]) => void;\n get: (userId: string) => Profile | undefined;\n getMany: (userIds: string[]) => (Profile | undefined)[];\n markPending: (userIds: string[]) => void;\n clear: () => void;\n configure: (appId: string) => void;\n getOrFetch: (userId: string) => Promise<Profile | undefined>;\n}\n\nconst initialState: ProfileCacheState = {\n profiles: new Map(),\n pending: new Set(),\n inFlight: new Map(),\n};\n\nexport const useProfileCache = create<\n ProfileCacheState & ProfileCacheActions\n>()(\n immer((set, get) => ({\n ...initialState,\n\n addMany: (profiles) =>\n set((state) => {\n for (const profile of profiles) {\n state.profiles.set(profile.userId, profile);\n state.pending.delete(profile.userId);\n }\n }),\n\n get: (userId) => {\n return get().profiles.get(userId);\n },\n\n getMany: (userIds) => {\n const { profiles } = get();\n return userIds.map((userId) => profiles.get(userId));\n },\n\n markPending: (userIds) =>\n set((state) => {\n for (const userId of userIds) {\n if (!state.profiles.has(userId)) {\n state.pending.add(userId);\n }\n }\n }),\n\n clear: () =>\n set((state) => {\n state.profiles.clear();\n state.pending.clear();\n state.inFlight.clear();\n }),\n\n configure: (appId) =>\n set((state) => {\n state.usersService = new SignalUsersService(appId);\n }),\n\n getOrFetch: async (userId) => {\n const { profiles, inFlight, usersService } = get();\n if (!userId) return undefined;\n\n const cached = profiles.get(userId);\n if (cached) return cached;\n\n const existing = inFlight.get(userId);\n if (existing) return existing;\n\n if (!usersService) {\n console.warn(\"profileCache not configured; cannot fetch profile\");\n return undefined;\n }\n\n const fetchPromise = (async () => {\n set((state) => {\n state.pending.add(userId);\n });\n\n try {\n const response = await usersService.getById({ id: userId });\n\n const profile: Profile = {\n userId: response.userId,\n username: response.username,\n firstName: response.firstName,\n lastName: response.lastName,\n profilePhoto: response.profilePhoto,\n };\n\n get().addMany([profile]);\n return profile;\n } catch (error) {\n console.warn(`Failed to fetch profile for userId: ${userId}`, error);\n return undefined;\n } finally {\n set((state) => {\n state.inFlight.delete(userId);\n state.pending.delete(userId);\n });\n }\n })();\n\n set((state) => {\n state.inFlight.set(userId, fetchPromise);\n });\n\n return fetchPromise;\n },\n }))\n);\n\nexport const profileCache = useProfileCache;\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport type { RecordingInfo } from \"./types\";\n\ninterface RecordingState {\n recording: RecordingInfo | null;\n isRecording: boolean;\n}\n\ninterface RecordingActions {\n setRecording: (recording: RecordingInfo | null) => void;\n clear: () => void;\n}\n\nconst defaultState: RecordingState = {\n recording: null,\n isRecording: false,\n};\n\nexport const useRecordingStore = create<RecordingState & RecordingActions>()(\n immer((set) => ({\n ...defaultState,\n\n setRecording: (recording) =>\n set((state) => {\n state.recording = recording;\n state.isRecording = recording !== null;\n }),\n\n clear: () =>\n set(() => ({\n recording: null,\n isRecording: false,\n })),\n }))\n);\n\nexport const recordingStore = useRecordingStore;\n","import mitt, { type Emitter } from \"mitt\";\nimport type {\n EventHandler,\n EventSubscription,\n SdkEvent,\n SdkEventType,\n} from \"./types\";\n\ntype Events = Record<string, any>;\n\nclass EventBus {\n private emitter: Emitter<Events>;\n\n constructor() {\n this.emitter = mitt<Events>();\n }\n\n on<T = any>(\n eventType: string | SdkEventType,\n handler: EventHandler<T>\n ): EventSubscription {\n const wrappedHandler = (event: SdkEvent<T>) => {\n handler(event);\n };\n\n this.emitter.on(eventType.toString(), wrappedHandler);\n\n return {\n unsubscribe: () => {\n this.emitter.off(eventType.toString(), wrappedHandler);\n },\n };\n }\n\n emit<T = any>(eventType: string | SdkEventType, payload: T): void {\n const event: SdkEvent<T> = {\n type: eventType.toString(),\n payload,\n timestamp: Date.now(),\n };\n\n this.emitter.emit(eventType.toString(), event);\n }\n\n off(eventType: string | SdkEventType): void {\n this.emitter.off(eventType.toString());\n }\n\n removeAllListeners(): void {\n this.emitter.all.clear();\n }\n}\n\nexport const eventBus = new EventBus();\nexport { EventBus };\n","/**\n * SDK Event System Types\n *\n * This file defines the event types and interfaces for the internal SDK event system.\n * The event system provides extensibility and allows components to communicate\n * through a unified, type-safe event bus.\n */\n\nexport interface SdkEvent<T = any> {\n type: string;\n payload: T;\n timestamp: number;\n}\n\n/**\n * SDK Event Types\n * Following the pattern from other WebRTC SDKs like LiveKit\n */\nexport enum SdkEventType {\n // Call lifecycle events\n CALL_INITIATED = \"call:initiated\",\n CALL_INCOMING = \"call:incoming\",\n CALL_DECLINED = \"call:declined\",\n CALL_ENDED = \"call:ended\",\n CALL_CANCELED = \"call:canceled\",\n CALL_TIMEOUT = \"call:timeout\",\n CALL_MISSED = \"call:missed\",\n JOIN_INFO_RECEIVED = \"join-info:received\",\n CALL_STARTED = \"call:started\",\n\n // Meeting lifecycle events\n MEETING_CREATED = \"meeting:created\",\n MEETING_STARTED = \"meeting:started\",\n MEETING_JOINED = \"meeting:joined\",\n MEETING_ENDED = \"meeting:ended\",\n\n // Participant events\n PARTICIPANT_UPDATED = \"participant:updated\",\n PARTICIPANT_INVITED = \"participant:invited\",\n\n // Recording events\n RECORDING_STARTED = \"recording:started\",\n RECORDING_STOPPED = \"recording:stopped\",\n\n // Guest-specific events\n GUEST_JOINED = \"guest:joined\",\n GUEST_LEFT = \"guest:left\",\n GUEST_KICKED = \"guest:kicked\",\n GUEST_SESSION_ERROR = \"guest:session_error\",\n}\n\n/**\n * Event handler type\n */\nexport type EventHandler<T = any> = (event: SdkEvent<T>) => void;\n\n/**\n * Event subscription interface\n */\nexport interface EventSubscription {\n unsubscribe: () => void;\n}\n","import { useChatStore } from \"../../../channel/chat\";\nimport { useRaiseHandStore } from \"../../../channel/raiseHand\";\nimport { useSpotlightStore } from \"../../../channel/spotlight\";\nimport type { CallEndedEvent } from \"../../../generated/socket\";\nimport { callEndedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { profileCache } from \"../../../state/profileCache\";\nimport { recordingStore } from \"../../../state/recording.store\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles call session ended (call:ended)\n *\n * Clears session state, profile cache, and disconnects from LiveKit\n */\nexport class SessionEndedHandler extends BaseSocketHandler<CallEndedEvent> {\n protected readonly eventName = \"call:ended\";\n protected readonly schema = callEndedSchema;\n\n protected handle(data: CallEndedEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.info(\"Call session ended\", {\n callId: data.callId,\n endedAt: data.endedAt,\n endedBy: data.endedByUserId,\n });\n\n if (currentState.session?.id !== data.callId) {\n pushStaleEventError(\"call:ended\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\"Ignoring end event for different call\", {\n callId: data.callId,\n });\n return;\n }\n\n this.updateStore((state) => {\n if (state.session) {\n state.session.status = \"ended\";\n }\n });\n\n rtcStore.getState().reset();\n profileCache.getState().clear();\n recordingStore.getState().clear();\n useChatStore.getState().clearChat();\n useSpotlightStore.getState().clear();\n useRaiseHandStore.getState().clear();\n\n if (this.livekit) {\n this.livekit.disconnect().catch((error: any) => {\n this.logger.error(\"Error disconnecting from LiveKit\", { error });\n });\n }\n\n eventBus.emit(SdkEventType.CALL_ENDED, {\n callId: data.callId,\n endedAt: data.endedAt,\n endedBy: data.endedByUserId,\n timestamp: Date.now(),\n });\n\n this.logger.debug(\"Session cleared and LiveKit disconnected\");\n }\n}\n","import type { CallParticipantKickedEvent } from \"../../../generated/socket\";\nimport { callParticipantKickedSchema } from \"../../../generated/socket\";\nimport { profileCache } from \"../../../state/profileCache\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles participant kicked event (call:participantKicked)\n *\n * If the current user was kicked, disconnects and resets state\n */\nexport class CallParticipantKickedHandler extends BaseSocketHandler<CallParticipantKickedEvent> {\n protected readonly eventName = \"call:participantKicked\";\n protected readonly schema = callParticipantKickedSchema;\n\n protected handle(data: CallParticipantKickedEvent): void {\n this.logger.info(\"Participant kicked\", {\n callId: data.callId,\n participantId: data.participantId,\n reason: data.reason,\n });\n\n this.logger.debug(\"Participant kicked from call\", {\n participantId: data.participantId,\n });\n }\n}\n","import type { CallReadyEvent } from \"../../../generated/socket\";\nimport { callReadySchema } from \"../../../generated/socket\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles call ready event (call:ready)\n *\n * Updates session status to \"ready\" when backend confirms call is ready to connect\n */\nexport class CallReadyHandler extends BaseSocketHandler<CallReadyEvent> {\n protected readonly eventName = \"call:ready\";\n protected readonly schema = callReadySchema;\n\n protected handle(data: CallReadyEvent): void {\n this.logger.info(\"Call ready\", {\n callId: data.callId,\n message: data.message,\n userId: data.userId,\n });\n\n this.updateStore((state) => {\n if (state.session && state.session.id === data.callId) {\n if (state.session.status === \"pending\") {\n state.session.status = \"ready\";\n state.session.startedAt = new Date().toISOString();\n }\n }\n });\n\n this.logger.debug(\"Call status updated to ready\");\n }\n}\n","import type { CallStartedEvent } from \"../../../generated/socket\";\nimport { callStartedSchema } from \"../../../generated/socket\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles call started event (call:started)\n *\n * Updates session status to \"active\" and records start time\n */\nexport class CallStartedHandler extends BaseSocketHandler<CallStartedEvent> {\n protected readonly eventName = \"call:started\";\n protected readonly schema = callStartedSchema;\n\n protected handle(data: CallStartedEvent): void {\n this.logger.info(\"Call started\", {\n callId: data.callId,\n startedAt: data.startedAt,\n });\n\n this.updateStore((state) => {\n if (state.session && state.session.id === data.callId) {\n state.session.status = \"active\";\n state.session.startedAt = data.startedAt;\n }\n });\n\n eventBus.emit(SdkEventType.CALL_STARTED, {\n callId: data.callId,\n startedAt: data.startedAt,\n });\n\n this.logger.debug(\"Call status updated to active\");\n }\n}\n","import type { CallInviteAcceptedEvent } from \"../../../generated/socket\";\nimport { callInviteAcceptedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { rtcStore } from \"../../../state/store\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles invitation accepted (call:inviteAccepted)\n *\n * Updates outgoingInvites status when a participant accepts\n * Only relevant for HOST/caller perspective\n */\nexport class InviteAcceptedHandler extends BaseSocketHandler<CallInviteAcceptedEvent> {\n protected readonly eventName = \"call:inviteAccepted\";\n protected readonly schema = callInviteAcceptedSchema;\n\n protected handle(data: CallInviteAcceptedEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.info(\"Participant accepted invitation\", {\n callId: data.callId,\n userId: data.userId,\n });\n\n if (currentState.session?.id !== data.callId) {\n pushStaleEventError(\"call:inviteAccepted\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\"Ignoring accept event for different call\", {\n callId: data.callId,\n });\n return;\n }\n\n this.updateStore((state) => {\n if (state.outgoingInvites[data.userId]) {\n state.outgoingInvites[data.userId].status = \"accepted\";\n } else {\n state.outgoingInvites[data.userId] = {\n userId: data.userId,\n status: \"accepted\",\n };\n }\n });\n\n this.logger.debug(\"Outgoing invite marked as accepted\", {\n userId: data.userId,\n });\n }\n}\n","import type { CallInviteCancelledEvent } from \"../../../generated/socket\";\nimport { callInviteCancelledSchema } from \"../../../generated/socket\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles invitation cancelled (call:inviteCancelled)\n *\n * Clears incomingInvite when host cancels the invitation\n * Only relevant for PARTICIPANT/callee perspective\n */\nexport class InviteCancelledHandler extends BaseSocketHandler<CallInviteCancelledEvent> {\n protected readonly eventName = \"call:inviteCancelled\";\n protected readonly schema = callInviteCancelledSchema;\n\n protected handle(data: CallInviteCancelledEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.info(\"Invitation cancelled by host\", {\n callId: data.callId,\n cancelledBy: data.cancelledByUserId,\n reason: data.reason,\n });\n\n // Only clear if this matches our incoming invite\n if (currentState.incomingInvite?.callId !== data.callId) {\n this.logger.debug(\"Ignoring cancelled invite for different call\", {\n callId: data.callId,\n });\n return;\n }\n\n rtcStore.getState().reset();\n\n if (data.reason) {\n rtcStore.getState().addError({\n code: \"CALL_CANCELLED\",\n message: data.reason,\n timestamp: Date.now(),\n context: { callId: data.callId, cancelledBy: data.cancelledByUserId },\n });\n }\n\n eventBus.emit(SdkEventType.CALL_CANCELED, {\n callId: data.callId,\n reason: data.reason,\n timestamp: Date.now(),\n });\n\n this.logger.debug(\"Incoming invite cleared due to cancellation\");\n }\n}\n","import type { CallInviteDeclinedEvent } from \"../../../generated/socket\";\nimport { callInviteDeclinedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles invitation declined (call:inviteDeclined)\n *\n * Updates outgoingInvites status when a participant declines\n * Only relevant for HOST/caller perspective\n */\nexport class InviteDeclinedHandler extends BaseSocketHandler<CallInviteDeclinedEvent> {\n protected readonly eventName = \"call:inviteDeclined\";\n protected readonly schema = callInviteDeclinedSchema;\n\n protected handle(data: CallInviteDeclinedEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.info(\"Participant declined invitation\", {\n callId: data.callId,\n userId: data.userId,\n reason: data.reason,\n });\n\n if (currentState.session?.id !== data.callId) {\n pushStaleEventError(\"call:inviteDeclined\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\"Ignoring decline event for different call\", {\n callId: data.callId,\n });\n return;\n }\n\n this.updateStore((state) => {\n if (state.outgoingInvites[data.userId]) {\n state.outgoingInvites[data.userId].status = \"declined\";\n } else {\n state.outgoingInvites[data.userId] = {\n userId: data.userId,\n status: \"declined\",\n };\n }\n\n const inviteStatuses = Object.values(state.outgoingInvites).map(\n (inv: any) => inv.status\n );\n const allDeclinedOrMissed = inviteStatuses.every(\n (status: string) => status === \"declined\" || status === \"missed\"\n );\n\n if (\n inviteStatuses.length > 0 &&\n allDeclinedOrMissed &&\n state.session?.status === \"pending\"\n ) {\n state.session = null;\n state.outgoingInvites = {};\n state.initiated = false;\n }\n });\n\n eventBus.emit(SdkEventType.CALL_DECLINED, {\n callId: data.callId,\n participantId: data.userId,\n reason: data.reason,\n timestamp: Date.now(),\n });\n\n if (data.reason) {\n this.logger.info(\"Decline reason provided\", { reason: data.reason });\n }\n\n this.logger.debug(\"Outgoing invite marked as declined\", {\n userId: data.userId,\n });\n }\n}\n","import type { CallInviteMissedEvent } from \"../../../generated/socket\";\nimport { callInviteMissedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles invitation missed/timeout (call:inviteMissed)\n *\n * Updates outgoingInvites status when an invite times out\n * Only relevant for HOST/caller perspective\n */\nexport class InviteMissedHandler extends BaseSocketHandler<CallInviteMissedEvent> {\n protected readonly eventName = \"call:inviteMissed\";\n protected readonly schema = callInviteMissedSchema;\n\n protected handle(data: CallInviteMissedEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.info(\"Participant missed invitation (timeout)\", {\n callId: data.callId,\n userId: data.userId,\n });\n\n if (currentState.session?.id !== data.callId) {\n pushStaleEventError(\"call:inviteMissed\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\"Ignoring missed event for different call\", {\n callId: data.callId,\n });\n return;\n }\n\n this.updateStore((state) => {\n if (state.outgoingInvites[data.userId]) {\n state.outgoingInvites[data.userId].status = \"missed\";\n } else {\n state.outgoingInvites[data.userId] = {\n userId: data.userId,\n status: \"missed\",\n };\n }\n\n const inviteStatuses = Object.values(state.outgoingInvites).map(\n (inv: any) => inv.status\n );\n const allDeclinedOrMissed = inviteStatuses.every(\n (status: string) => status === \"declined\" || status === \"missed\"\n );\n\n if (\n inviteStatuses.length > 0 &&\n allDeclinedOrMissed &&\n state.session?.status === \"pending\"\n ) {\n state.session = null;\n state.outgoingInvites = {};\n state.initiated = false;\n }\n });\n\n eventBus.emit(SdkEventType.CALL_MISSED, {\n callId: data.callId,\n participantId: data.userId,\n timestamp: Date.now(),\n });\n\n this.logger.debug(\"Outgoing invite marked as missed\", {\n userId: data.userId,\n });\n }\n}\n","import type { CallInviteEvent } from \"../../../generated/socket\";\nimport { callInviteSchema } from \"../../../generated/socket\";\nimport { profileCache } from \"../../../state/profileCache\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles incoming call invitation (call:invite)\n *\n * Sets incomingInvite state to show incoming call UI\n * Marks caller profile as pending for hydration\n */\nexport class InviteHandler extends BaseSocketHandler<CallInviteEvent> {\n protected readonly eventName = \"call:invite\";\n protected readonly schema = callInviteSchema;\n\n protected async handle(data: CallInviteEvent): Promise<void> {\n this.logger.info(\"Incoming call invitation\", {\n callId: data.callId,\n callerId: data.callerId,\n mode: data.mode,\n });\n\n const callerProfile = await profileCache\n .getState()\n .getOrFetch(data.callerId);\n\n this.updateStore((state) => {\n const ringTimeoutMs = (data as any).ringTimeoutMs || 30000;\n const now = new Date();\n const expiresAt = new Date(now.getTime() + ringTimeoutMs);\n\n state.incomingInvite = {\n callId: data.callId,\n inviteId: data.inviteId,\n caller: {\n userId: data.callerId,\n role: \"HOST\",\n firstName: callerProfile?.firstName ?? \"\",\n lastName: callerProfile?.lastName ?? \"\",\n username: callerProfile?.username ?? \"\",\n email: \"\",\n profilePhoto: callerProfile?.profilePhoto ?? \"\",\n },\n mode: data.mode,\n expiresAt: expiresAt.toISOString(),\n expiresInMs: ringTimeoutMs,\n ringTimeoutMs,\n };\n\n state.session = {\n id: data.callId,\n status: \"pending\",\n mode: data.mode,\n role: \"PARTICIPANT\",\n ringTimeoutMs,\n };\n });\n\n eventBus.emit(SdkEventType.CALL_INCOMING, {\n callId: data.callId,\n callerId: data.callerId,\n type: data.mode,\n timestamp: Date.now(),\n });\n\n this.logger.debug(\"Incoming invite state updated\");\n }\n}\n","import type { CallParticipantAddedEvent } from \"../../../generated/socket\";\nimport { callParticipantAddedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { profileCache } from \"../../../state/profileCache\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles participant added to call (call:participantAdded)\n *\n * Updates outgoingInvites if we invited this user\n * Marks profile as pending for hydration\n */\nexport class ParticipantAddedHandler extends BaseSocketHandler<CallParticipantAddedEvent> {\n protected readonly eventName = \"call:participantAdded\";\n protected readonly schema = callParticipantAddedSchema;\n\n protected async handle(data: CallParticipantAddedEvent): Promise<void> {\n const currentState = rtcStore.getState();\n\n this.logger.info(\"Participant added to call\", {\n callId: data.callId,\n participantId: data.participantId,\n userId: data.userId,\n });\n\n if (currentState.session?.id !== data.callId) {\n pushStaleEventError(\"call:participantAdded\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\"Ignoring participant added for different call\", {\n callId: data.callId,\n });\n return;\n }\n\n await profileCache.getState().getOrFetch(data.userId);\n\n this.updateStore((state) => {\n if (state.outgoingInvites[data.userId]) {\n state.outgoingInvites[data.userId].status = \"accepted\";\n }\n });\n\n eventBus.emit(SdkEventType.PARTICIPANT_UPDATED, {\n participantId: data.participantId,\n timestamp: Date.now(),\n });\n\n this.logger.debug(\"Participant added event processed\", {\n participantId: data.participantId,\n userId: data.userId,\n });\n }\n}\n","import type { ParticipantProfilesEvent } from \"../../../generated/socket\";\nimport { participantProfilesSchema } from \"../../../generated/socket\";\nimport { profileCache } from \"../../../state/profileCache\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles participant profile hydration (participant:profiles)\n *\n * Updates the profile cache with received participant information\n * This triggers UI re-renders for components subscribed to the cache\n */\nexport class ParticipantProfilesHandler extends BaseSocketHandler<ParticipantProfilesEvent> {\n protected readonly eventName = \"participant:profiles\";\n protected readonly schema = participantProfilesSchema;\n\n protected handle(data: ParticipantProfilesEvent): void {\n this.logger.info(\"Received participant profiles\", {\n count: data.profiles.length,\n userIds: data.profiles.map((p) => p.userId),\n });\n\n profileCache.getState().addMany(data.profiles);\n\n this.logger.debug(\"Profile cache updated\", {\n totalProfiles: profileCache.getState().profiles.size,\n });\n }\n}\n","import type { CallRecordingStartedEvent } from \"../../../generated/socket\";\nimport { callRecordingStartedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { recordingStore } from \"../../../state/recording.store\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles recording started event (call:recordingStarted)\n *\n * Updates session recording state when recording starts\n */\nexport class RecordingStartedHandler extends BaseSocketHandler<CallRecordingStartedEvent> {\n protected readonly eventName = \"call:recordingStarted\";\n protected readonly schema = callRecordingStartedSchema;\n\n protected handle(data: CallRecordingStartedEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.debug(\"Recording started event received\", {\n callId: data.callId,\n recordingId: data.recordingId,\n egressId: data.egressId,\n initiatedBy: data.initiatedBy,\n startedAt: data.startedAt,\n currentSessionId: currentState.session?.id,\n });\n\n try {\n const recordingInfo = {\n recordingId: data.recordingId,\n egressId: data.egressId,\n startedAt: data.startedAt,\n ...(data.initiatedBy && { initiatedBy: data.initiatedBy }),\n };\n\n // This ensures all participants know recording has started\n recordingStore.getState().setRecording(recordingInfo);\n\n this.logger.debug(\"Recording store updated for all participants\", {\n recordingId: data.recordingId,\n isRecording: recordingStore.getState().isRecording,\n });\n\n // Only update session state if session matches (for backward compatibility)\n if (currentState.session?.id === data.callId) {\n this.updateStore((state) => {\n if (state.session && state.session.id === data.callId) {\n state.session.recording = recordingInfo;\n }\n });\n this.logger.debug(\"Session recording state updated\", {\n callId: data.callId,\n });\n } else {\n pushStaleEventError(\"call:recordingStarted\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\n \"Session callId mismatch, but recording state updated for all participants\",\n {\n callId: data.callId,\n sessionCallId: currentState.session?.id,\n }\n );\n }\n\n eventBus.emit(SdkEventType.RECORDING_STARTED, {\n callId: data.callId,\n recordingId: data.recordingId,\n egressId: data.egressId,\n startedAt: data.startedAt,\n timestamp: Date.now(),\n });\n\n this.logger.info(\"Recording started event processed successfully\", {\n callId: data.callId,\n recordingId: data.recordingId,\n });\n } catch (error) {\n this.logger.error(\"Error processing recording started event\", {\n error,\n callId: data.callId,\n recordingId: data.recordingId,\n });\n throw error;\n }\n }\n}\n","import type { CallRecordingStoppedEvent } from \"../../../generated/socket\";\nimport { callRecordingStoppedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { recordingStore } from \"../../../state/recording.store\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles recording stopped event (call:recordingStopped)\n *\n * Clears recording state when recording stops\n */\nexport class RecordingStoppedHandler extends BaseSocketHandler<CallRecordingStoppedEvent> {\n protected readonly eventName = \"call:recordingStopped\";\n protected readonly schema = callRecordingStoppedSchema;\n\n protected handle(data: CallRecordingStoppedEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.debug(\"Recording stopped event received\", {\n callId: data.callId,\n recordingId: data.recordingId,\n egressId: data.egressId,\n currentSessionId: currentState.session?.id,\n });\n\n try {\n // Clear shared recording store for ALL participants (regardless of session state)\n // This ensures all participants know recording has stopped\n recordingStore.getState().clear();\n\n this.logger.debug(\"Recording store cleared for all participants\", {\n isRecording: recordingStore.getState().isRecording,\n });\n\n // Only update session state if session matches (for backward compatibility)\n if (currentState.session?.id === data.callId) {\n this.updateStore((state) => {\n if (state.session && state.session.id === data.callId) {\n state.session.recording = null;\n }\n });\n this.logger.debug(\"Session recording state cleared\", {\n callId: data.callId,\n });\n } else {\n pushStaleEventError(\"call:recordingStopped\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\n \"Session callId mismatch, but recording state cleared for all participants\",\n {\n callId: data.callId,\n sessionCallId: currentState.session?.id,\n }\n );\n }\n\n eventBus.emit(SdkEventType.RECORDING_STOPPED, {\n callId: data.callId,\n recordingId: data.recordingId,\n egressId: data.egressId,\n timestamp: Date.now(),\n });\n\n this.logger.info(\"Recording stopped event processed successfully\", {\n callId: data.callId,\n recordingId: data.recordingId,\n });\n } catch (error) {\n this.logger.error(\"Error processing recording stopped event\", {\n error,\n callId: data.callId,\n recordingId: data.recordingId,\n });\n throw error;\n }\n }\n}\n","import type { Socket } from \"socket.io-client\";\nimport { createLogger } from \"../../../utils/logger\";\nimport type { SocketHandlerOptions } from \"./base.handler\";\nimport { SessionEndedHandler } from \"./call-ended.handler\";\nimport { CallParticipantKickedHandler } from \"./call-participant-kicked.handler\";\nimport { CallReadyHandler } from \"./call-ready.handler\";\nimport { CallStartedHandler } from \"./call-started.handler\";\nimport { InviteAcceptedHandler } from \"./invite-accepted.handler\";\nimport { InviteCancelledHandler } from \"./invite-cancelled.handler\";\nimport { InviteDeclinedHandler } from \"./invite-declined.handler\";\nimport { InviteMissedHandler } from \"./invite-missed.handler\";\nimport { InviteHandler } from \"./invite.handler\";\nimport { ParticipantAddedHandler } from \"./participant-added.handler\";\nimport { ParticipantProfilesHandler } from \"./participant-profiles.handler\";\nimport { RecordingStartedHandler } from \"./recording-started.handler\";\nimport { RecordingStoppedHandler } from \"./recording-stopped.handler\";\n\nconst logger = createLogger(\"socketio:registry\");\n\n/**\n * Registry for Socket.IO event handlers.\n * Automatically registers handlers with proper typing and error handling.\n */\nexport class SocketHandlerRegistry {\n private handlers = new Map<string, any>();\n\n constructor(private options: SocketHandlerOptions = {}) {\n this.initializeHandlers();\n }\n\n private initializeHandlers(): void {\n const handlers = [\n // Core call flow\n new InviteHandler(this.options),\n new CallReadyHandler(this.options),\n new CallStartedHandler(this.options),\n new SessionEndedHandler(this.options),\n\n // Invite lifecycle\n new InviteAcceptedHandler(this.options),\n new InviteDeclinedHandler(this.options),\n new InviteMissedHandler(this.options),\n new InviteCancelledHandler(this.options),\n\n // Participant management\n new ParticipantAddedHandler(this.options),\n new CallParticipantKickedHandler(this.options),\n\n // Profile hydration\n new ParticipantProfilesHandler(this.options),\n\n // Recording\n new RecordingStartedHandler(this.options),\n new RecordingStoppedHandler(this.options),\n ];\n\n for (const handler of handlers) {\n this.handlers.set((handler as any).eventName, handler);\n }\n\n logger.info(`Registered ${handlers.length} socket event handlers`);\n }\n\n registerEventListeners(socket: Socket): void {\n for (const [eventName, handler] of this.handlers) {\n socket.on(eventName, (rawData: any) => {\n logger.debug(`Socket event received: ${eventName}`, {\n eventName,\n socketId: socket.id,\n connected: socket.connected,\n hasData: !!rawData,\n });\n handler.handleRaw(rawData).catch((error: Error) => {\n logger.error(`Handler error for ${eventName}:`, error);\n });\n });\n }\n logger.debug(\"Event listeners registered on socket\", {\n registeredEvents: Array.from(this.handlers.keys()),\n socketId: socket.id,\n });\n }\n\n removeEventListeners(socket: Socket): void {\n for (const eventName of this.handlers.keys()) {\n socket.off(eventName);\n }\n logger.debug(\"Event listeners removed from socket\");\n }\n\n destroy(): void {\n this.handlers.clear();\n logger.debug(\"Handler registry destroyed\");\n }\n\n /**\n * Get all registered event names\n */\n getRegisteredEvents(): string[] {\n return Array.from(this.handlers.keys());\n }\n}\n","import { type Socket, io } from \"socket.io-client\";\nimport type { PresenceServiceInstance } from \"../../services/presence.service\";\nimport { createLogger } from \"../../utils/logger\";\nimport type { AuthManager } from \"../auth.manager\";\nimport type { Nullable } from \"../types\";\nimport { SocketHandlerRegistry } from \"./handlers\";\nimport type { SocketHandlerOptions } from \"./handlers/base.handler\";\nimport type { ConnectionConfig, ConnectionState } from \"./types\";\n\nexport class SocketManager {\n private static instance: Nullable<SocketManager> = null;\n private logger = createLogger(\"socket\");\n\n private socket: Nullable<Socket> = null;\n private connectionState: ConnectionState = \"DISCONNECTED\";\n private livekit: any = null;\n private handlerRegistry: Nullable<SocketHandlerRegistry> = null;\n private authManager: Nullable<AuthManager> = null;\n private presenceService: Nullable<PresenceServiceInstance> = null;\n\n private constructor() {}\n\n setPresenceService(presenceService: PresenceServiceInstance): void {\n this.presenceService = presenceService;\n }\n\n getSocket(): Nullable<Socket> {\n return this.socket;\n }\n\n static getInstance(): SocketManager {\n if (!SocketManager.instance) {\n SocketManager.instance = new SocketManager();\n }\n return SocketManager.instance;\n }\n\n async initialize(\n baseUrl: string,\n authManager: AuthManager,\n config: ConnectionConfig = {},\n livekit?: any\n ): Promise<void> {\n this.livekit = livekit;\n this.authManager = authManager;\n if (this.socket?.connected) {\n return;\n }\n\n this.updateConnectionState(\"CONNECTING\");\n const token = await authManager.getSessionToken();\n if (!token) {\n throw new Error(\"No session token available\");\n }\n\n try {\n this.socket = io(baseUrl, {\n auth: { token },\n autoConnect: false,\n reconnection: true,\n reconnectionAttempts: config.reconnectAttempts ?? 5,\n reconnectionDelay: config.reconnectDelay ?? 1000,\n reconnectionDelayMax: config.reconnectDelayMax ?? 30000,\n timeout: config.timeout ?? 10000,\n forceNew: true,\n path: \"/signal/socket.io\",\n transports: [\"websocket\"],\n withCredentials: false,\n });\n\n this.setupConnectionHandlers(authManager);\n this.setupEventHandlers();\n this.socket.connect();\n } catch (error) {\n this.updateConnectionState(\"ERROR\");\n throw error;\n }\n }\n\n async initializeWithToken(\n baseUrl: string,\n sessionToken: string,\n config: ConnectionConfig = {}\n ): Promise<void> {\n if (this.socket?.connected) {\n return;\n }\n\n this.updateConnectionState(\"CONNECTING\");\n\n try {\n this.socket = io(baseUrl, {\n auth: { token: sessionToken },\n autoConnect: false,\n reconnection: true,\n reconnectionAttempts: config.reconnectAttempts ?? 5,\n reconnectionDelay: config.reconnectDelay ?? 1000,\n reconnectionDelayMax: config.reconnectDelayMax ?? 30000,\n timeout: config.timeout ?? 10000,\n forceNew: true,\n path: \"/signal/socket.io\",\n transports: [\"websocket\"],\n withCredentials: false,\n });\n\n this.setupGuestConnectionHandlers(sessionToken);\n this.setupEventHandlers();\n this.socket.connect();\n } catch (error) {\n this.updateConnectionState(\"ERROR\");\n throw error;\n }\n }\n\n private setupConnectionHandlers(authManager: AuthManager): void {\n if (!this.socket) return;\n\n this.socket.on(\"connect\", () => {\n this.updateConnectionState(\"CONNECTED\");\n this.logger.info(\"Connected to server\");\n\n if (this.presenceService) {\n this.presenceService.startPing();\n }\n });\n\n this.socket.on(\"disconnect\", (reason: string) => {\n this.updateConnectionState(\"DISCONNECTED\");\n this.logger.info(\"Disconnected\", { reason });\n\n if (this.presenceService) {\n this.presenceService.stopPing();\n }\n });\n\n this.socket.on(\"connect_error\", (error: Error) => {\n this.updateConnectionState(\"ERROR\");\n this.logger.error(\"Connection error\", { error: error.message });\n });\n\n this.socket.io.on(\"reconnect_attempt\", async () => {\n this.updateConnectionState(\"RECONNECTING\");\n const freshToken = await authManager.getSessionToken();\n if (freshToken && this.socket) {\n this.logger.debug(\"Refreshing session token for reconnection\");\n this.socket.auth = { token: freshToken };\n }\n });\n\n this.socket.io.on(\"reconnect\", (attemptNumber: number) => {\n this.logger.info(\"Reconnected successfully\", { attemptNumber });\n\n if (this.presenceService) {\n this.presenceService.startPing();\n }\n });\n\n this.socket.io.on(\"reconnect_error\", (error: Error) => {\n this.logger.error(\"Reconnection error\", { error: error.message });\n if (this.isAuthError(error)) {\n this.updateConnectionState(\"FAILED\");\n }\n });\n\n this.socket.io.on(\"reconnect_failed\", () => {\n this.updateConnectionState(\"FAILED\");\n this.logger.error(\"All reconnection attempts failed\");\n });\n }\n\n private setupGuestConnectionHandlers(sessionToken: string): void {\n if (!this.socket) {\n return;\n }\n\n this.socket.on(\"connect\", () => {\n this.updateConnectionState(\"CONNECTED\");\n this.logger.info(\"Guest connected to server\");\n\n if (this.presenceService) {\n this.presenceService.startPing();\n }\n });\n\n this.socket.on(\"disconnect\", (reason: string) => {\n this.updateConnectionState(\"DISCONNECTED\");\n this.logger.info(\"Guest disconnected\", { reason });\n\n if (this.presenceService) {\n this.presenceService.stopPing();\n }\n });\n\n this.socket.on(\"connect_error\", (error: Error) => {\n this.updateConnectionState(\"ERROR\");\n this.logger.error(\"Guest connection error\", { error: error.message });\n });\n\n this.socket.io.on(\"reconnect_attempt\", () => {\n this.updateConnectionState(\"RECONNECTING\");\n if (this.socket) {\n this.logger.debug(\n \"Reusing stored session token for guest reconnection\"\n );\n this.socket.auth = { token: sessionToken };\n }\n });\n\n this.socket.io.on(\"reconnect\", (attemptNumber: number) => {\n this.logger.info(\"Guest reconnected successfully\", { attemptNumber });\n\n if (this.presenceService) {\n this.presenceService.startPing();\n }\n });\n\n this.socket.io.on(\"reconnect_error\", (error: Error) => {\n this.logger.error(\"Guest reconnection error\", { error: error.message });\n if (this.isAuthError(error)) {\n this.updateConnectionState(\"FAILED\");\n }\n });\n\n this.socket.io.on(\"reconnect_failed\", () => {\n this.updateConnectionState(\"FAILED\");\n this.logger.error(\"All guest reconnection attempts failed\");\n });\n }\n\n private setupEventHandlers(): void {\n if (!this.socket) {\n return;\n }\n\n this.logger.debug(\"Setting up event handlers via registry\");\n\n console.log(\"[SOCKET_MANAGER] Setting up event handlers\", {\n socketId: this.socket.id,\n connected: this.socket.connected,\n });\n\n // Clean up existing handlers to prevent duplicate registrations\n if (this.handlerRegistry) {\n this.handlerRegistry.removeEventListeners(this.socket);\n this.handlerRegistry.destroy();\n }\n\n const options: SocketHandlerOptions = {\n livekit: this.livekit,\n };\n\n if (this.authManager) {\n options.authManager = this.authManager;\n }\n\n this.handlerRegistry = new SocketHandlerRegistry(options);\n\n this.handlerRegistry.registerEventListeners(this.socket);\n\n console.log(\"[SOCKET_MANAGER] Event handlers registered successfully\");\n }\n\n private isAuthError(error: Error): boolean {\n const authErrorIndicators = [\n \"unauthorized\",\n \"authentication\",\n \"token\",\n \"401\",\n \"403\",\n ];\n const errorMessage = error.message.toLowerCase();\n return authErrorIndicators.some((indicator) =>\n errorMessage.includes(indicator)\n );\n }\n\n private updateConnectionState(newState: ConnectionState): void {\n if (this.connectionState !== newState) {\n this.connectionState = newState;\n this.logger.debug(\"Connection state changed\", { newState });\n }\n }\n\n destroy(): void {\n if (this.presenceService) {\n this.presenceService.destroy();\n this.presenceService = null;\n }\n\n if (this.socket) {\n if (this.handlerRegistry) {\n this.handlerRegistry.removeEventListeners(this.socket);\n this.handlerRegistry.destroy();\n this.handlerRegistry = null;\n }\n this.socket.removeAllListeners();\n this.socket.disconnect();\n this.socket = null;\n }\n this.connectionState = \"DISCONNECTED\";\n SocketManager.instance = null;\n this.logger.debug(\"Destroyed and cleaned up\");\n }\n}\n","import { useChatStore } from \"../channel/chat\";\nimport { useRaiseHandStore } from \"../channel/raiseHand\";\nimport { useSpotlightStore } from \"../channel/spotlight\";\nimport { SignalCallsService } from \"../clients/signal\";\nimport type { AuthManager } from \"../core/auth.manager\";\nimport type { CallsData } from \"../generated/api/models\";\nimport { profileCache } from \"../state/profileCache\";\nimport { recordingStore } from \"../state/recording.store\";\nimport { rtcStore } from \"../state/store\";\n\nexport interface CallsServiceConfig {\n appId: string;\n}\n\nexport interface InitiateCallParams {\n invitees: string[];\n mode?: \"AUDIO\" | \"VIDEO\";\n callId?: string;\n}\n\nexport interface CallsServiceDependencies {\n livekitManager?: { disconnect: () => Promise<void> };\n authManager?: AuthManager;\n}\n\nexport function createCallsService(\n config: CallsServiceConfig,\n deps?: CallsServiceDependencies\n) {\n const { appId } = config;\n const signalCalls = new SignalCallsService(appId);\n\n profileCache.getState().configure(appId);\n\n async function initiate(\n params: InitiateCallParams\n ): Promise<\n | CallsData[\"responses\"][\"PostSignalCallsInitiate\"]\n | CallsData[\"responses\"][\"PostSignalCallsInvite\"]\n > {\n try {\n console.log(params, \"params\");\n if (!params.callId) {\n // Set optimistic state immediately\n rtcStore.getState().patch((state) => {\n state.session = {\n id: \"temp\",\n status: \"initializing\",\n mode: params.mode || \"AUDIO\",\n role: \"HOST\",\n };\n state.initiated = true;\n });\n console.log(\"state: \", rtcStore.getState());\n\n const response = await signalCalls.initiate({\n requestBody: {\n inviteeIds: params.invitees,\n mode: params.mode || \"AUDIO\",\n },\n });\n\n if (response.participants && response.participants.length > 0) {\n profileCache.getState().addMany(\n response.participants.map((p) => ({\n userId: p.userId,\n username: p.username,\n firstName: p.firstName,\n lastName: p.lastName,\n profilePhoto: p.profilePhoto,\n }))\n );\n }\n\n rtcStore.getState().patch((state) => {\n state.initiated = true;\n state.session = {\n id: response.callId,\n status: \"pending\",\n mode: params.mode || \"AUDIO\",\n role: \"HOST\",\n ringTimeoutMs: response.ringTimeoutMs,\n };\n\n for (const userId of response.inviteeIds) {\n const profile = profileCache.getState().get(userId);\n state.outgoingInvites[userId] = {\n userId,\n status: \"sent\",\n participant: profile\n ? {\n userId: profile.userId,\n role: \"PARTICIPANT\",\n firstName: profile.firstName,\n lastName: profile.lastName,\n username: profile.username,\n email: \"\",\n profilePhoto: profile.profilePhoto,\n }\n : undefined,\n };\n }\n\n if (response.joinInfo) {\n state.session.livekitInfo = {\n token: response.joinInfo.token,\n roomName: response.callId,\n url: response.joinInfo.lkUrl,\n };\n }\n });\n\n return response;\n }\n const response = await signalCalls.invite({\n requestBody: {\n callId: params.callId,\n participants: params.invitees.map((userId) => ({\n userId: String(userId),\n })),\n },\n });\n\n if (response.participants && response.participants.length > 0) {\n profileCache.getState().addMany(\n response.participants.map((p) => ({\n userId: p.userId,\n username: p.username,\n firstName: p.firstName,\n lastName: p.lastName,\n profilePhoto: p.profilePhoto,\n }))\n );\n }\n\n rtcStore.getState().patch((state) => {\n for (const userId of response.inviteeIds) {\n const profile = profileCache.getState().get(userId);\n state.outgoingInvites[userId] = {\n userId,\n status: \"sent\",\n participant: profile\n ? {\n userId: profile.userId,\n role: \"PARTICIPANT\",\n firstName: profile.firstName,\n lastName: profile.lastName,\n username: profile.username,\n email: \"\",\n profilePhoto: profile.profilePhoto,\n }\n : undefined,\n };\n }\n\n if (response.joinInfo && state.session) {\n state.session.livekitInfo = {\n token: response.joinInfo.token,\n roomName: state.session.id,\n url: response.joinInfo.lkUrl,\n };\n }\n });\n\n return response;\n } catch (error: any) {\n // Clear optimistic state on error\n rtcStore.getState().patch((state) => {\n state.session = null;\n state.initiated = false;\n });\n rtcStore.getState().addError({\n code: \"INITIATE_FAILED\",\n message: error.message || \"Failed to initiate call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function accept(): Promise<\n CallsData[\"responses\"][\"PostSignalCallsByCallIdAccept\"]\n > {\n const currentState = rtcStore.getState();\n if (!currentState.incomingInvite) {\n throw new Error(\"No incoming invite to accept\");\n }\n\n const { callId, inviteId, mode } = currentState.incomingInvite;\n\n // Set optimistic state immediately\n rtcStore.getState().patch((state) => {\n state.session = {\n id: callId,\n status: \"initializing\",\n mode: mode,\n role: \"PARTICIPANT\",\n };\n state.incomingInvite = null;\n });\n\n try {\n const response = await signalCalls.accept({\n callId,\n requestBody: {\n inviteId,\n },\n });\n\n rtcStore.getState().patch((state) => {\n // Update the existing optimistic session\n if (state.session && state.session.id === callId) {\n state.session.status = \"ready\";\n\n // Set startedAt - use backend value if available, otherwise generate locally\n if (response.call?.startedAt) {\n state.session.startedAt = response.call.startedAt;\n } else {\n state.session.startedAt = new Date().toISOString();\n }\n\n if (response.joinInfo) {\n state.session.livekitInfo = {\n token: response.joinInfo.token,\n roomName: state.session.id,\n url: response.joinInfo.lkUrl,\n };\n\n if (response.ringTimeoutMs) {\n state.session.ringTimeoutMs = response.ringTimeoutMs;\n }\n }\n }\n });\n\n return response;\n } catch (error: any) {\n // Rollback optimistic state on error\n rtcStore.getState().patch((state) => {\n state.session = null;\n state.incomingInvite = currentState.incomingInvite;\n });\n rtcStore.getState().addError({\n code: \"ACCEPT_FAILED\",\n message: error.message || \"Failed to accept call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function decline(\n reason?: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdDecline\"]> {\n try {\n const currentState = rtcStore.getState();\n if (!currentState.incomingInvite) {\n throw new Error(\"No incoming invite to decline\");\n }\n\n const { callId, inviteId } = currentState.incomingInvite;\n const requestBody: NonNullable<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdDecline\"][\"requestBody\"]\n > = {\n inviteId,\n };\n\n if (reason) {\n requestBody.reason = reason;\n }\n\n const response = await signalCalls.decline({\n callId,\n requestBody,\n });\n\n // Clear local state after successful decline\n rtcStore.getState().patch((state) => {\n state.incomingInvite = null;\n state.session = null;\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"DECLINE_FAILED\",\n message: error.message || \"Failed to decline call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function cancel(\n callId: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdCancel\"]> {\n try {\n rtcStore.getState().reset();\n return signalCalls.cancel({\n callId,\n });\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"CANCEL_FAILED\",\n message: error.message || \"Failed to cancel call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function leave(): Promise<void> {\n try {\n if (deps?.livekitManager) {\n await deps.livekitManager.disconnect();\n } else {\n rtcStore.getState().reset();\n profileCache.getState().clear();\n recordingStore.getState().clear();\n useChatStore.getState().clearChat();\n useSpotlightStore.getState().clear();\n useRaiseHandStore.getState().clear();\n }\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"LEAVE_FAILED\",\n message: error.message || \"Failed to leave call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function transfer(\n callId: string,\n targetParticipantId: string,\n reason?: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdTransfer\"]> {\n try {\n const requestBody: NonNullable<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdTransfer\"][\"requestBody\"]\n > = {\n targetParticipantId,\n };\n if (reason) {\n requestBody.reason = reason;\n }\n return signalCalls.transfer({\n callId,\n requestBody,\n });\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"TRANSFER_FAILED\",\n message: error.message || \"Failed to transfer call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function kick(\n callId: string,\n participantId: string,\n reason?: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdKick\"]> {\n try {\n const requestBody: NonNullable<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdKick\"][\"requestBody\"]\n > = {\n participantId,\n };\n if (reason) {\n requestBody.reason = reason;\n }\n return signalCalls.kick({\n callId,\n requestBody,\n });\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"KICK_FAILED\",\n message: error.message || \"Failed to kick participant\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function mute(\n callId: string,\n participantId: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdMute\"]> {\n try {\n return signalCalls.mute({\n callId,\n requestBody: {\n participantId,\n },\n });\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"MUTE_FAILED\",\n message: error.message || \"Failed to mute participant\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function end(\n callId: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdEnd\"]> {\n try {\n const response = await signalCalls.end({\n callId,\n });\n\n rtcStore.getState().reset();\n profileCache.getState().clear();\n recordingStore.getState().clear();\n useChatStore.getState().clearChat();\n useSpotlightStore.getState().clear();\n useRaiseHandStore.getState().clear();\n\n return response;\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"END_CALL_FAILED\",\n message: error.message || \"Failed to end call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function invite(\n callId: string,\n invitees: string[]\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsInvite\"]> {\n try {\n const response = await signalCalls.invite({\n requestBody: {\n callId,\n participants: invitees.map((userId) => ({ userId: String(userId) })),\n },\n });\n\n if (response.participants && response.participants.length > 0) {\n profileCache.getState().addMany(\n response.participants.map((p) => ({\n userId: p.userId,\n username: p.username,\n firstName: p.firstName,\n lastName: p.lastName,\n profilePhoto: p.profilePhoto,\n }))\n );\n }\n\n rtcStore.getState().patch((state) => {\n for (const userId of response.inviteeIds) {\n const profile = profileCache.getState().get(userId);\n state.outgoingInvites[userId] = {\n userId,\n status: \"sent\",\n participant: profile\n ? {\n userId: profile.userId,\n role: \"PARTICIPANT\",\n firstName: profile.firstName,\n lastName: profile.lastName,\n username: profile.username,\n email: \"\",\n profilePhoto: profile.profilePhoto,\n }\n : undefined,\n };\n }\n\n if (response.joinInfo && state.session) {\n state.session.livekitInfo = {\n token: response.joinInfo.token,\n roomName: state.session.id,\n url: response.joinInfo.lkUrl,\n };\n }\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"INVITE_FAILED\",\n message: error.message || \"Failed to send invites\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function get(\n callId: string\n ): Promise<CallsData[\"responses\"][\"GetSignalCallsByCallId\"]> {\n return signalCalls.get({\n callId,\n });\n }\n\n async function startRecording(\n callId: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdRecordingsStart\"]> {\n try {\n const response = await signalCalls.startRecording({\n callId,\n });\n\n // Get current user ID from session info\n const sessionInfo = deps?.authManager?.getSessionInfo();\n const userId = sessionInfo?.userId || \"\";\n\n const info = response.message.split(\" \");\n const recordingId = info[1];\n const egressId = info[4];\n\n // Validate parsed values\n if (!recordingId || !egressId) {\n rtcStore.getState().addError({\n code: \"START_RECORDING_PARSE_ERROR\",\n message: `Failed to parse recording info from response message: ${response.message}`,\n timestamp: Date.now(),\n context: { message: response.message, parsedInfo: info },\n });\n\n return response;\n }\n\n // Create a single timestamp to ensure consistency across both stores\n const startedAt = new Date().toISOString();\n\n // NOTE: This is an optimistic update from the API response.\n // The socket event (call:recordingStarted) should also be received to confirm\n // and ensure all participants (including the host) get the update via socket.\n // Store recording info in session state (for backward compatibility)\n rtcStore.getState().patch((state) => {\n if (state.session && state.session.id === callId) {\n state.session.recording = {\n recordingId,\n egressId,\n startedAt,\n initiatedBy: userId,\n };\n }\n });\n\n // Update shared recording store (available to all participants)\n // This is an optimistic update - the socket event should also update this\n recordingStore.getState().setRecording({\n recordingId,\n egressId,\n startedAt,\n initiatedBy: userId,\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"START_RECORDING_FAILED\",\n message: error.message || \"Failed to start recording\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function stopRecording(\n callId: string,\n recordingId: string\n ): Promise<\n CallsData[\"responses\"][\"PostSignalCallsByCallIdRecordingsByRecordingIdStop\"]\n > {\n try {\n const response = await signalCalls.stopRecording({\n callId,\n recordingId,\n });\n\n // Clear recording info from session state (for backward compatibility)\n rtcStore.getState().patch((state) => {\n if (state.session && state.session.id === callId) {\n state.session.recording = null;\n }\n });\n\n // Clear shared recording store (available to all participants)\n recordingStore.getState().clear();\n\n return response;\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"STOP_RECORDING_FAILED\",\n message: error.message || \"Failed to stop recording\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n return {\n initiate,\n invite,\n accept,\n decline,\n cancel,\n leave,\n end,\n transfer,\n kick,\n mute,\n startRecording,\n stopRecording,\n };\n}\n\nexport type CallsServiceInstance = ReturnType<typeof createCallsService>;\n","import { type RemoteParticipant, type Room, RoomEvent } from \"livekit-client\";\nimport { profileCache } from \"../state/profileCache\";\nimport { rtcStore } from \"../state/store\";\nimport { createLogger } from \"../utils\";\n\nconst logger = createLogger(\"livekitRoomManager\");\n\nexport class LiveKitRoomManager {\n private room: Room | undefined;\n\n attach(room: Room): void {\n if (this.room === room) {\n logger.debug(\"Already attached to this room\");\n return;\n }\n\n this.detach();\n this.room = room;\n logger.info(\"Attaching to LiveKit room\");\n room.on(\n RoomEvent.ParticipantDisconnected,\n this.handleParticipantDisconnected\n );\n room.on(RoomEvent.Disconnected, this.handleRoomDisconnected);\n }\n\n detach(): void {\n if (!this.room) {\n return;\n }\n\n logger.info(\"Detaching from LiveKit room\");\n this.room.off(\n RoomEvent.ParticipantDisconnected,\n this.handleParticipantDisconnected\n );\n this.room.off(RoomEvent.Disconnected, this.handleRoomDisconnected);\n this.room = undefined;\n }\n\n async disconnect(): Promise<void> {\n if (this.room) {\n logger.info(\"Disconnecting from LiveKit room\");\n await this.room.disconnect().catch((error) => {\n logger.error(\"Error disconnecting from room\", error);\n });\n }\n\n this.detach();\n rtcStore.getState().reset();\n profileCache.getState().clear();\n }\n\n private handleParticipantDisconnected = (participant: RemoteParticipant) => {\n if (!this.room) {\n return;\n }\n\n const remoteCount = this.room.remoteParticipants.size;\n logger.debug(\"Participant disconnected\", {\n participantId: participant.identity,\n remoteCount,\n });\n\n if (remoteCount === 0) {\n const session = rtcStore.getState().session;\n if (!session || session.status === \"ended\") {\n logger.debug(\"Session already ended, skipping auto-disconnect\");\n return;\n }\n\n logger.info(\"Last remote participant left, disconnecting\");\n this.disconnect().catch((error) => {\n logger.error(\"Error disconnecting from LiveKit room\", error);\n });\n }\n };\n\n private handleRoomDisconnected = () => {\n logger.info(\"Room disconnected\");\n this.disconnect().catch((error) => {\n logger.error(\"Error disconnecting from LiveKit room\", error);\n });\n };\n}\n","import { useChatStore } from \"../channel/chat\";\nimport { useRaiseHandStore } from \"../channel/raiseHand\";\nimport { useSpotlightStore } from \"../channel/spotlight\";\nimport {\n type GuestJoinResponse,\n SignalMeetingsService,\n} from \"../clients/signal\";\nimport { eventBus } from \"../core/events\";\nimport { SdkEventType } from \"../core/events/types\";\nimport type { MeetingsData } from \"../generated/api/models\";\nimport type {\n CreateAdHocMeetingParams,\n EndMeetingResponse,\n JoinMeetingParams,\n MeetingResponse,\n} from \"../state/meetings.types\";\nimport { profileCache } from \"../state/profileCache\";\nimport { recordingStore } from \"../state/recording.store\";\nimport { rtcStore } from \"../state/store\";\n\nexport interface MeetingsServiceConfig {\n appId: string;\n}\n\nexport interface MeetingsServiceDependencies {\n livekitManager?: { disconnect: () => Promise<void> };\n}\n\nexport interface GuestJoinMeetingParams {\n meetingCode: string;\n displayName: string;\n passcode?: string;\n}\n\nexport interface GuestJoinContext {\n deviceId: string;\n signalHost: string;\n onSessionToken: (token: string) => Promise<void>;\n}\n\nexport function createMeetingsService(\n config: MeetingsServiceConfig,\n deps?: MeetingsServiceDependencies\n) {\n const { appId } = config;\n const signalMeetings = new SignalMeetingsService(appId);\n\n async function createAdHoc(\n params: CreateAdHocMeetingParams = {}\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsCreate\"]> {\n try {\n rtcStore.getState().patch((state) => {\n state.session = {\n id: \"temp\",\n status: \"initializing\",\n mode: params.mode || \"VIDEO\",\n role: \"HOST\",\n sessionType: \"MEETING\",\n };\n state.initiated = true;\n });\n\n const requestBody: { mode?: \"AUDIO\" | \"VIDEO\"; title?: string } = {};\n if (params.mode) {\n requestBody.mode = params.mode;\n }\n if (params.title) {\n requestBody.title = params.title;\n }\n\n const response = await signalMeetings.createAdHoc({\n requestBody,\n });\n\n rtcStore.getState().patch((state) => {\n state.initiated = true;\n state.session = {\n id: response.meeting.callId,\n status: \"active\",\n mode: params.mode || \"VIDEO\",\n role: \"HOST\",\n sessionType: \"MEETING\",\n meetingInfo: {\n meetingId: response.meeting.id,\n meetingCode: response.meeting.code,\n },\n livekitInfo: {\n token: response.joinInfo.token,\n roomName: response.meeting.callId,\n url: response.joinInfo.lkUrl,\n },\n };\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().patch((state) => {\n state.session = null;\n state.initiated = false;\n });\n rtcStore.getState().addError({\n code: \"CREATE_MEETING_FAILED\",\n message: error.message || \"Failed to create meeting\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function start(\n meetingId: string\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsByMeetingIdStart\"]> {\n try {\n rtcStore.getState().patch((state) => {\n state.session = {\n id: \"temp\",\n status: \"initializing\",\n mode: \"VIDEO\",\n role: \"HOST\",\n sessionType: \"MEETING\",\n };\n state.initiated = true;\n });\n\n const response = await signalMeetings.start({\n meetingId,\n });\n\n rtcStore.getState().patch((state) => {\n state.initiated = true;\n state.session = {\n id: response.meeting.callId,\n status: \"active\",\n mode: \"VIDEO\",\n role: \"HOST\",\n sessionType: \"MEETING\",\n meetingInfo: {\n meetingId: response.meeting.id,\n meetingCode: response.meeting.code,\n },\n livekitInfo: {\n token: response.joinInfo.token,\n roomName: response.meeting.callId,\n url: response.joinInfo.lkUrl,\n },\n };\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().patch((state) => {\n state.session = null;\n state.initiated = false;\n });\n rtcStore.getState().addError({\n code: \"START_MEETING_FAILED\",\n message: error.message || \"Failed to start meeting\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function join(\n params: JoinMeetingParams\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsJoin\"]> {\n if (!params.meetingCode && !params.meetingId) {\n throw new Error(\"Either meetingCode or meetingId is required\");\n }\n\n try {\n rtcStore.getState().patch((state) => {\n state.session = {\n id: \"temp\",\n status: \"initializing\",\n mode: \"VIDEO\",\n role: \"PARTICIPANT\",\n sessionType: \"MEETING\",\n };\n state.initiated = false;\n });\n\n const requestBody: { meetingCode?: string; meetingId?: string } = {};\n if (params.meetingCode) {\n requestBody.meetingCode = params.meetingCode;\n }\n if (params.meetingId) {\n requestBody.meetingId = params.meetingId;\n }\n\n const response = await signalMeetings.join({\n requestBody,\n });\n\n rtcStore.getState().patch((state) => {\n state.session = {\n id: response.meeting.callId,\n status: \"active\",\n mode: \"VIDEO\",\n role: \"PARTICIPANT\",\n sessionType: \"MEETING\",\n meetingInfo: {\n meetingId: response.meeting.id,\n meetingCode: response.meeting.code,\n },\n livekitInfo: {\n token: response.joinInfo.token,\n roomName: response.meeting.callId,\n url: response.joinInfo.lkUrl,\n },\n };\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().patch((state) => {\n state.session = null;\n });\n rtcStore.getState().addError({\n code: \"JOIN_MEETING_FAILED\",\n message: error.message || \"Failed to join meeting\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function end(\n meetingId: string\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsByMeetingIdEnd\"]> {\n try {\n const response = await signalMeetings.end({\n meetingId,\n });\n\n rtcStore.getState().reset();\n profileCache.getState().clear();\n recordingStore.getState().clear();\n useChatStore.getState().clearChat();\n useSpotlightStore.getState().clear();\n useRaiseHandStore.getState().clear();\n\n return response;\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"END_MEETING_FAILED\",\n message: error.message || \"Failed to end meeting\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function guestJoin(\n params: GuestJoinMeetingParams,\n context: GuestJoinContext\n ): Promise<GuestJoinResponse> {\n const { meetingCode, displayName, passcode } = params;\n\n rtcStore.getState().patch((state) => {\n state.isGuestMode = true;\n state.session = {\n id: \"temp\",\n status: \"initializing\",\n mode: \"VIDEO\",\n role: \"GUEST\",\n sessionType: \"MEETING\",\n };\n });\n\n try {\n const guestJoinParams: {\n meetingCode: string;\n displayName: string;\n passcode?: string;\n appId: string;\n deviceId: string;\n } = {\n meetingCode,\n displayName,\n appId,\n deviceId: context.deviceId,\n };\n if (passcode) {\n guestJoinParams.passcode = passcode;\n }\n\n const response = await signalMeetings.guestJoin(\n guestJoinParams,\n context.signalHost\n );\n\n rtcStore.getState().patch((state) => {\n state.guestIdentity = {\n guestId: response.guestId,\n displayName,\n };\n state.session = {\n id: response.meeting.callId,\n status: \"active\",\n mode: \"VIDEO\",\n role: \"GUEST\",\n sessionType: \"MEETING\",\n meetingInfo: {\n meetingId: response.meeting.id,\n meetingCode: response.meeting.code,\n },\n livekitInfo: {\n token: response.joinInfo.token,\n roomName: response.meeting.callId,\n url: response.joinInfo.lkUrl,\n },\n };\n });\n\n await context.onSessionToken(response.sessionToken);\n\n eventBus.emit(SdkEventType.GUEST_JOINED, {\n guestId: response.guestId,\n displayName,\n meetingCode: response.meeting.code,\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().patch((state) => {\n state.session = null;\n state.guestIdentity = null;\n state.isGuestMode = false;\n });\n rtcStore.getState().addError({\n code: \"GUEST_JOIN_FAILED\",\n message: error.message || \"Failed to join meeting as guest\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function leave(): Promise<void> {\n const state = rtcStore.getState();\n const isGuest = state.isGuestMode;\n\n try {\n if (deps?.livekitManager) {\n await deps.livekitManager.disconnect();\n }\n\n rtcStore.getState().patch((state) => {\n state.session = null;\n state.initiated = false;\n if (isGuest) {\n state.guestIdentity = null;\n state.isGuestMode = false;\n }\n });\n\n profileCache.getState().clear();\n recordingStore.getState().clear();\n useChatStore.getState().clearChat();\n useSpotlightStore.getState().clear();\n useRaiseHandStore.getState().clear();\n\n eventBus.emit(\n isGuest ? SdkEventType.GUEST_LEFT : SdkEventType.MEETING_ENDED,\n {}\n );\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"LEAVE_MEETING_FAILED\",\n message: error.message || \"Failed to leave meeting\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n return {\n createAdHoc,\n start,\n join,\n end,\n leave,\n guestJoin,\n };\n}\n\nexport type MeetingsServiceInstance = ReturnType<typeof createMeetingsService>;\n","export type PresenceStatus = \"online\" | \"offline\" | \"busy\";\n\nexport interface UserPresence {\n userId: string;\n status: PresenceStatus;\n deviceCount: number;\n lastUpdated: number;\n}\n\nexport interface PresenceConfig {\n pingIntervalMs: number;\n}\n\nexport const DEFAULT_PRESENCE_CONFIG: PresenceConfig = {\n pingIntervalMs: 30_000,\n};\n","import type { Socket } from \"socket.io-client\";\nimport { SignalPresenceService } from \"../clients/signal\";\nimport type { PresenceConfig, UserPresence } from \"../state/presence.types\";\nimport { DEFAULT_PRESENCE_CONFIG } from \"../state/presence.types\";\nimport { createLogger } from \"../utils\";\n\nexport interface PresenceServiceConfig {\n appId: string;\n}\n\nexport interface PresenceServiceDependencies {\n getSocket: () => Socket | null;\n}\n\nexport interface PresenceServiceInstance {\n startPing: () => void;\n stopPing: () => void;\n queryPresence: (userIds: string[]) => Promise<UserPresence[]>;\n getPresence: (userId: string) => Promise<UserPresence | undefined>;\n configure: (config: Partial<PresenceConfig>) => void;\n destroy: () => void;\n}\n\nexport function createPresenceService(\n config: PresenceServiceConfig,\n deps: PresenceServiceDependencies\n): PresenceServiceInstance {\n const logger = createLogger(\"presence\");\n const signalPresence = new SignalPresenceService(config.appId);\n\n let pingIntervalId: ReturnType<typeof setInterval> | null = null;\n let presenceConfig: PresenceConfig = { ...DEFAULT_PRESENCE_CONFIG };\n const inFlight = new Map<string, Promise<UserPresence[] | undefined>>();\n\n function startPing(): void {\n if (pingIntervalId) {\n logger.debug(\"Ping already running\");\n return;\n }\n\n const emitPing = () => {\n const socket = deps.getSocket();\n if (socket?.connected) {\n socket.emit(\"presence:ping\");\n logger.debug(\"Emitted presence:ping\");\n }\n };\n\n emitPing();\n pingIntervalId = setInterval(emitPing, presenceConfig.pingIntervalMs);\n\n logger.info(\"Started presence ping\", {\n intervalMs: presenceConfig.pingIntervalMs,\n });\n }\n\n function stopPing(): void {\n if (pingIntervalId) {\n clearInterval(pingIntervalId);\n pingIntervalId = null;\n logger.info(\"Stopped presence ping\");\n }\n }\n\n async function queryPresence(userIds: string[]): Promise<UserPresence[]> {\n if (userIds.length === 0) {\n return [];\n }\n\n const cacheKey = [...userIds].sort().join(\",\");\n\n const existing = inFlight.get(cacheKey);\n if (existing) {\n logger.debug(\"Reusing in-flight request\", { cacheKey });\n return (await existing) ?? [];\n }\n\n const fetchPromise = (async (): Promise<UserPresence[] | undefined> => {\n try {\n const response = await signalPresence.queryPresence(userIds);\n\n return response.presence.map((p) => ({\n userId: p.userId,\n status: p.status,\n deviceCount: p.deviceCount,\n lastUpdated: Date.now(),\n }));\n } catch (error) {\n logger.error(\"Failed to fetch presence\", { error, userIds });\n return undefined;\n } finally {\n inFlight.delete(cacheKey);\n }\n })();\n\n inFlight.set(cacheKey, fetchPromise);\n return (await fetchPromise) ?? [];\n }\n\n async function getPresence(\n userId: string\n ): Promise<UserPresence | undefined> {\n const results = await queryPresence([userId]);\n return results[0];\n }\n\n function configure(config: Partial<PresenceConfig>): void {\n presenceConfig = { ...presenceConfig, ...config };\n\n if (pingIntervalId) {\n stopPing();\n startPing();\n }\n }\n\n function destroy(): void {\n stopPing();\n inFlight.clear();\n logger.debug(\"Presence service destroyed\");\n }\n\n return {\n startPing,\n stopPing,\n queryPresence,\n getPresence,\n configure,\n destroy,\n };\n}\n","import { type GuestJoinResponse, SignalClient } from \"../clients/signal\";\nimport { apiConfig } from \"../clients/signal/config\";\nimport type { ApiConfig } from \"../clients/signal/types\";\nimport { AuthManager, GuestAuthManager, SocketManager } from \"../core\";\nimport type { AuthRetryConfig } from \"../core/types\";\nimport type { PresenceConfig } from \"../state/presence.types\";\nimport { rtcStore } from \"../state/store\";\nimport { type LogLevel, setGlobalLoggerOptions } from \"../utils/logger\";\nimport { type CallsServiceInstance, createCallsService } from \"./calls.service\";\nimport { LiveKitRoomManager } from \"./livekitRoomManager\";\nimport {\n type GuestJoinMeetingParams,\n type MeetingsServiceInstance,\n createMeetingsService,\n} from \"./meetings.service\";\nimport {\n type PresenceServiceInstance,\n createPresenceService,\n} from \"./presence.service\";\n\nexport interface SdkBuildOptionsBase {\n appId: string;\n signalHost: string;\n logLevel?: LogLevel;\n enableDebug?: boolean;\n log?: (level: LogLevel, message: string, meta?: any) => void;\n presence?: Partial<PresenceConfig>;\n}\n\nexport interface AuthenticatedSdkOptions extends SdkBuildOptionsBase {\n mode?: \"authenticated\";\n authProvider: () => string | null;\n authRetry?: Partial<AuthRetryConfig>;\n}\n\nexport interface GuestSdkOptions extends SdkBuildOptionsBase {\n mode: \"guest\";\n deviceId: string;\n}\n\nexport type SdkBuildOptions = AuthenticatedSdkOptions | GuestSdkOptions;\n\nexport interface RtcSdk {\n store: typeof rtcStore;\n auth: AuthManager;\n socket: SocketManager;\n calls: CallsServiceInstance;\n meetings: MeetingsServiceInstance;\n signal: SignalClient;\n livekit: LiveKitRoomManager;\n presence: PresenceServiceInstance;\n cleanup: () => void;\n configureApi: (config: ApiConfig) => void;\n}\n\nexport interface GuestRtcSdk {\n store: typeof rtcStore;\n auth: GuestAuthManager;\n socket: SocketManager;\n meetings: MeetingsServiceInstance;\n livekit: LiveKitRoomManager;\n presence: PresenceServiceInstance;\n cleanup: () => void;\n configureApi: (config: ApiConfig) => void;\n guestJoin: (params: GuestJoinMeetingParams) => Promise<GuestJoinResponse>;\n}\n\nexport function buildSdk(opts: AuthenticatedSdkOptions): RtcSdk {\n const loggerOptions: any = {};\n if (opts.logLevel !== undefined) {\n loggerOptions.level = opts.logLevel;\n }\n if (opts.enableDebug !== undefined) {\n loggerOptions.enableDebug = opts.enableDebug;\n }\n if (opts.log !== undefined) {\n loggerOptions.customLogger = opts.log;\n }\n setGlobalLoggerOptions(loggerOptions);\n\n const auth = new AuthManager(opts.authProvider, opts.appId, opts.authRetry);\n\n const socket = SocketManager.getInstance();\n const livekitManager = new LiveKitRoomManager();\n const callsService = createCallsService(\n { appId: opts.appId },\n { livekitManager, authManager: auth }\n );\n const meetingsService = createMeetingsService(\n { appId: opts.appId },\n { livekitManager }\n );\n\n const signalClient = new SignalClient({\n baseUrl: opts.signalHost,\n appId: opts.appId,\n token: async () => {\n const token = await auth.getSessionToken();\n return token || \"\";\n },\n });\n\n apiConfig.configure({\n baseUrl: opts.signalHost,\n token: async () => {\n const token = await auth.getSessionToken();\n return token || \"\";\n },\n });\n\n const presenceService = createPresenceService(\n { appId: opts.appId },\n { getSocket: () => socket.getSocket() }\n );\n\n if (opts.presence) {\n presenceService.configure(opts.presence);\n }\n\n socket.setPresenceService(presenceService);\n\n const cleanup = () => {\n presenceService.destroy();\n livekitManager.detach();\n socket.destroy();\n rtcStore.getState().reset();\n };\n\n return {\n store: rtcStore,\n auth,\n socket,\n calls: callsService,\n meetings: meetingsService,\n signal: signalClient,\n livekit: livekitManager,\n presence: presenceService,\n cleanup,\n configureApi: (config: ApiConfig) => {\n apiConfig.configure(config);\n const signalConfig: Partial<ApiConfig> = {\n baseUrl: config.baseUrl,\n };\n if (config.token !== undefined) {\n signalConfig.token = config.token;\n }\n if (config.credentials !== undefined) {\n signalConfig.credentials = config.credentials;\n }\n if (config.withCredentials !== undefined) {\n signalConfig.withCredentials = config.withCredentials;\n }\n if (config.headers !== undefined) {\n signalConfig.headers = config.headers;\n }\n signalClient.reconfigure(signalConfig);\n },\n };\n}\n\nexport function buildGuestSdk(opts: GuestSdkOptions): GuestRtcSdk {\n const loggerOptions: any = {};\n if (opts.logLevel !== undefined) {\n loggerOptions.level = opts.logLevel;\n }\n if (opts.enableDebug !== undefined) {\n loggerOptions.enableDebug = opts.enableDebug;\n }\n if (opts.log !== undefined) {\n loggerOptions.customLogger = opts.log;\n }\n setGlobalLoggerOptions(loggerOptions);\n\n const auth = new GuestAuthManager(opts.appId, opts.deviceId);\n const socket = SocketManager.getInstance();\n const livekitManager = new LiveKitRoomManager();\n const meetingsService = createMeetingsService(\n { appId: opts.appId },\n { livekitManager }\n );\n\n apiConfig.configure({\n baseUrl: opts.signalHost,\n token: async () => (await auth.getSessionToken()) || \"\",\n });\n\n const presenceService = createPresenceService(\n { appId: opts.appId },\n { getSocket: () => socket.getSocket() }\n );\n\n if (opts.presence) {\n presenceService.configure(opts.presence);\n }\n\n socket.setPresenceService(presenceService);\n\n const guestJoin = async (\n params: GuestJoinMeetingParams\n ): Promise<GuestJoinResponse> => {\n const response = await meetingsService.guestJoin(params, {\n deviceId: opts.deviceId,\n signalHost: opts.signalHost,\n onSessionToken: async (sessionToken: string) => {\n auth.setSession({\n sessionToken,\n guestId: response.guestId,\n displayName: params.displayName,\n callId: response.meeting.callId,\n meetingId: response.meeting.id,\n meetingCode: response.meeting.code,\n });\n await socket.initializeWithToken(opts.signalHost, sessionToken);\n },\n });\n return response;\n };\n\n const cleanup = () => {\n presenceService.destroy();\n livekitManager.detach();\n socket.destroy();\n auth.clearSession();\n rtcStore.getState().reset();\n };\n\n return {\n store: rtcStore,\n auth,\n socket,\n meetings: meetingsService,\n livekit: livekitManager,\n presence: presenceService,\n cleanup,\n configureApi: (config: ApiConfig) => {\n apiConfig.configure(config);\n },\n guestJoin,\n };\n}\n","import React, { createContext, useContext, useEffect, useMemo } from \"react\";\nimport type { Nullable } from \"../core\";\nimport type { AuthManager } from \"../core/auth.manager\";\nimport {\n type AuthenticatedSdkOptions,\n type GuestRtcSdk,\n type GuestSdkOptions,\n type RtcSdk,\n type SdkBuildOptions,\n buildGuestSdk,\n buildSdk,\n} from \"../services\";\nimport { rtcStore } from \"../state/store\";\n\nexport type RtcOptions = SdkBuildOptions;\nexport type { RtcSdk, GuestRtcSdk };\n\ntype AnySdk = RtcSdk | GuestRtcSdk;\n\nconst RtcContext = createContext<Nullable<AnySdk>>(null);\n\nfunction isGuestOptions(options: SdkBuildOptions): options is GuestSdkOptions {\n return options.mode === \"guest\";\n}\n\nexport function RtcProvider({\n options,\n children,\n}: {\n options: RtcOptions;\n children: React.ReactNode;\n}) {\n const isGuestMode = isGuestOptions(options);\n\n const sdk = useMemo(() => {\n if (isGuestMode) {\n return buildGuestSdk(options);\n }\n return buildSdk(options as AuthenticatedSdkOptions);\n }, [options, isGuestMode]);\n\n useEffect(() => {\n if (!isGuestMode) {\n const authSdk = sdk as RtcSdk;\n authSdk.socket\n .initialize(\n options.signalHost,\n authSdk.auth as AuthManager,\n {\n reconnectAttempts: 5,\n reconnectDelay: 1000,\n },\n undefined\n )\n .catch((error: any) => {\n options.log?.(\n \"error\",\n \"Failed to initialize socket connection\",\n error\n );\n\n rtcStore.getState().addError({\n code: \"SOCKET_INIT_ERROR\",\n message: \"Failed to initialize socket connection\",\n timestamp: Date.now(),\n context: error,\n });\n });\n }\n\n return () => {\n sdk.cleanup();\n };\n }, [sdk, options, isGuestMode]);\n\n return React.createElement(RtcContext.Provider, { value: sdk }, children);\n}\n\nexport function useSdk(): RtcSdk {\n const ctx = useContext(RtcContext);\n if (!ctx) {\n throw new Error(\"useSdk must be used within RtcProvider\");\n }\n return ctx as RtcSdk;\n}\n\nexport function useGuestSdk(): GuestRtcSdk {\n const ctx = useContext(RtcContext);\n if (!ctx) {\n throw new Error(\"useGuestSdk must be used within RtcProvider\");\n }\n return ctx as GuestRtcSdk;\n}\n","import { useRtcStore } from \"../state/store\";\n\nexport interface CallState {\n id: string | null;\n status: \"initializing\" | \"pending\" | \"active\" | \"ended\" | \"ready\" | null;\n mode: \"AUDIO\" | \"VIDEO\" | null;\n roomName: string | null;\n}\n\nexport function useCallState(): CallState {\n const session = useRtcStore((state) => state.session);\n\n if (!session) {\n return {\n id: null,\n status: null,\n mode: null,\n roomName: null,\n };\n }\n\n return {\n id: session.id,\n status: session.status,\n mode: session.mode,\n roomName: session.livekitInfo?.roomName || null,\n };\n}\n","import { useRtcStore } from \"../state/store\";\nimport type { IncomingInvite } from \"../state/types\";\n\nexport function useIncomingInvite(): IncomingInvite | null {\n return useRtcStore((state) => state.incomingInvite);\n}\n","import { useRtcStore } from \"../state/store\";\n\n/**\n * Get the current session ID.\n * Returns null when no active session.\n */\nexport function useSessionId(): string | null {\n return useRtcStore((state) => state.session?.id ?? null);\n}\n","import { useSdk } from \"../provider/RtcProvider\";\nimport { rtcStore } from \"../state/store\";\nimport { useIncomingInvite } from \"./useIncomingInvite\";\nimport { useSessionId } from \"./useSessionId\";\n\nexport function useCallActions() {\n const sdk = useSdk();\n const sessionId = useSessionId();\n const incomingInvite = useIncomingInvite();\n\n return {\n initiate: (participants: string[], type: \"AUDIO\" | \"VIDEO\") => {\n return sdk.calls.initiate({ invitees: participants, mode: type });\n },\n invite: (participants: string[]) => {\n if (!sessionId) {\n throw new Error(\"No active session to invite participants to\");\n }\n\n return sdk.calls.invite(sessionId, participants);\n },\n accept: () => {\n if (!incomingInvite) {\n throw new Error(\"No incoming invite to accept\");\n }\n\n return sdk.calls.accept();\n },\n decline: (reason?: string) => {\n if (!incomingInvite) {\n throw new Error(\"No incoming invite to decline\");\n }\n\n return sdk.calls.decline(reason);\n },\n cancel: () => {\n if (!sessionId) {\n throw new Error(\"No active session to cancel\");\n }\n\n return sdk.calls.cancel(sessionId);\n },\n leave: async () => {\n if (!sessionId) {\n throw new Error(\"No active session to leave\");\n }\n\n return await sdk.calls.leave();\n },\n transfer: (targetParticipantId: string, reason?: string) => {\n if (!sessionId) {\n throw new Error(\"No active session to transfer\");\n }\n\n return sdk.calls.transfer(sessionId, targetParticipantId, reason);\n },\n kick: (participantId: string, reason?: string) => {\n if (!sessionId) {\n throw new Error(\"No active session to kick participant from\");\n }\n\n return sdk.calls.kick(sessionId, participantId, reason);\n },\n mute: (participantId: string) => {\n if (!sessionId) {\n throw new Error(\"No active session to mute participant in\");\n }\n\n return sdk.calls.mute(sessionId, participantId);\n },\n end: () => {\n if (!sessionId) {\n throw new Error(\"No active session to end\");\n }\n\n return sdk.calls.end(sessionId);\n },\n startRecording: () => {\n if (!sessionId) {\n throw new Error(\"No active session to start recording\");\n }\n\n return sdk.calls.startRecording(sessionId);\n },\n stopRecording: () => {\n if (!sessionId) {\n throw new Error(\"No active session to stop recording\");\n }\n\n const session = rtcStore.getState().session;\n if (!session?.recording?.recordingId) {\n throw new Error(\"No active recording to stop\");\n }\n\n return sdk.calls.stopRecording(sessionId, session.recording.recordingId);\n },\n };\n}\n","import { useConnectionState as useLivekitConnectionState } from \"@livekit/components-react\";\nimport { ConnectionState as LivekitConnectionState } from \"livekit-client\";\nimport { useCallState } from \"./useCallState\";\n\nexport type ConnectionState =\n | \"initializing\"\n | \"pending\"\n | \"connecting\"\n | \"active\"\n | \"idle\"\n | \"ended\";\n\nexport function useConnectionState(): ConnectionState {\n const { status } = useCallState();\n const connectionState = useLivekitConnectionState();\n\n if (connectionState === LivekitConnectionState.Connected) {\n return \"active\";\n }\n\n if (\n connectionState === LivekitConnectionState.Connecting ||\n connectionState === LivekitConnectionState.Reconnecting\n ) {\n return \"connecting\";\n }\n\n if (status === \"initializing\") {\n return \"initializing\";\n }\n\n if (status === \"pending\") {\n return \"pending\";\n }\n\n if (status === \"ended\") {\n return \"ended\";\n }\n\n return \"idle\";\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { eventBus } from \"../core/events\";\nimport type { EventHandler, SdkEvent, SdkEventType } from \"../core/events\";\n\nexport function useEvent<T = any>(\n eventType: string | SdkEventType,\n callback?: EventHandler<T> | null\n): SdkEvent<T> | undefined {\n const [lastEvent, setLastEvent] = useState<SdkEvent<T> | undefined>(\n undefined\n );\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n useEffect(() => {\n const handler: EventHandler<T> = (event: SdkEvent<T>) => {\n setLastEvent(event);\n if (callbackRef.current) {\n callbackRef.current(event);\n }\n };\n\n const subscription = eventBus.on(eventType, handler);\n\n return () => {\n subscription.unsubscribe();\n };\n }, [eventType]);\n\n return lastEvent;\n}\n","import { useRtcStore } from \"../state/store\";\nimport type { OutgoingInvite } from \"../state/types\";\n\nexport function useOutgoingInvites(): Record<string, OutgoingInvite> {\n return useRtcStore((state) => state.outgoingInvites);\n}\n","import { useRtcStore } from \"../state/store\";\n\nexport function useInviteAccepted(): boolean {\n return useRtcStore((state) => {\n return Object.values(state.outgoingInvites).some(\n (invite) => invite.status === \"accepted\"\n );\n });\n}\n","import { useRtcStore } from \"../state/store\";\n\nexport function useCallInitiated(): boolean {\n return useRtcStore((state) => state.initiated);\n}\n","import { useEffect, useReducer } from \"react\";\nimport { useRtcStore } from \"../state/store\";\nimport { type DurationResult, computeDuration } from \"../utils\";\n\nexport function useSessionDuration(): DurationResult {\n const [, forceUpdate] = useReducer((x) => x + 1, 0);\n const session = useRtcStore((state) => state.session);\n\n useEffect(() => {\n if (!session?.startedAt) {\n return;\n }\n\n const interval = setInterval(forceUpdate, 1000);\n return () => clearInterval(interval);\n }, [session?.startedAt]);\n\n if (!session?.startedAt) {\n return {\n seconds: 0,\n minutes: 0,\n hours: 0,\n formatted: \"00:00\",\n };\n }\n\n return computeDuration(session.startedAt);\n}\n","import { useParticipantInfo } from \"@livekit/components-react\";\nimport type { LocalParticipant, RemoteParticipant } from \"livekit-client\";\nimport type { ParticipantMetadata } from \"../state/types\";\n\nexport function useParticipantMetadata(\n participant: RemoteParticipant | LocalParticipant | null | undefined\n): ParticipantMetadata | null {\n // Don't use LiveKit hook for null participants - just access metadata directly\n if (!participant || !participant.metadata) {\n return null;\n }\n\n try {\n return participant.metadata\n ? (JSON.parse(participant.metadata) as ParticipantMetadata)\n : ({} as ParticipantMetadata);\n } catch (error) {\n console.error(\"Failed to parse participant metadata:\", error);\n return null;\n }\n}\n","import { useRtcStore } from \"../state/store\";\nimport type { LiveKitJoinInfo } from \"../state/types\";\n\n/**\n * Get the current LiveKit join information.\n * Returns null when no active session or LiveKit info is not available.\n */\nexport function useLivekitInfo(): LiveKitJoinInfo | null {\n return useRtcStore((state) => state.session?.livekitInfo ?? null);\n}\n","import { useRtcStore } from \"../state/store\";\n\n/**\n * Check if there's an active session.\n * Returns true if there's a session with status \"pending\" or \"active\".\n * Returns false if no session exists or if the session has ended.\n */\nexport function useHasActiveSession(): boolean {\n return useRtcStore((state) => {\n if (!state.session) {\n return false;\n }\n return (\n state.session.status === \"pending\" || state.session.status === \"active\"\n );\n });\n}\n","import { useCallState } from \"./useCallState\";\nimport { useLivekitInfo } from \"./useLivekitInfo\";\n\n/**\n * Determines if the LiveKit room is ready for connection.\n * Returns true when credentials are available and status is \"ready\" or \"active\".\n */\nexport function useRoomReady(): boolean {\n const livekitInfo = useLivekitInfo();\n const { status } = useCallState();\n\n return livekitInfo !== null && (status === \"ready\" || status === \"active\");\n}\n","import { Room, type RoomOptions, VideoPresets } from \"livekit-client\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport { useSdk } from \"../provider/RtcProvider\";\nimport { createLogger } from \"../utils\";\nimport { useLivekitInfo } from \"./useLivekitInfo\";\nimport { useRoomReady } from \"./useRoomReady\";\n\nconst logger = createLogger(\"useAutoConnectRoom\");\n\nconst defaultVideoOptions: Partial<RoomOptions> = {\n adaptiveStream: true,\n dynacast: true,\n videoCaptureDefaults: {\n resolution: VideoPresets.h720.resolution,\n },\n};\n\nlet sharedRoom: Room | null = null;\n\nexport function useAutoConnectRoom(options?: RoomOptions): Room {\n const isReady = useRoomReady();\n const livekitInfo = useLivekitInfo();\n const sdk = useSdk();\n\n const room = useMemo(() => {\n if (!sharedRoom) {\n const mergedOptions = { ...defaultVideoOptions, ...options };\n sharedRoom = new Room(mergedOptions);\n } else if (options) {\n logger.debug(\"Room already exists, ignoring new options\");\n }\n return sharedRoom;\n }, [options]);\n\n const handleConnection = useCallback(async () => {\n if (!room || !isReady || !livekitInfo) {\n return;\n }\n\n if (room.state === \"connected\" || room.state === \"connecting\") {\n return;\n }\n\n try {\n logger.debug(\"Connecting to LiveKit room\", {\n url: livekitInfo.url,\n roomName: livekitInfo.roomName,\n });\n\n await room.connect(livekitInfo.url, livekitInfo.token);\n logger.debug(\"Successfully connected to LiveKit room\");\n\n // Initialize both audio and video tracks but keep them disabled\n // Users must explicitly enable them via UI controls\n await room.localParticipant.setMicrophoneEnabled(false);\n await room.localParticipant.setCameraEnabled(false);\n\n sdk.livekit.attach(room);\n logger.debug(\"Attached LiveKit room manager\");\n } catch (error) {\n logger.error(\"Failed to connect to LiveKit room\", error);\n }\n }, [room, isReady, livekitInfo, sdk]);\n\n useEffect(() => {\n handleConnection().then((r) => {});\n }, [handleConnection]);\n\n return room;\n}\n","import type { LocalParticipant, RemoteParticipant } from \"livekit-client\";\nimport type { ParticipantPermissions } from \"../state/types\";\nimport type { Nullable } from \"../utils/types\";\nimport { useParticipantMetadata } from \"./useParticipantMetadata\";\n\nexport function useParticipantPermissions(\n participant: RemoteParticipant | LocalParticipant\n): Nullable<ParticipantPermissions> {\n const meta = useParticipantMetadata(participant);\n return meta?.permissions || null;\n}\n","// Adapted from https://github.com/small-lab-io/usehooks.io/blob/main/packages/hooks/src/use-timeout/index.ts\nimport { useCallback, useEffect, useRef } from \"react\";\n\nexport interface UseTimeoutReturn {\n start: () => void;\n stop: () => void;\n reset: () => void;\n isActive: () => boolean;\n}\n\nexport function useTimeout(\n callback: () => void,\n delay: number | null\n): UseTimeoutReturn {\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const callbackRef = useRef(callback);\n\n // Update callback ref when callback changes\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n const start = useCallback(() => {\n // Clear existing timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Only set timeout if delay is not null\n if (delay !== null) {\n timeoutRef.current = setTimeout(() => {\n callbackRef.current();\n timeoutRef.current = null;\n }, delay);\n }\n }, [delay]);\n\n const stop = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n }, []);\n\n const reset = useCallback(() => {\n stop();\n start();\n }, [stop, start]);\n\n const isActive = useCallback(() => {\n return timeoutRef.current !== null;\n }, []);\n\n // Auto-start timeout when delay changes (if delay is not null)\n useEffect(() => {\n if (delay !== null) {\n start();\n } else {\n stop();\n }\n\n // Cleanup on unmount or when delay changes\n return stop;\n }, [delay, start, stop]);\n\n return { start, stop, reset, isActive };\n}\n\n// Simplified version that just runs the timeout automatically\nexport function useTimeoutEffect(\n callback: () => void,\n delay: number | null\n): void {\n const callbackRef = useRef(callback);\n\n // Update callback ref when callback changes\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (delay === null) {\n return;\n }\n\n const timeoutId = setTimeout(() => {\n callbackRef.current();\n }, delay);\n\n return () => clearTimeout(timeoutId);\n }, [delay]);\n}\n","import { useEffect } from \"react\";\nimport { useRtcStore } from \"../state/store\";\nimport { useIncomingInvite } from \"./useIncomingInvite\";\nimport { useTimeout } from \"./useTimeout\";\n\nexport function useRingTimeout() {\n const rtcStore = useRtcStore();\n const incomingInvite = useIncomingInvite();\n const session = useRtcStore((state) => state.session);\n\n const handleTimeout = () => {\n rtcStore.reset();\n };\n\n const timeoutMs =\n incomingInvite?.ringTimeoutMs ||\n (session?.ringTimeoutMs && session.status === \"pending\"\n ? session.ringTimeoutMs\n : null);\n\n const timeout = useTimeout(handleTimeout, timeoutMs);\n\n useEffect(() => {\n if (timeoutMs) {\n timeout.start();\n } else {\n timeout.stop();\n }\n }, [timeoutMs, timeout]);\n\n return {\n isActive: timeout.isActive(),\n stop: timeout.stop,\n };\n}\n","import type { Nullable } from \"../core\";\nimport { useProfileCache } from \"../state/profileCache\";\nimport type { Profile } from \"../state/types\";\n\nexport function useParticipantProfile(userId: string): Nullable<Profile> {\n return useProfileCache((state) => {\n return state.profiles.get(userId) || null;\n });\n}\n\nexport function useIsProfilePending(userId: string): boolean {\n return useProfileCache((state) => {\n if (!userId) {\n return false;\n }\n return state.pending.has(userId);\n });\n}\n","import { BackgroundProcessor } from \"@livekit/track-processors\";\nimport { useEffect, useRef } from \"react\";\nimport selfieSegmenterModelBase64 from \"../../assets/models/selfie_segmenter.tflite\";\n\nimport { useLocalParticipant, useRoomContext } from \"@livekit/components-react\";\nimport { type LocalVideoTrack, RoomEvent, Track } from \"livekit-client\";\n\nexport interface UseVirtualBackgroundOptions {\n /**\n * Image URL for virtual background mode.\n * Required when mode is 'virtual-background'.\n * Must have CORS enabled.\n */\n imagePath?: string | null;\n /**\n * Background processing mode\n * @default 'virtual-background'\n */\n mode?: \"virtual-background\" | \"blur\";\n /**\n * Blur radius for blur mode (1-20)\n * Only used when mode is 'blur'\n */\n blurRadius?: number;\n /**\n * Whether the virtual background is enabled\n * @default true\n */\n enabled?: boolean;\n}\n\nexport function useVirtualBackground(\n options: UseVirtualBackgroundOptions\n): void {\n const {\n imagePath,\n mode = \"virtual-background\",\n blurRadius,\n enabled = true,\n } = options;\n\n const room = useRoomContext();\n const participant = useLocalParticipant();\n const localParticipant = participant?.localParticipant;\n const processorRef = useRef<ReturnType<typeof BackgroundProcessor> | null>(\n null\n );\n const isActiveRef = useRef(true);\n const pendingOperationRef = useRef<Promise<void> | null>(null);\n\n useEffect(() => {\n // Reset active flag when effect runs\n isActiveRef.current = true;\n\n if (!enabled || !localParticipant || !room) {\n isActiveRef.current = false;\n return;\n }\n\n if (mode === \"virtual-background\" && !imagePath) {\n isActiveRef.current = false;\n return;\n }\n\n const applyBackground = async () => {\n if (!isActiveRef.current) {\n return;\n }\n\n if (pendingOperationRef.current) {\n try {\n await pendingOperationRef.current;\n } catch (error) {\n console.error(\"Error in pending operation:\", error);\n }\n }\n\n // Check again after waiting (effect might have been cleaned up)\n if (!isActiveRef.current) {\n return;\n }\n\n const operationPromise = (async () => {\n try {\n const cameraPublication = localParticipant.getTrackPublication(\n Track.Source.Camera\n );\n\n if (!cameraPublication?.track) {\n return;\n }\n\n // Check again after async gap\n if (!isActiveRef.current) {\n return;\n }\n\n const localVideoTrack = cameraPublication.track as LocalVideoTrack;\n\n if (processorRef.current) {\n try {\n await localVideoTrack.stopProcessor();\n } catch (error) {\n console.warn(\"Failed to remove background processor:\", error);\n }\n processorRef.current = null;\n }\n\n // Final check before adding new processor\n if (!isActiveRef.current) {\n return;\n }\n\n // Create processor configuration\n const processorConfig: {\n mode: \"virtual-background\" | \"blur\";\n imagePath?: string;\n blurRadius?: number;\n segmenterOptions: {\n delegate: \"GPU\" | \"CPU\";\n modelAssetPath?: string | undefined;\n runningMode?: \"VIDEO\" | \"IMAGE\";\n outputConfidenceMasks?: boolean | undefined;\n outputCategoryMask?: boolean | undefined;\n modelAssetBuffer?:\n | Uint8Array\n | ReadableStreamDefaultReader\n | undefined;\n };\n } = {\n mode,\n segmenterOptions: {\n delegate: \"GPU\",\n runningMode: \"IMAGE\",\n outputConfidenceMasks: true,\n outputCategoryMask: true,\n modelAssetPath: undefined,\n // Decode base64 to Uint8Array\n modelAssetBuffer: Uint8Array.from(\n atob(selfieSegmenterModelBase64),\n (c) => c.charCodeAt(0)\n ),\n },\n };\n\n if (mode === \"virtual-background\" && imagePath) {\n processorConfig.imagePath = imagePath;\n } else if (mode === \"blur\" && blurRadius) {\n processorConfig.blurRadius = blurRadius;\n }\n\n // Create and apply new processor\n const processor = BackgroundProcessor(processorConfig);\n await localVideoTrack.setProcessor(processor);\n\n // Only set processor if effect is still active\n if (isActiveRef.current) {\n processorRef.current = processor;\n } else {\n // Effect was cleaned up, remove the processor we just added\n try {\n await localVideoTrack.stopProcessor();\n } catch (error) {\n console.error(\"Failed to remove background processor:\", error);\n }\n }\n } catch (error) {\n console.error(\"Failed to apply virtual background:\", error);\n }\n })();\n\n pendingOperationRef.current = operationPromise;\n\n try {\n await operationPromise;\n } finally {\n if (pendingOperationRef.current === operationPromise) {\n pendingOperationRef.current = null;\n }\n }\n };\n\n // Apply background immediately if track exists\n applyBackground().catch((error) => {\n console.error(\"Error in applyBackground:\", error);\n });\n\n // Listen for track published events (when camera is enabled)\n const handleTrackPublished = (publication: any) => {\n if (publication.source === Track.Source.Camera) {\n applyBackground().catch((error) => {\n console.error(\n \"Error in applyBackground from track published:\",\n error\n );\n });\n }\n };\n\n room.on(RoomEvent.LocalTrackPublished, handleTrackPublished);\n\n // Cleanup function\n return () => {\n isActiveRef.current = false;\n\n room.off(RoomEvent.LocalTrackPublished, handleTrackPublished);\n\n // Cleanup processor if it exists\n if (processorRef.current && localParticipant) {\n const cameraPublication = localParticipant.getTrackPublication(\n Track.Source.Camera\n );\n if (cameraPublication?.track) {\n const localVideoTrack = cameraPublication.track as LocalVideoTrack;\n localVideoTrack.stopProcessor().catch((error: unknown) => {\n console.warn(\n \"Failed to remove background processor on cleanup:\",\n error\n );\n });\n }\n processorRef.current = null;\n }\n };\n }, [imagePath, mode, blurRadius, enabled, localParticipant, room]);\n}\n\n/**\n * Hook to apply virtual background or blur to the local camera track\n *\n * @example\n * ```tsx\n * function VideoComponent() {\n * const [bgImage, setBgImage] = useState<string | null>(null);\n *\n * useVirtualBackground({\n * imagePath: bgImage,\n * mode: 'virtual-background',\n * enabled: !!bgImage\n * });\n *\n * return (\n * <button onClick= {() => setBgImage('https://example.com/bg.jpg')\n } >\n * Apply Background\n * </button>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // Blur background\n * useVirtualBackground({\n * mode: 'blur',\n * blurRadius: 10\n * });\n * ```\n */\n","import { useCallback } from \"react\";\nimport { useLocalParticipant } from \"../livekit\";\nimport { useSdk } from \"../provider/RtcProvider\";\nimport { useRtcStore } from \"../state/store\";\nimport { createLogger } from \"../utils\";\nimport { useCallActions } from \"./useCallActions\";\nimport { useCallState } from \"./useCallState\";\nimport { useIncomingInvite } from \"./useIncomingInvite\";\nimport { useParticipantMetadata } from \"./useParticipantMetadata\";\n\nexport interface UseTerminateReturn {\n terminate: () => Promise<void>;\n role: \"HOST\" | \"PARTICIPANT\" | \"GUEST\" | null;\n sessionId: string | null;\n isInitiator: boolean;\n}\n\nconst logger = createLogger(\"useTerminate\");\n\nexport function useTerminate(): UseTerminateReturn {\n const sdk = useSdk();\n const { id, status } = useCallState();\n const session = useRtcStore((state) => state.session);\n const isInitiator = useRtcStore((state) => state.initiated);\n const incomingInvite = useIncomingInvite();\n\n const sessionId = id;\n\n // Get the real-time role from LiveKit metadata (only available when connected)\n const participant = useLocalParticipant();\n const localParticipant = participant?.localParticipant;\n const participantMetadata = useParticipantMetadata(localParticipant);\n const role = participantMetadata?.role || null;\n\n const { cancel, decline, end, leave } = useCallActions();\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n const terminate = useCallback(async () => {\n if (!session || status === \"ended\") {\n return;\n }\n\n // Fire-and-forget pattern:\n // execute termination without waiting\n switch (status) {\n case \"initializing\":\n sdk.store.getState().reset();\n break;\n\n case \"pending\":\n if (isInitiator && sessionId) {\n console.log(\"Cancelling: \", sessionId, isInitiator);\n cancel().catch((error) => {\n logger.error(\"Failed to cancel call\", { error, sessionId });\n });\n console.log(\"immediately..\");\n } else if (incomingInvite) {\n decline().catch((error) => {\n logger.error(\"Failed to decline call\", {\n error,\n inviteId: incomingInvite.inviteId,\n });\n });\n }\n break;\n\n case \"ready\":\n case \"active\":\n {\n leave().catch((error) => {\n logger.error(\"Failed to leave call\", { error, sessionId, role });\n });\n\n if (role === \"HOST\" && sessionId) {\n end().catch((error) => {\n logger.error(\"Failed to end call\", { error, sessionId, role });\n });\n }\n }\n break;\n\n default:\n logger.warn(\"Unknown call state during termination\", { status });\n leave().catch((error) => {\n logger.error(\"Failed to leave call in unknown state\", {\n error,\n status,\n });\n });\n break;\n }\n }, [session, status, role, sessionId, isInitiator, incomingInvite, sdk]);\n\n return {\n terminate,\n role,\n sessionId,\n isInitiator,\n };\n}\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\n\ninterface ParticipantListState {\n pinnedParticipantIds: Set<string>;\n}\n\ninterface ParticipantListActions {\n togglePin: (participantId: string) => void;\n clearPinned: () => void;\n isPinned: (participantId: string) => boolean;\n}\n\nconst defaultState: ParticipantListState = {\n pinnedParticipantIds: new Set(),\n};\n\nexport const useParticipantListStore = create<\n ParticipantListState & ParticipantListActions\n>()(\n immer((set, get) => ({\n ...defaultState,\n\n togglePin: (participantId) =>\n set((state) => {\n if (state.pinnedParticipantIds.has(participantId)) {\n state.pinnedParticipantIds.delete(participantId);\n } else {\n state.pinnedParticipantIds.add(participantId);\n }\n }),\n\n clearPinned: () =>\n set((state) => {\n state.pinnedParticipantIds.clear();\n }),\n\n isPinned: (participantId) => get().pinnedParticipantIds.has(participantId),\n }))\n);\n","import { useParticipants } from \"@livekit/components-react\";\nimport type { Participant } from \"livekit-client\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useRaiseHandStore } from \"../channel/raiseHand/store\";\nimport { useParticipantListStore } from \"../state/participantListStore\";\nimport type {\n ParticipantListOptions,\n ParticipantListReturn,\n} from \"../state/types\";\n\nfunction createSortFunction(\n sortBy: \"speaking\" | \"name\" | \"raised-hand\",\n getRaisedHandOrder?: (id: string) => number | null,\n isPinned?: (id: string) => boolean,\n) {\n return (a: Participant, b: Participant) => {\n if (isPinned) {\n const aPinned = isPinned(a.identity);\n const bPinned = isPinned(b.identity);\n\n if (aPinned && !bPinned) return -1;\n if (!aPinned && bPinned) return 1;\n }\n\n if (getRaisedHandOrder) {\n const aOrder = getRaisedHandOrder(a.identity);\n const bOrder = getRaisedHandOrder(b.identity);\n\n if (aOrder !== null && bOrder === null) {\n return -1;\n }\n if (aOrder === null && bOrder !== null) {\n return 1;\n }\n if (aOrder !== null && bOrder !== null) {\n return aOrder - bOrder;\n }\n }\n\n if (sortBy === \"speaking\") {\n const aIsSpeaking = a.isSpeaking || false;\n const bIsSpeaking = b.isSpeaking || false;\n\n // sorting by isSpeaking\n if (aIsSpeaking && !bIsSpeaking) {\n return -1;\n }\n if (!aIsSpeaking && bIsSpeaking) {\n return 1;\n }\n }\n\n const aName = a.name || a.identity;\n const bName = b.name || b.identity;\n return aName.localeCompare(bName);\n };\n}\n\nexport function useParticipantList(\n options: ParticipantListOptions = {},\n): ParticipantListReturn & { sortedParticipants: Participant[] } {\n const {\n pageSize = 9,\n includeLocalParticipant = true,\n sortBy = \"speaking\",\n } = options;\n\n const [currentPage, setCurrentPage] = useState(1);\n const [pageSizeState, setPageSizeState] = useState(pageSize);\n\n const allParticipants = useParticipants();\n const { togglePin, clearPinned, isPinned } = useParticipantListStore();\n const getRaisedHandOrder = useRaiseHandStore(\n (state) => state.getRaisedHandOrder,\n );\n const raisedHands = useRaiseHandStore((state) => state.raisedHands);\n\n const filteredParticipants = useMemo(() => {\n return includeLocalParticipant\n ? allParticipants\n : allParticipants.filter((p) => !p.isLocal);\n }, [allParticipants, includeLocalParticipant]);\n\n const sortedParticipants = useMemo(() => {\n const sortFn = createSortFunction(sortBy, getRaisedHandOrder, isPinned);\n return [...filteredParticipants].sort(sortFn);\n }, [filteredParticipants, isPinned, sortBy, getRaisedHandOrder, raisedHands]);\n\n const pinnedParticipants = useMemo(() => {\n return sortedParticipants.filter((p) => isPinned(p.identity));\n }, [sortedParticipants, isPinned]);\n\n const totalParticipants = sortedParticipants.length;\n const totalPages = Math.ceil(totalParticipants / pageSizeState);\n\n const startIndex = (currentPage - 1) * pageSizeState;\n const endIndex = startIndex + pageSizeState;\n const participants = sortedParticipants.slice(startIndex, endIndex);\n\n const hasNextPage = currentPage < totalPages;\n const hasPrevPage = currentPage > 1;\n\n useEffect(() => {\n if (currentPage > totalPages && totalPages > 0) {\n setCurrentPage(totalPages);\n }\n }, [currentPage, totalPages]);\n\n const nextPage = () => {\n if (hasNextPage) {\n setCurrentPage((prev) => prev + 1);\n }\n };\n\n const prevPage = () => {\n if (hasPrevPage) {\n setCurrentPage((prev) => prev - 1);\n }\n };\n\n const setPageSize = (size: number) => {\n setPageSizeState(size);\n setCurrentPage(1);\n };\n\n return {\n participants,\n sortedParticipants, // Exposed for grid views\n pinnedParticipants,\n currentPage,\n totalPages,\n pageSize: pageSizeState,\n totalParticipants,\n hasNextPage,\n hasPrevPage,\n nextPage,\n prevPage,\n setPageSize,\n togglePin,\n clearPinned,\n isPinned,\n };\n}\n","import { useRecordingStore } from \"../state/recording.store\";\nimport type { RecordingInfo } from \"../state/types\";\n\n/**\n * Hook to access recording state\n *\n * @returns Recording state and helper functions\n *\n * @example\n * ```tsx\n * function RecordingIndicator() {\n * const { isRecording, recording } = useRecording();\n *\n * if (!isRecording) return null;\n *\n * return <div>Recording: {recording?.recordingId}</div>;\n * }\n * ```\n */\nexport function useRecording(): {\n isRecording: boolean;\n recording: RecordingInfo | null;\n} {\n const isRecording = useRecordingStore((state) => state.isRecording);\n const recording = useRecordingStore((state) => state.recording);\n\n return {\n isRecording,\n recording,\n };\n}\n","import {\n useLocalParticipant,\n useRoomContext,\n useTracks,\n} from \"@livekit/components-react\";\nimport { Track } from \"livekit-client\";\nimport { useCallback } from \"react\";\n\nexport const useScreenShare = () => {\n const room = useRoomContext();\n const localParticipant = useLocalParticipant();\n\n // Get all video tracks\n const videoTracks = useTracks([Track.Source.ScreenShare], {\n onlySubscribed: false,\n });\n\n // Check if local participant is screen sharing\n const isLocalScreenSharing = localParticipant?.isScreenShareEnabled || false;\n\n // Check if any remote participant is screen sharing\n const screenShareTracks = videoTracks.filter(\n (track) => track.source === Track.Source.ScreenShare\n );\n\n const isScreenSharing = screenShareTracks.length > 0;\n\n const handleScreenShare = async () => {\n if (isScreenSharing) {\n handleStopScreenShare();\n return;\n }\n try {\n await room?.localParticipant?.setScreenShareEnabled(true, {\n audio: true,\n video: true,\n });\n } catch (error) {\n console.error(\"Error accessing display media:\", error);\n // Handle user cancellation or permission denial\n const err = error as any;\n if (err?.name === \"NotAllowedError\") {\n console.error(\"Permission denied to access display media\");\n } else if (err?.name === \"AbortError\") {\n console.error(\"Screen sharing aborted\");\n }\n }\n };\n\n const handleStopScreenShare = useCallback(async () => {\n try {\n room?.localParticipant?.setScreenShareEnabled(false);\n } catch (error) {\n console.error(\"Error stopping screen sharing:\", error);\n }\n }, [room?.localParticipant]);\n\n return {\n isLocalScreenSharing,\n isScreenSharing,\n screenShareTracks,\n handleScreenShare,\n handleStopScreenShare,\n };\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useSdk } from \"../provider/RtcProvider\";\nimport type { PresenceStatus, UserPresence } from \"../state/presence.types\";\n\nexport function usePresence(userId: string): {\n presence: UserPresence | undefined;\n status: PresenceStatus | undefined;\n isLoading: boolean;\n refetch: () => Promise<void>;\n} {\n const sdk = useSdk();\n const [presence, setPresence] = useState<UserPresence | undefined>();\n const [isLoading, setIsLoading] = useState(false);\n\n const refetch = useCallback(async () => {\n if (!userId) return;\n setIsLoading(true);\n try {\n const result = await sdk.presence.getPresence(userId);\n setPresence(result);\n } finally {\n setIsLoading(false);\n }\n }, [sdk, userId]);\n\n useEffect(() => {\n refetch();\n }, [refetch]);\n\n return {\n presence,\n status: presence?.status,\n isLoading,\n refetch,\n };\n}\n\nexport function usePresenceMany(userIds: string[]): {\n presences: Map<string, UserPresence>;\n isLoading: boolean;\n refetch: () => Promise<void>;\n} {\n const sdk = useSdk();\n const [presences, setPresences] = useState<Map<string, UserPresence>>(\n new Map()\n );\n const [isLoading, setIsLoading] = useState(false);\n\n const refetch = useCallback(async () => {\n if (userIds.length === 0) return;\n setIsLoading(true);\n try {\n const results = await sdk.presence.queryPresence(userIds);\n const map = new Map<string, UserPresence>();\n for (const p of results) {\n map.set(p.userId, p);\n }\n setPresences(map);\n } finally {\n setIsLoading(false);\n }\n }, [sdk, userIds]);\n\n useEffect(() => {\n refetch();\n }, [refetch]);\n\n return {\n presences,\n isLoading,\n refetch,\n };\n}\n","import { useSdk } from \"../provider/RtcProvider\";\nimport type {\n CreateAdHocMeetingParams,\n JoinMeetingParams,\n} from \"../state/meetings.types\";\nimport { rtcStore } from \"../state/store\";\n\nexport function useMeetingActions() {\n const sdk = useSdk();\n\n return {\n createAdHoc: (params?: CreateAdHocMeetingParams) => {\n return sdk.meetings.createAdHoc(params);\n },\n start: (meetingId: string) => {\n return sdk.meetings.start(meetingId);\n },\n join: (params: JoinMeetingParams) => {\n return sdk.meetings.join(params);\n },\n end: () => {\n const session = rtcStore.getState().session;\n if (!session?.meetingInfo?.meetingId) {\n throw new Error(\"No active meeting to end\");\n }\n\n return sdk.meetings.end(session.meetingInfo.meetingId);\n },\n leave: () => {\n const session = rtcStore.getState().session;\n if (!session) {\n throw new Error(\"No active meeting to leave\");\n }\n\n return sdk.meetings.leave();\n },\n };\n}\n","import { useRtcStore } from \"../state/store\";\n\nexport interface MeetingState {\n meetingId: string | null;\n meetingCode: string | null;\n isInMeeting: boolean;\n isOrganizer: boolean;\n}\n\nexport function useMeetingState(): MeetingState {\n const session = useRtcStore((state) => state.session);\n\n const isInMeeting = session?.sessionType === \"MEETING\";\n const isOrganizer = isInMeeting && session?.role === \"HOST\";\n\n return {\n meetingId: session?.meetingInfo?.meetingId ?? null,\n meetingCode: session?.meetingInfo?.meetingCode ?? null,\n isInMeeting,\n isOrganizer,\n };\n}\n","import { useMeetingActions } from \"./useMeetingActions\";\nimport { useMeetingState } from \"./useMeetingState\";\n\nexport function useMeeting() {\n const state = useMeetingState();\n const actions = useMeetingActions();\n\n return {\n ...state,\n ...actions,\n };\n}\n","import type { GuestJoinResponse } from \"../clients/signal\";\nimport { useGuestSdk } from \"../provider/RtcProvider\";\nimport type { GuestJoinMeetingParams } from \"../services/meetings.service\";\n\nexport interface UseGuestJoinReturn {\n guestJoin: (params: GuestJoinMeetingParams) => Promise<GuestJoinResponse>;\n}\n\nexport function useGuestJoin(): UseGuestJoinReturn {\n const sdk = useGuestSdk();\n\n return {\n guestJoin: sdk.guestJoin,\n };\n}\n","import { useRtcStore } from \"../state/store\";\nimport type { GuestIdentity } from \"../state/types\";\n\nexport function useGuestIdentity(): GuestIdentity | null {\n return useRtcStore((state) => state.guestIdentity);\n}\n","import { useRtcStore } from \"../state/store\";\n\nexport function useIsGuestMode(): boolean {\n return useRtcStore((state) => state.isGuestMode);\n}\n","import type { ParticipantPermissions } from \"../state/types\";\n\nconst GUEST_PERMISSIONS: ParticipantPermissions = {\n canMute: false,\n canKick: false,\n canTransfer: false,\n canEnd: false,\n canRecord: false,\n canShareScreen: true,\n};\n\nexport function useGuestPermissions(): ParticipantPermissions {\n return GUEST_PERMISSIONS;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/generated/api/core/ApiError.ts","../src/generated/api/core/CancelablePromise.ts","../src/generated/api/core/OpenAPI.ts","../src/generated/api/core/request.ts","../src/generated/api/services.ts","../src/clients/signal/services/calls.ts","../src/clients/signal/services/health.ts","../src/clients/signal/services/meetings.ts","../src/clients/signal/services/presence.ts","../src/clients/signal/client.ts","../src/clients/signal/hooks.ts","../src/utils/logger.ts","../src/utils/duration.ts","../src/clients/signal/config.ts","../src/core/session-storage.ts","../src/core/auth.manager.ts","../src/core/guest-auth.manager.ts","../src/state/types.ts","../src/state/store.ts","../src/core/socketio/handlers/base.handler.ts","../src/channel/chat/store.ts","../src/channel/raiseHand/store.ts","../src/channel/spotlight/store.ts","../src/generated/socket/events.ts","../src/state/errors.ts","../src/clients/signal/services/users.ts","../src/state/profileCache.ts","../src/state/recording.store.ts","../src/core/events/event-bus.ts","../src/core/events/types.ts","../src/core/socketio/handlers/call-ended.handler.ts","../src/core/socketio/handlers/call-participant-kicked.handler.ts","../src/core/socketio/handlers/call-ready.handler.ts","../src/core/socketio/handlers/call-started.handler.ts","../src/core/socketio/handlers/invite-accepted.handler.ts","../src/core/socketio/handlers/invite-cancelled.handler.ts","../src/core/socketio/handlers/invite-declined.handler.ts","../src/core/socketio/handlers/invite-missed.handler.ts","../src/core/socketio/handlers/invite.handler.ts","../src/core/socketio/handlers/participant-added.handler.ts","../src/core/socketio/handlers/participant-left.handler.ts","../src/core/socketio/handlers/participant-profiles.handler.ts","../src/core/socketio/handlers/recording-started.handler.ts","../src/core/socketio/handlers/recording-stopped.handler.ts","../src/core/socketio/handlers/handler.registry.ts","../src/core/socketio/socket.manager.ts","../src/services/calls.service.ts","../src/services/livekitRoomManager.ts","../src/services/meetings.service.ts","../src/state/presence.types.ts","../src/services/presence.service.ts","../src/services/sdk-builder.ts","../src/provider/RtcProvider.tsx","../src/hooks/useCallState.ts","../src/hooks/useIncomingInvite.ts","../src/hooks/useSessionId.ts","../src/hooks/useCallActions.ts","../src/hooks/useConnectionState.ts","../src/hooks/useEvent.ts","../src/hooks/useOutgoingInvites.ts","../src/hooks/useInviteAccepted.ts","../src/hooks/useCallInitiated.ts","../src/hooks/useSessionDuration.ts","../src/hooks/useParticipantMetadata.ts","../src/hooks/useLivekitInfo.ts","../src/hooks/useHasActiveSession.ts","../src/hooks/useRoomReady.ts","../src/hooks/useAutoConnectRoom.ts","../src/hooks/useParticipantPermissions.ts","../src/hooks/useTimeout.ts","../src/hooks/useRingTimeout.ts","../src/hooks/useParticipantProfile.ts","../src/hooks/useVirtualBackground.ts","../src/hooks/useTerminate.ts","../src/state/participantListStore.ts","../src/hooks/useParticipantList.ts","../src/hooks/useRecording.ts","../src/hooks/useScreenShare.ts","../src/hooks/usePresence.ts","../src/hooks/useMeetingActions.ts","../src/hooks/useMeetingState.ts","../src/hooks/useMeeting.ts","../src/hooks/useGuestJoin.ts","../src/hooks/useGuestIdentity.ts","../src/hooks/useIsGuestMode.ts","../src/hooks/useGuestPermissions.ts"],"names":["request","resolve","headers","logger","create","immer","entry","defaultState","z","enableMapSet","mitt","SdkEventType","io","response","RoomEvent","state","config","createContext","useMemo","useEffect","React","useContext","useLivekitConnectionState","LivekitConnectionState","useState","useRef","useReducer","VideoPresets","Room","useCallback","rtcStore","useRoomContext","useLocalParticipant","Track","BackgroundProcessor","useParticipants","useTracks"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\n\nexport class ApiError extends Error {\n\tpublic readonly url: string;\n\tpublic readonly status: number;\n\tpublic readonly statusText: string;\n\tpublic readonly body: unknown;\n\tpublic readonly request: ApiRequestOptions;\n\n\tconstructor(request: ApiRequestOptions, response: ApiResult, message: string) {\n\t\tsuper(message);\n\n\t\tthis.name = 'ApiError';\n\t\tthis.url = response.url;\n\t\tthis.status = response.status;\n\t\tthis.statusText = response.statusText;\n\t\tthis.body = response.body;\n\t\tthis.request = request;\n\t}\n}","export class CancelError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = 'CancelError';\n\t}\n\n\tpublic get isCancelled(): boolean {\n\t\treturn true;\n\t}\n}\n\nexport interface OnCancel {\n\treadonly isResolved: boolean;\n\treadonly isRejected: boolean;\n\treadonly isCancelled: boolean;\n\n\t(cancelHandler: () => void): void;\n}\n\nexport class CancelablePromise<T> implements Promise<T> {\n\tprivate _isResolved: boolean;\n\tprivate _isRejected: boolean;\n\tprivate _isCancelled: boolean;\n\treadonly cancelHandlers: (() => void)[];\n\treadonly promise: Promise<T>;\n\tprivate _resolve?: (value: T | PromiseLike<T>) => void;\n\tprivate _reject?: (reason?: unknown) => void;\n\n\tconstructor(\n\t\texecutor: (\n\t\t\tresolve: (value: T | PromiseLike<T>) => void,\n\t\t\treject: (reason?: unknown) => void,\n\t\t\tonCancel: OnCancel\n\t\t) => void\n\t) {\n\t\tthis._isResolved = false;\n\t\tthis._isRejected = false;\n\t\tthis._isCancelled = false;\n\t\tthis.cancelHandlers = [];\n\t\tthis.promise = new Promise<T>((resolve, reject) => {\n\t\t\tthis._resolve = resolve;\n\t\t\tthis._reject = reject;\n\n\t\t\tconst onResolve = (value: T | PromiseLike<T>): void => {\n\t\t\t\tif (this._isResolved || this._isRejected || this._isCancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._isResolved = true;\n\t\t\t\tif (this._resolve) this._resolve(value);\n\t\t\t};\n\n\t\t\tconst onReject = (reason?: unknown): void => {\n\t\t\t\tif (this._isResolved || this._isRejected || this._isCancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._isRejected = true;\n\t\t\t\tif (this._reject) this._reject(reason);\n\t\t\t};\n\n\t\t\tconst onCancel = (cancelHandler: () => void): void => {\n\t\t\t\tif (this._isResolved || this._isRejected || this._isCancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.cancelHandlers.push(cancelHandler);\n\t\t\t};\n\n\t\t\tObject.defineProperty(onCancel, 'isResolved', {\n\t\t\t\tget: (): boolean => this._isResolved,\n\t\t\t});\n\n\t\t\tObject.defineProperty(onCancel, 'isRejected', {\n\t\t\t\tget: (): boolean => this._isRejected,\n\t\t\t});\n\n\t\t\tObject.defineProperty(onCancel, 'isCancelled', {\n\t\t\t\tget: (): boolean => this._isCancelled,\n\t\t\t});\n\n\t\t\treturn executor(onResolve, onReject, onCancel as OnCancel);\n\t\t});\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn \"Cancellable Promise\";\n\t}\n\n\tpublic then<TResult1 = T, TResult2 = never>(\n\t\tonFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n\t\tonRejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n\t): Promise<TResult1 | TResult2> {\n\t\treturn this.promise.then(onFulfilled, onRejected);\n\t}\n\n\tpublic catch<TResult = never>(\n\t\tonRejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null\n\t): Promise<T | TResult> {\n\t\treturn this.promise.catch(onRejected);\n\t}\n\n\tpublic finally(onFinally?: (() => void) | null): Promise<T> {\n\t\treturn this.promise.finally(onFinally);\n\t}\n\n\tpublic cancel(): void {\n\t\tif (this._isResolved || this._isRejected || this._isCancelled) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isCancelled = true;\n\t\tif (this.cancelHandlers.length) {\n\t\t\ttry {\n\t\t\t\tfor (const cancelHandler of this.cancelHandlers) {\n\t\t\t\t\tcancelHandler();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn('Cancellation threw an error', error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tthis.cancelHandlers.length = 0;\n\t\tif (this._reject) this._reject(new CancelError('Request aborted'));\n\t}\n\n\tpublic get isCancelled(): boolean {\n\t\treturn this._isCancelled;\n\t}\n}","import type { ApiRequestOptions } from './ApiRequestOptions';\n\ntype Headers = Record<string, string>;\ntype Middleware<T> = (value: T) => T | Promise<T>;\ntype Resolver<T> = (options: ApiRequestOptions) => Promise<T>;\n\nexport class Interceptors<T> {\n _fns: Middleware<T>[];\n\n constructor() {\n this._fns = [];\n }\n\n eject(fn: Middleware<T>) {\n const index = this._fns.indexOf(fn);\n if (index !== -1) {\n this._fns = [\n ...this._fns.slice(0, index),\n ...this._fns.slice(index + 1),\n ];\n }\n }\n\n use(fn: Middleware<T>) {\n this._fns = [...this._fns, fn];\n }\n}\n\nexport type OpenAPIConfig = {\n\tBASE: string;\n\tCREDENTIALS: 'include' | 'omit' | 'same-origin';\n\tENCODE_PATH?: ((path: string) => string) | undefined;\n\tHEADERS?: Headers | Resolver<Headers> | undefined;\n\tPASSWORD?: string | Resolver<string> | undefined;\n\tTOKEN?: string | Resolver<string> | undefined;\n\tUSERNAME?: string | Resolver<string> | undefined;\n\tVERSION: string;\n\tWITH_CREDENTIALS: boolean;\n\tinterceptors: {request: Interceptors<RequestInit>;\n\t\tresponse: Interceptors<Response>;};\n};\n\nexport const OpenAPI: OpenAPIConfig = {\n\tBASE: '',\n\tCREDENTIALS: 'include',\n\tENCODE_PATH: undefined,\n\tHEADERS: undefined,\n\tPASSWORD: undefined,\n\tTOKEN: undefined,\n\tUSERNAME: undefined,\n\tVERSION: '0.0.1',\n\tWITH_CREDENTIALS: false,\n\tinterceptors: {request: new Interceptors(),response: new Interceptors(),\n\t},\n};","import { ApiError } from './ApiError';\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\nimport { CancelablePromise } from './CancelablePromise';\nimport type { OnCancel } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\n\nexport const isString = (value: unknown): value is string => {\n\treturn typeof value === 'string';\n};\n\nexport const isStringWithValue = (value: unknown): value is string => {\n\treturn isString(value) && value !== '';\n};\n\nexport const isBlob = (value: any): value is Blob => {\n\treturn value instanceof Blob;\n};\n\nexport const isFormData = (value: unknown): value is FormData => {\n\treturn value instanceof FormData;\n};\n\nexport const base64 = (str: string): string => {\n\ttry {\n\t\treturn btoa(str);\n\t} catch (err) {\n\t\t// @ts-ignore\n\t\treturn Buffer.from(str).toString('base64');\n\t}\n};\n\nexport const getQueryString = (params: Record<string, unknown>): string => {\n\tconst qs: string[] = [];\n\n\tconst append = (key: string, value: unknown) => {\n\t\tqs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n\t};\n\n\tconst encodePair = (key: string, value: unknown) => {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue.forEach(v => encodePair(key, v));\n\t\t} else if (typeof value === 'object') {\n\t\t\tObject.entries(value).forEach(([k, v]) => encodePair(`${key}[${k}]`, v));\n\t\t} else {\n\t\t\tappend(key, value);\n\t\t}\n\t};\n\n\tObject.entries(params).forEach(([key, value]) => encodePair(key, value));\n\n\treturn qs.length ? `?${qs.join('&')}` : '';\n};\n\nconst getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => {\n\tconst encoder = config.ENCODE_PATH || encodeURI;\n\n\tconst path = options.url\n\t\t.replace('{api-version}', config.VERSION)\n\t\t.replace(/{(.*?)}/g, (substring: string, group: string) => {\n\t\t\tif (options.path?.hasOwnProperty(group)) {\n\t\t\t\treturn encoder(String(options.path[group]));\n\t\t\t}\n\t\t\treturn substring;\n\t\t});\n\n\tconst url = config.BASE + path;\n\treturn options.query ? url + getQueryString(options.query) : url;\n};\n\nexport const getFormData = (options: ApiRequestOptions): FormData | undefined => {\n\tif (options.formData) {\n\t\tconst formData = new FormData();\n\n\t\tconst process = (key: string, value: unknown) => {\n\t\t\tif (isString(value) || isBlob(value)) {\n\t\t\t\tformData.append(key, value);\n\t\t\t} else {\n\t\t\t\tformData.append(key, JSON.stringify(value));\n\t\t\t}\n\t\t};\n\n\t\tObject.entries(options.formData)\n\t\t\t.filter(([, value]) => value !== undefined && value !== null)\n\t\t\t.forEach(([key, value]) => {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tvalue.forEach(v => process(key, v));\n\t\t\t\t} else {\n\t\t\t\t\tprocess(key, value);\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn formData;\n\t}\n\treturn undefined;\n};\n\ntype Resolver<T> = (options: ApiRequestOptions) => Promise<T>;\n\nexport const resolve = async <T>(options: ApiRequestOptions, resolver?: T | Resolver<T>): Promise<T | undefined> => {\n\tif (typeof resolver === 'function') {\n\t\treturn (resolver as Resolver<T>)(options);\n\t}\n\treturn resolver;\n};\n\nexport const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptions): Promise<Headers> => {\n\tconst [token, username, password, additionalHeaders] = await Promise.all([\n\t\tresolve(options, config.TOKEN),\n\t\tresolve(options, config.USERNAME),\n\t\tresolve(options, config.PASSWORD),\n\t\tresolve(options, config.HEADERS),\n\t]);\n\n\tconst headers = Object.entries({\n\t\tAccept: 'application/json',\n\t\t...additionalHeaders,\n\t\t...options.headers,\n\t})\n\t\t.filter(([, value]) => value !== undefined && value !== null)\n\t\t.reduce((headers, [key, value]) => ({\n\t\t\t...headers,\n\t\t\t[key]: String(value),\n\t\t}), {} as Record<string, string>);\n\n\tif (isStringWithValue(token)) {\n\t\theaders['Authorization'] = `Bearer ${token}`;\n\t}\n\n\tif (isStringWithValue(username) && isStringWithValue(password)) {\n\t\tconst credentials = base64(`${username}:${password}`);\n\t\theaders['Authorization'] = `Basic ${credentials}`;\n\t}\n\n\tif (options.body !== undefined) {\n\t\tif (options.mediaType) {\n\t\t\theaders['Content-Type'] = options.mediaType;\n\t\t} else if (isBlob(options.body)) {\n\t\t\theaders['Content-Type'] = options.body.type || 'application/octet-stream';\n\t\t} else if (isString(options.body)) {\n\t\t\theaders['Content-Type'] = 'text/plain';\n\t\t} else if (!isFormData(options.body)) {\n\t\t\theaders['Content-Type'] = 'application/json';\n\t\t}\n\t}\n\n\treturn new Headers(headers);\n};\n\nexport const getRequestBody = (options: ApiRequestOptions): unknown => {\n\tif (options.body !== undefined) {\n\t\tif (options.mediaType?.includes('application/json') || options.mediaType?.includes('+json')) {\n\t\t\treturn JSON.stringify(options.body)\n\t\t} else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {\n\t\t\treturn options.body;\n\t\t} else {\n\t\t\treturn JSON.stringify(options.body);\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexport const sendRequest = async (\n\tconfig: OpenAPIConfig,\n\toptions: ApiRequestOptions,\n\turl: string,\n\tbody: any,\n\tformData: FormData | undefined,\n\theaders: Headers,\n\tonCancel: OnCancel\n): Promise<Response> => {\n\tconst controller = new AbortController();\n\n\tlet request: RequestInit = {\n\t\theaders,\n\t\tbody: body ?? formData,\n\t\tmethod: options.method,\n\t\tsignal: controller.signal,\n\t};\n\n\tif (config.WITH_CREDENTIALS) {\n\t\trequest.credentials = config.CREDENTIALS;\n\t}\n\n\tfor (const fn of config.interceptors.request._fns) {\n\t\trequest = await fn(request)\n\t}\n\n\tonCancel(() => controller.abort());\n\n\treturn await fetch(url, request);\n};\n\nexport const getResponseHeader = (response: Response, responseHeader?: string): string | undefined => {\n\tif (responseHeader) {\n\t\tconst content = response.headers.get(responseHeader);\n\t\tif (isString(content)) {\n\t\t\treturn content;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexport const getResponseBody = async (response: Response): Promise<unknown> => {\n\tif (response.status !== 204) {\n\t\ttry {\n\t\t\tconst contentType = response.headers.get('Content-Type');\n\t\t\tif (contentType) {\n\t\t\t\tconst binaryTypes = ['application/octet-stream', 'application/pdf', 'application/zip', 'audio/', 'image/', 'video/'];\n\t\t\t\tif (contentType.includes('application/json') || contentType.includes('+json')) {\n\t\t\t\t\treturn await response.json();\n\t\t\t\t} else if (binaryTypes.some(type => contentType.includes(type))) {\n\t\t\t\t\treturn await response.blob();\n\t\t\t\t} else if (contentType.includes('multipart/form-data')) {\n\t\t\t\t\treturn await response.formData();\n\t\t\t\t} else if (contentType.includes('text/')) {\n\t\t\t\t\treturn await response.text();\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexport const catchErrorCodes = (options: ApiRequestOptions, result: ApiResult): void => {\n\tconst errors: Record<number, string> = {\n\t\t400: 'Bad Request',\n\t\t401: 'Unauthorized',\n\t\t402: 'Payment Required',\n\t\t403: 'Forbidden',\n\t\t404: 'Not Found',\n\t\t405: 'Method Not Allowed',\n\t\t406: 'Not Acceptable',\n\t\t407: 'Proxy Authentication Required',\n\t\t408: 'Request Timeout',\n\t\t409: 'Conflict',\n\t\t410: 'Gone',\n\t\t411: 'Length Required',\n\t\t412: 'Precondition Failed',\n\t\t413: 'Payload Too Large',\n\t\t414: 'URI Too Long',\n\t\t415: 'Unsupported Media Type',\n\t\t416: 'Range Not Satisfiable',\n\t\t417: 'Expectation Failed',\n\t\t418: 'Im a teapot',\n\t\t421: 'Misdirected Request',\n\t\t422: 'Unprocessable Content',\n\t\t423: 'Locked',\n\t\t424: 'Failed Dependency',\n\t\t425: 'Too Early',\n\t\t426: 'Upgrade Required',\n\t\t428: 'Precondition Required',\n\t\t429: 'Too Many Requests',\n\t\t431: 'Request Header Fields Too Large',\n\t\t451: 'Unavailable For Legal Reasons',\n\t\t500: 'Internal Server Error',\n\t\t501: 'Not Implemented',\n\t\t502: 'Bad Gateway',\n\t\t503: 'Service Unavailable',\n\t\t504: 'Gateway Timeout',\n\t\t505: 'HTTP Version Not Supported',\n\t\t506: 'Variant Also Negotiates',\n\t\t507: 'Insufficient Storage',\n\t\t508: 'Loop Detected',\n\t\t510: 'Not Extended',\n\t\t511: 'Network Authentication Required',\n\t\t...options.errors,\n\t}\n\n\tconst error = errors[result.status];\n\tif (error) {\n\t\tthrow new ApiError(options, result, error);\n\t}\n\n\tif (!result.ok) {\n\t\tconst errorStatus = result.status ?? 'unknown';\n\t\tconst errorStatusText = result.statusText ?? 'unknown';\n\t\tconst errorBody = (() => {\n\t\t\ttry {\n\t\t\t\treturn JSON.stringify(result.body, null, 2);\n\t\t\t} catch (e) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t})();\n\n\t\tthrow new ApiError(options, result,\n\t\t\t`Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`\n\t\t);\n\t}\n};\n\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise<T>\n * @throws ApiError\n */\nexport const request = <T>(config: OpenAPIConfig, options: ApiRequestOptions): CancelablePromise<T> => {\n\treturn new CancelablePromise(async (resolve, reject, onCancel) => {\n\t\ttry {\n\t\t\tconst url = getUrl(config, options);\n\t\t\tconst formData = getFormData(options);\n\t\t\tconst body = getRequestBody(options);\n\t\t\tconst headers = await getHeaders(config, options);\n\n\t\t\tif (!onCancel.isCancelled) {\n\t\t\t\tlet response = await sendRequest(config, options, url, body, formData, headers, onCancel);\n\n\t\t\t\tfor (const fn of config.interceptors.response._fns) {\n\t\t\t\t\tresponse = await fn(response)\n\t\t\t\t}\n\n\t\t\t\tconst responseBody = await getResponseBody(response);\n\t\t\t\tconst responseHeader = getResponseHeader(response, options.responseHeader);\n\n\t\t\t\tconst result: ApiResult = {\n\t\t\t\t\turl,\n\t\t\t\t\tok: response.ok,\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t\tstatusText: response.statusText,\n\t\t\t\t\tbody: responseHeader ?? responseBody,\n\t\t\t\t};\n\n\t\t\t\tcatchErrorCodes(options, result);\n\n\t\t\t\tresolve(result.body);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\t});\n};","import type { CancelablePromise } from './core/CancelablePromise';\nimport { OpenAPI } from './core/OpenAPI';\nimport { request as __request } from './core/request';\nimport type { HealthData, LiveKitData, CallsData, MeetingsData, UsersData, PresenceData, InitData } from './models';\n\nexport class HealthService {\n\n\t/**\n\t * @returns any Service is healthy\n\t * @throws ApiError\n\t */\n\tpublic static getHealth(): CancelablePromise<HealthData['responses']['GetHealth']> {\n\t\t\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'GET',\n\t\t\turl: '/health',\n\t\t});\n\t}\n\n}\n\nexport class LiveKitService {\n\n\t/**\n\t * @returns any Webhook processed successfully\n\t * @throws ApiError\n\t */\n\tpublic static postLivekitWebhook(data: LiveKitData['payloads']['PostLivekitWebhook'] = {}): CancelablePromise<LiveKitData['responses']['PostLivekitWebhook']> {\n\t\tconst {\n \n authorization,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/livekit/webhook',\n\t\t\theaders: {\n\t\t\t\tauthorization\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'text/plain',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid webhook`,\n\t\t\t\t500: `Failed to process webhook`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Webhook processed successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalLivekitWebhook(data: LiveKitData['payloads']['PostSignalLivekitWebhook'] = {}): CancelablePromise<LiveKitData['responses']['PostSignalLivekitWebhook']> {\n\t\tconst {\n \n authorization,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/livekit/webhook',\n\t\t\theaders: {\n\t\t\t\tauthorization\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'text/plain',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid webhook`,\n\t\t\t\t500: `Failed to process webhook`,\n\t\t\t},\n\t\t});\n\t}\n\n}\n\nexport class CallsService {\n\n\t/**\n\t * @returns any Call retrieved successfully\n\t * @throws ApiError\n\t */\n\tpublic static getSignalCallsByCallId(data: CallsData['payloads']['GetSignalCallsByCallId']): CancelablePromise<CallsData['responses']['GetSignalCallsByCallId']> {\n\t\tconst {\n \n callId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'GET',\n\t\t\turl: '/signal/calls/{callId}',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t404: `Call not found`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Left call successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdLeave(data: CallsData['payloads']['PostSignalCallsByCallIdLeave']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdLeave']> {\n\t\tconst {\n \n callId,\nappId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/leave',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User is not a participant`,\n\t\t\t\t404: `Call not found`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Call initiated successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsInitiate(data: CallsData['payloads']['PostSignalCallsInitiate']): CancelablePromise<CallsData['responses']['PostSignalCallsInitiate']> {\n\t\tconst {\n \n appId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/initiate',\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Invites sent successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsInvite(data: CallsData['payloads']['PostSignalCallsInvite']): CancelablePromise<CallsData['responses']['PostSignalCallsInvite']> {\n\t\tconst {\n \n appId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/invite',\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User does not have permission to invite`,\n\t\t\t\t404: `Call not found`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Call accepted successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdAccept(data: CallsData['payloads']['PostSignalCallsByCallIdAccept']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdAccept']> {\n\t\tconst {\n \n callId,\nappId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/accept',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User is not a participant`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `Call cannot be accepted in current state`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Call declined successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdDecline(data: CallsData['payloads']['PostSignalCallsByCallIdDecline']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdDecline']> {\n\t\tconst {\n \n callId,\nappId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/decline',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User is not a participant`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `Call cannot be declined in current state`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Call cancelled successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdCancel(data: CallsData['payloads']['PostSignalCallsByCallIdCancel']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdCancel']> {\n\t\tconst {\n \n callId,\nappId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/cancel',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User does not have permission to cancel`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `Call cannot be cancelled in current state`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Transfer initiated successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdTransfer(data: CallsData['payloads']['PostSignalCallsByCallIdTransfer']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdTransfer']> {\n\t\tconst {\n \n callId,\nappId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/transfer',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User does not have permission to transfer`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `Call cannot be transferred in current state`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Participant kicked successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdKick(data: CallsData['payloads']['PostSignalCallsByCallIdKick']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdKick']> {\n\t\tconst {\n \n callId,\nappId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/kick',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User does not have permission to kick`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `Participant cannot be kicked in current state`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Participant muted successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdMute(data: CallsData['payloads']['PostSignalCallsByCallIdMute']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdMute']> {\n\t\tconst {\n \n callId,\nappId,\nrequestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/mute',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `User does not have permission to mute`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `Participant cannot be muted in current state`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns void Call ended successfully. Room deleted from LiveKit.\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdEnd(data: CallsData['payloads']['PostSignalCallsByCallIdEnd']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdEnd']> {\n\t\tconst {\n \n callId,\nappId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/end',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `Only host can end the call`,\n\t\t\t\t404: `Call not found`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Recording started successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdRecordingsStart(data: CallsData['payloads']['PostSignalCallsByCallIdRecordingsStart']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdRecordingsStart']> {\n\t\tconst {\n \n callId,\nappId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/recordings/start',\n\t\t\tpath: {\n\t\t\t\tcallId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `Only host can start recording`,\n\t\t\t\t404: `Call not found`,\n\t\t\t\t409: `A recording is already active`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Recording stopped successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalCallsByCallIdRecordingsByRecordingIdStop(data: CallsData['payloads']['PostSignalCallsByCallIdRecordingsByRecordingIdStop']): CancelablePromise<CallsData['responses']['PostSignalCallsByCallIdRecordingsByRecordingIdStop']> {\n\t\tconst {\n \n callId,\nrecordingId,\nappId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/calls/{callId}/recordings/{recordingId}/stop',\n\t\t\tpath: {\n\t\t\t\tcallId, recordingId\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `Only host can stop recording`,\n\t\t\t\t404: `Call or recording not found`,\n\t\t\t},\n\t\t});\n\t}\n\n}\n\nexport class MeetingsService {\n\n\t/**\n\t * @returns any Ad-hoc meeting created successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalMeetingsCreate(data: MeetingsData['payloads']['PostSignalMeetingsCreate'] = {}): CancelablePromise<MeetingsData['responses']['PostSignalMeetingsCreate']> {\n\t\tconst {\n \n requestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/meetings/create',\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t500: `Internal server error`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Scheduled meeting started successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalMeetingsByMeetingIdStart(data: MeetingsData['payloads']['PostSignalMeetingsByMeetingIdStart']): CancelablePromise<MeetingsData['responses']['PostSignalMeetingsByMeetingIdStart']> {\n\t\tconst {\n \n meetingId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/meetings/{meetingId}/start',\n\t\t\tpath: {\n\t\t\t\tmeetingId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `Only the organizer can start the meeting`,\n\t\t\t\t404: `Meeting not found`,\n\t\t\t\t500: `Internal server error`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Joined meeting successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalMeetingsJoin(data: MeetingsData['payloads']['PostSignalMeetingsJoin'] = {}): CancelablePromise<MeetingsData['responses']['PostSignalMeetingsJoin']> {\n\t\tconst {\n \n requestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/meetings/join',\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t404: `Meeting not found`,\n\t\t\t\t500: `Internal server error`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @returns any Meeting ended successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalMeetingsByMeetingIdEnd(data: MeetingsData['payloads']['PostSignalMeetingsByMeetingIdEnd']): CancelablePromise<MeetingsData['responses']['PostSignalMeetingsByMeetingIdEnd']> {\n\t\tconst {\n \n meetingId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/meetings/{meetingId}/end',\n\t\t\tpath: {\n\t\t\t\tmeetingId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t403: `Only the organizer can end the meeting`,\n\t\t\t\t404: `Meeting not found`,\n\t\t\t\t500: `Internal server error`,\n\t\t\t},\n\t\t});\n\t}\n\n}\n\nexport class UsersService {\n\n\t/**\n\t * @returns any User profile retrieved successfully\n\t * @throws ApiError\n\t */\n\tpublic static getSignalUsersById(data: UsersData['payloads']['GetSignalUsersById']): CancelablePromise<UsersData['responses']['GetSignalUsersById']> {\n\t\tconst {\n \n id\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'GET',\n\t\t\turl: '/signal/users/{id}',\n\t\t\tpath: {\n\t\t\t\tid\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t404: `User not found`,\n\t\t\t},\n\t\t});\n\t}\n\n}\n\nexport class PresenceService {\n\n\t/**\n\t * @returns any Presence retrieved successfully\n\t * @throws ApiError\n\t */\n\tpublic static postSignalPresence(data: PresenceData['payloads']['PostSignalPresence'] = {}): CancelablePromise<PresenceData['responses']['PostSignalPresence']> {\n\t\tconst {\n \n requestBody\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '/signal/presence',\n\t\t\tbody: requestBody,\n\t\t\tmediaType: 'application/json',\n\t\t\terrors: {\n\t\t\t\t400: `Invalid request`,\n\t\t\t\t401: `Authentication required`,\n\t\t\t},\n\t\t});\n\t}\n\n}\n\nexport class InitService {\n\n\t/**\n\t * @returns any Initialized\n\t * @throws ApiError\n\t */\n\tpublic static getSignalInit(data: InitData['payloads']['GetSignalInit']): CancelablePromise<InitData['responses']['GetSignalInit']> {\n\t\tconst {\n \n appId\n } = data;\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: 'GET',\n\t\t\turl: '/signal/init',\n\t\t\tquery: {\n\t\t\t\tappId\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t401: `Authentication required`,\n\t\t\t\t500: `Internal server error`,\n\t\t\t},\n\t\t});\n\t}\n\n}","import { CallsService } from \"../../../generated/api\";\nimport type { CallsData } from \"../../../generated/api/models\";\n\nexport class SignalCallsService {\n constructor(private appId: string) {}\n\n async initiate(\n params: Omit<CallsData[\"payloads\"][\"PostSignalCallsInitiate\"], \"appId\">\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsInitiate\"]> {\n return CallsService.postSignalCallsInitiate({\n ...params,\n appId: this.appId,\n });\n }\n\n async invite(\n params: Omit<CallsData[\"payloads\"][\"PostSignalCallsInvite\"], \"appId\">\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsInvite\"]> {\n return CallsService.postSignalCallsInvite({\n ...params,\n appId: this.appId,\n });\n }\n\n async accept(\n params: Omit<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdAccept\"],\n \"appId\"\n >\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdAccept\"]> {\n return CallsService.postSignalCallsByCallIdAccept({\n ...params,\n appId: this.appId,\n });\n }\n\n async decline(\n params: Omit<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdDecline\"],\n \"appId\"\n >\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdDecline\"]> {\n return CallsService.postSignalCallsByCallIdDecline({\n ...params,\n appId: this.appId,\n });\n }\n\n async cancel(\n params: Omit<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdCancel\"],\n \"appId\"\n >\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdCancel\"]> {\n return CallsService.postSignalCallsByCallIdCancel({\n ...params,\n appId: this.appId,\n });\n }\n\n async transfer(\n params: Omit<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdTransfer\"],\n \"appId\"\n >\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdTransfer\"]> {\n return CallsService.postSignalCallsByCallIdTransfer({\n ...params,\n appId: this.appId,\n });\n }\n\n async kick(\n params: Omit<CallsData[\"payloads\"][\"PostSignalCallsByCallIdKick\"], \"appId\">\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdKick\"]> {\n return CallsService.postSignalCallsByCallIdKick({\n ...params,\n appId: this.appId,\n });\n }\n\n async mute(\n params: Omit<CallsData[\"payloads\"][\"PostSignalCallsByCallIdMute\"], \"appId\">\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdMute\"]> {\n return CallsService.postSignalCallsByCallIdMute({\n ...params,\n appId: this.appId,\n });\n }\n\n async end(\n params: Omit<CallsData[\"payloads\"][\"PostSignalCallsByCallIdEnd\"], \"appId\">\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdEnd\"]> {\n return CallsService.postSignalCallsByCallIdEnd({\n ...params,\n appId: this.appId,\n });\n }\n\n async get(\n params: Omit<CallsData[\"payloads\"][\"GetSignalCallsByCallId\"], \"appId\">\n ): Promise<CallsData[\"responses\"][\"GetSignalCallsByCallId\"]> {\n return CallsService.getSignalCallsByCallId({\n ...params,\n });\n }\n\n async startRecording(\n params: Omit<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdRecordingsStart\"],\n \"appId\"\n >\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdRecordingsStart\"]> {\n return CallsService.postSignalCallsByCallIdRecordingsStart({\n ...params,\n appId: this.appId,\n });\n }\n\n async stopRecording(\n params: Omit<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdRecordingsByRecordingIdStop\"],\n \"appId\"\n >\n ): Promise<\n CallsData[\"responses\"][\"PostSignalCallsByCallIdRecordingsByRecordingIdStop\"]\n > {\n return CallsService.postSignalCallsByCallIdRecordingsByRecordingIdStop({\n ...params,\n appId: this.appId,\n });\n }\n}\n","import { HealthService } from \"../../../generated/api\";\nimport type { HealthData } from \"../../../generated/api/models\";\n\nexport class SignalHealthService {\n async check(): Promise<HealthData[\"responses\"][\"GetHealth\"]> {\n return HealthService.getHealth();\n }\n}\n","import { MeetingsService } from \"../../../generated/api\";\nimport type { MeetingsData } from \"../../../generated/api/models\";\n\nexport interface GuestJoinParams {\n meetingCode: string;\n displayName: string;\n passcode?: string;\n appId: string;\n deviceId: string;\n}\n\nexport interface GuestJoinResponse {\n meeting: {\n id: string;\n code: string;\n status: \"ACTIVE\";\n callId: string;\n };\n joinInfo: {\n token: string;\n lkUrl: string;\n };\n sessionToken: string;\n guestId: string;\n sessionType: \"MEETING\";\n}\n\nexport type GuestErrorCode =\n | \"SESSION_NOT_FOUND\"\n | \"GUEST_ACCESS_DISABLED\"\n | \"INVALID_PASSCODE\"\n | \"MEETING_NOT_ACTIVE\"\n | \"VALIDATION_ERROR\"\n | \"UNKNOWN\";\n\nexport class GuestJoinError extends Error {\n public readonly code: GuestErrorCode;\n\n constructor(\n message: string,\n public readonly statusCode: number,\n code?: GuestErrorCode\n ) {\n super(message);\n this.name = \"GuestJoinError\";\n this.code = code || this.mapStatusToCode(statusCode);\n }\n\n private mapStatusToCode(status: number): GuestErrorCode {\n switch (status) {\n case 404:\n return \"SESSION_NOT_FOUND\";\n case 403:\n return \"GUEST_ACCESS_DISABLED\";\n case 401:\n return \"INVALID_PASSCODE\";\n case 400:\n return \"MEETING_NOT_ACTIVE\";\n case 422:\n return \"VALIDATION_ERROR\";\n default:\n return \"UNKNOWN\";\n }\n }\n}\n\nexport class SignalMeetingsService {\n constructor(private appId: string) {}\n\n async createAdHoc(\n params: MeetingsData[\"payloads\"][\"PostSignalMeetingsCreate\"]\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsCreate\"]> {\n return MeetingsService.postSignalMeetingsCreate(params);\n }\n\n async start(\n params: MeetingsData[\"payloads\"][\"PostSignalMeetingsByMeetingIdStart\"]\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsByMeetingIdStart\"]> {\n return MeetingsService.postSignalMeetingsByMeetingIdStart(params);\n }\n\n async join(\n params: MeetingsData[\"payloads\"][\"PostSignalMeetingsJoin\"]\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsJoin\"]> {\n return MeetingsService.postSignalMeetingsJoin(params);\n }\n\n async end(\n params: MeetingsData[\"payloads\"][\"PostSignalMeetingsByMeetingIdEnd\"]\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsByMeetingIdEnd\"]> {\n return MeetingsService.postSignalMeetingsByMeetingIdEnd(params);\n }\n\n async guestJoin(\n params: GuestJoinParams,\n baseUrl: string\n ): Promise<GuestJoinResponse> {\n const response = await fetch(`${baseUrl}/signal/meetings/guest-join`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(params),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new GuestJoinError(\n error.message || error.error?.message || \"Failed to join meeting\",\n response.status\n );\n }\n\n return response.json();\n }\n}\n","import { PresenceService } from \"../../../generated/api\";\nimport type { PresenceData } from \"../../../generated/api/models\";\n\nexport class SignalPresenceService {\n constructor(private appId: string) {}\n\n /**\n * Query presence for multiple user IDs\n */\n async queryPresence(\n userIds: string[]\n ): Promise<PresenceData[\"responses\"][\"PostSignalPresence\"]> {\n return PresenceService.postSignalPresence({\n requestBody: { userIds },\n });\n }\n}\n","import { OpenAPI } from \"../../generated/api\";\nimport {\n SignalCallsService,\n SignalHealthService,\n SignalMeetingsService,\n SignalPresenceService,\n} from \"./services\";\nimport type { SignalClientConfig } from \"./types\";\n\nexport class SignalClient {\n public readonly calls: SignalCallsService;\n public readonly health: SignalHealthService;\n public readonly meetings: SignalMeetingsService;\n public readonly presence: SignalPresenceService;\n\n constructor(config: SignalClientConfig) {\n this.configure(config);\n\n // Initialize services\n this.calls = new SignalCallsService(config.appId);\n this.health = new SignalHealthService();\n this.meetings = new SignalMeetingsService(config.appId);\n this.presence = new SignalPresenceService(config.appId);\n }\n\n private configure(config: SignalClientConfig): void {\n OpenAPI.BASE = config.baseUrl;\n\n // Handle token - OpenAPI expects string | Resolver<string>\n if (typeof config.token === \"function\") {\n const tokenFn = config.token;\n OpenAPI.TOKEN = async (_options) => {\n const result = tokenFn();\n return typeof result === \"string\" ? result : await result;\n };\n } else {\n OpenAPI.TOKEN = config.token;\n }\n\n OpenAPI.CREDENTIALS = config.credentials ?? \"include\";\n OpenAPI.WITH_CREDENTIALS = config.withCredentials ?? false;\n\n if (config.headers) {\n OpenAPI.HEADERS = config.headers;\n }\n }\n\n public reconfigure(config: Partial<SignalClientConfig>): void {\n // Update existing config with new values\n const newConfig: SignalClientConfig = {\n baseUrl: OpenAPI.BASE,\n appId: this.calls ? (this.calls as any).appId : \"\",\n credentials: OpenAPI.CREDENTIALS as any,\n withCredentials: OpenAPI.WITH_CREDENTIALS,\n ...config,\n };\n\n this.configure(newConfig);\n\n // Update appId in services if it changed\n if (config.appId) {\n if (this.calls) {\n (this.calls as any).appId = config.appId;\n }\n if (this.meetings) {\n (this.meetings as any).appId = config.appId;\n }\n }\n }\n}\n","import { useSdk } from \"../../provider/RtcProvider\";\nimport type { SignalClient } from \"./client\";\n\n/**\n * Hook to access the Signal client directly from the SDK\n * @returns The SignalClient instance\n */\nexport function useSignalClient(): SignalClient {\n const sdk = useSdk();\n return sdk.signal;\n}\n","/**\n * Comprehensive logging system for the Callpad Web SDK\n *\n * Features:\n * - Log level filtering (debug, info, warn, error)\n * - Environment variable configuration (DEBUG, CALLPAD_LOG_LEVEL)\n * - Hierarchical namespacing (callpad:socket:connection)\n * - Custom logger integration\n * - Zero-cost when disabled\n */\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport interface LoggerOptions {\n level?: LogLevel;\n enableDebug?: boolean;\n customLogger?: (level: LogLevel, message: string, meta?: any) => void;\n}\n\nexport interface CallpadLogger {\n debug(message: string, meta?: any): void;\n info(message: string, meta?: any): void;\n warn(message: string, meta?: any): void;\n error(message: string, meta?: any): void;\n child(namespace: string): CallpadLogger;\n setLevel(level: LogLevel): void;\n isLevelEnabled(level: LogLevel): boolean;\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\nclass CallpadLoggerImpl implements CallpadLogger {\n private namespace: string;\n private level: LogLevel;\n private enableDebug: boolean;\n private customLogger?: (level: LogLevel, message: string, meta?: any) => void;\n\n constructor(namespace = \"callpad\", options: LoggerOptions = {}) {\n this.namespace = namespace;\n this.level = options.level ?? this.getDefaultLevel();\n this.enableDebug = options.enableDebug ?? this.shouldEnableDebug();\n if (options.customLogger) {\n this.customLogger = options.customLogger;\n }\n }\n\n private getDefaultLevel(): LogLevel {\n const envLevel =\n typeof window !== \"undefined\"\n ? (window as any).__CALLPAD_LOG_LEVEL__\n : typeof globalThis !== \"undefined\" &&\n (globalThis as any).process?.env?.CALLPAD_LOG_LEVEL;\n\n if (envLevel && this.isValidLogLevel(envLevel)) {\n return envLevel as LogLevel;\n }\n\n const isProduction =\n typeof globalThis !== \"undefined\" &&\n (globalThis as any).process?.env?.NODE_ENV === \"production\";\n\n return isProduction ? \"warn\" : \"info\";\n }\n\n private shouldEnableDebug(): boolean {\n const debugEnv =\n typeof window !== \"undefined\"\n ? (window as any).__DEBUG__\n : typeof globalThis !== \"undefined\" &&\n (globalThis as any).process?.env?.DEBUG;\n\n if (!debugEnv) return false;\n\n const debugPatterns = debugEnv.split(/[\\s,]+/);\n return debugPatterns.some((pattern: string) => {\n if (pattern === \"*\") return true;\n if (pattern.endsWith(\"*\")) {\n const prefix = pattern.slice(0, -1);\n return this.namespace.startsWith(prefix);\n }\n return this.namespace === pattern;\n });\n }\n\n private isValidLogLevel(level: string): boolean {\n return Object.keys(LOG_LEVELS).includes(level);\n }\n\n private shouldLog(level: LogLevel): boolean {\n if (level === \"debug\" && !this.enableDebug) {\n return false;\n }\n return LOG_LEVELS[level] >= LOG_LEVELS[this.level];\n }\n\n private formatMessage(level: LogLevel, message: string, meta?: any): void {\n if (!this.shouldLog(level)) return;\n\n const timestamp = new Date().toISOString();\n const prefix = `[${timestamp}] [${this.namespace}] [${level.toUpperCase()}]`;\n\n if (this.customLogger) {\n this.customLogger(level, message, meta);\n return;\n }\n\n const logMethod =\n level === \"error\"\n ? console.error\n : level === \"warn\"\n ? console.warn\n : level === \"info\"\n ? console.info\n : console.log;\n\n if (meta !== undefined) {\n logMethod(`${prefix} ${message}`, meta);\n } else {\n logMethod(`${prefix} ${message}`);\n }\n }\n\n debug(message: string, meta?: any): void {\n this.formatMessage(\"debug\", message, meta);\n }\n\n info(message: string, meta?: any): void {\n this.formatMessage(\"info\", message, meta);\n }\n\n warn(message: string, meta?: any): void {\n this.formatMessage(\"warn\", message, meta);\n }\n\n error(message: string, meta?: any): void {\n this.formatMessage(\"error\", message, meta);\n }\n\n child(namespace: string): CallpadLogger {\n const childNamespace = `${this.namespace}:${namespace}`;\n const childOptions: LoggerOptions = {\n level: this.level,\n enableDebug: this.enableDebug,\n };\n if (this.customLogger) {\n childOptions.customLogger = this.customLogger;\n }\n return new CallpadLoggerImpl(childNamespace, childOptions);\n }\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n isLevelEnabled(level: LogLevel): boolean {\n return this.shouldLog(level);\n }\n}\n\nlet rootLogger: CallpadLogger | null = null;\n\nexport function createLogger(\n namespace?: string,\n options?: LoggerOptions\n): CallpadLogger {\n if (!namespace) {\n if (!rootLogger) {\n rootLogger = new CallpadLoggerImpl(\"callpad\", options);\n }\n return rootLogger;\n }\n\n return new CallpadLoggerImpl(`callpad:${namespace}`, options);\n}\n\nexport function setGlobalLoggerOptions(options: LoggerOptions): void {\n rootLogger = new CallpadLoggerImpl(\"callpad\", options);\n}\n","export interface DurationResult {\n seconds: number;\n minutes: number;\n hours: number;\n formatted: string;\n}\n\nexport const computeDuration = (\n startTime: string | Date | number,\n endTime?: string | Date | number\n): DurationResult => {\n const startTimestamp = parseTimeInput(startTime);\n if (startTimestamp === null) {\n throw new Error(\"Invalid start time provided\");\n }\n\n const endTimestamp = endTime ? parseTimeInput(endTime) : Date.now();\n if (endTimestamp === null) {\n throw new Error(\"Invalid end time provided\");\n }\n\n let durationMs = endTimestamp - startTimestamp;\n if (durationMs < 0) {\n durationMs = 0;\n // throw new Error(\"End time cannot be before start time\");\n }\n\n const totalSeconds = Math.round(durationMs / 1000);\n const totalMinutes = Math.round(totalSeconds / 60);\n const totalHours = Math.round(totalSeconds / 3600);\n\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n\n const formatted =\n hours === 0\n ? `${minutes.toString().padStart(2, \"0\")}:${seconds.toString().padStart(2, \"0\")}`\n : `${hours}:${minutes.toString().padStart(2, \"0\")}:${seconds.toString().padStart(2, \"0\")}`;\n\n return {\n seconds: totalSeconds,\n minutes: totalMinutes,\n hours: totalHours,\n formatted,\n };\n};\n\nconst parseTimeInput = (input: string | Date | number): number | null => {\n if (typeof input === \"number\") {\n return Number.isFinite(input) ? input : null;\n }\n\n if (input instanceof Date) {\n return Number.isFinite(input.getTime()) ? input.getTime() : null;\n }\n\n const timestamp = Date.parse(input);\n return Number.isFinite(timestamp) ? timestamp : null;\n};\n","import { OpenAPI } from \"../../generated/api\";\nimport { createLogger } from \"../../utils\";\nimport type { ApiConfig } from \"./types\";\n\nconst logger = createLogger(\"api-config\");\n\nexport class OpenApiConfigService {\n private static instance: OpenApiConfigService;\n\n private constructor() {\n // Add request interceptor to log authorization headers\n OpenAPI.interceptors.request.use((request) => {\n // Request headers can be Headers object or plain object\n const headers = request.headers as Headers | Record<string, string>;\n let authHeader: string | null = null;\n\n if (headers instanceof Headers) {\n authHeader = headers.get(\"Authorization\") || null;\n } else if (headers && typeof headers === \"object\") {\n authHeader = (headers as Record<string, string>).Authorization || null;\n }\n\n if (authHeader) {\n logger.debug(\"API Request with Authorization header\", {\n hasAuth: true,\n authPrefix: `${authHeader.substring(0, 20)}...`,\n });\n } else {\n logger.warn(\"API Request WITHOUT Authorization header\", {\n hasAuth: false,\n });\n }\n\n return request;\n });\n }\n\n static getInstance(): OpenApiConfigService {\n if (!OpenApiConfigService.instance) {\n OpenApiConfigService.instance = new OpenApiConfigService();\n }\n return OpenApiConfigService.instance;\n }\n\n configure(config: ApiConfig): void {\n OpenAPI.BASE = config.baseUrl;\n\n // Handle token - OpenAPI expects string | Resolver<string>\n // Resolver<string> = (options: ApiRequestOptions) => Promise<string>\n if (typeof config.token === \"function\") {\n const tokenFn = config.token; // Capture the function reference\n OpenAPI.TOKEN = async (_options) => {\n const result = tokenFn();\n const token = typeof result === \"string\" ? result : await result;\n\n if (!token) {\n logger.warn(\"Token provider returned empty token\");\n } else {\n logger.debug(\"Token resolved successfully\", {\n tokenPrefix: `${token.substring(0, 10)}...`,\n });\n }\n\n return token;\n };\n } else {\n OpenAPI.TOKEN = config.token;\n }\n\n OpenAPI.CREDENTIALS = config.credentials ?? \"include\";\n OpenAPI.WITH_CREDENTIALS = config.withCredentials ?? false;\n\n if (config.headers) {\n OpenAPI.HEADERS = config.headers;\n }\n\n logger.info(\"Signal svc configuration completed\", {\n baseUrl: config.baseUrl,\n hasToken: !!config.token,\n });\n }\n}\n\nexport const apiConfig = OpenApiConfigService.getInstance();\n\nexport { OpenAPI };\n\n// Re-export ApiConfig type\nexport type { ApiConfig } from \"./types/api.types\";\n","import type { Nullable } from \"./types\";\n\nexport class SessionStorage<T> {\n private readonly key: string;\n\n constructor(key: string) {\n this.key = key;\n }\n\n set(data: T): void {\n const serialized = JSON.stringify(data);\n sessionStorage.setItem(this.key, serialized);\n }\n\n get(): Nullable<T> {\n const stored = sessionStorage.getItem(this.key);\n if (!stored) {\n return null;\n }\n\n try {\n return JSON.parse(stored) as T;\n } catch {\n return null;\n }\n }\n\n clear(): void {\n sessionStorage.removeItem(this.key);\n }\n\n exists(): boolean {\n return sessionStorage.getItem(this.key) !== null;\n }\n}\n","import { InitService, OpenAPI } from \"../generated/api\";\nimport { createLogger } from \"../utils/logger\";\nimport { SessionStorage } from \"./session-storage\";\nimport type {\n AuthProvider,\n AuthRetryConfig,\n Nullable,\n SessionInfo,\n} from \"./types\";\n\nconst logger = createLogger(\"auth-manager\");\n\nconst DEFAULT_AUTH_RETRY_CONFIG: AuthRetryConfig = {\n maxRetries: 10,\n initialDelayMs: 200,\n maxDelayMs: 5000,\n backoffMultiplier: 2,\n};\n\nexport class AuthManager {\n private readonly authProvider: AuthProvider;\n private lastToken: Nullable<string> = null;\n private readonly sessionStorage: SessionStorage<SessionInfo>;\n private readonly appId: string;\n private initializePromise: Nullable<Promise<void>> = null;\n private readonly retryConfig: AuthRetryConfig;\n\n constructor(\n authProvider: AuthProvider,\n appId: string,\n retryConfig?: Partial<AuthRetryConfig>\n ) {\n this.authProvider = authProvider;\n this.appId = appId;\n this.sessionStorage = new SessionStorage<SessionInfo>(\n \"callpad_session_info\"\n );\n this.retryConfig = { ...DEFAULT_AUTH_RETRY_CONFIG, ...retryConfig };\n }\n\n private async acquireTokenWithRetry(): Promise<string> {\n const { maxRetries, initialDelayMs, maxDelayMs, backoffMultiplier } =\n this.retryConfig;\n\n let delay = initialDelayMs;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const token = this.authProvider();\n if (token) {\n if (attempt > 0) {\n logger.debug(\"Token acquired after retry\", { attempt });\n }\n return token;\n }\n\n if (attempt < maxRetries) {\n logger.debug(\"Auth token not available, retrying\", {\n attempt: attempt + 1,\n maxRetries,\n delayMs: delay,\n });\n\n await new Promise((resolve) => setTimeout(resolve, delay));\n delay = Math.min(delay * backoffMultiplier, maxDelayMs);\n }\n }\n\n throw new Error(\n `No authentication token available after ${maxRetries} retries. This may indicate the auth provider is temporarily unavailable (e.g., token refresh in progress).`\n );\n }\n\n async initialize(appId: string): Promise<void> {\n try {\n const token = await this.acquireTokenWithRetry();\n\n // Temporarily configure OpenAPI to use GetToken for the init call only\n // This prevents circular dependency (init call → session token → init call)\n const originalToken = OpenAPI.TOKEN;\n OpenAPI.TOKEN = token;\n\n try {\n logger.debug(\"Initializing session\", { appId });\n const response = await InitService.getSignalInit({ appId });\n\n const sessionInfo: SessionInfo = {\n sessionToken: response.sessionToken,\n sessionId: response.sessionId,\n userId: response.userId,\n deviceId: response.deviceId,\n expiresAt: response.expiresAt,\n };\n\n this.sessionStorage.set(sessionInfo);\n logger.info(\"Session initialized successfully\", {\n sessionId: sessionInfo.sessionId,\n userId: sessionInfo.userId,\n });\n } finally {\n // Restore original OpenAPI.TOKEN configuration\n OpenAPI.TOKEN = originalToken;\n }\n } catch (error) {\n logger.error(\"Failed to initialize session\", { appId, error });\n throw new Error(`Session initialization failed: ${error}`);\n }\n }\n\n async getSessionToken(): Promise<string | null> {\n // Check if session already exists\n const sessionInfo = this.sessionStorage.get();\n if (sessionInfo) {\n return sessionInfo.sessionToken;\n }\n\n // If no session exists and no initialization is in progress, start initialization\n if (!this.initializePromise) {\n this.initializePromise = this.initialize(this.appId);\n }\n\n // Wait for initialization to complete\n try {\n await this.initializePromise;\n const newSessionInfo = this.sessionStorage.get();\n return newSessionInfo?.sessionToken || null;\n } catch (error) {\n logger.error(\"Failed to get session token\", { error });\n return null;\n }\n }\n\n getSessionInfo(): SessionInfo | null {\n return this.sessionStorage.get();\n }\n\n getCurrentToken(): string | null {\n const token = this.authProvider();\n if (token !== this.lastToken) {\n this.lastToken = token;\n }\n\n return token;\n }\n}\n","import { SessionStorage } from \"./session-storage\";\n\nexport interface GuestSessionInfo {\n sessionToken: string;\n guestId: string;\n displayName: string;\n callId: string;\n meetingId: string;\n meetingCode: string;\n}\n\nexport class GuestAuthManager {\n private readonly sessionStorage: SessionStorage<GuestSessionInfo>;\n private readonly appId: string;\n private readonly deviceId: string;\n\n constructor(appId: string, deviceId: string) {\n this.appId = appId;\n this.deviceId = deviceId;\n this.sessionStorage = new SessionStorage<GuestSessionInfo>(\n \"callpad_guest_session\"\n );\n }\n\n getAppId(): string {\n return this.appId;\n }\n\n getDeviceId(): string {\n return this.deviceId;\n }\n\n setSession(session: GuestSessionInfo): void {\n this.sessionStorage.set(session);\n }\n\n async getSessionToken(): Promise<string | null> {\n return this.sessionStorage.get()?.sessionToken || null;\n }\n\n getSessionInfo(): GuestSessionInfo | null {\n return this.sessionStorage.get();\n }\n\n clearSession(): void {\n this.sessionStorage.clear();\n }\n}\n","type Nullable<T> = T | null;\n\nexport type CallParticipantRole = \"HOST\" | \"PARTICIPANT\" | \"GUEST\";\n\nexport interface Profile {\n userId: string;\n username: string | null;\n firstName: string | null;\n lastName: string | null;\n profilePhoto: string | null;\n}\n\nexport interface ParticipantPermissions {\n canMute: boolean;\n canKick: boolean;\n canTransfer: boolean;\n canEnd: boolean;\n canRecord: boolean;\n canShareScreen: boolean;\n}\n\nexport interface ParticipantMetadata {\n userId: string | number;\n firstName: Nullable<string>;\n lastName: Nullable<string>;\n username: Nullable<string>;\n email: Nullable<string>;\n profilePhoto: Nullable<string>;\n role: CallParticipantRole;\n permissions: ParticipantPermissions;\n}\n\nexport interface LiveKitJoinInfo {\n token: string;\n roomName: string;\n url: string;\n}\n\nexport interface RecordingInfo {\n recordingId: string;\n egressId: string;\n startedAt: string;\n initiatedBy?: string;\n}\n\nexport type SessionType = \"CALL\" | \"MEETING\";\n\nexport interface MeetingInfo {\n meetingId: string;\n meetingCode: string;\n}\n\nexport interface Session {\n id: string;\n status: \"initializing\" | \"pending\" | \"ready\" | \"active\" | \"ended\";\n mode: \"AUDIO\" | \"VIDEO\";\n role: \"HOST\" | \"PARTICIPANT\" | \"GUEST\";\n livekitInfo?: LiveKitJoinInfo;\n startedAt?: string;\n ringTimeoutMs?: number;\n recording?: RecordingInfo | null;\n sessionType?: SessionType;\n meetingInfo?: MeetingInfo;\n}\n\nexport interface IncomingInvite {\n callId: string;\n inviteId: string;\n caller: ParticipantMetadata;\n mode: \"AUDIO\" | \"VIDEO\";\n expiresAt: string;\n expiresInMs: number;\n ringTimeoutMs: number;\n}\n\nexport interface OutgoingInvite {\n userId: string;\n status: \"sent\" | \"accepted\" | \"declined\" | \"missed\" | \"left\";\n participant?: Omit<ParticipantMetadata, \"permissions\"> | undefined;\n}\n\nexport interface RtcError {\n code: string;\n message: string;\n timestamp: number;\n context?: any;\n}\n\nexport interface GuestIdentity {\n guestId: string;\n displayName: string;\n}\n\nexport interface RtcState {\n // Did we initiate the current call?\n initiated: boolean;\n\n // Active session (null when no active call)\n session: Session | null;\n\n // Incoming invitation (null when no pending invite)\n incomingInvite: IncomingInvite | null;\n\n outgoingInvites: Record<string, OutgoingInvite>;\n\n // Error tracking\n errors: RtcError[];\n\n // Guest mode state\n guestIdentity: GuestIdentity | null;\n isGuestMode: boolean;\n}\n\nexport const defaultState: RtcState = {\n initiated: false,\n session: null,\n incomingInvite: null,\n outgoingInvites: {},\n errors: [],\n guestIdentity: null,\n isGuestMode: false,\n};\n\nimport type { Participant } from \"livekit-client\";\n\nexport interface ParticipantListOptions {\n pageSize?: number;\n includeLocalParticipant?: boolean;\n sortBy?: \"speaking\" | \"name\" | \"raised-hand\";\n}\n\nexport interface ParticipantListReturn {\n participants: Participant[];\n pinnedParticipants: Participant[];\n currentPage: number;\n totalPages: number;\n pageSize: number;\n totalParticipants: number;\n hasNextPage: boolean;\n hasPrevPage: boolean;\n nextPage: () => void;\n prevPage: () => void;\n setPageSize: (size: number) => void;\n togglePin: (participantId: string) => void;\n clearPinned: () => void;\n isPinned: (participantId: string) => boolean;\n}\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport type { RtcError, RtcState } from \"./types\";\nimport { defaultState } from \"./types\";\n\ntype Actions = {\n patch: (fn: (draft: RtcState) => void) => void;\n reset: () => void;\n addError: (error: RtcError) => void;\n clearErrors: () => void;\n};\n\nexport const useRtcStore = create<RtcState & Actions>()(\n immer((set) => ({\n ...defaultState,\n\n patch: (fn) =>\n set((state) => {\n fn(state);\n }),\n\n reset: () => set(() => defaultState),\n\n addError: (error) =>\n set((state) => {\n state.errors.push(error);\n }),\n\n clearErrors: () =>\n set((state) => {\n state.errors = [];\n }),\n }))\n);\n\nexport const rtcStore = useRtcStore;\n","import type { ZodSchema } from \"zod\";\nimport { pushSocketValidationError } from \"../../../state/errors\";\nimport { rtcStore } from \"../../../state/store\";\nimport { createLogger } from \"../../../utils/logger\";\nimport type { CallpadLogger } from \"../../../utils/logger\";\nimport type { AuthManager } from \"../../auth.manager\";\n\nexport interface SocketHandlerOptions {\n livekit?: any;\n authManager?: AuthManager;\n}\n\n/**\n * Base handler for Socket.IO events with automatic validation and type safety.\n *\n * @template TPayload - The type of the event payload\n */\nexport abstract class BaseSocketHandler<TPayload = any> {\n protected abstract readonly eventName: string;\n protected abstract readonly schema: ZodSchema<TPayload>;\n private _logger?: CallpadLogger;\n\n constructor(protected readonly options: SocketHandlerOptions = {}) {}\n\n protected get logger(): CallpadLogger {\n if (!this._logger) {\n this._logger = createLogger(`socketio:${this.eventName}`);\n }\n return this._logger;\n }\n\n async handleRaw(rawData: unknown): Promise<void> {\n this.logger.info(`${this.eventName} received`, rawData);\n\n // const result = this.schema.safeParse(rawData);\n // if (!result.success) {\n // this.logger.error(\n // `${this.eventName} validation failed`,\n // result.error.issues\n // );\n // pushSocketValidationError(\n // this.eventName,\n // result.error.issues,\n // rawData,\n // (level, message, meta) => {\n // switch (level) {\n // case \"debug\":\n // this.logger.debug(message, meta);\n // break;\n // case \"info\":\n // this.logger.info(message, meta);\n // break;\n // case \"warn\":\n // this.logger.warn(message, meta);\n // break;\n // case \"error\":\n // this.logger.error(message, meta);\n // break;\n // }\n // }\n // );\n // return;\n // }\n\n try {\n // TODO fix validation\n await this.handle(JSON.parse(JSON.stringify(rawData)));\n // await this.handle(result.data);\n this.logger.debug(`${this.eventName} handled successfully`);\n } catch (error) {\n this.logger.error(`${this.eventName} handler error`, error);\n throw error;\n }\n }\n\n protected abstract handle(data: TPayload): Promise<void> | void;\n\n protected updateStore(updater: (state: any) => void): void {\n rtcStore.getState().patch(updater);\n }\n\n protected get livekit() {\n return this.options.livekit;\n }\n}\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport type { ChatEntry, ChatState, Envelope } from \"./types\";\n\ninterface ChatActions {\n patch: (fn: (draft: ChatState) => void) => void;\n applyIncoming: (envelope: Envelope) => void;\n addFile: (file: File, filename: string) => void;\n addEntryOptimistic: (entry: ChatEntry) => void;\n markEntrySent: (entryId: string) => void;\n markEntryFailed: (entryId: string) => void;\n applyEdit: (entryId: string, newContent: string, version: number) => void;\n applyRemove: (entryId: string) => void;\n applyReaction: (\n entryId: string,\n emoji: string,\n participantId: string,\n op: \"add\" | \"remove\"\n ) => void;\n queuePendingOp: (entryId: string, envelope: Envelope) => void;\n processPendingOps: (entryId: string) => void;\n trimOldEntries: () => void;\n clearChat: () => void;\n}\n\nconst defaultChatState: ChatState = {\n byId: {},\n order: [],\n pendingOps: {},\n participantCache: {},\n maxEntries: 1000,\n};\n\nfunction applyReactionToEntry(\n entry: ChatEntry,\n emoji: string,\n participantId: string,\n op: \"add\" | \"remove\"\n) {\n const emojiSet = entry.reactions[emoji];\n if (!emojiSet) {\n entry.reactions[emoji] = new Set();\n }\n if (op === \"add\") {\n entry.reactions[emoji]?.add(participantId);\n } else {\n entry.reactions[emoji]?.delete(participantId);\n if (entry.reactions[emoji]?.size === 0) {\n delete entry.reactions[emoji];\n }\n }\n}\n\nfunction trimEntriesIfNeeded(state: ChatState) {\n if (Object.keys(state.byId).length > state.maxEntries) {\n const entriesToRemove = Object.keys(state.byId).length - state.maxEntries;\n for (let i = 0; i < entriesToRemove; i++) {\n const oldestId = state.order[i];\n if (oldestId) {\n delete state.byId[oldestId];\n }\n }\n state.order = state.order.slice(entriesToRemove);\n }\n}\n\nexport const useChatStore = create<ChatState & ChatActions>()(\n immer((set) => ({\n ...defaultChatState,\n\n patch: (fn) =>\n set((state) => {\n fn(state);\n }),\n\n applyIncoming: (envelope) =>\n set((state) => {\n if (envelope.kind === \"entry\") {\n if (state.byId[envelope.entryId]) {\n return;\n }\n\n if (envelope.sender.info) {\n state.participantCache[envelope.sender.id] = envelope.sender.info;\n }\n\n const entry: ChatEntry = {\n id: envelope.entryId,\n content: envelope.payload.content,\n sender: {\n id: envelope.sender.id,\n },\n createdAt: envelope.ts,\n version: 1,\n reactions: {},\n status: \"sent\",\n filename: envelope.payload?.meta?.filename,\n };\n\n state.byId[envelope.entryId] = entry;\n state.order.push(envelope.entryId);\n\n trimEntriesIfNeeded(state);\n\n const pendingOps = state.pendingOps[envelope.entryId];\n if (pendingOps) {\n delete state.pendingOps[envelope.entryId];\n\n for (const op of pendingOps) {\n if (op.kind === \"edit\") {\n const entry = state.byId[op.entryId];\n if (entry && op.payload.version > entry.version) {\n entry.content = op.payload.newContent;\n entry.version = op.payload.version;\n entry.editedAt = op.ts;\n }\n } else if (op.kind === \"remove\") {\n const entry = state.byId[op.entryId];\n if (entry && !entry.removedAt) {\n entry.removedAt = op.ts;\n }\n } else if (op.kind === \"reaction\") {\n if (op.sender.info) {\n state.participantCache[op.sender.id] = op.sender.info;\n }\n\n const entry = state.byId[op.entryId];\n if (entry) {\n applyReactionToEntry(\n entry,\n op.payload.emoji,\n op.sender.id,\n op.payload.op\n );\n }\n }\n }\n }\n } else if (envelope.kind === \"edit\") {\n const entry = state.byId[envelope.entryId];\n if (entry) {\n if (envelope.payload.version > entry.version) {\n entry.content = envelope.payload.newContent;\n entry.version = envelope.payload.version;\n entry.editedAt = envelope.ts;\n }\n } else {\n if (!state.pendingOps[envelope.entryId]) {\n state.pendingOps[envelope.entryId] = [];\n }\n state.pendingOps[envelope.entryId]?.push(envelope);\n }\n } else if (envelope.kind === \"remove\") {\n const entry = state.byId[envelope.entryId];\n if (entry) {\n if (!entry.removedAt) {\n entry.removedAt = envelope.ts;\n }\n } else {\n if (!state.pendingOps[envelope.entryId]) {\n state.pendingOps[envelope.entryId] = [];\n }\n state.pendingOps[envelope.entryId]?.push(envelope);\n }\n } else if (envelope.kind === \"reaction\") {\n if (envelope.sender.info) {\n state.participantCache[envelope.sender.id] = envelope.sender.info;\n }\n\n const entry = state.byId[envelope.entryId];\n if (entry) {\n applyReactionToEntry(\n entry,\n envelope.payload.emoji,\n envelope.sender.id,\n envelope.payload.op\n );\n } else {\n if (!state.pendingOps[envelope.entryId]) {\n state.pendingOps[envelope.entryId] = [];\n }\n state.pendingOps[envelope.entryId]?.push(envelope);\n }\n }\n }),\n\n addFile: (file, filename) =>\n set((state) => {\n const values = Object.values(state.byId);\n const entryArr = values.filter((val) => val.filename === filename);\n const entry = entryArr[0];\n entry!.file = file;\n state.byId[entry!.id] = entry!;\n }),\n\n addEntryOptimistic: (entry) =>\n set((state) => {\n state.byId[entry.id] = entry;\n state.order.push(entry.id);\n\n trimEntriesIfNeeded(state);\n }),\n\n markEntrySent: (entryId) =>\n set((state) => {\n const entry = state.byId[entryId];\n if (entry) {\n entry.status = \"sent\";\n }\n }),\n\n markEntryFailed: (entryId) =>\n set((state) => {\n const entry = state.byId[entryId];\n if (entry) {\n entry.status = \"failed\";\n }\n }),\n\n applyEdit: (entryId, newContent, version) =>\n set((state) => {\n const entry = state.byId[entryId];\n if (entry && version > entry.version) {\n entry.content = newContent;\n entry.version = version;\n entry.editedAt = Date.now();\n }\n }),\n\n applyRemove: (entryId) =>\n set((state) => {\n const entry = state.byId[entryId];\n if (entry && !entry.removedAt) {\n entry.removedAt = Date.now();\n }\n }),\n\n applyReaction: (entryId, emoji, participantId, op) =>\n set((state) => {\n const entry = state.byId[entryId];\n if (entry) {\n applyReactionToEntry(entry, emoji, participantId, op);\n }\n }),\n\n queuePendingOp: (entryId, envelope) =>\n set((state) => {\n if (!state.pendingOps[entryId]) {\n state.pendingOps[entryId] = [];\n }\n state.pendingOps[entryId].push(envelope);\n }),\n\n processPendingOps: (entryId) =>\n set((state) => {\n const pendingOps = state.pendingOps[entryId];\n if (!pendingOps) {\n return;\n }\n\n delete state.pendingOps[entryId];\n\n for (const envelope of pendingOps) {\n if (envelope.kind === \"edit\") {\n const entry = state.byId[envelope.entryId];\n if (entry && envelope.payload.version > entry.version) {\n entry.content = envelope.payload.newContent;\n entry.version = envelope.payload.version;\n entry.editedAt = envelope.ts;\n }\n } else if (envelope.kind === \"remove\") {\n const entry = state.byId[envelope.entryId];\n if (entry && !entry.removedAt) {\n entry.removedAt = envelope.ts;\n }\n } else if (envelope.kind === \"reaction\") {\n if (envelope.sender.info) {\n state.participantCache[envelope.sender.id] = envelope.sender.info;\n }\n\n const entry = state.byId[envelope.entryId];\n if (entry) {\n applyReactionToEntry(\n entry,\n envelope.payload.emoji,\n envelope.sender.id,\n envelope.payload.op\n );\n }\n }\n }\n }),\n\n trimOldEntries: () =>\n set((state) => {\n trimEntriesIfNeeded(state);\n }),\n\n clearChat: () => set(() => defaultChatState),\n }))\n);\n\nexport const chatStore = useChatStore;\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport type { ParticipantMetadata } from \"../../state/types\";\nimport type { RaiseHandEnvelope, RaiseHandState, RaisedHand } from \"./types\";\n\ninterface RaiseHandActions {\n raiseHand: (participantId: string) => void;\n lowerHand: (participantId: string) => void;\n lowerAllHands: () => void;\n isHandRaised: (participantId: string) => boolean;\n getRaisedHandOrder: (participantId: string) => number | null;\n upsertParticipantInfo: (id: string, info: ParticipantMetadata) => void;\n clear: () => void;\n}\n\nconst defaultState: RaiseHandState = {\n raisedHands: new Map(),\n nextOrder: 1,\n};\n\nexport const useRaiseHandStore = create<RaiseHandState & RaiseHandActions>()(\n immer((set, get) => ({\n ...defaultState,\n\n raiseHand: (participantId) =>\n set((state) => {\n if (!state.raisedHands.has(participantId)) {\n state.raisedHands.set(participantId, {\n ts: Date.now(),\n order: state.nextOrder++,\n });\n }\n }),\n\n lowerHand: (participantId) =>\n set((state) => {\n state.raisedHands.delete(participantId);\n // Reset order counter when all hands are lowered\n if (state.raisedHands.size === 0) {\n state.nextOrder = 1;\n }\n }),\n\n lowerAllHands: () =>\n set((state) => {\n state.raisedHands.clear();\n state.nextOrder = 1;\n }),\n\n isHandRaised: (participantId) => get().raisedHands.has(participantId),\n\n getRaisedHandOrder: (participantId) => {\n const hand = get().raisedHands.get(participantId);\n return hand?.order ?? null;\n },\n\n upsertParticipantInfo: (id, info) => {\n // No-op for now, can be extended if needed\n },\n\n clear: () =>\n set(() => ({\n raisedHands: new Map(),\n nextOrder: 1,\n })),\n }))\n);\n\nexport function applyIncomingRaiseHand(envelope: RaiseHandEnvelope): void {\n const { raiseHand, lowerHand, lowerAllHands, upsertParticipantInfo } =\n useRaiseHandStore.getState();\n\n if (envelope.sender.info) {\n upsertParticipantInfo(envelope.sender.id, envelope.sender.info);\n }\n\n switch (envelope.payload.action) {\n case \"raise\": {\n raiseHand(envelope.sender.id);\n break;\n }\n case \"lower\": {\n const targetId = envelope.payload.targetId || envelope.sender.id;\n lowerHand(targetId);\n break;\n }\n case \"lower-all\": {\n lowerAllHands();\n break;\n }\n }\n}\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport type { ParticipantMetadata } from \"../../state/types\";\nimport type {\n SpotlightEnvelope,\n SpotlightState,\n SpotlightedUser,\n} from \"./types\";\n\ninterface SpotlightActions {\n spotlight: (participantId: string, info?: ParticipantMetadata) => void;\n unspotlight: () => void;\n getSpotlightedUser: () => SpotlightedUser | null;\n clear: () => void;\n}\n\nconst defaultState: SpotlightState = {\n spotlightedUser: null,\n isSpotlighted: false,\n};\n\nexport const useSpotlightStore = create<SpotlightState & SpotlightActions>()(\n immer((set, get) => ({\n ...defaultState,\n\n spotlight: (participantId, info) =>\n set((state) => {\n state.spotlightedUser = {\n participantId,\n ts: Date.now(),\n ...(info && { info }),\n };\n state.isSpotlighted = true;\n }),\n\n unspotlight: () =>\n set((state) => {\n state.spotlightedUser = null;\n state.isSpotlighted = false;\n }),\n\n getSpotlightedUser: () => get().spotlightedUser,\n\n clear: () =>\n set(() => ({\n spotlightedUser: null,\n isSpotlighted: false,\n })),\n }))\n);\n\nexport function applyIncomingSpotlight(envelope: SpotlightEnvelope): void {\n const { spotlight, unspotlight } = useSpotlightStore.getState();\n\n switch (envelope.payload.action) {\n case \"spotlight\": {\n // Note: We don't have the target's info in the envelope, only the sender's\n // The info can be populated later if needed from the room's participant list\n spotlight(envelope.payload.targetId, envelope.payload.info);\n break;\n }\n case \"unspotlight\": {\n unspotlight();\n break;\n }\n }\n}\n","// Generated by scripts/generate-socket-types.ts\n// Do not edit this file manually\n\nimport { z } from \"zod\";\n\n// Event: call:ended\n// Event: call:ended\nexport const callEndedSchema = z.object({\n callId: z.string(),\n endedAt: z.string(),\n endedByUserId: z.string().optional(),\n}).strict();\n\nexport type CallEndedEvent = z.infer<typeof callEndedSchema>;\n\n// Event: call:invite\n// Event: call:invite\nexport const callInviteSchema = z.object({\n inviteId: z.string(),\n callId: z.string(),\n userId: z.string(),\n callerId: z.string(),\n mode: z.enum([\"VIDEO\", \"AUDIO\"]),\n invitedAt: z.string(),\n}).strict();\n\nexport type CallInviteEvent = z.infer<typeof callInviteSchema>;\n\n// Event: call:inviteAccepted\n// Event: call:inviteAccepted\nexport const callInviteAcceptedSchema = z.object({\n callId: z.string(),\n userId: z.string(),\n acceptedAt: z.string(),\n}).strict();\n\nexport type CallInviteAcceptedEvent = z.infer<typeof callInviteAcceptedSchema>;\n\n// Event: call:inviteCancelled\n// Event: call:inviteCancelled\nexport const callInviteCancelledSchema = z.object({\n callId: z.string(),\n cancelledByUserId: z.string(),\n cancelledAt: z.string(),\n reason: z.string(),\n}).strict();\n\nexport type CallInviteCancelledEvent = z.infer<typeof callInviteCancelledSchema>;\n\n// Event: call:inviteDeclined\n// Event: call:inviteDeclined\nexport const callInviteDeclinedSchema = z.object({\n callId: z.string(),\n userId: z.string(),\n reason: z.string().optional(),\n declinedAt: z.string(),\n}).strict();\n\nexport type CallInviteDeclinedEvent = z.infer<typeof callInviteDeclinedSchema>;\n\n// Event: call:inviteMissed\n// Event: call:inviteMissed\nexport const callInviteMissedSchema = z.object({\n callId: z.string(),\n userId: z.string(),\n missedAt: z.string(),\n}).strict();\n\nexport type CallInviteMissedEvent = z.infer<typeof callInviteMissedSchema>;\n\n// Event: call:participantAdded\n// Event: call:participantAdded\nexport const callParticipantAddedSchema = z.object({\n callId: z.string(),\n userId: z.string(),\n participantId: z.string(),\n}).strict();\n\nexport type CallParticipantAddedEvent = z.infer<typeof callParticipantAddedSchema>;\n\n// Event: call:participantKicked\n// Event: call:participantKicked\nexport const callParticipantKickedSchema = z.object({\n callId: z.string(),\n participantId: z.string(),\n userId: z.string(),\n reason: z.string().optional(),\n}).strict();\n\nexport type CallParticipantKickedEvent = z.infer<typeof callParticipantKickedSchema>;\n\n// Event: call:participantLeft\n// Event: call:participantLeft\nexport const callParticipantLeftSchema = z.object({\n callId: z.string(),\n userId: z.string(),\n participantId: z.string(),\n leftAt: z.string(),\n reason: z.string().optional(),\n}).strict();\n\nexport type CallParticipantLeftEvent = z.infer<typeof callParticipantLeftSchema>;\n\n// Event: call:ready\n// Event: call:ready\nexport const callReadySchema = z.object({\n callId: z.string(),\n participantId: z.string().optional(),\n userId: z.string(),\n message: z.string(),\n}).strict();\n\nexport type CallReadyEvent = z.infer<typeof callReadySchema>;\n\n// Event: call:recordingStarted\n// Event: call:recordingStarted\nexport const callRecordingStartedSchema = z.object({\n callId: z.string(),\n recordingId: z.string(),\n egressId: z.string(),\n initiatedBy: z.string().optional(),\n startedAt: z.string(),\n}).strict();\n\nexport type CallRecordingStartedEvent = z.infer<typeof callRecordingStartedSchema>;\n\n// Event: call:recordingStopped\n// Event: call:recordingStopped\nexport const callRecordingStoppedSchema = z.object({\n callId: z.string(),\n recordingId: z.string(),\n egressId: z.string(),\n stoppedAt: z.string(),\n}).strict();\n\nexport type CallRecordingStoppedEvent = z.infer<typeof callRecordingStoppedSchema>;\n\n// Event: call:started\n// Event: call:started\nexport const callStartedSchema = z.object({\n callId: z.string(),\n startedAt: z.string(),\n}).strict();\n\nexport type CallStartedEvent = z.infer<typeof callStartedSchema>;\n\n// Event: participant:profiles\n// Event: participant:profiles\nexport const participantProfilesSchema = z.object({\n profiles: z.array(z.object({\n userId: z.string(),\n username: z.string().nullable(),\n firstName: z.string().nullable(),\n lastName: z.string().nullable(),\n profilePhoto: z.string().nullable(),\n }).strict()),\n}).strict();\n\nexport type ParticipantProfilesEvent = z.infer<typeof participantProfilesSchema>;\n\n// Event: presence:ping\n// Event: presence:ping\nexport const presencePingSchema = z.object({\n\n}).strict();\n\nexport type PresencePingEvent = z.infer<typeof presencePingSchema>;\n","import type { LogLevel } from \"../utils/logger\";\nimport { rtcStore } from \"./store\";\nimport type { RtcError } from \"./types\";\n\n// Re-export RtcError type for external consumption\nexport type { RtcError } from \"./types\";\n\nexport type ErrorCode =\n | \"NETWORK\"\n | \"SOCKET_PAYLOAD\"\n | \"JOIN_FLOW\"\n | \"LIVEKIT_CONNECT\"\n | \"LIVEKIT_MEDIA\"\n | \"MEDIA_PERMISSION\"\n | \"DEVICE_SWITCH\"\n | \"API_ERROR\"\n | \"UNEXPECTED\"\n | \"GUEST_JOIN_FAILED\"\n | \"GUEST_ACCESS_DISABLED\"\n | \"INVALID_PASSCODE\"\n | \"MEETING_NOT_ACTIVE\"\n | \"GUEST_SESSION_EXPIRED\"\n | \"GUEST_KICKED\";\n\nexport function pushError(\n code: ErrorCode,\n message: string,\n context?: any,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n const error: RtcError = {\n code,\n message,\n timestamp: Date.now(),\n context,\n };\n\n // Log the error if logger is provided\n logger?.(\"error\", message, { code, context });\n rtcStore.getState().addError(error);\n}\n\n/**\n * Clear errors from the store\n * @param predicate Optional filter function - if provided, only matching errors are removed\n */\nexport function clearErrors(predicate?: (error: RtcError) => boolean): void {\n rtcStore.getState().patch((state) => {\n if (predicate) {\n // Remove only errors matching the predicate\n state.errors = state.errors.filter((error) => !predicate(error));\n } else {\n // Clear all errors\n state.errors = [];\n }\n });\n}\n\n// Convenience helpers for common error scenarios\nexport function pushSocketValidationError(\n eventType: string,\n issues: any,\n payload?: any,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n pushError(\n \"SOCKET_PAYLOAD\",\n `Invalid ${eventType} event payload`,\n { eventType, issues, payload },\n logger\n );\n}\n\nexport function pushIdentityGuardError(\n reason: string,\n expected?: string,\n received?: string,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n pushError(\n \"JOIN_FLOW\", // Use new error code\n `Identity guard failed: ${reason}`,\n { expected, received },\n logger\n );\n}\n\nexport function pushLiveKitConnectError(\n message: string,\n error: unknown,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n pushError(\n \"LIVEKIT_CONNECT\",\n `LiveKit connection failed: ${message}`,\n { originalError: error },\n logger\n );\n}\n\nexport function pushStaleEventError(\n eventType: string,\n reason: string,\n context?: any,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n pushError(\n \"JOIN_FLOW\", // Use new error code\n `Ignored stale ${eventType} event: ${reason}`,\n context,\n logger\n );\n}\n\nexport function pushApiError(\n operation: string,\n error: unknown,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n const errorMessage = error instanceof Error ? error.message : String(error);\n pushError(\n \"API_ERROR\",\n `API ${operation} failed: ${errorMessage}`,\n { operation, originalError: error },\n logger\n );\n}\n\nexport function pushNetworkError(\n operation: string,\n error: unknown,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n const errorMessage = error instanceof Error ? error.message : String(error);\n pushError(\n \"NETWORK\",\n `Network error during ${operation}: ${errorMessage}`,\n { operation, originalError: error },\n logger\n );\n}\n\nexport function pushMediaPermissionError(\n device: string,\n error?: unknown,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n pushError(\n \"MEDIA_PERMISSION\",\n `${device} permission denied`,\n { device, originalError: error },\n logger\n );\n}\n\nexport function pushDeviceError(\n operation: string,\n device: string,\n error: unknown,\n logger?: (level: LogLevel, message: string, meta?: any) => void\n): void {\n const errorMessage = error instanceof Error ? error.message : String(error);\n pushError(\n \"DEVICE_SWITCH\",\n `Failed to ${operation} ${device}: ${errorMessage}`,\n { operation, device, originalError: error },\n logger\n );\n}\n","import { UsersService } from \"../../../generated/api\";\nimport type { UsersData } from \"../../../generated/api/models\";\n\nexport class SignalUsersService {\n constructor(private appId: string) {}\n\n async getById(\n params: Omit<UsersData[\"payloads\"][\"GetSignalUsersById\"], \"appId\">\n ): Promise<UsersData[\"responses\"][\"GetSignalUsersById\"]> {\n return UsersService.getSignalUsersById({\n ...params,\n });\n }\n}\n","import { enableMapSet } from \"immer\";\nimport { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport { SignalUsersService } from \"../clients/signal/services/users\";\nimport type { Profile } from \"./types\";\n\nenableMapSet();\n\ninterface ProfileCacheState {\n profiles: Map<string, Profile>;\n pending: Set<string>;\n inFlight: Map<string, Promise<Profile | undefined>>;\n usersService?: SignalUsersService;\n}\n\ninterface ProfileCacheActions {\n addMany: (profiles: Profile[]) => void;\n get: (userId: string) => Profile | undefined;\n getMany: (userIds: string[]) => (Profile | undefined)[];\n markPending: (userIds: string[]) => void;\n clear: () => void;\n configure: (appId: string) => void;\n getOrFetch: (userId: string) => Promise<Profile | undefined>;\n}\n\nconst initialState: ProfileCacheState = {\n profiles: new Map(),\n pending: new Set(),\n inFlight: new Map(),\n};\n\nexport const useProfileCache = create<\n ProfileCacheState & ProfileCacheActions\n>()(\n immer((set, get) => ({\n ...initialState,\n\n addMany: (profiles) =>\n set((state) => {\n for (const profile of profiles) {\n state.profiles.set(profile.userId, profile);\n state.pending.delete(profile.userId);\n }\n }),\n\n get: (userId) => {\n return get().profiles.get(userId);\n },\n\n getMany: (userIds) => {\n const { profiles } = get();\n return userIds.map((userId) => profiles.get(userId));\n },\n\n markPending: (userIds) =>\n set((state) => {\n for (const userId of userIds) {\n if (!state.profiles.has(userId)) {\n state.pending.add(userId);\n }\n }\n }),\n\n clear: () =>\n set((state) => {\n state.profiles.clear();\n state.pending.clear();\n state.inFlight.clear();\n }),\n\n configure: (appId) =>\n set((state) => {\n state.usersService = new SignalUsersService(appId);\n }),\n\n getOrFetch: async (userId) => {\n const { profiles, inFlight, usersService } = get();\n if (!userId) return undefined;\n\n const cached = profiles.get(userId);\n if (cached) return cached;\n\n const existing = inFlight.get(userId);\n if (existing) return existing;\n\n if (!usersService) {\n console.warn(\"profileCache not configured; cannot fetch profile\");\n return undefined;\n }\n\n const fetchPromise = (async () => {\n set((state) => {\n state.pending.add(userId);\n });\n\n try {\n const response = await usersService.getById({ id: userId });\n\n const profile: Profile = {\n userId: response.userId,\n username: response.username,\n firstName: response.firstName,\n lastName: response.lastName,\n profilePhoto: response.profilePhoto,\n };\n\n get().addMany([profile]);\n return profile;\n } catch (error) {\n console.warn(`Failed to fetch profile for userId: ${userId}`, error);\n return undefined;\n } finally {\n set((state) => {\n state.inFlight.delete(userId);\n state.pending.delete(userId);\n });\n }\n })();\n\n set((state) => {\n state.inFlight.set(userId, fetchPromise);\n });\n\n return fetchPromise;\n },\n }))\n);\n\nexport const profileCache = useProfileCache;\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport type { RecordingInfo } from \"./types\";\n\ninterface RecordingState {\n recording: RecordingInfo | null;\n isRecording: boolean;\n}\n\ninterface RecordingActions {\n setRecording: (recording: RecordingInfo | null) => void;\n clear: () => void;\n}\n\nconst defaultState: RecordingState = {\n recording: null,\n isRecording: false,\n};\n\nexport const useRecordingStore = create<RecordingState & RecordingActions>()(\n immer((set) => ({\n ...defaultState,\n\n setRecording: (recording) =>\n set((state) => {\n state.recording = recording;\n state.isRecording = recording !== null;\n }),\n\n clear: () =>\n set(() => ({\n recording: null,\n isRecording: false,\n })),\n }))\n);\n\nexport const recordingStore = useRecordingStore;\n","import mitt, { type Emitter } from \"mitt\";\nimport type {\n EventHandler,\n EventSubscription,\n SdkEvent,\n SdkEventType,\n} from \"./types\";\n\ntype Events = Record<string, any>;\n\nclass EventBus {\n private emitter: Emitter<Events>;\n\n constructor() {\n this.emitter = mitt<Events>();\n }\n\n on<T = any>(\n eventType: string | SdkEventType,\n handler: EventHandler<T>\n ): EventSubscription {\n const wrappedHandler = (event: SdkEvent<T>) => {\n handler(event);\n };\n\n this.emitter.on(eventType.toString(), wrappedHandler);\n\n return {\n unsubscribe: () => {\n this.emitter.off(eventType.toString(), wrappedHandler);\n },\n };\n }\n\n emit<T = any>(eventType: string | SdkEventType, payload: T): void {\n const event: SdkEvent<T> = {\n type: eventType.toString(),\n payload,\n timestamp: Date.now(),\n };\n\n this.emitter.emit(eventType.toString(), event);\n }\n\n off(eventType: string | SdkEventType): void {\n this.emitter.off(eventType.toString());\n }\n\n removeAllListeners(): void {\n this.emitter.all.clear();\n }\n}\n\nexport const eventBus = new EventBus();\nexport { EventBus };\n","/**\n * SDK Event System Types\n *\n * This file defines the event types and interfaces for the internal SDK event system.\n * The event system provides extensibility and allows components to communicate\n * through a unified, type-safe event bus.\n */\n\nexport interface SdkEvent<T = any> {\n type: string;\n payload: T;\n timestamp: number;\n}\n\n/**\n * SDK Event Types\n * Following the pattern from other WebRTC SDKs like LiveKit\n */\nexport enum SdkEventType {\n // Call lifecycle events\n CALL_INITIATED = \"call:initiated\",\n CALL_INCOMING = \"call:incoming\",\n CALL_DECLINED = \"call:declined\",\n CALL_ENDED = \"call:ended\",\n CALL_CANCELED = \"call:canceled\",\n CALL_TIMEOUT = \"call:timeout\",\n CALL_MISSED = \"call:missed\",\n JOIN_INFO_RECEIVED = \"join-info:received\",\n CALL_STARTED = \"call:started\",\n\n // Meeting lifecycle events\n MEETING_CREATED = \"meeting:created\",\n MEETING_STARTED = \"meeting:started\",\n MEETING_JOINED = \"meeting:joined\",\n MEETING_ENDED = \"meeting:ended\",\n\n // Participant events\n PARTICIPANT_UPDATED = \"participant:updated\",\n PARTICIPANT_INVITED = \"participant:invited\",\n\n // Recording events\n RECORDING_STARTED = \"recording:started\",\n RECORDING_STOPPED = \"recording:stopped\",\n\n // Guest-specific events\n GUEST_JOINED = \"guest:joined\",\n GUEST_LEFT = \"guest:left\",\n GUEST_KICKED = \"guest:kicked\",\n GUEST_SESSION_ERROR = \"guest:session_error\",\n}\n\n/**\n * Event handler type\n */\nexport type EventHandler<T = any> = (event: SdkEvent<T>) => void;\n\n/**\n * Event subscription interface\n */\nexport interface EventSubscription {\n unsubscribe: () => void;\n}\n","import { useChatStore } from \"../../../channel/chat\";\nimport { useRaiseHandStore } from \"../../../channel/raiseHand\";\nimport { useSpotlightStore } from \"../../../channel/spotlight\";\nimport type { CallEndedEvent } from \"../../../generated/socket\";\nimport { callEndedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { profileCache } from \"../../../state/profileCache\";\nimport { recordingStore } from \"../../../state/recording.store\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles call session ended (call:ended)\n *\n * Clears session state, profile cache, and disconnects from LiveKit\n */\nexport class SessionEndedHandler extends BaseSocketHandler<CallEndedEvent> {\n protected readonly eventName = \"call:ended\";\n protected readonly schema = callEndedSchema;\n\n protected handle(data: CallEndedEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.info(\"Call session ended\", {\n callId: data.callId,\n endedAt: data.endedAt,\n endedBy: data.endedByUserId,\n });\n\n if (currentState.session?.id !== data.callId) {\n pushStaleEventError(\"call:ended\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\"Ignoring end event for different call\", {\n callId: data.callId,\n });\n return;\n }\n\n this.updateStore((state) => {\n if (state.session) {\n state.session.status = \"ended\";\n }\n });\n\n rtcStore.getState().reset();\n profileCache.getState().clear();\n recordingStore.getState().clear();\n useChatStore.getState().clearChat();\n useSpotlightStore.getState().clear();\n useRaiseHandStore.getState().clear();\n\n if (this.livekit) {\n this.livekit.disconnect().catch((error: any) => {\n this.logger.error(\"Error disconnecting from LiveKit\", { error });\n });\n }\n\n eventBus.emit(SdkEventType.CALL_ENDED, {\n callId: data.callId,\n endedAt: data.endedAt,\n endedBy: data.endedByUserId,\n timestamp: Date.now(),\n });\n\n this.logger.debug(\"Session cleared and LiveKit disconnected\");\n }\n}\n","import type { CallParticipantKickedEvent } from \"../../../generated/socket\";\nimport { callParticipantKickedSchema } from \"../../../generated/socket\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles participant kicked event (call:participantKicked)\n *\n * If the current user was kicked, disconnects and resets state\n */\nexport class CallParticipantKickedHandler extends BaseSocketHandler<CallParticipantKickedEvent> {\n protected readonly eventName = \"call:participantKicked\";\n protected readonly schema = callParticipantKickedSchema;\n\n protected handle(data: CallParticipantKickedEvent): void {\n this.logger.info(\"Participant kicked\", {\n callId: data.callId,\n participantId: data.participantId,\n reason: data.reason,\n });\n\n this.updateStore((state) => {\n if (data.userId && state.outgoingInvites[data.userId]) {\n delete state.outgoingInvites[data.userId];\n }\n });\n\n this.logger.debug(\"Participant kicked from call\", {\n participantId: data.participantId,\n userId: data.userId,\n });\n }\n}\n","import type { CallReadyEvent } from \"../../../generated/socket\";\nimport { callReadySchema } from \"../../../generated/socket\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles call ready event (call:ready)\n *\n * Updates session status to \"ready\" when backend confirms call is ready to connect\n */\nexport class CallReadyHandler extends BaseSocketHandler<CallReadyEvent> {\n protected readonly eventName = \"call:ready\";\n protected readonly schema = callReadySchema;\n\n protected handle(data: CallReadyEvent): void {\n this.logger.info(\"Call ready\", {\n callId: data.callId,\n message: data.message,\n userId: data.userId,\n });\n\n this.updateStore((state) => {\n if (state.session && state.session.id === data.callId) {\n if (state.session.status === \"pending\") {\n state.session.status = \"ready\";\n state.session.startedAt = new Date().toISOString();\n }\n }\n });\n\n this.logger.debug(\"Call status updated to ready\");\n }\n}\n","import type { CallStartedEvent } from \"../../../generated/socket\";\nimport { callStartedSchema } from \"../../../generated/socket\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles call started event (call:started)\n *\n * Updates session status to \"active\" and records start time\n */\nexport class CallStartedHandler extends BaseSocketHandler<CallStartedEvent> {\n protected readonly eventName = \"call:started\";\n protected readonly schema = callStartedSchema;\n\n protected handle(data: CallStartedEvent): void {\n this.logger.info(\"Call started\", {\n callId: data.callId,\n startedAt: data.startedAt,\n });\n\n this.updateStore((state) => {\n if (state.session && state.session.id === data.callId) {\n state.session.status = \"active\";\n state.session.startedAt = data.startedAt;\n }\n });\n\n eventBus.emit(SdkEventType.CALL_STARTED, {\n callId: data.callId,\n startedAt: data.startedAt,\n });\n\n this.logger.debug(\"Call status updated to active\");\n }\n}\n","import type { CallInviteAcceptedEvent } from \"../../../generated/socket\";\nimport { callInviteAcceptedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { rtcStore } from \"../../../state/store\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles invitation accepted (call:inviteAccepted)\n *\n * Updates outgoingInvites status when a participant accepts\n * Only relevant for HOST/caller perspective\n */\nexport class InviteAcceptedHandler extends BaseSocketHandler<CallInviteAcceptedEvent> {\n protected readonly eventName = \"call:inviteAccepted\";\n protected readonly schema = callInviteAcceptedSchema;\n\n protected handle(data: CallInviteAcceptedEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.info(\"Participant accepted invitation\", {\n callId: data.callId,\n userId: data.userId,\n });\n\n if (currentState.session?.id !== data.callId) {\n pushStaleEventError(\"call:inviteAccepted\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\"Ignoring accept event for different call\", {\n callId: data.callId,\n });\n return;\n }\n\n this.updateStore((state) => {\n if (state.outgoingInvites[data.userId]) {\n state.outgoingInvites[data.userId].status = \"accepted\";\n } else {\n state.outgoingInvites[data.userId] = {\n userId: data.userId,\n status: \"accepted\",\n };\n }\n });\n\n this.logger.debug(\"Outgoing invite marked as accepted\", {\n userId: data.userId,\n });\n }\n}\n","import type { CallInviteCancelledEvent } from \"../../../generated/socket\";\nimport { callInviteCancelledSchema } from \"../../../generated/socket\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles invitation cancelled (call:inviteCancelled)\n *\n * Clears incomingInvite when host cancels the invitation\n * Only relevant for PARTICIPANT/callee perspective\n */\nexport class InviteCancelledHandler extends BaseSocketHandler<CallInviteCancelledEvent> {\n protected readonly eventName = \"call:inviteCancelled\";\n protected readonly schema = callInviteCancelledSchema;\n\n protected handle(data: CallInviteCancelledEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.info(\"Invitation cancelled by host\", {\n callId: data.callId,\n cancelledBy: data.cancelledByUserId,\n reason: data.reason,\n });\n\n // Only clear if this matches our incoming invite\n if (currentState.incomingInvite?.callId !== data.callId) {\n this.logger.debug(\"Ignoring cancelled invite for different call\", {\n callId: data.callId,\n });\n return;\n }\n\n rtcStore.getState().reset();\n\n if (data.reason) {\n rtcStore.getState().addError({\n code: \"CALL_CANCELLED\",\n message: data.reason,\n timestamp: Date.now(),\n context: { callId: data.callId, cancelledBy: data.cancelledByUserId },\n });\n }\n\n eventBus.emit(SdkEventType.CALL_CANCELED, {\n callId: data.callId,\n reason: data.reason,\n timestamp: Date.now(),\n });\n\n this.logger.debug(\"Incoming invite cleared due to cancellation\");\n }\n}\n","import type { CallInviteDeclinedEvent } from \"../../../generated/socket\";\nimport { callInviteDeclinedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles invitation declined (call:inviteDeclined)\n *\n * Updates outgoingInvites status when a participant declines\n * Only relevant for HOST/caller perspective\n */\nexport class InviteDeclinedHandler extends BaseSocketHandler<CallInviteDeclinedEvent> {\n protected readonly eventName = \"call:inviteDeclined\";\n protected readonly schema = callInviteDeclinedSchema;\n\n protected handle(data: CallInviteDeclinedEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.info(\"Participant declined invitation\", {\n callId: data.callId,\n userId: data.userId,\n reason: data.reason,\n });\n\n if (currentState.session?.id !== data.callId) {\n pushStaleEventError(\"call:inviteDeclined\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\"Ignoring decline event for different call\", {\n callId: data.callId,\n });\n return;\n }\n\n this.updateStore((state) => {\n if (state.outgoingInvites[data.userId]) {\n state.outgoingInvites[data.userId].status = \"declined\";\n } else {\n state.outgoingInvites[data.userId] = {\n userId: data.userId,\n status: \"declined\",\n };\n }\n\n const inviteStatuses = Object.values(state.outgoingInvites).map(\n (inv: any) => inv.status\n );\n const allDeclinedOrMissed = inviteStatuses.every(\n (status: string) => status === \"declined\" || status === \"missed\"\n );\n\n if (\n inviteStatuses.length > 0 &&\n allDeclinedOrMissed &&\n state.session?.status === \"pending\"\n ) {\n state.session = null;\n state.outgoingInvites = {};\n state.initiated = false;\n }\n });\n\n eventBus.emit(SdkEventType.CALL_DECLINED, {\n callId: data.callId,\n participantId: data.userId,\n reason: data.reason,\n timestamp: Date.now(),\n });\n\n if (data.reason) {\n this.logger.info(\"Decline reason provided\", { reason: data.reason });\n }\n\n this.logger.debug(\"Outgoing invite marked as declined\", {\n userId: data.userId,\n });\n }\n}\n","import type { CallInviteMissedEvent } from \"../../../generated/socket\";\nimport { callInviteMissedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles invitation missed/timeout (call:inviteMissed)\n *\n * Updates outgoingInvites status when an invite times out\n * Only relevant for HOST/caller perspective\n */\nexport class InviteMissedHandler extends BaseSocketHandler<CallInviteMissedEvent> {\n protected readonly eventName = \"call:inviteMissed\";\n protected readonly schema = callInviteMissedSchema;\n\n protected handle(data: CallInviteMissedEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.info(\"Participant missed invitation (timeout)\", {\n callId: data.callId,\n userId: data.userId,\n });\n\n if (currentState.session?.id !== data.callId) {\n this.logger.warn(\"Invite missed ignored due to session mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n hasSession: !!currentState.session,\n outgoingInviteKeys: Object.keys(currentState.outgoingInvites || {}),\n });\n pushStaleEventError(\"call:inviteMissed\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\"Ignoring missed event for different call\", {\n callId: data.callId,\n });\n return;\n }\n\n this.updateStore((state) => {\n if (state.outgoingInvites[data.userId]) {\n state.outgoingInvites[data.userId].status = \"missed\";\n } else {\n state.outgoingInvites[data.userId] = {\n userId: data.userId,\n status: \"missed\",\n };\n }\n\n const inviteStatuses = Object.values(state.outgoingInvites).map(\n (inv: any) => inv.status\n );\n const allDeclinedOrMissed = inviteStatuses.every(\n (status: string) => status === \"declined\" || status === \"missed\"\n );\n\n if (\n inviteStatuses.length > 0 &&\n allDeclinedOrMissed &&\n state.session?.status === \"pending\"\n ) {\n state.session = null;\n state.outgoingInvites = {};\n state.initiated = false;\n }\n });\n\n eventBus.emit(SdkEventType.CALL_MISSED, {\n callId: data.callId,\n participantId: data.userId,\n timestamp: Date.now(),\n });\n\n this.logger.debug(\"Outgoing invite marked as missed\", {\n userId: data.userId,\n });\n }\n}\n","import type { CallInviteEvent } from \"../../../generated/socket\";\nimport { callInviteSchema } from \"../../../generated/socket\";\nimport { profileCache } from \"../../../state/profileCache\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles incoming call invitation (call:invite)\n *\n * Sets incomingInvite state to show incoming call UI\n * Marks caller profile as pending for hydration\n */\nexport class InviteHandler extends BaseSocketHandler<CallInviteEvent> {\n protected readonly eventName = \"call:invite\";\n protected readonly schema = callInviteSchema;\n\n protected async handle(data: CallInviteEvent): Promise<void> {\n this.logger.info(\"Incoming call invitation\", {\n callId: data.callId,\n callerId: data.callerId,\n mode: data.mode,\n });\n\n const callerProfile = await profileCache\n .getState()\n .getOrFetch(data.callerId);\n\n this.updateStore((state) => {\n const ringTimeoutMs = (data as any).ringTimeoutMs || 30000;\n const now = new Date();\n const expiresAt = new Date(now.getTime() + ringTimeoutMs);\n\n state.incomingInvite = {\n callId: data.callId,\n inviteId: data.inviteId,\n caller: {\n userId: data.callerId,\n role: \"HOST\",\n firstName: callerProfile?.firstName ?? \"\",\n lastName: callerProfile?.lastName ?? \"\",\n username: callerProfile?.username ?? \"\",\n email: \"\",\n profilePhoto: callerProfile?.profilePhoto ?? \"\",\n },\n mode: data.mode,\n expiresAt: expiresAt.toISOString(),\n expiresInMs: ringTimeoutMs,\n ringTimeoutMs,\n };\n\n state.session = {\n id: data.callId,\n status: \"pending\",\n mode: data.mode,\n role: \"PARTICIPANT\",\n ringTimeoutMs,\n };\n });\n\n eventBus.emit(SdkEventType.CALL_INCOMING, {\n callId: data.callId,\n callerId: data.callerId,\n type: data.mode,\n timestamp: Date.now(),\n });\n\n this.logger.debug(\"Incoming invite state updated\");\n }\n}\n","import type { CallParticipantAddedEvent } from \"../../../generated/socket\";\nimport { callParticipantAddedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { profileCache } from \"../../../state/profileCache\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles participant added to call (call:participantAdded)\n *\n * Updates outgoingInvites if we invited this user\n * Marks profile as pending for hydration\n */\nexport class ParticipantAddedHandler extends BaseSocketHandler<CallParticipantAddedEvent> {\n protected readonly eventName = \"call:participantAdded\";\n protected readonly schema = callParticipantAddedSchema;\n\n protected async handle(data: CallParticipantAddedEvent): Promise<void> {\n const currentState = rtcStore.getState();\n\n this.logger.info(\"Participant added to call\", {\n callId: data.callId,\n participantId: data.participantId,\n userId: data.userId,\n });\n\n if (currentState.session?.id !== data.callId) {\n pushStaleEventError(\"call:participantAdded\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\"Ignoring participant added for different call\", {\n callId: data.callId,\n });\n return;\n }\n\n await profileCache.getState().getOrFetch(data.userId);\n\n this.updateStore((state) => {\n if (state.outgoingInvites[data.userId]) {\n state.outgoingInvites[data.userId].status = \"accepted\";\n }\n });\n\n eventBus.emit(SdkEventType.PARTICIPANT_UPDATED, {\n participantId: data.participantId,\n timestamp: Date.now(),\n });\n\n this.logger.debug(\"Participant added event processed\", {\n participantId: data.participantId,\n userId: data.userId,\n });\n }\n}\n","import type { CallParticipantLeftEvent } from \"../../../generated/socket\";\nimport { callParticipantLeftSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { rtcStore } from \"../../../state/store\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles participant left event (call:participantLeft)\n *\n * Marks outgoing invite as \"left\" for invited participants.\n */\nexport class ParticipantLeftHandler extends BaseSocketHandler<CallParticipantLeftEvent> {\n protected readonly eventName = \"call:participantLeft\";\n protected readonly schema = callParticipantLeftSchema;\n\n protected handle(data: CallParticipantLeftEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.info(\"Participant left call\", {\n callId: data.callId,\n userId: data.userId,\n participantId: data.participantId,\n });\n\n if (currentState.session?.id !== data.callId) {\n pushStaleEventError(\"call:participantLeft\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\"Ignoring participant left for different call\", {\n callId: data.callId,\n });\n return;\n }\n\n this.updateStore((state) => {\n if (state.outgoingInvites[data.userId]) {\n state.outgoingInvites[data.userId].status = \"left\";\n this.logger.info(\"Outgoing invite marked as left\", {\n userId: data.userId,\n callId: data.callId,\n });\n }\n });\n }\n}\n","import type { ParticipantProfilesEvent } from \"../../../generated/socket\";\nimport { participantProfilesSchema } from \"../../../generated/socket\";\nimport { profileCache } from \"../../../state/profileCache\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles participant profile hydration (participant:profiles)\n *\n * Updates the profile cache with received participant information\n * This triggers UI re-renders for components subscribed to the cache\n */\nexport class ParticipantProfilesHandler extends BaseSocketHandler<ParticipantProfilesEvent> {\n protected readonly eventName = \"participant:profiles\";\n protected readonly schema = participantProfilesSchema;\n\n protected handle(data: ParticipantProfilesEvent): void {\n this.logger.info(\"Received participant profiles\", {\n count: data.profiles.length,\n userIds: data.profiles.map((p) => p.userId),\n });\n\n profileCache.getState().addMany(data.profiles);\n\n this.logger.debug(\"Profile cache updated\", {\n totalProfiles: profileCache.getState().profiles.size,\n });\n }\n}\n","import type { CallRecordingStartedEvent } from \"../../../generated/socket\";\nimport { callRecordingStartedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { recordingStore } from \"../../../state/recording.store\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles recording started event (call:recordingStarted)\n *\n * Updates session recording state when recording starts\n */\nexport class RecordingStartedHandler extends BaseSocketHandler<CallRecordingStartedEvent> {\n protected readonly eventName = \"call:recordingStarted\";\n protected readonly schema = callRecordingStartedSchema;\n\n protected handle(data: CallRecordingStartedEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.debug(\"Recording started event received\", {\n callId: data.callId,\n recordingId: data.recordingId,\n egressId: data.egressId,\n initiatedBy: data.initiatedBy,\n startedAt: data.startedAt,\n currentSessionId: currentState.session?.id,\n });\n\n try {\n const recordingInfo = {\n recordingId: data.recordingId,\n egressId: data.egressId,\n startedAt: data.startedAt,\n ...(data.initiatedBy && { initiatedBy: data.initiatedBy }),\n };\n\n // This ensures all participants know recording has started\n recordingStore.getState().setRecording(recordingInfo);\n\n this.logger.debug(\"Recording store updated for all participants\", {\n recordingId: data.recordingId,\n isRecording: recordingStore.getState().isRecording,\n });\n\n // Only update session state if session matches (for backward compatibility)\n if (currentState.session?.id === data.callId) {\n this.updateStore((state) => {\n if (state.session && state.session.id === data.callId) {\n state.session.recording = recordingInfo;\n }\n });\n this.logger.debug(\"Session recording state updated\", {\n callId: data.callId,\n });\n } else {\n pushStaleEventError(\"call:recordingStarted\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\n \"Session callId mismatch, but recording state updated for all participants\",\n {\n callId: data.callId,\n sessionCallId: currentState.session?.id,\n }\n );\n }\n\n eventBus.emit(SdkEventType.RECORDING_STARTED, {\n callId: data.callId,\n recordingId: data.recordingId,\n egressId: data.egressId,\n startedAt: data.startedAt,\n timestamp: Date.now(),\n });\n\n this.logger.info(\"Recording started event processed successfully\", {\n callId: data.callId,\n recordingId: data.recordingId,\n });\n } catch (error) {\n this.logger.error(\"Error processing recording started event\", {\n error,\n callId: data.callId,\n recordingId: data.recordingId,\n });\n throw error;\n }\n }\n}\n","import type { CallRecordingStoppedEvent } from \"../../../generated/socket\";\nimport { callRecordingStoppedSchema } from \"../../../generated/socket\";\nimport { pushStaleEventError } from \"../../../state/errors\";\nimport { recordingStore } from \"../../../state/recording.store\";\nimport { rtcStore } from \"../../../state/store\";\nimport { SdkEventType, eventBus } from \"../../events\";\nimport { BaseSocketHandler } from \"./base.handler\";\n\n/**\n * Handles recording stopped event (call:recordingStopped)\n *\n * Clears recording state when recording stops\n */\nexport class RecordingStoppedHandler extends BaseSocketHandler<CallRecordingStoppedEvent> {\n protected readonly eventName = \"call:recordingStopped\";\n protected readonly schema = callRecordingStoppedSchema;\n\n protected handle(data: CallRecordingStoppedEvent): void {\n const currentState = rtcStore.getState();\n\n this.logger.debug(\"Recording stopped event received\", {\n callId: data.callId,\n recordingId: data.recordingId,\n egressId: data.egressId,\n currentSessionId: currentState.session?.id,\n });\n\n try {\n // Clear shared recording store for ALL participants (regardless of session state)\n // This ensures all participants know recording has stopped\n recordingStore.getState().clear();\n\n this.logger.debug(\"Recording store cleared for all participants\", {\n isRecording: recordingStore.getState().isRecording,\n });\n\n // Only update session state if session matches (for backward compatibility)\n if (currentState.session?.id === data.callId) {\n this.updateStore((state) => {\n if (state.session && state.session.id === data.callId) {\n state.session.recording = null;\n }\n });\n this.logger.debug(\"Session recording state cleared\", {\n callId: data.callId,\n });\n } else {\n pushStaleEventError(\"call:recordingStopped\", \"callId mismatch\", {\n eventCallId: data.callId,\n sessionCallId: currentState.session?.id,\n });\n this.logger.warn(\n \"Session callId mismatch, but recording state cleared for all participants\",\n {\n callId: data.callId,\n sessionCallId: currentState.session?.id,\n }\n );\n }\n\n eventBus.emit(SdkEventType.RECORDING_STOPPED, {\n callId: data.callId,\n recordingId: data.recordingId,\n egressId: data.egressId,\n timestamp: Date.now(),\n });\n\n this.logger.info(\"Recording stopped event processed successfully\", {\n callId: data.callId,\n recordingId: data.recordingId,\n });\n } catch (error) {\n this.logger.error(\"Error processing recording stopped event\", {\n error,\n callId: data.callId,\n recordingId: data.recordingId,\n });\n throw error;\n }\n }\n}\n","import type { Socket } from \"socket.io-client\";\nimport { createLogger } from \"../../../utils/logger\";\nimport type { SocketHandlerOptions } from \"./base.handler\";\nimport { SessionEndedHandler } from \"./call-ended.handler\";\nimport { CallParticipantKickedHandler } from \"./call-participant-kicked.handler\";\nimport { CallReadyHandler } from \"./call-ready.handler\";\nimport { CallStartedHandler } from \"./call-started.handler\";\nimport { InviteAcceptedHandler } from \"./invite-accepted.handler\";\nimport { InviteCancelledHandler } from \"./invite-cancelled.handler\";\nimport { InviteDeclinedHandler } from \"./invite-declined.handler\";\nimport { InviteMissedHandler } from \"./invite-missed.handler\";\nimport { InviteHandler } from \"./invite.handler\";\nimport { ParticipantAddedHandler } from \"./participant-added.handler\";\nimport { ParticipantLeftHandler } from \"./participant-left.handler\";\nimport { ParticipantProfilesHandler } from \"./participant-profiles.handler\";\nimport { RecordingStartedHandler } from \"./recording-started.handler\";\nimport { RecordingStoppedHandler } from \"./recording-stopped.handler\";\n\nconst logger = createLogger(\"socketio:registry\");\n\n/**\n * Registry for Socket.IO event handlers.\n * Automatically registers handlers with proper typing and error handling.\n */\nexport class SocketHandlerRegistry {\n private handlers = new Map<string, any>();\n\n constructor(private options: SocketHandlerOptions = {}) {\n this.initializeHandlers();\n }\n\n private initializeHandlers(): void {\n const handlers = [\n // Core call flow\n new InviteHandler(this.options),\n new CallReadyHandler(this.options),\n new CallStartedHandler(this.options),\n new SessionEndedHandler(this.options),\n\n // Invite lifecycle\n new InviteAcceptedHandler(this.options),\n new InviteDeclinedHandler(this.options),\n new InviteMissedHandler(this.options),\n new InviteCancelledHandler(this.options),\n\n // Participant management\n new ParticipantAddedHandler(this.options),\n new ParticipantLeftHandler(this.options),\n new CallParticipantKickedHandler(this.options),\n\n // Profile hydration\n new ParticipantProfilesHandler(this.options),\n\n // Recording\n new RecordingStartedHandler(this.options),\n new RecordingStoppedHandler(this.options),\n ];\n\n for (const handler of handlers) {\n this.handlers.set((handler as any).eventName, handler);\n }\n\n logger.info(`Registered ${handlers.length} socket event handlers`);\n }\n\n registerEventListeners(socket: Socket): void {\n for (const [eventName, handler] of this.handlers) {\n socket.on(eventName, (rawData: any) => {\n logger.debug(`Socket event received: ${eventName}`, {\n eventName,\n socketId: socket.id,\n connected: socket.connected,\n hasData: !!rawData,\n });\n handler.handleRaw(rawData).catch((error: Error) => {\n logger.error(`Handler error for ${eventName}:`, error);\n });\n });\n }\n logger.debug(\"Event listeners registered on socket\", {\n registeredEvents: Array.from(this.handlers.keys()),\n socketId: socket.id,\n });\n }\n\n removeEventListeners(socket: Socket): void {\n for (const eventName of this.handlers.keys()) {\n socket.off(eventName);\n }\n logger.debug(\"Event listeners removed from socket\");\n }\n\n destroy(): void {\n this.handlers.clear();\n logger.debug(\"Handler registry destroyed\");\n }\n\n /**\n * Get all registered event names\n */\n getRegisteredEvents(): string[] {\n return Array.from(this.handlers.keys());\n }\n}\n","import { type Socket, io } from \"socket.io-client\";\nimport type { PresenceServiceInstance } from \"../../services/presence.service\";\nimport { createLogger } from \"../../utils/logger\";\nimport type { AuthManager } from \"../auth.manager\";\nimport type { Nullable } from \"../types\";\nimport { SocketHandlerRegistry } from \"./handlers\";\nimport type { SocketHandlerOptions } from \"./handlers/base.handler\";\nimport type { ConnectionConfig, ConnectionState } from \"./types\";\n\nexport class SocketManager {\n private static instance: Nullable<SocketManager> = null;\n private logger = createLogger(\"socket\");\n\n private socket: Nullable<Socket> = null;\n private connectionState: ConnectionState = \"DISCONNECTED\";\n private livekit: any = null;\n private handlerRegistry: Nullable<SocketHandlerRegistry> = null;\n private authManager: Nullable<AuthManager> = null;\n private presenceService: Nullable<PresenceServiceInstance> = null;\n\n private constructor() {}\n\n setPresenceService(presenceService: PresenceServiceInstance): void {\n this.presenceService = presenceService;\n }\n\n getSocket(): Nullable<Socket> {\n return this.socket;\n }\n\n static getInstance(): SocketManager {\n if (!SocketManager.instance) {\n SocketManager.instance = new SocketManager();\n }\n return SocketManager.instance;\n }\n\n async initialize(\n baseUrl: string,\n authManager: AuthManager,\n config: ConnectionConfig = {},\n livekit?: any\n ): Promise<void> {\n this.livekit = livekit;\n this.authManager = authManager;\n if (this.socket?.connected) {\n return;\n }\n\n this.updateConnectionState(\"CONNECTING\");\n const token = await authManager.getSessionToken();\n if (!token) {\n throw new Error(\"No session token available\");\n }\n\n try {\n this.socket = io(baseUrl, {\n auth: { token },\n autoConnect: false,\n reconnection: true,\n reconnectionAttempts: config.reconnectAttempts ?? 5,\n reconnectionDelay: config.reconnectDelay ?? 1000,\n reconnectionDelayMax: config.reconnectDelayMax ?? 30000,\n timeout: config.timeout ?? 10000,\n forceNew: true,\n path: \"/signal/socket.io\",\n transports: [\"websocket\"],\n withCredentials: false,\n });\n\n this.setupConnectionHandlers(authManager);\n this.setupEventHandlers();\n this.socket.connect();\n } catch (error) {\n this.updateConnectionState(\"ERROR\");\n throw error;\n }\n }\n\n async initializeWithToken(\n baseUrl: string,\n sessionToken: string,\n config: ConnectionConfig = {}\n ): Promise<void> {\n if (this.socket?.connected) {\n return;\n }\n\n this.updateConnectionState(\"CONNECTING\");\n\n try {\n this.socket = io(baseUrl, {\n auth: { token: sessionToken },\n autoConnect: false,\n reconnection: true,\n reconnectionAttempts: config.reconnectAttempts ?? 5,\n reconnectionDelay: config.reconnectDelay ?? 1000,\n reconnectionDelayMax: config.reconnectDelayMax ?? 30000,\n timeout: config.timeout ?? 10000,\n forceNew: true,\n path: \"/signal/socket.io\",\n transports: [\"websocket\"],\n withCredentials: false,\n });\n\n this.setupGuestConnectionHandlers(sessionToken);\n this.setupEventHandlers();\n this.socket.connect();\n } catch (error) {\n this.updateConnectionState(\"ERROR\");\n throw error;\n }\n }\n\n private setupConnectionHandlers(authManager: AuthManager): void {\n if (!this.socket) return;\n\n this.socket.on(\"connect\", () => {\n this.updateConnectionState(\"CONNECTED\");\n this.logger.info(\"Connected to server\");\n\n if (this.presenceService) {\n this.presenceService.startPing();\n }\n });\n\n this.socket.on(\"disconnect\", (reason: string) => {\n this.updateConnectionState(\"DISCONNECTED\");\n this.logger.info(\"Disconnected\", { reason });\n\n if (this.presenceService) {\n this.presenceService.stopPing();\n }\n });\n\n this.socket.on(\"connect_error\", (error: Error) => {\n this.updateConnectionState(\"ERROR\");\n this.logger.error(\"Connection error\", { error: error.message });\n });\n\n this.socket.io.on(\"reconnect_attempt\", async () => {\n this.updateConnectionState(\"RECONNECTING\");\n const freshToken = await authManager.getSessionToken();\n if (freshToken && this.socket) {\n this.logger.debug(\"Refreshing session token for reconnection\");\n this.socket.auth = { token: freshToken };\n }\n });\n\n this.socket.io.on(\"reconnect\", (attemptNumber: number) => {\n this.logger.info(\"Reconnected successfully\", { attemptNumber });\n\n if (this.presenceService) {\n this.presenceService.startPing();\n }\n });\n\n this.socket.io.on(\"reconnect_error\", (error: Error) => {\n this.logger.error(\"Reconnection error\", { error: error.message });\n if (this.isAuthError(error)) {\n this.updateConnectionState(\"FAILED\");\n }\n });\n\n this.socket.io.on(\"reconnect_failed\", () => {\n this.updateConnectionState(\"FAILED\");\n this.logger.error(\"All reconnection attempts failed\");\n });\n }\n\n private setupGuestConnectionHandlers(sessionToken: string): void {\n if (!this.socket) {\n return;\n }\n\n this.socket.on(\"connect\", () => {\n this.updateConnectionState(\"CONNECTED\");\n this.logger.info(\"Guest connected to server\");\n\n if (this.presenceService) {\n this.presenceService.startPing();\n }\n });\n\n this.socket.on(\"disconnect\", (reason: string) => {\n this.updateConnectionState(\"DISCONNECTED\");\n this.logger.info(\"Guest disconnected\", { reason });\n\n if (this.presenceService) {\n this.presenceService.stopPing();\n }\n });\n\n this.socket.on(\"connect_error\", (error: Error) => {\n this.updateConnectionState(\"ERROR\");\n this.logger.error(\"Guest connection error\", { error: error.message });\n });\n\n this.socket.io.on(\"reconnect_attempt\", () => {\n this.updateConnectionState(\"RECONNECTING\");\n if (this.socket) {\n this.logger.debug(\n \"Reusing stored session token for guest reconnection\"\n );\n this.socket.auth = { token: sessionToken };\n }\n });\n\n this.socket.io.on(\"reconnect\", (attemptNumber: number) => {\n this.logger.info(\"Guest reconnected successfully\", { attemptNumber });\n\n if (this.presenceService) {\n this.presenceService.startPing();\n }\n });\n\n this.socket.io.on(\"reconnect_error\", (error: Error) => {\n this.logger.error(\"Guest reconnection error\", { error: error.message });\n if (this.isAuthError(error)) {\n this.updateConnectionState(\"FAILED\");\n }\n });\n\n this.socket.io.on(\"reconnect_failed\", () => {\n this.updateConnectionState(\"FAILED\");\n this.logger.error(\"All guest reconnection attempts failed\");\n });\n }\n\n private setupEventHandlers(): void {\n if (!this.socket) {\n return;\n }\n\n this.logger.debug(\"Setting up event handlers via registry\");\n\n console.log(\"[SOCKET_MANAGER] Setting up event handlers\", {\n socketId: this.socket.id,\n connected: this.socket.connected,\n });\n\n // Clean up existing handlers to prevent duplicate registrations\n if (this.handlerRegistry) {\n this.handlerRegistry.removeEventListeners(this.socket);\n this.handlerRegistry.destroy();\n }\n\n const options: SocketHandlerOptions = {\n livekit: this.livekit,\n };\n\n if (this.authManager) {\n options.authManager = this.authManager;\n }\n\n this.handlerRegistry = new SocketHandlerRegistry(options);\n\n this.handlerRegistry.registerEventListeners(this.socket);\n\n console.log(\"[SOCKET_MANAGER] Event handlers registered successfully\");\n }\n\n private isAuthError(error: Error): boolean {\n const authErrorIndicators = [\n \"unauthorized\",\n \"authentication\",\n \"token\",\n \"401\",\n \"403\",\n ];\n const errorMessage = error.message.toLowerCase();\n return authErrorIndicators.some((indicator) =>\n errorMessage.includes(indicator)\n );\n }\n\n private updateConnectionState(newState: ConnectionState): void {\n if (this.connectionState !== newState) {\n this.connectionState = newState;\n this.logger.debug(\"Connection state changed\", { newState });\n }\n }\n\n destroy(): void {\n if (this.presenceService) {\n this.presenceService.destroy();\n this.presenceService = null;\n }\n\n if (this.socket) {\n if (this.handlerRegistry) {\n this.handlerRegistry.removeEventListeners(this.socket);\n this.handlerRegistry.destroy();\n this.handlerRegistry = null;\n }\n this.socket.removeAllListeners();\n this.socket.disconnect();\n this.socket = null;\n }\n this.connectionState = \"DISCONNECTED\";\n SocketManager.instance = null;\n this.logger.debug(\"Destroyed and cleaned up\");\n }\n}\n","import { useChatStore } from \"../channel/chat\";\nimport { useRaiseHandStore } from \"../channel/raiseHand\";\nimport { useSpotlightStore } from \"../channel/spotlight\";\nimport { SignalCallsService } from \"../clients/signal\";\nimport type { AuthManager } from \"../core/auth.manager\";\nimport type { CallsData } from \"../generated/api/models\";\nimport { profileCache } from \"../state/profileCache\";\nimport { recordingStore } from \"../state/recording.store\";\nimport { rtcStore } from \"../state/store\";\n\nexport interface CallsServiceConfig {\n appId: string;\n}\n\nexport interface InitiateCallParams {\n invitees: string[];\n mode?: \"AUDIO\" | \"VIDEO\";\n callId?: string;\n}\n\nexport interface CallsServiceDependencies {\n livekitManager?: { disconnect: () => Promise<void> };\n authManager?: AuthManager;\n}\n\nexport function createCallsService(\n config: CallsServiceConfig,\n deps?: CallsServiceDependencies\n) {\n const { appId } = config;\n const signalCalls = new SignalCallsService(appId);\n\n profileCache.getState().configure(appId);\n\n async function initiate(\n params: InitiateCallParams\n ): Promise<\n | CallsData[\"responses\"][\"PostSignalCallsInitiate\"]\n | CallsData[\"responses\"][\"PostSignalCallsInvite\"]\n > {\n try {\n console.log(params, \"params\");\n if (!params.callId) {\n // Set optimistic state immediately\n rtcStore.getState().patch((state) => {\n state.session = {\n id: \"temp\",\n status: \"initializing\",\n mode: params.mode || \"AUDIO\",\n role: \"HOST\",\n };\n state.initiated = true;\n });\n console.log(\"state: \", rtcStore.getState());\n\n const response = await signalCalls.initiate({\n requestBody: {\n inviteeIds: params.invitees,\n mode: params.mode || \"AUDIO\",\n },\n });\n\n if (response.participants && response.participants.length > 0) {\n profileCache.getState().addMany(\n response.participants.map((p) => ({\n userId: p.userId,\n username: p.username,\n firstName: p.firstName,\n lastName: p.lastName,\n profilePhoto: p.profilePhoto,\n }))\n );\n }\n\n rtcStore.getState().patch((state) => {\n state.initiated = true;\n state.session = {\n id: response.callId,\n status: \"pending\",\n mode: params.mode || \"AUDIO\",\n role: \"HOST\",\n ringTimeoutMs: response.ringTimeoutMs,\n };\n\n for (const userId of response.inviteeIds) {\n const profile = profileCache.getState().get(userId);\n state.outgoingInvites[userId] = {\n userId,\n status: \"sent\",\n participant: profile\n ? {\n userId: profile.userId,\n role: \"PARTICIPANT\",\n firstName: profile.firstName,\n lastName: profile.lastName,\n username: profile.username,\n email: \"\",\n profilePhoto: profile.profilePhoto,\n }\n : undefined,\n };\n }\n\n if (response.joinInfo) {\n state.session.livekitInfo = {\n token: response.joinInfo.token,\n roomName: response.callId,\n url: response.joinInfo.lkUrl,\n };\n }\n });\n\n return response;\n }\n const response = await signalCalls.invite({\n requestBody: {\n callId: params.callId,\n participants: params.invitees.map((userId) => ({\n userId: String(userId),\n })),\n },\n });\n\n if (response.participants && response.participants.length > 0) {\n profileCache.getState().addMany(\n response.participants.map((p) => ({\n userId: p.userId,\n username: p.username,\n firstName: p.firstName,\n lastName: p.lastName,\n profilePhoto: p.profilePhoto,\n }))\n );\n }\n\n rtcStore.getState().patch((state) => {\n for (const userId of response.inviteeIds) {\n const profile = profileCache.getState().get(userId);\n state.outgoingInvites[userId] = {\n userId,\n status: \"sent\",\n participant: profile\n ? {\n userId: profile.userId,\n role: \"PARTICIPANT\",\n firstName: profile.firstName,\n lastName: profile.lastName,\n username: profile.username,\n email: \"\",\n profilePhoto: profile.profilePhoto,\n }\n : undefined,\n };\n }\n\n if (response.joinInfo && state.session) {\n state.session.livekitInfo = {\n token: response.joinInfo.token,\n roomName: state.session.id,\n url: response.joinInfo.lkUrl,\n };\n }\n });\n\n return response;\n } catch (error: any) {\n // Clear optimistic state on error\n rtcStore.getState().patch((state) => {\n state.session = null;\n state.initiated = false;\n });\n rtcStore.getState().addError({\n code: \"INITIATE_FAILED\",\n message: error.message || \"Failed to initiate call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function accept(): Promise<\n CallsData[\"responses\"][\"PostSignalCallsByCallIdAccept\"]\n > {\n const currentState = rtcStore.getState();\n if (!currentState.incomingInvite) {\n throw new Error(\"No incoming invite to accept\");\n }\n\n const { callId, inviteId, mode } = currentState.incomingInvite;\n\n // Set optimistic state immediately\n rtcStore.getState().patch((state) => {\n state.session = {\n id: callId,\n status: \"initializing\",\n mode: mode,\n role: \"PARTICIPANT\",\n };\n state.incomingInvite = null;\n });\n\n try {\n const response = await signalCalls.accept({\n callId,\n requestBody: {\n inviteId,\n },\n });\n\n rtcStore.getState().patch((state) => {\n // Update the existing optimistic session\n if (state.session && state.session.id === callId) {\n state.session.status = \"ready\";\n\n // Set startedAt - use backend value if available, otherwise generate locally\n if (response.call?.startedAt) {\n state.session.startedAt = response.call.startedAt;\n } else {\n state.session.startedAt = new Date().toISOString();\n }\n\n if (response.joinInfo) {\n state.session.livekitInfo = {\n token: response.joinInfo.token,\n roomName: state.session.id,\n url: response.joinInfo.lkUrl,\n };\n\n if (response.ringTimeoutMs) {\n state.session.ringTimeoutMs = response.ringTimeoutMs;\n }\n }\n }\n });\n\n return response;\n } catch (error: any) {\n // Rollback optimistic state on error\n rtcStore.getState().patch((state) => {\n state.session = null;\n state.incomingInvite = currentState.incomingInvite;\n });\n rtcStore.getState().addError({\n code: \"ACCEPT_FAILED\",\n message: error.message || \"Failed to accept call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function decline(\n reason?: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdDecline\"]> {\n try {\n const currentState = rtcStore.getState();\n if (!currentState.incomingInvite) {\n throw new Error(\"No incoming invite to decline\");\n }\n\n const { callId, inviteId } = currentState.incomingInvite;\n const requestBody: NonNullable<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdDecline\"][\"requestBody\"]\n > = {\n inviteId,\n };\n\n if (reason) {\n requestBody.reason = reason;\n }\n\n const response = await signalCalls.decline({\n callId,\n requestBody,\n });\n\n // Clear local state after successful decline\n rtcStore.getState().patch((state) => {\n state.incomingInvite = null;\n state.session = null;\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"DECLINE_FAILED\",\n message: error.message || \"Failed to decline call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function cancel(\n callId: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdCancel\"]> {\n try {\n rtcStore.getState().reset();\n return signalCalls.cancel({\n callId,\n });\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"CANCEL_FAILED\",\n message: error.message || \"Failed to cancel call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function leave(): Promise<void> {\n try {\n if (deps?.livekitManager) {\n await deps.livekitManager.disconnect();\n } else {\n rtcStore.getState().reset();\n profileCache.getState().clear();\n recordingStore.getState().clear();\n useChatStore.getState().clearChat();\n useSpotlightStore.getState().clear();\n useRaiseHandStore.getState().clear();\n }\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"LEAVE_FAILED\",\n message: error.message || \"Failed to leave call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function transfer(\n callId: string,\n targetParticipantId: string,\n reason?: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdTransfer\"]> {\n try {\n const requestBody: NonNullable<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdTransfer\"][\"requestBody\"]\n > = {\n targetParticipantId,\n };\n if (reason) {\n requestBody.reason = reason;\n }\n return signalCalls.transfer({\n callId,\n requestBody,\n });\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"TRANSFER_FAILED\",\n message: error.message || \"Failed to transfer call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function kick(\n callId: string,\n participantId: string,\n reason?: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdKick\"]> {\n try {\n const requestBody: NonNullable<\n CallsData[\"payloads\"][\"PostSignalCallsByCallIdKick\"][\"requestBody\"]\n > = {\n participantId,\n };\n if (reason) {\n requestBody.reason = reason;\n }\n return signalCalls.kick({\n callId,\n requestBody,\n });\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"KICK_FAILED\",\n message: error.message || \"Failed to kick participant\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function mute(\n callId: string,\n participantId: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdMute\"]> {\n try {\n return signalCalls.mute({\n callId,\n requestBody: {\n participantId,\n },\n });\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"MUTE_FAILED\",\n message: error.message || \"Failed to mute participant\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function end(\n callId: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdEnd\"]> {\n try {\n const response = await signalCalls.end({\n callId,\n });\n\n rtcStore.getState().reset();\n profileCache.getState().clear();\n recordingStore.getState().clear();\n useChatStore.getState().clearChat();\n useSpotlightStore.getState().clear();\n useRaiseHandStore.getState().clear();\n\n return response;\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"END_CALL_FAILED\",\n message: error.message || \"Failed to end call\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function invite(\n callId: string,\n invitees: string[]\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsInvite\"]> {\n try {\n const response = await signalCalls.invite({\n requestBody: {\n callId,\n participants: invitees.map((userId) => ({ userId: String(userId) })),\n },\n });\n\n if (response.participants && response.participants.length > 0) {\n profileCache.getState().addMany(\n response.participants.map((p) => ({\n userId: p.userId,\n username: p.username,\n firstName: p.firstName,\n lastName: p.lastName,\n profilePhoto: p.profilePhoto,\n }))\n );\n }\n\n rtcStore.getState().patch((state) => {\n for (const userId of response.inviteeIds) {\n const profile = profileCache.getState().get(userId);\n state.outgoingInvites[userId] = {\n userId,\n status: \"sent\",\n participant: profile\n ? {\n userId: profile.userId,\n role: \"PARTICIPANT\",\n firstName: profile.firstName,\n lastName: profile.lastName,\n username: profile.username,\n email: \"\",\n profilePhoto: profile.profilePhoto,\n }\n : undefined,\n };\n }\n\n if (response.joinInfo && state.session) {\n state.session.livekitInfo = {\n token: response.joinInfo.token,\n roomName: state.session.id,\n url: response.joinInfo.lkUrl,\n };\n }\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"INVITE_FAILED\",\n message: error.message || \"Failed to send invites\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function get(\n callId: string\n ): Promise<CallsData[\"responses\"][\"GetSignalCallsByCallId\"]> {\n return signalCalls.get({\n callId,\n });\n }\n\n async function startRecording(\n callId: string\n ): Promise<CallsData[\"responses\"][\"PostSignalCallsByCallIdRecordingsStart\"]> {\n try {\n const response = await signalCalls.startRecording({\n callId,\n });\n\n // Get current user ID from session info\n const sessionInfo = deps?.authManager?.getSessionInfo();\n const userId = sessionInfo?.userId || \"\";\n\n const info = response.message.split(\" \");\n const recordingId = info[1];\n const egressId = info[4];\n\n // Validate parsed values\n if (!recordingId || !egressId) {\n rtcStore.getState().addError({\n code: \"START_RECORDING_PARSE_ERROR\",\n message: `Failed to parse recording info from response message: ${response.message}`,\n timestamp: Date.now(),\n context: { message: response.message, parsedInfo: info },\n });\n\n return response;\n }\n\n // Create a single timestamp to ensure consistency across both stores\n const startedAt = new Date().toISOString();\n\n // NOTE: This is an optimistic update from the API response.\n // The socket event (call:recordingStarted) should also be received to confirm\n // and ensure all participants (including the host) get the update via socket.\n // Store recording info in session state (for backward compatibility)\n rtcStore.getState().patch((state) => {\n if (state.session && state.session.id === callId) {\n state.session.recording = {\n recordingId,\n egressId,\n startedAt,\n initiatedBy: userId,\n };\n }\n });\n\n // Update shared recording store (available to all participants)\n // This is an optimistic update - the socket event should also update this\n recordingStore.getState().setRecording({\n recordingId,\n egressId,\n startedAt,\n initiatedBy: userId,\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"START_RECORDING_FAILED\",\n message: error.message || \"Failed to start recording\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function stopRecording(\n callId: string,\n recordingId: string\n ): Promise<\n CallsData[\"responses\"][\"PostSignalCallsByCallIdRecordingsByRecordingIdStop\"]\n > {\n try {\n const response = await signalCalls.stopRecording({\n callId,\n recordingId,\n });\n\n // Clear recording info from session state (for backward compatibility)\n rtcStore.getState().patch((state) => {\n if (state.session && state.session.id === callId) {\n state.session.recording = null;\n }\n });\n\n // Clear shared recording store (available to all participants)\n recordingStore.getState().clear();\n\n return response;\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"STOP_RECORDING_FAILED\",\n message: error.message || \"Failed to stop recording\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n return {\n initiate,\n invite,\n accept,\n decline,\n cancel,\n leave,\n end,\n transfer,\n kick,\n mute,\n startRecording,\n stopRecording,\n };\n}\n\nexport type CallsServiceInstance = ReturnType<typeof createCallsService>;\n","import { type RemoteParticipant, type Room, RoomEvent } from \"livekit-client\";\nimport { profileCache } from \"../state/profileCache\";\nimport { rtcStore } from \"../state/store\";\nimport { createLogger } from \"../utils\";\nimport { recordingStore } from \"../state/recording.store\";\nimport { useChatStore, useRaiseHandStore, useSpotlightStore } from \"../channel\";\n\nconst logger = createLogger(\"livekitRoomManager\");\n\nexport class LiveKitRoomManager {\n private room: Room | undefined;\n\n attach(room: Room): void {\n if (this.room === room) {\n logger.debug(\"Already attached to this room\");\n return;\n }\n\n this.detach();\n this.room = room;\n logger.info(\"Attaching to LiveKit room\");\n room.on(\n RoomEvent.ParticipantDisconnected,\n this.handleParticipantDisconnected\n );\n room.on(RoomEvent.Disconnected, this.handleRoomDisconnected);\n }\n\n detach(): void {\n if (!this.room) {\n return;\n }\n\n logger.info(\"Detaching from LiveKit room\");\n this.room.off(\n RoomEvent.ParticipantDisconnected,\n this.handleParticipantDisconnected\n );\n this.room.off(RoomEvent.Disconnected, this.handleRoomDisconnected);\n this.room = undefined;\n }\n\n async disconnect(): Promise<void> {\n if (this.room) {\n logger.info(\"Disconnecting from LiveKit room\");\n await this.room.disconnect().catch((error) => {\n logger.error(\"Error disconnecting from room\", error);\n });\n }\n\n this.detach();\n rtcStore.getState().reset();\n profileCache.getState().clear();\n recordingStore.getState().clear();\n useChatStore.getState().clearChat();\n useSpotlightStore.getState().clear();\n useRaiseHandStore.getState().clear();\n }\n\n private handleParticipantDisconnected = (participant: RemoteParticipant) => {\n if (!this.room) {\n return;\n }\n\n const remoteCount = this.room.remoteParticipants.size;\n logger.debug(\"Participant disconnected\", {\n participantId: participant.identity,\n remoteCount,\n });\n\n if (remoteCount === 0) {\n const session = rtcStore.getState().session;\n if (!session || session.status === \"ended\") {\n logger.debug(\"Session already ended, skipping auto-disconnect\");\n return;\n }\n\n logger.info(\"Last remote participant left, disconnecting\");\n this.disconnect().catch((error) => {\n logger.error(\"Error disconnecting from LiveKit room\", error);\n });\n }\n };\n\n private handleRoomDisconnected = () => {\n logger.info(\"Room disconnected\");\n this.disconnect().catch((error) => {\n logger.error(\"Error disconnecting from LiveKit room\", error);\n });\n };\n}\n","import { useChatStore } from \"../channel/chat\";\nimport { useRaiseHandStore } from \"../channel/raiseHand\";\nimport { useSpotlightStore } from \"../channel/spotlight\";\nimport {\n type GuestJoinResponse,\n SignalMeetingsService,\n} from \"../clients/signal\";\nimport { eventBus } from \"../core/events\";\nimport { SdkEventType } from \"../core/events/types\";\nimport type { MeetingsData } from \"../generated/api/models\";\nimport type {\n CreateAdHocMeetingParams,\n EndMeetingResponse,\n JoinMeetingParams,\n MeetingResponse,\n} from \"../state/meetings.types\";\nimport { profileCache } from \"../state/profileCache\";\nimport { recordingStore } from \"../state/recording.store\";\nimport { rtcStore } from \"../state/store\";\n\nexport interface MeetingsServiceConfig {\n appId: string;\n}\n\nexport interface MeetingsServiceDependencies {\n livekitManager?: { disconnect: () => Promise<void> };\n}\n\nexport interface GuestJoinMeetingParams {\n meetingCode: string;\n displayName: string;\n passcode?: string;\n}\n\nexport interface GuestJoinContext {\n deviceId: string;\n signalHost: string;\n onSessionToken: (token: string) => Promise<void>;\n}\n\nexport function createMeetingsService(\n config: MeetingsServiceConfig,\n deps?: MeetingsServiceDependencies\n) {\n const { appId } = config;\n const signalMeetings = new SignalMeetingsService(appId);\n\n async function createAdHoc(\n params: CreateAdHocMeetingParams = {}\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsCreate\"]> {\n try {\n rtcStore.getState().patch((state) => {\n state.session = {\n id: \"temp\",\n status: \"initializing\",\n mode: params.mode || \"VIDEO\",\n role: \"HOST\",\n sessionType: \"MEETING\",\n };\n state.initiated = true;\n });\n\n const requestBody: { mode?: \"AUDIO\" | \"VIDEO\"; title?: string } = {};\n if (params.mode) {\n requestBody.mode = params.mode;\n }\n if (params.title) {\n requestBody.title = params.title;\n }\n\n const response = await signalMeetings.createAdHoc({\n requestBody,\n });\n\n rtcStore.getState().patch((state) => {\n state.initiated = true;\n state.session = {\n id: response.meeting.callId,\n status: \"active\",\n mode: params.mode || \"VIDEO\",\n role: \"HOST\",\n sessionType: \"MEETING\",\n meetingInfo: {\n meetingId: response.meeting.id,\n meetingCode: response.meeting.code,\n },\n livekitInfo: {\n token: response.joinInfo.token,\n roomName: response.meeting.callId,\n url: response.joinInfo.lkUrl,\n },\n };\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().patch((state) => {\n state.session = null;\n state.initiated = false;\n });\n rtcStore.getState().addError({\n code: \"CREATE_MEETING_FAILED\",\n message: error.message || \"Failed to create meeting\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function start(\n meetingId: string\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsByMeetingIdStart\"]> {\n try {\n rtcStore.getState().patch((state) => {\n state.session = {\n id: \"temp\",\n status: \"initializing\",\n mode: \"VIDEO\",\n role: \"HOST\",\n sessionType: \"MEETING\",\n };\n state.initiated = true;\n });\n\n const response = await signalMeetings.start({\n meetingId,\n });\n\n rtcStore.getState().patch((state) => {\n state.initiated = true;\n state.session = {\n id: response.meeting.callId,\n status: \"active\",\n mode: \"VIDEO\",\n role: \"HOST\",\n sessionType: \"MEETING\",\n meetingInfo: {\n meetingId: response.meeting.id,\n meetingCode: response.meeting.code,\n },\n livekitInfo: {\n token: response.joinInfo.token,\n roomName: response.meeting.callId,\n url: response.joinInfo.lkUrl,\n },\n };\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().patch((state) => {\n state.session = null;\n state.initiated = false;\n });\n rtcStore.getState().addError({\n code: \"START_MEETING_FAILED\",\n message: error.message || \"Failed to start meeting\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function join(\n params: JoinMeetingParams\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsJoin\"]> {\n if (!params.meetingCode && !params.meetingId) {\n throw new Error(\"Either meetingCode or meetingId is required\");\n }\n\n try {\n rtcStore.getState().patch((state) => {\n state.session = {\n id: \"temp\",\n status: \"initializing\",\n mode: \"VIDEO\",\n role: \"PARTICIPANT\",\n sessionType: \"MEETING\",\n };\n state.initiated = false;\n });\n\n const requestBody: { meetingCode?: string; meetingId?: string } = {};\n if (params.meetingCode) {\n requestBody.meetingCode = params.meetingCode;\n }\n if (params.meetingId) {\n requestBody.meetingId = params.meetingId;\n }\n\n const response = await signalMeetings.join({\n requestBody,\n });\n\n rtcStore.getState().patch((state) => {\n state.session = {\n id: response.meeting.callId,\n status: \"active\",\n mode: \"VIDEO\",\n role: \"PARTICIPANT\",\n sessionType: \"MEETING\",\n meetingInfo: {\n meetingId: response.meeting.id,\n meetingCode: response.meeting.code,\n },\n livekitInfo: {\n token: response.joinInfo.token,\n roomName: response.meeting.callId,\n url: response.joinInfo.lkUrl,\n },\n };\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().patch((state) => {\n state.session = null;\n });\n rtcStore.getState().addError({\n code: \"JOIN_MEETING_FAILED\",\n message: error.message || \"Failed to join meeting\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function end(\n meetingId: string\n ): Promise<MeetingsData[\"responses\"][\"PostSignalMeetingsByMeetingIdEnd\"]> {\n try {\n const response = await signalMeetings.end({\n meetingId,\n });\n\n rtcStore.getState().reset();\n profileCache.getState().clear();\n recordingStore.getState().clear();\n useChatStore.getState().clearChat();\n useSpotlightStore.getState().clear();\n useRaiseHandStore.getState().clear();\n\n return response;\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"END_MEETING_FAILED\",\n message: error.message || \"Failed to end meeting\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function guestJoin(\n params: GuestJoinMeetingParams,\n context: GuestJoinContext\n ): Promise<GuestJoinResponse> {\n const { meetingCode, displayName, passcode } = params;\n\n rtcStore.getState().patch((state) => {\n state.isGuestMode = true;\n state.session = {\n id: \"temp\",\n status: \"initializing\",\n mode: \"VIDEO\",\n role: \"GUEST\",\n sessionType: \"MEETING\",\n };\n });\n\n try {\n const guestJoinParams: {\n meetingCode: string;\n displayName: string;\n passcode?: string;\n appId: string;\n deviceId: string;\n } = {\n meetingCode,\n displayName,\n appId,\n deviceId: context.deviceId,\n };\n if (passcode) {\n guestJoinParams.passcode = passcode;\n }\n\n const response = await signalMeetings.guestJoin(\n guestJoinParams,\n context.signalHost\n );\n\n rtcStore.getState().patch((state) => {\n state.guestIdentity = {\n guestId: response.guestId,\n displayName,\n };\n state.session = {\n id: response.meeting.callId,\n status: \"active\",\n mode: \"VIDEO\",\n role: \"GUEST\",\n sessionType: \"MEETING\",\n meetingInfo: {\n meetingId: response.meeting.id,\n meetingCode: response.meeting.code,\n },\n livekitInfo: {\n token: response.joinInfo.token,\n roomName: response.meeting.callId,\n url: response.joinInfo.lkUrl,\n },\n };\n });\n\n await context.onSessionToken(response.sessionToken);\n\n eventBus.emit(SdkEventType.GUEST_JOINED, {\n guestId: response.guestId,\n displayName,\n meetingCode: response.meeting.code,\n });\n\n return response;\n } catch (error: any) {\n rtcStore.getState().patch((state) => {\n state.session = null;\n state.guestIdentity = null;\n state.isGuestMode = false;\n });\n rtcStore.getState().addError({\n code: \"GUEST_JOIN_FAILED\",\n message: error.message || \"Failed to join meeting as guest\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n async function leave(): Promise<void> {\n const state = rtcStore.getState();\n const isGuest = state.isGuestMode;\n\n try {\n if (deps?.livekitManager) {\n await deps.livekitManager.disconnect();\n }\n\n rtcStore.getState().patch((state) => {\n state.session = null;\n state.initiated = false;\n if (isGuest) {\n state.guestIdentity = null;\n state.isGuestMode = false;\n }\n });\n\n profileCache.getState().clear();\n recordingStore.getState().clear();\n useChatStore.getState().clearChat();\n useSpotlightStore.getState().clear();\n useRaiseHandStore.getState().clear();\n\n eventBus.emit(\n isGuest ? SdkEventType.GUEST_LEFT : SdkEventType.MEETING_ENDED,\n {}\n );\n } catch (error: any) {\n rtcStore.getState().addError({\n code: \"LEAVE_MEETING_FAILED\",\n message: error.message || \"Failed to leave meeting\",\n timestamp: Date.now(),\n context: error,\n });\n throw error;\n }\n }\n\n return {\n createAdHoc,\n start,\n join,\n end,\n leave,\n guestJoin,\n };\n}\n\nexport type MeetingsServiceInstance = ReturnType<typeof createMeetingsService>;\n","export type PresenceStatus = \"online\" | \"offline\" | \"busy\";\nexport type PresenceResolvedStatus = PresenceStatus | \"unknown\";\n\nexport interface UserPresence {\n userId: string;\n status: PresenceStatus;\n deviceCount: number;\n lastUpdated: number;\n}\n\nexport interface PresenceConfig {\n pingIntervalMs: number;\n}\n\nexport const DEFAULT_PRESENCE_CONFIG: PresenceConfig = {\n pingIntervalMs: 30_000,\n};\n","import type { Socket } from \"socket.io-client\";\nimport { SignalPresenceService } from \"../clients/signal\";\nimport type { PresenceConfig, UserPresence } from \"../state/presence.types\";\nimport { DEFAULT_PRESENCE_CONFIG } from \"../state/presence.types\";\nimport { createLogger } from \"../utils\";\n\nexport interface PresenceServiceConfig {\n appId: string;\n}\n\nexport interface PresenceServiceDependencies {\n getSocket: () => Socket | null;\n}\n\nexport interface PresenceServiceInstance {\n startPing: () => void;\n stopPing: () => void;\n queryPresence: (userIds: string[]) => Promise<UserPresence[]>;\n getPresence: (userId: string) => Promise<UserPresence | undefined>;\n configure: (config: Partial<PresenceConfig>) => void;\n destroy: () => void;\n}\n\nexport function createPresenceService(\n config: PresenceServiceConfig,\n deps: PresenceServiceDependencies\n): PresenceServiceInstance {\n const logger = createLogger(\"presence\");\n const signalPresence = new SignalPresenceService(config.appId);\n\n let pingIntervalId: ReturnType<typeof setInterval> | null = null;\n let presenceConfig: PresenceConfig = { ...DEFAULT_PRESENCE_CONFIG };\n const inFlight = new Map<string, Promise<UserPresence[] | undefined>>();\n\n function startPing(): void {\n if (pingIntervalId) {\n logger.debug(\"Ping already running\");\n return;\n }\n\n const emitPing = () => {\n const socket = deps.getSocket();\n if (socket?.connected) {\n socket.emit(\"presence:ping\");\n logger.debug(\"Emitted presence:ping\");\n }\n };\n\n emitPing();\n pingIntervalId = setInterval(emitPing, presenceConfig.pingIntervalMs);\n\n logger.info(\"Started presence ping\", {\n intervalMs: presenceConfig.pingIntervalMs,\n });\n }\n\n function stopPing(): void {\n if (pingIntervalId) {\n clearInterval(pingIntervalId);\n pingIntervalId = null;\n logger.info(\"Stopped presence ping\");\n }\n }\n\n async function queryPresence(userIds: string[]): Promise<UserPresence[]> {\n if (userIds.length === 0) {\n return [];\n }\n\n const uniqueUserIds = Array.from(new Set(userIds));\n const cacheKey = [...uniqueUserIds].sort().join(\",\");\n\n const existing = inFlight.get(cacheKey);\n if (existing) {\n logger.debug(\"Reusing in-flight request\", { cacheKey });\n return (await existing) ?? [];\n }\n\n const fetchPromise = (async (): Promise<UserPresence[] | undefined> => {\n try {\n const response = await signalPresence.queryPresence(uniqueUserIds);\n\n return response.presence.map((p) => ({\n userId: p.userId,\n status: p.status,\n deviceCount: p.deviceCount,\n lastUpdated: Date.now(),\n }));\n } catch (error) {\n logger.error(\"Failed to fetch presence\", { error, userIds });\n return undefined;\n } finally {\n inFlight.delete(cacheKey);\n }\n })();\n\n inFlight.set(cacheKey, fetchPromise);\n return (await fetchPromise) ?? [];\n }\n\n async function getPresence(\n userId: string\n ): Promise<UserPresence | undefined> {\n const results = await queryPresence([userId]);\n return results[0];\n }\n\n function configure(config: Partial<PresenceConfig>): void {\n presenceConfig = { ...presenceConfig, ...config };\n\n if (pingIntervalId) {\n stopPing();\n startPing();\n }\n }\n\n function destroy(): void {\n stopPing();\n inFlight.clear();\n logger.debug(\"Presence service destroyed\");\n }\n\n return {\n startPing,\n stopPing,\n queryPresence,\n getPresence,\n configure,\n destroy,\n };\n}\n","import { type GuestJoinResponse, SignalClient } from \"../clients/signal\";\nimport { apiConfig } from \"../clients/signal/config\";\nimport type { ApiConfig } from \"../clients/signal/types\";\nimport { AuthManager, GuestAuthManager, SocketManager } from \"../core\";\nimport type { AuthRetryConfig } from \"../core/types\";\nimport type { PresenceConfig } from \"../state/presence.types\";\nimport { rtcStore } from \"../state/store\";\nimport { type LogLevel, setGlobalLoggerOptions } from \"../utils/logger\";\nimport { type CallsServiceInstance, createCallsService } from \"./calls.service\";\nimport { LiveKitRoomManager } from \"./livekitRoomManager\";\nimport {\n type GuestJoinMeetingParams,\n type MeetingsServiceInstance,\n createMeetingsService,\n} from \"./meetings.service\";\nimport {\n type PresenceServiceInstance,\n createPresenceService,\n} from \"./presence.service\";\n\nexport interface SdkBuildOptionsBase {\n appId: string;\n signalHost: string;\n logLevel?: LogLevel;\n enableDebug?: boolean;\n log?: (level: LogLevel, message: string, meta?: any) => void;\n presence?: Partial<PresenceConfig>;\n}\n\nexport interface AuthenticatedSdkOptions extends SdkBuildOptionsBase {\n mode?: \"authenticated\";\n authProvider: () => string | null;\n authRetry?: Partial<AuthRetryConfig>;\n}\n\nexport interface GuestSdkOptions extends SdkBuildOptionsBase {\n mode: \"guest\";\n deviceId: string;\n}\n\nexport type SdkBuildOptions = AuthenticatedSdkOptions | GuestSdkOptions;\n\nexport interface RtcSdk {\n store: typeof rtcStore;\n auth: AuthManager;\n socket: SocketManager;\n calls: CallsServiceInstance;\n meetings: MeetingsServiceInstance;\n signal: SignalClient;\n livekit: LiveKitRoomManager;\n presence: PresenceServiceInstance;\n cleanup: () => void;\n configureApi: (config: ApiConfig) => void;\n}\n\nexport interface GuestRtcSdk {\n store: typeof rtcStore;\n auth: GuestAuthManager;\n socket: SocketManager;\n meetings: MeetingsServiceInstance;\n livekit: LiveKitRoomManager;\n presence: PresenceServiceInstance;\n cleanup: () => void;\n configureApi: (config: ApiConfig) => void;\n guestJoin: (params: GuestJoinMeetingParams) => Promise<GuestJoinResponse>;\n}\n\nexport function buildSdk(opts: AuthenticatedSdkOptions): RtcSdk {\n const loggerOptions: any = {};\n if (opts.logLevel !== undefined) {\n loggerOptions.level = opts.logLevel;\n }\n if (opts.enableDebug !== undefined) {\n loggerOptions.enableDebug = opts.enableDebug;\n }\n if (opts.log !== undefined) {\n loggerOptions.customLogger = opts.log;\n }\n setGlobalLoggerOptions(loggerOptions);\n\n const auth = new AuthManager(opts.authProvider, opts.appId, opts.authRetry);\n\n const socket = SocketManager.getInstance();\n const livekitManager = new LiveKitRoomManager();\n const callsService = createCallsService(\n { appId: opts.appId },\n { livekitManager, authManager: auth }\n );\n const meetingsService = createMeetingsService(\n { appId: opts.appId },\n { livekitManager }\n );\n\n const signalClient = new SignalClient({\n baseUrl: opts.signalHost,\n appId: opts.appId,\n token: async () => {\n const token = await auth.getSessionToken();\n return token || \"\";\n },\n });\n\n apiConfig.configure({\n baseUrl: opts.signalHost,\n token: async () => {\n const token = await auth.getSessionToken();\n return token || \"\";\n },\n });\n\n const presenceService = createPresenceService(\n { appId: opts.appId },\n { getSocket: () => socket.getSocket() }\n );\n\n if (opts.presence) {\n presenceService.configure(opts.presence);\n }\n\n socket.setPresenceService(presenceService);\n\n const cleanup = () => {\n presenceService.destroy();\n livekitManager.detach();\n socket.destroy();\n rtcStore.getState().reset();\n };\n\n return {\n store: rtcStore,\n auth,\n socket,\n calls: callsService,\n meetings: meetingsService,\n signal: signalClient,\n livekit: livekitManager,\n presence: presenceService,\n cleanup,\n configureApi: (config: ApiConfig) => {\n apiConfig.configure(config);\n const signalConfig: Partial<ApiConfig> = {\n baseUrl: config.baseUrl,\n };\n if (config.token !== undefined) {\n signalConfig.token = config.token;\n }\n if (config.credentials !== undefined) {\n signalConfig.credentials = config.credentials;\n }\n if (config.withCredentials !== undefined) {\n signalConfig.withCredentials = config.withCredentials;\n }\n if (config.headers !== undefined) {\n signalConfig.headers = config.headers;\n }\n signalClient.reconfigure(signalConfig);\n },\n };\n}\n\nexport function buildGuestSdk(opts: GuestSdkOptions): GuestRtcSdk {\n const loggerOptions: any = {};\n if (opts.logLevel !== undefined) {\n loggerOptions.level = opts.logLevel;\n }\n if (opts.enableDebug !== undefined) {\n loggerOptions.enableDebug = opts.enableDebug;\n }\n if (opts.log !== undefined) {\n loggerOptions.customLogger = opts.log;\n }\n setGlobalLoggerOptions(loggerOptions);\n\n const auth = new GuestAuthManager(opts.appId, opts.deviceId);\n const socket = SocketManager.getInstance();\n const livekitManager = new LiveKitRoomManager();\n const meetingsService = createMeetingsService(\n { appId: opts.appId },\n { livekitManager }\n );\n\n apiConfig.configure({\n baseUrl: opts.signalHost,\n token: async () => (await auth.getSessionToken()) || \"\",\n });\n\n const presenceService = createPresenceService(\n { appId: opts.appId },\n { getSocket: () => socket.getSocket() }\n );\n\n if (opts.presence) {\n presenceService.configure(opts.presence);\n }\n\n socket.setPresenceService(presenceService);\n\n const guestJoin = async (\n params: GuestJoinMeetingParams\n ): Promise<GuestJoinResponse> => {\n const response = await meetingsService.guestJoin(params, {\n deviceId: opts.deviceId,\n signalHost: opts.signalHost,\n onSessionToken: async (sessionToken: string) => {\n auth.setSession({\n sessionToken,\n guestId: response.guestId,\n displayName: params.displayName,\n callId: response.meeting.callId,\n meetingId: response.meeting.id,\n meetingCode: response.meeting.code,\n });\n await socket.initializeWithToken(opts.signalHost, sessionToken);\n },\n });\n return response;\n };\n\n const cleanup = () => {\n presenceService.destroy();\n livekitManager.detach();\n socket.destroy();\n auth.clearSession();\n rtcStore.getState().reset();\n };\n\n return {\n store: rtcStore,\n auth,\n socket,\n meetings: meetingsService,\n livekit: livekitManager,\n presence: presenceService,\n cleanup,\n configureApi: (config: ApiConfig) => {\n apiConfig.configure(config);\n },\n guestJoin,\n };\n}\n","import React, { createContext, useContext, useEffect, useMemo } from \"react\";\nimport type { Nullable } from \"../core\";\nimport type { AuthManager } from \"../core/auth.manager\";\nimport {\n type AuthenticatedSdkOptions,\n type GuestRtcSdk,\n type GuestSdkOptions,\n type RtcSdk,\n type SdkBuildOptions,\n buildGuestSdk,\n buildSdk,\n} from \"../services\";\nimport { rtcStore } from \"../state/store\";\n\nexport type RtcOptions = SdkBuildOptions;\nexport type { RtcSdk, GuestRtcSdk };\n\ntype AnySdk = RtcSdk | GuestRtcSdk;\n\nconst RtcContext = createContext<Nullable<AnySdk>>(null);\n\nfunction isGuestOptions(options: SdkBuildOptions): options is GuestSdkOptions {\n return options.mode === \"guest\";\n}\n\nexport function RtcProvider({\n options,\n children,\n}: {\n options: RtcOptions;\n children: React.ReactNode;\n}) {\n const isGuestMode = isGuestOptions(options);\n\n const sdk = useMemo(() => {\n if (isGuestMode) {\n return buildGuestSdk(options);\n }\n return buildSdk(options as AuthenticatedSdkOptions);\n }, [options, isGuestMode]);\n\n useEffect(() => {\n if (!isGuestMode) {\n const authSdk = sdk as RtcSdk;\n authSdk.socket\n .initialize(\n options.signalHost,\n authSdk.auth as AuthManager,\n {\n reconnectAttempts: 5,\n reconnectDelay: 1000,\n },\n undefined\n )\n .catch((error: any) => {\n options.log?.(\n \"error\",\n \"Failed to initialize socket connection\",\n error\n );\n\n rtcStore.getState().addError({\n code: \"SOCKET_INIT_ERROR\",\n message: \"Failed to initialize socket connection\",\n timestamp: Date.now(),\n context: error,\n });\n });\n }\n\n return () => {\n sdk.cleanup();\n };\n }, [sdk, options, isGuestMode]);\n\n return React.createElement(RtcContext.Provider, { value: sdk }, children);\n}\n\nexport function useSdk(): RtcSdk {\n const ctx = useContext(RtcContext);\n if (!ctx) {\n throw new Error(\"useSdk must be used within RtcProvider\");\n }\n return ctx as RtcSdk;\n}\n\nexport function useGuestSdk(): GuestRtcSdk {\n const ctx = useContext(RtcContext);\n if (!ctx) {\n throw new Error(\"useGuestSdk must be used within RtcProvider\");\n }\n return ctx as GuestRtcSdk;\n}\n","import { useRtcStore } from \"../state/store\";\n\nexport interface CallState {\n id: string | null;\n status: \"initializing\" | \"pending\" | \"active\" | \"ended\" | \"ready\" | null;\n mode: \"AUDIO\" | \"VIDEO\" | null;\n roomName: string | null;\n}\n\nexport function useCallState(): CallState {\n const session = useRtcStore((state) => state.session);\n\n if (!session) {\n return {\n id: null,\n status: null,\n mode: null,\n roomName: null,\n };\n }\n\n return {\n id: session.id,\n status: session.status,\n mode: session.mode,\n roomName: session.livekitInfo?.roomName || null,\n };\n}\n","import { useRtcStore } from \"../state/store\";\nimport type { IncomingInvite } from \"../state/types\";\n\nexport function useIncomingInvite(): IncomingInvite | null {\n return useRtcStore((state) => state.incomingInvite);\n}\n","import { useRtcStore } from \"../state/store\";\n\n/**\n * Get the current session ID.\n * Returns null when no active session.\n */\nexport function useSessionId(): string | null {\n return useRtcStore((state) => state.session?.id ?? null);\n}\n","import { useSdk } from \"../provider/RtcProvider\";\nimport { rtcStore } from \"../state/store\";\nimport { useIncomingInvite } from \"./useIncomingInvite\";\nimport { useSessionId } from \"./useSessionId\";\n\nexport function useCallActions() {\n const sdk = useSdk();\n const sessionId = useSessionId();\n const incomingInvite = useIncomingInvite();\n\n return {\n initiate: (participants: string[], type: \"AUDIO\" | \"VIDEO\") => {\n return sdk.calls.initiate({ invitees: participants, mode: type });\n },\n invite: (participants: string[]) => {\n if (!sessionId) {\n throw new Error(\"No active session to invite participants to\");\n }\n\n return sdk.calls.invite(sessionId, participants);\n },\n accept: () => {\n if (!incomingInvite) {\n throw new Error(\"No incoming invite to accept\");\n }\n\n return sdk.calls.accept();\n },\n decline: (reason?: string) => {\n if (!incomingInvite) {\n throw new Error(\"No incoming invite to decline\");\n }\n\n return sdk.calls.decline(reason);\n },\n cancel: () => {\n if (!sessionId) {\n throw new Error(\"No active session to cancel\");\n }\n\n return sdk.calls.cancel(sessionId);\n },\n leave: async () => {\n if (!sessionId) {\n throw new Error(\"No active session to leave\");\n }\n\n return await sdk.calls.leave();\n },\n transfer: (targetParticipantId: string, reason?: string) => {\n if (!sessionId) {\n throw new Error(\"No active session to transfer\");\n }\n\n return sdk.calls.transfer(sessionId, targetParticipantId, reason);\n },\n kick: (participantId: string, reason?: string) => {\n if (!sessionId) {\n throw new Error(\"No active session to kick participant from\");\n }\n\n return sdk.calls.kick(sessionId, participantId, reason);\n },\n mute: (participantId: string) => {\n if (!sessionId) {\n throw new Error(\"No active session to mute participant in\");\n }\n\n return sdk.calls.mute(sessionId, participantId);\n },\n end: () => {\n if (!sessionId) {\n throw new Error(\"No active session to end\");\n }\n\n return sdk.calls.end(sessionId);\n },\n startRecording: () => {\n if (!sessionId) {\n throw new Error(\"No active session to start recording\");\n }\n\n return sdk.calls.startRecording(sessionId);\n },\n stopRecording: () => {\n if (!sessionId) {\n throw new Error(\"No active session to stop recording\");\n }\n\n const session = rtcStore.getState().session;\n if (!session?.recording?.recordingId) {\n throw new Error(\"No active recording to stop\");\n }\n\n return sdk.calls.stopRecording(sessionId, session.recording.recordingId);\n },\n };\n}\n","import { useConnectionState as useLivekitConnectionState } from \"@livekit/components-react\";\nimport { ConnectionState as LivekitConnectionState } from \"livekit-client\";\nimport { useCallState } from \"./useCallState\";\n\nexport type ConnectionState =\n | \"initializing\"\n | \"pending\"\n | \"connecting\"\n | \"active\"\n | \"idle\"\n | \"ended\";\n\nexport function useConnectionState(): ConnectionState {\n const { status } = useCallState();\n const connectionState = useLivekitConnectionState();\n\n if (connectionState === LivekitConnectionState.Connected) {\n return \"active\";\n }\n\n if (\n connectionState === LivekitConnectionState.Connecting ||\n connectionState === LivekitConnectionState.Reconnecting\n ) {\n return \"connecting\";\n }\n\n if (status === \"initializing\") {\n return \"initializing\";\n }\n\n if (status === \"pending\") {\n return \"pending\";\n }\n\n if (status === \"ended\") {\n return \"ended\";\n }\n\n return \"idle\";\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { eventBus } from \"../core/events\";\nimport type { EventHandler, SdkEvent, SdkEventType } from \"../core/events\";\n\nexport function useEvent<T = any>(\n eventType: string | SdkEventType,\n callback?: EventHandler<T> | null\n): SdkEvent<T> | undefined {\n const [lastEvent, setLastEvent] = useState<SdkEvent<T> | undefined>(\n undefined\n );\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n useEffect(() => {\n const handler: EventHandler<T> = (event: SdkEvent<T>) => {\n setLastEvent(event);\n if (callbackRef.current) {\n callbackRef.current(event);\n }\n };\n\n const subscription = eventBus.on(eventType, handler);\n\n return () => {\n subscription.unsubscribe();\n };\n }, [eventType]);\n\n return lastEvent;\n}\n","import { useRtcStore } from \"../state/store\";\nimport type { OutgoingInvite } from \"../state/types\";\n\nexport function useOutgoingInvites(): Record<string, OutgoingInvite> {\n return useRtcStore((state) => state.outgoingInvites);\n}\n","import { useRtcStore } from \"../state/store\";\n\nexport function useInviteAccepted(): boolean {\n return useRtcStore((state) => {\n return Object.values(state.outgoingInvites).some(\n (invite) => invite.status === \"accepted\"\n );\n });\n}\n","import { useRtcStore } from \"../state/store\";\n\nexport function useCallInitiated(): boolean {\n return useRtcStore((state) => state.initiated);\n}\n","import { useEffect, useReducer } from \"react\";\nimport { useRtcStore } from \"../state/store\";\nimport { type DurationResult, computeDuration } from \"../utils\";\n\nexport function useSessionDuration(): DurationResult {\n const [, forceUpdate] = useReducer((x) => x + 1, 0);\n const session = useRtcStore((state) => state.session);\n\n useEffect(() => {\n if (!session?.startedAt) {\n return;\n }\n\n const interval = setInterval(forceUpdate, 1000);\n return () => clearInterval(interval);\n }, [session?.startedAt]);\n\n if (!session?.startedAt) {\n return {\n seconds: 0,\n minutes: 0,\n hours: 0,\n formatted: \"00:00\",\n };\n }\n\n return computeDuration(session.startedAt);\n}\n","import { useParticipantInfo } from \"@livekit/components-react\";\nimport type { LocalParticipant, RemoteParticipant } from \"livekit-client\";\nimport type { ParticipantMetadata } from \"../state/types\";\n\nexport function useParticipantMetadata(\n participant: RemoteParticipant | LocalParticipant | null | undefined\n): ParticipantMetadata | null {\n // Don't use LiveKit hook for null participants - just access metadata directly\n if (!participant || !participant.metadata) {\n return null;\n }\n\n try {\n return participant.metadata\n ? (JSON.parse(participant.metadata) as ParticipantMetadata)\n : ({} as ParticipantMetadata);\n } catch (error) {\n console.error(\"Failed to parse participant metadata:\", error);\n return null;\n }\n}\n","import { useRtcStore } from \"../state/store\";\nimport type { LiveKitJoinInfo } from \"../state/types\";\n\n/**\n * Get the current LiveKit join information.\n * Returns null when no active session or LiveKit info is not available.\n */\nexport function useLivekitInfo(): LiveKitJoinInfo | null {\n return useRtcStore((state) => state.session?.livekitInfo ?? null);\n}\n","import { useRtcStore } from \"../state/store\";\n\n/**\n * Check if there's an active session.\n * Returns true if there's a session with status \"pending\" or \"active\".\n * Returns false if no session exists or if the session has ended.\n */\nexport function useHasActiveSession(): boolean {\n return useRtcStore((state) => {\n if (!state.session) {\n return false;\n }\n return (\n state.session.status === \"pending\" || state.session.status === \"active\"\n );\n });\n}\n","import { useCallState } from \"./useCallState\";\nimport { useLivekitInfo } from \"./useLivekitInfo\";\n\n/**\n * Determines if the LiveKit room is ready for connection.\n * Returns true when credentials are available and status is \"ready\" or \"active\".\n */\nexport function useRoomReady(): boolean {\n const livekitInfo = useLivekitInfo();\n const { status } = useCallState();\n\n return livekitInfo !== null && (status === \"ready\" || status === \"active\");\n}\n","import { Room, type RoomOptions, VideoPresets } from \"livekit-client\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport { useSdk } from \"../provider/RtcProvider\";\nimport { createLogger } from \"../utils\";\nimport { useLivekitInfo } from \"./useLivekitInfo\";\nimport { useRoomReady } from \"./useRoomReady\";\n\nconst logger = createLogger(\"useAutoConnectRoom\");\n\nconst defaultVideoOptions: Partial<RoomOptions> = {\n adaptiveStream: true,\n dynacast: true,\n videoCaptureDefaults: {\n resolution: VideoPresets.h720.resolution,\n },\n};\n\nlet sharedRoom: Room | null = null;\n\nexport function useAutoConnectRoom(options?: RoomOptions): Room {\n const isReady = useRoomReady();\n const livekitInfo = useLivekitInfo();\n const sdk = useSdk();\n\n const room = useMemo(() => {\n if (!sharedRoom) {\n const mergedOptions = { ...defaultVideoOptions, ...options };\n sharedRoom = new Room(mergedOptions);\n } else if (options) {\n logger.debug(\"Room already exists, ignoring new options\");\n }\n return sharedRoom;\n }, [options]);\n\n const handleConnection = useCallback(async () => {\n if (!room || !isReady || !livekitInfo) {\n return;\n }\n\n if (room.state === \"connected\" || room.state === \"connecting\") {\n return;\n }\n\n try {\n logger.debug(\"Connecting to LiveKit room\", {\n url: livekitInfo.url,\n roomName: livekitInfo.roomName,\n });\n\n await room.connect(livekitInfo.url, livekitInfo.token);\n logger.debug(\"Successfully connected to LiveKit room\");\n\n // Initialize both audio and video tracks but keep them disabled\n // Users must explicitly enable them via UI controls\n await room.localParticipant.setMicrophoneEnabled(false);\n await room.localParticipant.setCameraEnabled(false);\n\n sdk.livekit.attach(room);\n logger.debug(\"Attached LiveKit room manager\");\n } catch (error) {\n logger.error(\"Failed to connect to LiveKit room\", error);\n }\n }, [room, isReady, livekitInfo, sdk]);\n\n useEffect(() => {\n handleConnection().then((r) => {});\n }, [handleConnection]);\n\n return room;\n}\n","import type { LocalParticipant, RemoteParticipant } from \"livekit-client\";\nimport type { ParticipantPermissions } from \"../state/types\";\nimport type { Nullable } from \"../utils/types\";\nimport { useParticipantMetadata } from \"./useParticipantMetadata\";\n\nexport function useParticipantPermissions(\n participant: RemoteParticipant | LocalParticipant\n): Nullable<ParticipantPermissions> {\n const meta = useParticipantMetadata(participant);\n return meta?.permissions || null;\n}\n","// Adapted from https://github.com/small-lab-io/usehooks.io/blob/main/packages/hooks/src/use-timeout/index.ts\nimport { useCallback, useEffect, useRef } from \"react\";\n\nexport interface UseTimeoutReturn {\n start: () => void;\n stop: () => void;\n reset: () => void;\n isActive: () => boolean;\n}\n\nexport function useTimeout(\n callback: () => void,\n delay: number | null\n): UseTimeoutReturn {\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const callbackRef = useRef(callback);\n\n // Update callback ref when callback changes\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n const start = useCallback(() => {\n // Clear existing timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Only set timeout if delay is not null\n if (delay !== null) {\n timeoutRef.current = setTimeout(() => {\n callbackRef.current();\n timeoutRef.current = null;\n }, delay);\n }\n }, [delay]);\n\n const stop = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n }, []);\n\n const reset = useCallback(() => {\n stop();\n start();\n }, [stop, start]);\n\n const isActive = useCallback(() => {\n return timeoutRef.current !== null;\n }, []);\n\n // Auto-start timeout when delay changes (if delay is not null)\n useEffect(() => {\n if (delay !== null) {\n start();\n } else {\n stop();\n }\n\n // Cleanup on unmount or when delay changes\n return stop;\n }, [delay, start, stop]);\n\n return { start, stop, reset, isActive };\n}\n\n// Simplified version that just runs the timeout automatically\nexport function useTimeoutEffect(\n callback: () => void,\n delay: number | null\n): void {\n const callbackRef = useRef(callback);\n\n // Update callback ref when callback changes\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (delay === null) {\n return;\n }\n\n const timeoutId = setTimeout(() => {\n callbackRef.current();\n }, delay);\n\n return () => clearTimeout(timeoutId);\n }, [delay]);\n}\n","import { useEffect } from \"react\";\nimport { useRtcStore } from \"../state/store\";\nimport { useIncomingInvite } from \"./useIncomingInvite\";\nimport { useTimeout } from \"./useTimeout\";\n\nexport function useRingTimeout() {\n const rtcStore = useRtcStore();\n const incomingInvite = useIncomingInvite();\n const session = useRtcStore((state) => state.session);\n\n const handleTimeout = () => {\n rtcStore.reset();\n };\n\n const timeoutMs =\n incomingInvite?.ringTimeoutMs ||\n (session?.ringTimeoutMs && session.status === \"pending\"\n ? session.ringTimeoutMs\n : null);\n\n const timeout = useTimeout(handleTimeout, timeoutMs);\n\n useEffect(() => {\n if (timeoutMs) {\n timeout.start();\n } else {\n timeout.stop();\n }\n }, [timeoutMs, timeout]);\n\n return {\n isActive: timeout.isActive(),\n stop: timeout.stop,\n };\n}\n","import type { Nullable } from \"../core\";\nimport { useProfileCache } from \"../state/profileCache\";\nimport type { Profile } from \"../state/types\";\n\nexport function useParticipantProfile(userId: string): Nullable<Profile> {\n return useProfileCache((state) => {\n return state.profiles.get(userId) || null;\n });\n}\n\nexport function useIsProfilePending(userId: string): boolean {\n return useProfileCache((state) => {\n if (!userId) {\n return false;\n }\n return state.pending.has(userId);\n });\n}\n","import { BackgroundProcessor } from \"@livekit/track-processors\";\nimport { useEffect, useRef } from \"react\";\nimport selfieSegmenterModelBase64 from \"../../assets/models/selfie_segmenter.tflite\";\n\nimport { useLocalParticipant, useRoomContext } from \"@livekit/components-react\";\nimport { type LocalVideoTrack, RoomEvent, Track } from \"livekit-client\";\n\nexport interface UseVirtualBackgroundOptions {\n /**\n * Image URL for virtual background mode.\n * Required when mode is 'virtual-background'.\n * Must have CORS enabled.\n */\n imagePath?: string | null;\n /**\n * Background processing mode\n * @default 'virtual-background'\n */\n mode?: \"virtual-background\" | \"blur\";\n /**\n * Blur radius for blur mode (1-20)\n * Only used when mode is 'blur'\n */\n blurRadius?: number;\n /**\n * Whether the virtual background is enabled\n * @default true\n */\n enabled?: boolean;\n}\n\nexport function useVirtualBackground(\n options: UseVirtualBackgroundOptions\n): void {\n const {\n imagePath,\n mode = \"virtual-background\",\n blurRadius,\n enabled = true,\n } = options;\n\n const room = useRoomContext();\n const participant = useLocalParticipant();\n const localParticipant = participant?.localParticipant;\n const processorRef = useRef<ReturnType<typeof BackgroundProcessor> | null>(\n null\n );\n const isActiveRef = useRef(true);\n const pendingOperationRef = useRef<Promise<void> | null>(null);\n\n useEffect(() => {\n // Reset active flag when effect runs\n isActiveRef.current = true;\n\n if (!enabled || !localParticipant || !room) {\n isActiveRef.current = false;\n return;\n }\n\n if (mode === \"virtual-background\" && !imagePath) {\n isActiveRef.current = false;\n return;\n }\n\n const applyBackground = async () => {\n if (!isActiveRef.current) {\n return;\n }\n\n if (pendingOperationRef.current) {\n try {\n await pendingOperationRef.current;\n } catch (error) {\n console.error(\"Error in pending operation:\", error);\n }\n }\n\n // Check again after waiting (effect might have been cleaned up)\n if (!isActiveRef.current) {\n return;\n }\n\n const operationPromise = (async () => {\n try {\n const cameraPublication = localParticipant.getTrackPublication(\n Track.Source.Camera\n );\n\n if (!cameraPublication?.track) {\n return;\n }\n\n // Check again after async gap\n if (!isActiveRef.current) {\n return;\n }\n\n const localVideoTrack = cameraPublication.track as LocalVideoTrack;\n\n if (processorRef.current) {\n try {\n await localVideoTrack.stopProcessor();\n } catch (error) {\n console.warn(\"Failed to remove background processor:\", error);\n }\n processorRef.current = null;\n }\n\n // Final check before adding new processor\n if (!isActiveRef.current) {\n return;\n }\n\n // Create processor configuration\n const processorConfig: {\n mode: \"virtual-background\" | \"blur\";\n imagePath?: string;\n blurRadius?: number;\n segmenterOptions: {\n delegate: \"GPU\" | \"CPU\";\n modelAssetPath?: string | undefined;\n runningMode?: \"VIDEO\" | \"IMAGE\";\n outputConfidenceMasks?: boolean | undefined;\n outputCategoryMask?: boolean | undefined;\n modelAssetBuffer?:\n | Uint8Array\n | ReadableStreamDefaultReader\n | undefined;\n };\n } = {\n mode,\n segmenterOptions: {\n delegate: \"GPU\",\n runningMode: \"IMAGE\",\n outputConfidenceMasks: true,\n outputCategoryMask: true,\n modelAssetPath: undefined,\n // Decode base64 to Uint8Array\n modelAssetBuffer: Uint8Array.from(\n atob(selfieSegmenterModelBase64),\n (c) => c.charCodeAt(0)\n ),\n },\n };\n\n if (mode === \"virtual-background\" && imagePath) {\n processorConfig.imagePath = imagePath;\n } else if (mode === \"blur\" && blurRadius) {\n processorConfig.blurRadius = blurRadius;\n }\n\n // Create and apply new processor\n const processor = BackgroundProcessor(processorConfig);\n await localVideoTrack.setProcessor(processor);\n\n // Only set processor if effect is still active\n if (isActiveRef.current) {\n processorRef.current = processor;\n } else {\n // Effect was cleaned up, remove the processor we just added\n try {\n await localVideoTrack.stopProcessor();\n } catch (error) {\n console.error(\"Failed to remove background processor:\", error);\n }\n }\n } catch (error) {\n console.error(\"Failed to apply virtual background:\", error);\n }\n })();\n\n pendingOperationRef.current = operationPromise;\n\n try {\n await operationPromise;\n } finally {\n if (pendingOperationRef.current === operationPromise) {\n pendingOperationRef.current = null;\n }\n }\n };\n\n // Apply background immediately if track exists\n applyBackground().catch((error) => {\n console.error(\"Error in applyBackground:\", error);\n });\n\n // Listen for track published events (when camera is enabled)\n const handleTrackPublished = (publication: any) => {\n if (publication.source === Track.Source.Camera) {\n applyBackground().catch((error) => {\n console.error(\n \"Error in applyBackground from track published:\",\n error\n );\n });\n }\n };\n\n room.on(RoomEvent.LocalTrackPublished, handleTrackPublished);\n\n // Cleanup function\n return () => {\n isActiveRef.current = false;\n\n room.off(RoomEvent.LocalTrackPublished, handleTrackPublished);\n\n // Cleanup processor if it exists\n if (processorRef.current && localParticipant) {\n const cameraPublication = localParticipant.getTrackPublication(\n Track.Source.Camera\n );\n if (cameraPublication?.track) {\n const localVideoTrack = cameraPublication.track as LocalVideoTrack;\n localVideoTrack.stopProcessor().catch((error: unknown) => {\n console.warn(\n \"Failed to remove background processor on cleanup:\",\n error\n );\n });\n }\n processorRef.current = null;\n }\n };\n }, [imagePath, mode, blurRadius, enabled, localParticipant, room]);\n}\n\n/**\n * Hook to apply virtual background or blur to the local camera track\n *\n * @example\n * ```tsx\n * function VideoComponent() {\n * const [bgImage, setBgImage] = useState<string | null>(null);\n *\n * useVirtualBackground({\n * imagePath: bgImage,\n * mode: 'virtual-background',\n * enabled: !!bgImage\n * });\n *\n * return (\n * <button onClick= {() => setBgImage('https://example.com/bg.jpg')\n } >\n * Apply Background\n * </button>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // Blur background\n * useVirtualBackground({\n * mode: 'blur',\n * blurRadius: 10\n * });\n * ```\n */\n","import { useCallback } from \"react\";\nimport { useLocalParticipant } from \"../livekit\";\nimport { useSdk } from \"../provider/RtcProvider\";\nimport { useRtcStore } from \"../state/store\";\nimport { createLogger } from \"../utils\";\nimport { useCallActions } from \"./useCallActions\";\nimport { useCallState } from \"./useCallState\";\nimport { useIncomingInvite } from \"./useIncomingInvite\";\nimport { useParticipantMetadata } from \"./useParticipantMetadata\";\n\nexport interface UseTerminateReturn {\n terminate: () => Promise<void>;\n role: \"HOST\" | \"PARTICIPANT\" | \"GUEST\" | null;\n sessionId: string | null;\n isInitiator: boolean;\n}\n\nconst logger = createLogger(\"useTerminate\");\n\nexport function useTerminate(): UseTerminateReturn {\n const sdk = useSdk();\n const { id, status } = useCallState();\n const session = useRtcStore((state) => state.session);\n const isInitiator = useRtcStore((state) => state.initiated);\n const incomingInvite = useIncomingInvite();\n\n const sessionId = id;\n\n // Get the real-time role from LiveKit metadata (only available when connected)\n const participant = useLocalParticipant();\n const localParticipant = participant?.localParticipant;\n const participantMetadata = useParticipantMetadata(localParticipant);\n const role = participantMetadata?.role || null;\n\n const { cancel, decline, end, leave } = useCallActions();\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n const terminate = useCallback(async () => {\n if (!session || status === \"ended\") {\n return;\n }\n\n // Fire-and-forget pattern:\n // execute termination without waiting\n switch (status) {\n case \"initializing\":\n sdk.store.getState().reset();\n break;\n\n case \"pending\":\n if (isInitiator && sessionId) {\n console.log(\"Cancelling: \", sessionId, isInitiator);\n cancel().catch((error) => {\n logger.error(\"Failed to cancel call\", { error, sessionId });\n });\n console.log(\"immediately..\");\n } else if (incomingInvite) {\n decline().catch((error) => {\n logger.error(\"Failed to decline call\", {\n error,\n inviteId: incomingInvite.inviteId,\n });\n });\n }\n break;\n\n case \"ready\":\n case \"active\":\n {\n leave().catch((error) => {\n logger.error(\"Failed to leave call\", { error, sessionId, role });\n });\n\n if (role === \"HOST\" && sessionId) {\n end().catch((error) => {\n logger.error(\"Failed to end call\", { error, sessionId, role });\n });\n }\n }\n break;\n\n default:\n logger.warn(\"Unknown call state during termination\", { status });\n leave().catch((error) => {\n logger.error(\"Failed to leave call in unknown state\", {\n error,\n status,\n });\n });\n break;\n }\n }, [session, status, role, sessionId, isInitiator, incomingInvite, sdk]);\n\n return {\n terminate,\n role,\n sessionId,\n isInitiator,\n };\n}\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\n\ninterface ParticipantListState {\n pinnedParticipantIds: Set<string>;\n}\n\ninterface ParticipantListActions {\n togglePin: (participantId: string) => void;\n clearPinned: () => void;\n isPinned: (participantId: string) => boolean;\n}\n\nconst defaultState: ParticipantListState = {\n pinnedParticipantIds: new Set(),\n};\n\nexport const useParticipantListStore = create<\n ParticipantListState & ParticipantListActions\n>()(\n immer((set, get) => ({\n ...defaultState,\n\n togglePin: (participantId) =>\n set((state) => {\n if (state.pinnedParticipantIds.has(participantId)) {\n state.pinnedParticipantIds.delete(participantId);\n } else {\n state.pinnedParticipantIds.add(participantId);\n }\n }),\n\n clearPinned: () =>\n set((state) => {\n state.pinnedParticipantIds.clear();\n }),\n\n isPinned: (participantId) => get().pinnedParticipantIds.has(participantId),\n }))\n);\n","import { useParticipants } from \"@livekit/components-react\";\nimport type { Participant } from \"livekit-client\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useRaiseHandStore } from \"../channel/raiseHand/store\";\nimport { useParticipantListStore } from \"../state/participantListStore\";\nimport type {\n ParticipantListOptions,\n ParticipantListReturn,\n} from \"../state/types\";\n\nfunction createSortFunction(\n sortBy: \"speaking\" | \"name\" | \"raised-hand\",\n getRaisedHandOrder?: (id: string) => number | null,\n isPinned?: (id: string) => boolean,\n) {\n return (a: Participant, b: Participant) => {\n if (isPinned) {\n const aPinned = isPinned(a.identity);\n const bPinned = isPinned(b.identity);\n\n if (aPinned && !bPinned) return -1;\n if (!aPinned && bPinned) return 1;\n }\n\n if (getRaisedHandOrder) {\n const aOrder = getRaisedHandOrder(a.identity);\n const bOrder = getRaisedHandOrder(b.identity);\n\n if (aOrder !== null && bOrder === null) {\n return -1;\n }\n if (aOrder === null && bOrder !== null) {\n return 1;\n }\n if (aOrder !== null && bOrder !== null) {\n return aOrder - bOrder;\n }\n }\n\n if (sortBy === \"speaking\") {\n const aIsSpeaking = a.isSpeaking || false;\n const bIsSpeaking = b.isSpeaking || false;\n\n // sorting by isSpeaking\n if (aIsSpeaking && !bIsSpeaking) {\n return -1;\n }\n if (!aIsSpeaking && bIsSpeaking) {\n return 1;\n }\n }\n\n const aName = a.name || a.identity;\n const bName = b.name || b.identity;\n return aName.localeCompare(bName);\n };\n}\n\nexport function useParticipantList(\n options: ParticipantListOptions = {},\n): ParticipantListReturn & { sortedParticipants: Participant[] } {\n const {\n pageSize = 9,\n includeLocalParticipant = true,\n sortBy = \"speaking\",\n } = options;\n\n const [currentPage, setCurrentPage] = useState(1);\n const [pageSizeState, setPageSizeState] = useState(pageSize);\n\n const allParticipants = useParticipants();\n const { togglePin, clearPinned, isPinned } = useParticipantListStore();\n const getRaisedHandOrder = useRaiseHandStore(\n (state) => state.getRaisedHandOrder,\n );\n const raisedHands = useRaiseHandStore((state) => state.raisedHands);\n\n const filteredParticipants = useMemo(() => {\n return includeLocalParticipant\n ? allParticipants\n : allParticipants.filter((p) => !p.isLocal);\n }, [allParticipants, includeLocalParticipant]);\n\n const sortedParticipants = useMemo(() => {\n const sortFn = createSortFunction(sortBy, getRaisedHandOrder, isPinned);\n return [...filteredParticipants].sort(sortFn);\n }, [filteredParticipants, isPinned, sortBy, getRaisedHandOrder, raisedHands]);\n\n const pinnedParticipants = useMemo(() => {\n return sortedParticipants.filter((p) => isPinned(p.identity));\n }, [sortedParticipants, isPinned]);\n\n const totalParticipants = sortedParticipants.length;\n const totalPages = Math.ceil(totalParticipants / pageSizeState);\n\n const startIndex = (currentPage - 1) * pageSizeState;\n const endIndex = startIndex + pageSizeState;\n const participants = sortedParticipants.slice(startIndex, endIndex);\n\n const hasNextPage = currentPage < totalPages;\n const hasPrevPage = currentPage > 1;\n\n useEffect(() => {\n if (currentPage > totalPages && totalPages > 0) {\n setCurrentPage(totalPages);\n }\n }, [currentPage, totalPages]);\n\n const nextPage = () => {\n if (hasNextPage) {\n setCurrentPage((prev) => prev + 1);\n }\n };\n\n const prevPage = () => {\n if (hasPrevPage) {\n setCurrentPage((prev) => prev - 1);\n }\n };\n\n const setPageSize = (size: number) => {\n setPageSizeState(size);\n setCurrentPage(1);\n };\n\n return {\n participants,\n sortedParticipants, // Exposed for grid views\n pinnedParticipants,\n currentPage,\n totalPages,\n pageSize: pageSizeState,\n totalParticipants,\n hasNextPage,\n hasPrevPage,\n nextPage,\n prevPage,\n setPageSize,\n togglePin,\n clearPinned,\n isPinned,\n };\n}\n","import { useRecordingStore } from \"../state/recording.store\";\nimport type { RecordingInfo } from \"../state/types\";\n\n/**\n * Hook to access recording state\n *\n * @returns Recording state and helper functions\n *\n * @example\n * ```tsx\n * function RecordingIndicator() {\n * const { isRecording, recording } = useRecording();\n *\n * if (!isRecording) return null;\n *\n * return <div>Recording: {recording?.recordingId}</div>;\n * }\n * ```\n */\nexport function useRecording(): {\n isRecording: boolean;\n recording: RecordingInfo | null;\n} {\n const isRecording = useRecordingStore((state) => state.isRecording);\n const recording = useRecordingStore((state) => state.recording);\n\n return {\n isRecording,\n recording,\n };\n}\n","import {\n useLocalParticipant,\n useRoomContext,\n useTracks,\n} from \"@livekit/components-react\";\nimport { Track } from \"livekit-client\";\nimport { useCallback } from \"react\";\n\nexport const useScreenShare = () => {\n const room = useRoomContext();\n const localParticipant = useLocalParticipant();\n\n // Get all video tracks\n const videoTracks = useTracks([Track.Source.ScreenShare], {\n onlySubscribed: false,\n });\n\n // Check if local participant is screen sharing\n const isLocalScreenSharing = localParticipant?.isScreenShareEnabled || false;\n\n // Check if any remote participant is screen sharing\n const screenShareTracks = videoTracks.filter(\n (track) => track.source === Track.Source.ScreenShare\n );\n\n const isScreenSharing = screenShareTracks.length > 0;\n\n const handleScreenShare = async () => {\n if (isScreenSharing) {\n handleStopScreenShare();\n return;\n }\n try {\n await room?.localParticipant?.setScreenShareEnabled(true, {\n audio: true,\n video: true,\n });\n } catch (error) {\n console.error(\"Error accessing display media:\", error);\n // Handle user cancellation or permission denial\n const err = error as any;\n if (err?.name === \"NotAllowedError\") {\n console.error(\"Permission denied to access display media\");\n } else if (err?.name === \"AbortError\") {\n console.error(\"Screen sharing aborted\");\n }\n }\n };\n\n const handleStopScreenShare = useCallback(async () => {\n try {\n room?.localParticipant?.setScreenShareEnabled(false);\n } catch (error) {\n console.error(\"Error stopping screen sharing:\", error);\n }\n }, [room?.localParticipant]);\n\n return {\n isLocalScreenSharing,\n isScreenSharing,\n screenShareTracks,\n handleScreenShare,\n handleStopScreenShare,\n };\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useSdk } from \"../provider/RtcProvider\";\nimport type {\n PresenceResolvedStatus,\n PresenceStatus,\n UserPresence,\n} from \"../state/presence.types\";\n\nexport interface UsePresenceOptions {\n pollIntervalMs?: number;\n}\n\nexport function usePresence(\n userId: string,\n options?: UsePresenceOptions\n): {\n presence: UserPresence | undefined;\n status: PresenceStatus | undefined;\n resolvedStatus: PresenceResolvedStatus | undefined;\n isLoading: boolean;\n error: unknown;\n refetch: () => Promise<void>;\n} {\n const sdk = useSdk();\n const [presence, setPresence] = useState<UserPresence | undefined>();\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<unknown>(null);\n const isMountedRef = useRef(true);\n\n const refetch = useCallback(async () => {\n if (!userId) return;\n setIsLoading(true);\n setError(null);\n try {\n const result = await sdk.presence.getPresence(userId);\n if (isMountedRef.current) {\n setPresence(result);\n }\n } catch (err) {\n if (isMountedRef.current) {\n setError(err);\n }\n } finally {\n if (isMountedRef.current) {\n setIsLoading(false);\n }\n }\n }, [sdk, userId]);\n\n useEffect(() => {\n refetch();\n }, [refetch]);\n\n useEffect(() => {\n if (!options?.pollIntervalMs) return;\n const id = setInterval(refetch, options.pollIntervalMs);\n return () => clearInterval(id);\n }, [options?.pollIntervalMs, refetch]);\n\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n return {\n presence,\n status: presence?.status,\n resolvedStatus: error ? \"unknown\" : presence?.status,\n isLoading,\n error,\n refetch,\n };\n}\n\nexport interface UsePresenceManyOptions {\n pollIntervalMs?: number;\n}\n\nexport function usePresenceMany(\n userIds: string[],\n options?: UsePresenceManyOptions\n): {\n presences: Map<string, UserPresence>;\n isLoading: boolean;\n error: unknown;\n getStatus: (userId: string) => PresenceResolvedStatus | undefined;\n refetch: () => Promise<void>;\n} {\n const sdk = useSdk();\n const [presences, setPresences] = useState<Map<string, UserPresence>>(\n new Map()\n );\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<unknown>(null);\n const isMountedRef = useRef(true);\n\n const refetch = useCallback(async () => {\n if (userIds.length === 0) return;\n setIsLoading(true);\n setError(null);\n try {\n const results = await sdk.presence.queryPresence(userIds);\n const map = new Map<string, UserPresence>();\n for (const p of results) {\n map.set(p.userId, p);\n }\n if (isMountedRef.current) {\n setPresences(map);\n }\n } catch (err) {\n if (isMountedRef.current) {\n setError(err);\n }\n } finally {\n if (isMountedRef.current) {\n setIsLoading(false);\n }\n }\n }, [sdk, userIds]);\n\n useEffect(() => {\n refetch();\n }, [refetch]);\n\n useEffect(() => {\n if (!options?.pollIntervalMs) return;\n const id = setInterval(refetch, options.pollIntervalMs);\n return () => clearInterval(id);\n }, [options?.pollIntervalMs, refetch]);\n\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n return {\n presences,\n isLoading,\n error,\n getStatus: (userId: string) => {\n if (error) return \"unknown\";\n return presences.get(userId)?.status;\n },\n refetch,\n };\n}\n","import { useSdk } from \"../provider/RtcProvider\";\nimport type {\n CreateAdHocMeetingParams,\n JoinMeetingParams,\n} from \"../state/meetings.types\";\nimport { rtcStore } from \"../state/store\";\n\nexport function useMeetingActions() {\n const sdk = useSdk();\n\n return {\n createAdHoc: (params?: CreateAdHocMeetingParams) => {\n return sdk.meetings.createAdHoc(params);\n },\n start: (meetingId: string) => {\n return sdk.meetings.start(meetingId);\n },\n join: (params: JoinMeetingParams) => {\n return sdk.meetings.join(params);\n },\n end: () => {\n const session = rtcStore.getState().session;\n if (!session?.meetingInfo?.meetingId) {\n throw new Error(\"No active meeting to end\");\n }\n\n return sdk.meetings.end(session.meetingInfo.meetingId);\n },\n leave: () => {\n const session = rtcStore.getState().session;\n if (!session) {\n throw new Error(\"No active meeting to leave\");\n }\n\n return sdk.meetings.leave();\n },\n };\n}\n","import { useRtcStore } from \"../state/store\";\n\nexport interface MeetingState {\n meetingId: string | null;\n meetingCode: string | null;\n isInMeeting: boolean;\n isOrganizer: boolean;\n}\n\nexport function useMeetingState(): MeetingState {\n const session = useRtcStore((state) => state.session);\n\n const isInMeeting = session?.sessionType === \"MEETING\";\n const isOrganizer = isInMeeting && session?.role === \"HOST\";\n\n return {\n meetingId: session?.meetingInfo?.meetingId ?? null,\n meetingCode: session?.meetingInfo?.meetingCode ?? null,\n isInMeeting,\n isOrganizer,\n };\n}\n","import { useMeetingActions } from \"./useMeetingActions\";\nimport { useMeetingState } from \"./useMeetingState\";\n\nexport function useMeeting() {\n const state = useMeetingState();\n const actions = useMeetingActions();\n\n return {\n ...state,\n ...actions,\n };\n}\n","import type { GuestJoinResponse } from \"../clients/signal\";\nimport { useGuestSdk } from \"../provider/RtcProvider\";\nimport type { GuestJoinMeetingParams } from \"../services/meetings.service\";\n\nexport interface UseGuestJoinReturn {\n guestJoin: (params: GuestJoinMeetingParams) => Promise<GuestJoinResponse>;\n}\n\nexport function useGuestJoin(): UseGuestJoinReturn {\n const sdk = useGuestSdk();\n\n return {\n guestJoin: sdk.guestJoin,\n };\n}\n","import { useRtcStore } from \"../state/store\";\nimport type { GuestIdentity } from \"../state/types\";\n\nexport function useGuestIdentity(): GuestIdentity | null {\n return useRtcStore((state) => state.guestIdentity);\n}\n","import { useRtcStore } from \"../state/store\";\n\nexport function useIsGuestMode(): boolean {\n return useRtcStore((state) => state.isGuestMode);\n}\n","import type { ParticipantPermissions } from \"../state/types\";\n\nconst GUEST_PERMISSIONS: ParticipantPermissions = {\n canMute: false,\n canKick: false,\n canTransfer: false,\n canEnd: false,\n canRecord: false,\n canShareScreen: true,\n};\n\nexport function useGuestPermissions(): ParticipantPermissions {\n return GUEST_PERMISSIONS;\n}\n"]}
|