@camstack/core 0.1.8 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builtins/local-backup/index.d.mts +42 -0
- package/dist/builtins/local-backup/index.d.ts +42 -0
- package/dist/builtins/local-backup/index.mjs +2 -10
- package/dist/builtins/local-backup/index.mjs.map +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.mts +2 -0
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts +2 -0
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +2 -5
- package/dist/builtins/sqlite-storage/index.d.mts +4 -0
- package/dist/builtins/sqlite-storage/index.d.ts +4 -0
- package/dist/builtins/sqlite-storage/index.js +95 -197
- package/dist/builtins/sqlite-storage/index.js.map +1 -1
- package/dist/builtins/sqlite-storage/index.mjs +6 -26
- package/dist/builtins/sqlite-storage/index.mjs.map +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.mts +2 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts +2 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -4
- package/dist/builtins/winston-logging/index.d.mts +30 -0
- package/dist/builtins/winston-logging/index.d.ts +30 -0
- package/dist/builtins/winston-logging/index.mjs +2 -10
- package/dist/builtins/winston-logging/index.mjs.map +1 -1
- package/dist/chunk-2F3XZYRW.mjs +89 -0
- package/dist/chunk-2F3XZYRW.mjs.map +1 -0
- package/dist/chunk-LQFPAEQF.mjs +147 -0
- package/dist/{chunk-XSLBW5C2.mjs.map → chunk-LQFPAEQF.mjs.map} +1 -1
- package/dist/chunk-R3DIIBBX.mjs +532 -0
- package/dist/chunk-R3DIIBBX.mjs.map +1 -0
- package/dist/chunk-SO4LROOT.mjs +150 -0
- package/dist/{chunk-GBWW3JU4.mjs.map → chunk-SO4LROOT.mjs.map} +1 -1
- package/dist/chunk-SPA4JBKN.mjs +175 -0
- package/dist/{chunk-4YD6WMO6.mjs.map → chunk-SPA4JBKN.mjs.map} +1 -1
- package/dist/chunk-YXNXYYHL.mjs +282 -0
- package/dist/{chunk-CHFIH4G6.mjs.map → chunk-YXNXYYHL.mjs.map} +1 -1
- package/dist/dist-3BY63UQ5.mjs +2151 -0
- package/dist/dist-3BY63UQ5.mjs.map +1 -0
- package/dist/filesystem-storage.addon-C42r589X.d.mts +57 -0
- package/dist/filesystem-storage.addon-C42r589X.d.ts +57 -0
- package/dist/index.d.mts +1110 -0
- package/dist/index.d.ts +1110 -0
- package/dist/index.js +6010 -17264
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3416 -16481
- package/dist/index.mjs.map +1 -1
- package/dist/sql-schema-CKz78rId.d.mts +97 -0
- package/dist/sql-schema-CKz78rId.d.ts +97 -0
- package/dist/sqlite-settings.addon-DigoKwpZ.d.mts +70 -0
- package/dist/sqlite-settings.addon-DigoKwpZ.d.ts +70 -0
- package/dist/storage-location-manager-KKDQNAKA.mjs +7 -0
- package/package.json +1 -1
- package/dist/chunk-4JEXNFZZ.mjs +0 -57
- package/dist/chunk-4YD6WMO6.mjs +0 -207
- package/dist/chunk-CHFIH4G6.mjs +0 -314
- package/dist/chunk-EFQ25JFE.mjs +0 -689
- package/dist/chunk-EFQ25JFE.mjs.map +0 -1
- package/dist/chunk-GBWW3JU4.mjs +0 -180
- package/dist/chunk-XSLBW5C2.mjs +0 -177
- package/dist/onnxruntime_binding-6Q6HXASN.node +0 -0
- package/dist/onnxruntime_binding-EKZT2NRK.node +0 -0
- package/dist/onnxruntime_binding-P6S7V3CI.node +0 -0
- package/dist/onnxruntime_binding-PJNNIIUO.node +0 -0
- package/dist/onnxruntime_binding-UN6SPTQK.node +0 -0
- /package/dist/{chunk-4JEXNFZZ.mjs.map → storage-location-manager-KKDQNAKA.mjs.map} +0 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/deps/binary-downloader.ts","../src/deps/ffmpeg-downloader.ts","../src/deps/python-downloader.ts","../src/events/event-bus.ts","../src/download/model-downloader.ts","../src/download/model-download-service.ts","../src/python/python-env-manager.ts","../src/pipeline/pipeline-validator.ts","../src/pipeline/pipeline-runner.ts","../src/process/managed-process.ts","../src/process/process-manager.ts","../src/network/network-quality.ts","../src/repl/repl-engine.ts","../src/agent/agent-registry.ts","../src/agent/task-dispatcher.ts","../../../node_modules/ws/lib/constants.js","../../../node_modules/ws/lib/buffer-util.js","../../../node_modules/ws/lib/limiter.js","../../../node_modules/ws/lib/permessage-deflate.js","../../../node_modules/ws/lib/validation.js","../../../node_modules/ws/lib/receiver.js","../../../node_modules/ws/lib/sender.js","../../../node_modules/ws/lib/event-target.js","../../../node_modules/ws/lib/extension.js","../../../node_modules/ws/lib/websocket.js","../../../node_modules/ws/lib/stream.js","../../../node_modules/ws/lib/subprotocol.js","../../../node_modules/ws/lib/websocket-server.js","../../../node_modules/ws/index.js","../src/agent/agent-client.ts","../src/agent/agent-task-runner.ts","../src/agent/pipeline-task-handlers.ts","../src/builtins/sqlite-storage/filesystem-storage-provider.ts","../src/builtins/sqlite-storage/filesystem-storage.addon.ts","../src/builtins/sqlite-storage/sqlite-settings-backend.ts","../src/builtins/sqlite-storage/sqlite-settings.addon.ts","../src/builtins/sqlite-storage/sqlite-storage.provider.ts","../src/builtins/sqlite-storage/sqlite-storage.addon.ts","../src/builtins/sqlite-storage/sql-schema.ts","../src/builtins/sqlite-storage/settings-store.ts","../src/builtins/sqlite-storage/sql-schema.ts","../src/builtins/sqlite-storage/index.ts","../src/builtins/winston-logging/winston-destination.ts","../src/builtins/winston-logging/winston-logging.addon.ts","../src/builtins/winston-logging/index.ts","../src/builtins/local-backup/local-backup.ts","../src/builtins/local-backup/local-backup.addon.ts","../src/builtins/local-backup/index.ts","../src/lifecycle/lifecycle-state-machine.ts","../src/feature/feature-manager.ts","../src/events/system-event-bus.ts","../src/logging/log-ring-buffer.ts","../src/logging/scoped-logger.ts","../src/logging/log-manager.ts","../src/storage/fs-storage-backend.ts","../src/storage/storage-location-manager.ts","../src/storage/storage-manager.ts","../src/auth/auth-manager.ts","../src/auth/api-key-manager.ts","../src/auth/user-manager.ts","../src/auth/scoped-token-manager.ts","../src/notification/notification-service.ts","../src/notification/toast-service.ts","../src/addon-routes/addon-route-registry.ts","../src/device/device-registry.ts","../src/device/capability-resolver.ts","../src/tls/cert-manager.ts","../src/tls/index.ts","../../../node_modules/@trpc/server/dist/codes-BfZsPdy-.cjs","../../../node_modules/@trpc/server/dist/getErrorShape-MR4DZeb7.cjs","../../../node_modules/@trpc/server/dist/tracked-DX1GMBVX.cjs","../../../node_modules/@trpc/server/dist/initTRPC-_LnoxDdS.cjs","../../../node_modules/@trpc/server/dist/index.cjs","../../../node_modules/@trpc/client/dist/chunk-DWy1uDak.cjs","../../../node_modules/@trpc/server/dist/observable-B1Nk6r1H.cjs","../../../node_modules/@trpc/server/dist/observable-BVzLuBs6.cjs","../../../node_modules/@trpc/server/dist/observable/index.cjs","../../../node_modules/@trpc/client/dist/splitLink-BMgxggng.cjs","../../../node_modules/@trpc/client/dist/objectSpread2-Bsvh_OqM.cjs","../../../node_modules/@trpc/server/dist/parseTRPCMessage-7Ltmq-Fb.cjs","../../../node_modules/@trpc/server/dist/resolveResponse-Ck4MWy4N.cjs","../../../node_modules/@trpc/server/dist/contentTypeParsers-iAFF_pJG.cjs","../../../node_modules/@trpc/server/dist/unstable-core-do-not-import-fsjhEhgh.cjs","../../../node_modules/@trpc/server/dist/unstable-core-do-not-import.cjs","../../../node_modules/@trpc/client/dist/TRPCClientError-CQrTQLrk.cjs","../../../node_modules/@trpc/client/dist/unstable-internals-M84gUQCV.cjs","../../../node_modules/@trpc/client/dist/httpUtils-wv2o-njD.cjs","../../../node_modules/@trpc/client/dist/httpLink-B8Iv31Ee.cjs","../../../node_modules/@trpc/client/dist/httpBatchLink-BGZRsGNf.cjs","../../../node_modules/@trpc/client/dist/loggerLink-CuYvRzyH.cjs","../../../node_modules/@trpc/client/dist/wsLink-CobRSm6C.cjs","../../../node_modules/@trpc/server/dist/rpc.cjs","../../../node_modules/@trpc/client/dist/index.cjs","../src/addon/addon-api-factory.ts","../../../node_modules/onnxruntime-common/lib/backend-impl.ts","../../../node_modules/onnxruntime-common/lib/backend.ts","../../../node_modules/onnxruntime-common/lib/version.ts","../../../node_modules/onnxruntime-common/lib/env-impl.ts","../../../node_modules/onnxruntime-common/lib/env.ts","../../../node_modules/onnxruntime-common/lib/tensor-conversion-impl.ts","../../../node_modules/onnxruntime-common/lib/tensor-factory-impl.ts","../../../node_modules/onnxruntime-common/lib/tensor-impl-type-mapping.ts","../../../node_modules/onnxruntime-common/lib/tensor-utils-impl.ts","../../../node_modules/onnxruntime-common/lib/tensor-impl.ts","../../../node_modules/onnxruntime-common/lib/tensor.ts","../../../node_modules/onnxruntime-common/lib/trace.ts","../../../node_modules/onnxruntime-common/lib/inference-session-impl.ts","../../../node_modules/onnxruntime-common/lib/inference-session.ts","../../../node_modules/onnxruntime-common/lib/index.ts","../../../node_modules/onnxruntime-node/lib/binding.ts","../../../node_modules/onnxruntime-node/lib/backend.ts","../../../node_modules/onnxruntime-node/lib/version.ts","../../../node_modules/onnxruntime-node/lib/index.ts","../src/platform/platform-scorer.ts","../src/platform/inference-config-resolver.ts","../src/provider/provider-manager.ts","../src/index.ts"],"sourcesContent":["import { existsSync, mkdirSync, chmodSync, createWriteStream, unlinkSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { pipeline } from 'node:stream/promises'\nimport { Readable } from 'node:stream'\nimport { execFileSync } from 'node:child_process'\nimport type { IScopedLogger } from '@camstack/types'\n\nexport interface PlatformInfo {\n readonly platform: NodeJS.Platform\n readonly arch: NodeJS.Architecture\n}\n\nexport function getPlatformInfo(): PlatformInfo {\n return {\n platform: process.platform,\n arch: process.arch,\n }\n}\n\nexport function buildBinaryPath(dataDir: string, name: string, platform?: string): string {\n const ext = (platform ?? process.platform) === 'win32' ? '.exe' : ''\n return join(dataDir, 'deps', `${name}${ext}`)\n}\n\n/** Check if a binary exists in PATH */\nexport function findInPath(name: string): string | null {\n try {\n execFileSync(name, ['--version'], { stdio: 'pipe', timeout: 5000 })\n return name\n } catch {\n return null\n }\n}\n\nexport interface DownloadOptions {\n readonly name: string\n readonly url: string\n readonly targetDir: string\n readonly targetName: string\n readonly logger: IScopedLogger\n readonly isArchive?: boolean\n readonly archiveFormat?: 'zip' | 'tar.gz' | 'tar.xz'\n /** Relative path within archive to the binary (e.g., 'ffmpeg-6.1/bin/ffmpeg') */\n readonly archiveInnerPath?: string\n}\n\n/**\n * Download a binary to the target directory.\n * Handles archives (zip, tar.gz, tar.xz) and raw binaries.\n */\nexport async function downloadBinary(opts: DownloadOptions): Promise<string> {\n const { name, url, targetDir, targetName, logger, isArchive, archiveFormat, archiveInnerPath } = opts\n const targetPath = join(targetDir, targetName)\n\n if (existsSync(targetPath)) {\n logger.debug(`${name} binary already exists at ${targetPath}`)\n return targetPath\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n logger.info(`Downloading ${name} from ${url}`)\n const response = await fetch(url, { redirect: 'follow' })\n if (!response.ok || !response.body) {\n throw new Error(`Failed to download ${name}: ${response.status} ${response.statusText}`)\n }\n\n if (isArchive) {\n const ext = archiveFormat ?? 'tar.gz'\n const tmpArchive = join(targetDir, `${name}-download.${ext}`)\n const nodeStream = Readable.fromWeb(response.body as any)\n await pipeline(nodeStream, createWriteStream(tmpArchive))\n\n // Extract\n const tmpExtractDir = join(targetDir, `${name}-extract`)\n mkdirSync(tmpExtractDir, { recursive: true })\n\n if (ext === 'zip') {\n try {\n execFileSync('unzip', ['-o', '-q', tmpArchive, '-d', tmpExtractDir], { stdio: 'pipe' })\n } catch {\n execFileSync('tar', ['-xf', tmpArchive, '-C', tmpExtractDir], { stdio: 'pipe' })\n }\n } else if (ext === 'tar.xz') {\n execFileSync('tar', ['-xJf', tmpArchive, '-C', tmpExtractDir], { stdio: 'pipe' })\n } else {\n execFileSync('tar', ['-xzf', tmpArchive, '-C', tmpExtractDir], { stdio: 'pipe' })\n }\n\n // Copy binary from archive\n if (archiveInnerPath) {\n const { copyFileSync } = await import('node:fs')\n const sourcePath = join(tmpExtractDir, archiveInnerPath)\n if (!existsSync(sourcePath)) {\n throw new Error(`Binary not found in archive at ${archiveInnerPath}`)\n }\n copyFileSync(sourcePath, targetPath)\n }\n\n // Cleanup\n unlinkSync(tmpArchive)\n const { rmSync } = await import('node:fs')\n rmSync(tmpExtractDir, { recursive: true, force: true })\n } else {\n // Direct binary download\n const nodeStream = Readable.fromWeb(response.body as any)\n await pipeline(nodeStream, createWriteStream(targetPath))\n }\n\n chmodSync(targetPath, 0o755)\n logger.info(`${name} downloaded to ${targetPath}`)\n return targetPath\n}\n\n/**\n * Ensure a binary is available. Checks:\n * 1. Target path (already downloaded)\n * 2. System PATH\n * 3. Download from URL\n */\nexport async function ensureBinary(opts: {\n readonly name: string\n readonly targetDir: string\n readonly downloadUrl: string\n readonly logger: IScopedLogger\n readonly isArchive?: boolean\n readonly archiveFormat?: 'zip' | 'tar.gz' | 'tar.xz'\n readonly archiveInnerPath?: string\n}): Promise<string> {\n const ext = process.platform === 'win32' ? '.exe' : ''\n const targetName = `${opts.name}${ext}`\n const targetPath = join(opts.targetDir, targetName)\n\n // 1. Already downloaded\n if (existsSync(targetPath)) {\n opts.logger.debug(`${opts.name} found at ${targetPath}`)\n return targetPath\n }\n\n // 2. System PATH\n const inPath = findInPath(opts.name)\n if (inPath) {\n opts.logger.info(`${opts.name} found in system PATH`)\n return inPath\n }\n\n // 3. Download\n return downloadBinary({\n name: opts.name,\n url: opts.downloadUrl,\n targetDir: opts.targetDir,\n targetName,\n logger: opts.logger,\n isArchive: opts.isArchive,\n archiveFormat: opts.archiveFormat,\n archiveInnerPath: opts.archiveInnerPath,\n })\n}\n","/**\n * Download ffmpeg static build for the current platform.\n *\n * Sources:\n * - Linux: https://johnvansickle.com/ffmpeg/ (static builds)\n * - macOS: https://evermeet.cx/ffmpeg/ or homebrew\n *\n * Using BtbN's GitHub releases as they cover both platforms:\n * https://github.com/BtbN/FFmpeg-Builds/releases\n */\nimport { join } from 'node:path'\nimport type { IScopedLogger } from '@camstack/types'\nimport { ensureBinary } from './binary-downloader.js'\n\nconst FFMPEG_VERSION = '7.1'\n\nexport function getFfmpegDownloadUrl(platform: string, arch: string): string {\n switch (platform) {\n case 'linux': {\n const archMap: Record<string, string> = { x64: 'amd64', arm64: 'arm64' }\n const a = archMap[arch]\n if (!a) throw new Error(`Unsupported Linux architecture: ${arch}`)\n // John Van Sickle static builds — well-tested, widely used\n return `https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-${a}-static.tar.xz`\n }\n case 'darwin': {\n const archMap: Record<string, string> = { arm64: 'arm64', x64: 'amd64' }\n const a = archMap[arch]\n if (!a) throw new Error(`Unsupported macOS architecture: ${arch}`)\n // macOS static builds from osxexperts (maintained, universal builds)\n return `https://www.osxexperts.net/ffmpeg${FFMPEG_VERSION.replace('.', '')}arm.zip`\n }\n default:\n throw new Error(`Unsupported platform: ${platform}`)\n }\n}\n\nexport function getFfmpegArchiveInfo(platform: string): {\n isArchive: boolean\n archiveFormat: 'zip' | 'tar.gz' | 'tar.xz'\n archiveInnerPath: string\n} {\n switch (platform) {\n case 'linux':\n return {\n isArchive: true,\n archiveFormat: 'tar.xz',\n archiveInnerPath: `ffmpeg-${FFMPEG_VERSION}-amd64-static/ffmpeg`,\n }\n case 'darwin':\n return {\n isArchive: true,\n archiveFormat: 'zip',\n archiveInnerPath: 'ffmpeg',\n }\n default:\n throw new Error(`Unsupported platform: ${platform}`)\n }\n}\n\n/**\n * Ensure ffmpeg binary is available.\n * Checks: deps dir → system PATH → download.\n */\nexport async function ensureFfmpeg(dataDir: string, logger: IScopedLogger): Promise<string> {\n const depsDir = join(dataDir, 'deps')\n const platform = process.platform\n const arch = process.arch\n\n const archiveInfo = getFfmpegArchiveInfo(platform)\n\n return ensureBinary({\n name: 'ffmpeg',\n targetDir: depsDir,\n downloadUrl: getFfmpegDownloadUrl(platform, arch),\n logger,\n ...archiveInfo,\n })\n}\n","/**\n * Download portable Python (headless) from bjia56/portable-python.\n *\n * Source: https://github.com/bjia56/portable-python\n *\n * Advantages over python-build-standalone:\n * - macOS universal2 binary (arm64+x86_64 in one)\n * - Lighter (~24-28MB headless zip)\n * - glibc 2.17 minimum (better compat)\n * - Headless variant excludes tkinter/UI (ideal for ML inference)\n *\n * After extraction, the binary is at: python/bin/python3\n */\nimport { join } from 'node:path'\nimport { existsSync, mkdirSync, chmodSync } from 'node:fs'\nimport { execFileSync } from 'node:child_process'\nimport { pipeline } from 'node:stream/promises'\nimport { Readable } from 'node:stream'\nimport { createWriteStream } from 'node:fs'\nimport type { IScopedLogger } from '@camstack/types'\nimport { findInPath } from './binary-downloader.js'\n\nexport const PYTHON_VERSION = '3.12.12'\nconst PP_BASE = `https://github.com/bjia56/portable-python/releases/download/cpython-v${PYTHON_VERSION}-build.0`\n\nexport function getPythonDownloadUrl(platform: string, arch: string): string {\n switch (platform) {\n case 'linux': {\n const archMap: Record<string, string> = { x64: 'x86_64', arm64: 'aarch64' }\n const a = archMap[arch]\n if (!a) throw new Error(`Unsupported Linux architecture for Python: ${arch}`)\n return `${PP_BASE}/python-headless-${PYTHON_VERSION}-linux-${a}.zip`\n }\n case 'darwin': {\n // universal2 covers both arm64 and x86_64\n return `${PP_BASE}/python-headless-${PYTHON_VERSION}-darwin-universal2.zip`\n }\n default:\n throw new Error(`Unsupported platform for portable Python: ${platform}`)\n }\n}\n\n/**\n * Ensure a portable Python is available.\n * Checks: embedded python → system PATH → download portable.\n *\n * Returns the path to the python3 binary.\n */\nexport async function ensurePython(dataDir: string, logger: IScopedLogger): Promise<string | null> {\n const pythonDir = join(dataDir, 'deps', 'python')\n const pythonBin = join(pythonDir, 'bin', 'python3')\n\n // 1. Already downloaded\n if (existsSync(pythonBin)) {\n logger.debug(`Portable Python found at ${pythonBin}`)\n return pythonBin\n }\n\n // 2. System PATH\n for (const name of ['python3', 'python']) {\n const inPath = findInPath(name)\n if (inPath) {\n logger.info(`Python found in system PATH: ${name}`)\n return inPath\n }\n }\n\n // 3. Download portable python\n logger.info(`Downloading portable Python ${PYTHON_VERSION} (headless)...`)\n\n const depsDir = join(dataDir, 'deps')\n mkdirSync(depsDir, { recursive: true })\n\n const url = getPythonDownloadUrl(process.platform, process.arch)\n const tmpArchive = join(depsDir, 'python-download.zip')\n\n logger.info(` Source: ${url}`)\n\n const response = await fetch(url, { redirect: 'follow' })\n if (!response.ok || !response.body) {\n logger.warn(`Failed to download Python: ${response.status} — ML detection will not be available`)\n return null\n }\n\n const nodeStream = Readable.fromWeb(response.body as any)\n await pipeline(nodeStream, createWriteStream(tmpArchive))\n\n // Extract — zip contains a 'python/' directory\n try {\n execFileSync('unzip', ['-o', '-q', tmpArchive, '-d', depsDir], { stdio: 'pipe' })\n } catch {\n // Fallback: some minimal Linux installs don't have unzip\n execFileSync('python3', ['-m', 'zipfile', '-e', tmpArchive, depsDir], { stdio: 'pipe' })\n }\n\n // Cleanup\n const { unlinkSync } = await import('node:fs')\n unlinkSync(tmpArchive)\n\n if (!existsSync(pythonBin)) {\n logger.warn('Python extraction succeeded but binary not found at expected path')\n return null\n }\n\n chmodSync(pythonBin, 0o755)\n logger.info(`Portable Python ${PYTHON_VERSION} installed at ${pythonBin}`)\n return pythonBin\n}\n\n/**\n * Install Python packages into the portable Python environment.\n */\nexport async function installPythonPackages(\n pythonPath: string,\n packages: readonly string[],\n logger: IScopedLogger,\n): Promise<void> {\n if (packages.length === 0) return\n\n logger.info(`Installing Python packages: ${packages.join(', ')}`)\n try {\n execFileSync(pythonPath, ['-m', 'pip', 'install', '--quiet', ...packages], {\n stdio: 'pipe',\n timeout: 300_000, // 5 minutes for large packages like torch\n })\n logger.info('Python packages installed successfully')\n } catch (err) {\n logger.error(`Failed to install Python packages: ${err instanceof Error ? err.message : err}`)\n throw err\n }\n}\n","type EventCallback<T = unknown> = (data: T) => void\n\nexport class EventBus {\n private listeners = new Map<string, Set<EventCallback>>()\n\n on<T = unknown>(event: string, callback: EventCallback<T>): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set())\n const set = this.listeners.get(event)!\n set.add(callback as EventCallback)\n return () => set.delete(callback as EventCallback)\n }\n\n emit<T = unknown>(event: string, data: T): void {\n const set = this.listeners.get(event)\n if (!set) return\n for (const cb of set) {\n try { cb(data) } catch { /* don't let one listener break others */ }\n }\n }\n\n once<T = unknown>(event: string, callback: EventCallback<T>): () => void {\n const unsub = this.on<T>(event, (data) => {\n unsub()\n callback(data)\n })\n return unsub\n }\n\n removeAllListeners(event?: string): void {\n if (event) this.listeners.delete(event)\n else this.listeners.clear()\n }\n\n listenerCount(event: string): number {\n return this.listeners.get(event)?.size ?? 0\n }\n}\n","import type { ModelDownloadOptions, ModelDownloadResult } from '@camstack/types'\nimport * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport { createHash } from 'node:crypto'\n\n/**\n * Download a single file from a URL to a destination path.\n * Uses native fetch() (Node 22+) which handles redirects natively.\n * Streams to disk with optional progress callback.\n * Returns the destination path. Skips download if file already exists.\n */\nexport async function downloadFile(\n url: string,\n destPath: string,\n onProgress?: (downloaded: number, total: number) => void,\n): Promise<string> {\n if (fs.existsSync(destPath)) return destPath\n\n fs.mkdirSync(path.dirname(destPath), { recursive: true })\n\n // Atomic download: write to .downloading tmp, rename on success\n const tmpPath = destPath + '.downloading'\n\n try {\n const response = await fetch(url, {\n redirect: 'follow',\n headers: { 'User-Agent': 'CamStack/1.0' },\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status} downloading ${url}`)\n }\n if (!response.body) {\n throw new Error(`No response body from ${url}`)\n }\n\n const total = parseInt(response.headers.get('content-length') ?? '0', 10)\n let downloaded = 0\n\n const fileStream = fs.createWriteStream(tmpPath)\n const reader = response.body.getReader()\n\n try {\n for (;;) {\n const { done, value } = await reader.read()\n if (done) break\n fileStream.write(value)\n downloaded += value.length\n onProgress?.(downloaded, total)\n }\n } finally {\n fileStream.end()\n await new Promise<void>((resolve, reject) => {\n fileStream.on('finish', resolve)\n fileStream.on('error', reject)\n })\n }\n\n fs.renameSync(tmpPath, destPath)\n return destPath\n } catch (err) {\n // Clean up partial download\n try { fs.unlinkSync(tmpPath) } catch { /* ignore */ }\n throw err\n }\n}\n\n/**\n * Fetch JSON from a URL using native fetch().\n */\nexport async function fetchJson(url: string): Promise<unknown> {\n const response = await fetch(url, {\n redirect: 'follow',\n headers: { 'User-Agent': 'CamStack/1.0' },\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status} fetching ${url}`)\n }\n return response.json()\n}\n\n/**\n * Download a model with fallback URLs and optional SHA256 verification.\n * Legacy API preserved for backward compatibility -- delegates to downloadFile().\n */\nexport async function downloadModel(options: ModelDownloadOptions): Promise<ModelDownloadResult> {\n const { url, fallbackUrls = [], destDir, filename, expectedSha256, onProgress } = options\n\n const fname = filename ?? url.split('/').pop() ?? 'model.bin'\n const destPath = path.join(destDir, fname)\n\n // Check cache\n if (fs.existsSync(destPath)) {\n return { filePath: destPath, downloadedBytes: 0, fromCache: true }\n }\n\n fs.mkdirSync(destDir, { recursive: true })\n\n const urls = [url, ...fallbackUrls]\n let lastError: Error | null = null\n\n for (const tryUrl of urls) {\n try {\n await downloadFile(tryUrl, destPath, onProgress)\n\n // Verify SHA256 if provided\n if (expectedSha256) {\n const hash = await computeSha256(destPath)\n if (hash !== expectedSha256) {\n fs.unlinkSync(destPath)\n throw new Error(`SHA256 mismatch: expected ${expectedSha256}, got ${hash}`)\n }\n }\n\n const stat = fs.statSync(destPath)\n return { filePath: destPath, downloadedBytes: stat.size, fromCache: false }\n } catch (e) {\n lastError = e as Error\n if (fs.existsSync(destPath)) fs.unlinkSync(destPath)\n }\n }\n\n throw lastError ?? new Error(`Failed to download model from ${url}`)\n}\n\nasync function computeSha256(filePath: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const hash = createHash('sha256')\n const stream = fs.createReadStream(filePath)\n stream.on('data', (chunk) => hash.update(chunk))\n stream.on('end', () => resolve(hash.digest('hex')))\n stream.on('error', reject)\n })\n}\n","import type { ModelCatalogEntry, ModelFormat, IAddonModelManager, ModelExtraFile } from '@camstack/types'\nimport * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport { downloadFile, fetchJson } from './model-downloader.js'\n\n/**\n * Unified model download service.\n *\n * Handles downloading model files and extra files (labels, dicts) from a\n * catalog of ModelCatalogEntry items. Supports single-file models and\n * directory bundles (e.g., .mlpackage for CoreML).\n *\n * Addons use this via `context.models.ensure(modelId, format)`.\n */\nexport class ModelDownloadService implements IAddonModelManager {\n private readonly catalog: ReadonlyMap<string, ModelCatalogEntry>\n\n constructor(\n private readonly modelsDir: string,\n catalog: readonly ModelCatalogEntry[],\n private readonly onProgress?: (modelId: string, downloaded: number, total: number) => void,\n ) {\n const map = new Map<string, ModelCatalogEntry>()\n for (const entry of catalog) {\n map.set(entry.id, entry)\n }\n this.catalog = map\n }\n\n /**\n * Ensure a model (and its extra files) is downloaded.\n * Returns the local filesystem path to the model file/directory.\n */\n async ensure(modelId: string, format?: ModelFormat): Promise<string> {\n const entry = this.catalog.get(modelId)\n if (!entry) {\n throw new Error(`ModelDownloadService: unknown model \"${modelId}\"`)\n }\n\n // Resolve format: use provided or pick first available\n const selectedFormat = format ?? this.pickDefaultFormat(entry)\n const formatEntry = entry.formats[selectedFormat]\n if (!formatEntry) {\n throw new Error(\n `ModelDownloadService: model \"${modelId}\" has no ${selectedFormat} format`,\n )\n }\n\n // Download extra files first (labels JSON, dict.txt, etc.)\n await this.ensureExtraFiles(modelId)\n\n // Derive local path from URL\n const modelPath = this.modelFilePath(entry, selectedFormat)\n\n if (fs.existsSync(modelPath)) {\n // Validate directory bundles have required Manifest.json\n if (formatEntry.isDirectory) {\n if (!fs.existsSync(path.join(modelPath, 'Manifest.json'))) {\n fs.rmSync(modelPath, { recursive: true, force: true })\n } else {\n return modelPath\n }\n } else {\n return modelPath\n }\n }\n\n fs.mkdirSync(this.modelsDir, { recursive: true })\n\n if (formatEntry.isDirectory) {\n await this.downloadDirectory(\n formatEntry.url,\n modelPath,\n formatEntry.files,\n modelId,\n )\n } else {\n await downloadFile(\n formatEntry.url,\n modelPath,\n this.onProgress\n ? (downloaded, total) => this.onProgress!(modelId, downloaded, total)\n : undefined,\n )\n }\n\n return modelPath\n }\n\n /**\n * Ensure extra files for a model are downloaded.\n * Returns the local paths of all extra files.\n */\n async ensureExtraFiles(modelId: string): Promise<readonly string[]> {\n const entry = this.catalog.get(modelId)\n if (!entry) {\n throw new Error(`ModelDownloadService: unknown model \"${modelId}\"`)\n }\n\n const extras = entry.extraFiles\n if (!extras || extras.length === 0) return []\n\n const paths: string[] = []\n for (const extra of extras) {\n const destPath = path.join(this.modelsDir, extra.filename)\n await downloadFile(extra.url, destPath)\n paths.push(destPath)\n }\n return paths\n }\n\n /** Absolute path to the shared models directory. */\n getModelsDir(): string {\n return this.modelsDir\n }\n\n /** Check if a model file is already present on disk. */\n isDownloaded(modelId: string, format?: ModelFormat): boolean {\n const entry = this.catalog.get(modelId)\n if (!entry) return false\n\n const selectedFormat = format ?? this.pickDefaultFormat(entry)\n const formatEntry = entry.formats[selectedFormat]\n if (!formatEntry) return false\n\n const modelPath = this.modelFilePath(entry, selectedFormat)\n if (!fs.existsSync(modelPath)) return false\n\n // Validate directory bundles\n if (formatEntry.isDirectory) {\n return fs.existsSync(path.join(modelPath, 'Manifest.json'))\n }\n\n return fs.statSync(modelPath).size > 0\n }\n\n /**\n * Legacy API: download a model by ID (delegates to ensure with default format).\n * Required by IAddonModelManager interface.\n */\n async downloadModel(id: string): Promise<string> {\n return this.ensure(id)\n }\n\n /** Get the catalog entry for a model by ID. */\n getEntry(modelId: string): ModelCatalogEntry | undefined {\n return this.catalog.get(modelId)\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private pickDefaultFormat(entry: ModelCatalogEntry): ModelFormat {\n // Prefer onnx, then others in order\n const priority: ModelFormat[] = ['onnx', 'coreml', 'openvino', 'tflite', 'pt']\n for (const fmt of priority) {\n if (entry.formats[fmt]) return fmt\n }\n // Fallback: first available format\n const first = Object.keys(entry.formats)[0] as ModelFormat | undefined\n if (first) return first\n throw new Error(`ModelDownloadService: model \"${entry.id}\" has no formats`)\n }\n\n private modelFilePath(entry: ModelCatalogEntry, format: ModelFormat): string {\n const formatEntry = entry.formats[format]\n if (!formatEntry) {\n throw new Error(`Model ${entry.id} has no ${format} format`)\n }\n const urlParts = formatEntry.url.split('/')\n const filename = urlParts[urlParts.length - 1] ?? `${entry.id}.${format}`\n return path.join(this.modelsDir, filename)\n }\n\n /**\n * Download a directory bundle (e.g., .mlpackage) from HuggingFace.\n * ATOMIC: downloads to temp dir, renames only on complete success.\n */\n private async downloadDirectory(\n url: string,\n destDir: string,\n knownFiles?: readonly string[],\n modelId?: string,\n ): Promise<void> {\n const match = url.match(/huggingface\\.co\\/([^/]+\\/[^/]+)\\/resolve\\/main\\/(.+)/)\n if (!match) throw new Error(`Cannot parse HuggingFace URL: ${url}`)\n\n const [, repo, dirPath] = match\n\n let filesToDownload: Array<{ relativePath: string; fileUrl: string }>\n\n if (knownFiles && knownFiles.length > 0) {\n filesToDownload = knownFiles.map(f => ({\n relativePath: f,\n fileUrl: `https://huggingface.co/${repo}/resolve/main/${dirPath}/${f}`,\n }))\n } else {\n const hfFiles = await this.listHfFiles(repo!, dirPath!)\n if (hfFiles.length === 0) {\n throw new Error(`No files found in HuggingFace directory: ${dirPath}`)\n }\n filesToDownload = hfFiles.map(f => ({\n relativePath: f.path.substring(dirPath!.length + 1),\n fileUrl: `https://huggingface.co/${repo}/resolve/main/${f.path}`,\n }))\n }\n\n const tmpDir = destDir + '.downloading'\n fs.rmSync(tmpDir, { recursive: true, force: true })\n fs.mkdirSync(tmpDir, { recursive: true })\n\n try {\n for (const file of filesToDownload) {\n const destPath = path.join(tmpDir, file.relativePath)\n fs.mkdirSync(path.dirname(destPath), { recursive: true })\n await downloadFile(file.fileUrl, destPath)\n }\n\n fs.rmSync(destDir, { recursive: true, force: true })\n fs.renameSync(tmpDir, destDir)\n } catch (err) {\n fs.rmSync(tmpDir, { recursive: true, force: true })\n throw err\n }\n }\n\n /** Recursively list all files in a HuggingFace directory via API. */\n private async listHfFiles(\n repo: string,\n dirPath: string,\n ): Promise<Array<{ path: string; size: number }>> {\n const apiUrl = `https://huggingface.co/api/models/${repo}/tree/main/${dirPath}`\n const entries = (await fetchJson(apiUrl)) as any[]\n const files: Array<{ path: string; size: number }> = []\n\n for (const entry of entries) {\n if (entry.type === 'file') {\n files.push({ path: entry.path, size: entry.size ?? entry.lfs?.size ?? 0 })\n } else if (entry.type === 'directory') {\n const subFiles = await this.listHfFiles(repo, entry.path)\n files.push(...subFiles)\n }\n }\n\n return files\n }\n}\n","import type { IPythonEnvironment, PythonProbeResult, PythonEnvReady } from '@camstack/types'\nimport { execFile, spawn } from 'node:child_process'\nimport type { ChildProcess } from 'node:child_process'\nimport { promisify } from 'node:util'\nimport * as fs from 'node:fs'\nimport * as path from 'node:path'\n\nconst execFileAsync = promisify(execFile)\n\nexport class PythonEnvManager implements IPythonEnvironment {\n private venvPath: string\n private cachedProbe: PythonProbeResult | null = null\n\n constructor(private readonly dataDir: string) {\n this.venvPath = path.join(dataDir, '.venv')\n }\n\n async probe(): Promise<PythonProbeResult> {\n if (this.cachedProbe) return this.cachedProbe\n\n // Try python3, then python\n for (const cmd of ['python3', 'python']) {\n try {\n const { stdout } = await execFileAsync(cmd, ['--version'])\n const version = stdout.trim().replace('Python ', '')\n const major = parseInt(version.split('.')[0] ?? '0', 10)\n const minor = parseInt(version.split('.')[1] ?? '0', 10)\n\n if (major < 3 || (major === 3 && minor < 10)) continue\n\n // Get path\n const { stdout: pathOut } = await execFileAsync(cmd, ['-c', 'import sys; print(sys.executable)'])\n\n this.cachedProbe = {\n available: true,\n version,\n path: pathOut.trim(),\n }\n return this.cachedProbe\n } catch { continue }\n }\n\n this.cachedProbe = { available: false }\n return this.cachedProbe\n }\n\n async ensure(options: { packages: readonly string[] }): Promise<PythonEnvReady> {\n const probe = await this.probe()\n if (!probe.available || !probe.path) {\n throw new Error('Python 3.10+ is required but not found on this system')\n }\n\n // Create venv if needed\n if (!fs.existsSync(path.join(this.venvPath, 'bin', 'python'))) {\n await execFileAsync(probe.path, ['-m', 'venv', this.venvPath])\n }\n\n const venvPython = path.join(this.venvPath, 'bin', 'python')\n\n // Install packages\n if (options.packages.length > 0) {\n await execFileAsync(venvPython, ['-m', 'pip', 'install', '-q', ...options.packages])\n }\n\n return {\n pythonPath: venvPython,\n venvPath: this.venvPath,\n spawn: (script: string, args: readonly string[]) => {\n return spawn(venvPython, [script, ...args])\n },\n }\n }\n\n spawn(script: string, args: readonly string[]): ChildProcess {\n const venvPython = path.join(this.venvPath, 'bin', 'python')\n if (!fs.existsSync(venvPython)) {\n throw new Error('Python venv not initialized. Call ensure() first.')\n }\n return spawn(venvPython, [script, ...args])\n }\n}\n","import type { PipelineConfig, PipelineNode, ValidationIssue, ValidationResult } from '@camstack/types'\nimport { AddonLoader } from '@camstack/kernel'\n\nexport type { ValidationIssue, ValidationResult }\n\nexport class PipelineValidator {\n constructor(private readonly loader: AddonLoader) {}\n\n validate(config: PipelineConfig): ValidationResult {\n const errors: ValidationIssue[] = []\n const warnings: ValidationIssue[] = []\n\n // Validate video pipeline\n for (const node of config.video) {\n this.validateNode(node, errors, warnings, [])\n }\n\n // Validate audio\n if (config.audio) {\n this.validateNode(config.audio, errors, warnings, [])\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n }\n }\n\n private validateNode(\n node: PipelineNode,\n errors: ValidationIssue[],\n warnings: ValidationIssue[],\n ancestors: PipelineNode[],\n ): void {\n // Check addon exists\n if (!this.loader.hasAddon(node.addon)) {\n errors.push({\n step: node.step,\n addon: node.addon,\n message: `Addon \"${node.addon}\" is not registered`,\n severity: 'error',\n })\n return\n }\n\n // Check requiredSteps (from addon manifest)\n const registered = this.loader.getAddon(node.addon)\n if (registered) {\n const manifest = registered.declaration\n // Warn if a node appears at root but its addon has inputClasses\n // (This is a simplified check — full implementation would read manifest.requiredSteps)\n void manifest // reserved for future manifest-driven checks\n }\n\n // Validate children recursively\n if (node.children) {\n for (const child of node.children) {\n this.validateNode(child, errors, warnings, [...ancestors, node])\n }\n }\n }\n}\n","import type {\n FrameInput,\n AudioChunkInput,\n CropInput,\n PipelineConfig,\n PipelineNode,\n PipelineResult,\n StepResult,\n DetectorOutput,\n CropperOutput,\n ClassifierOutput,\n SpatialDetection,\n PipelineSlot,\n ICamstackAddon,\n} from '@camstack/types'\nimport { AddonEngineManager } from '@camstack/kernel'\nimport { randomUUID } from 'node:crypto'\n\nexport class PipelineRunner {\n constructor(\n private readonly engineManager: AddonEngineManager,\n private readonly addonConfigs: Map<string, Record<string, unknown>>, // addonId → global config\n ) {}\n\n async run(frame: FrameInput, config: PipelineConfig): Promise<PipelineResult> {\n const startTime = performance.now()\n const results: StepResult[] = []\n const timings: Record<string, number> = {}\n\n // Execute video pipeline root nodes\n for (const rootNode of config.video) {\n await this.executeNode(rootNode, frame, null, results, timings)\n }\n\n // Execute audio node if present (independent)\n if (config.audio) {\n await this.executeNode(config.audio, frame, null, results, timings)\n }\n\n return {\n results,\n totalMs: performance.now() - startTime,\n timings,\n frameTimestamp: frame.timestamp,\n }\n }\n\n /**\n * Run only the audio classification node on an audio chunk.\n * Used by the audio path in DetectionWiringService (separate from video pipeline).\n */\n async runAudioNode(chunk: AudioChunkInput, audioNode: PipelineNode): Promise<PipelineResult> {\n const startTime = performance.now()\n const results: StepResult[] = []\n const timings: Record<string, number> = {}\n const resultId = randomUUID()\n const stepStart = performance.now()\n\n try {\n const globalConfig = this.addonConfigs.get(audioNode.addon) ?? {}\n const engine = await this.engineManager.getOrCreateEngine(\n audioNode.addon, globalConfig, audioNode.configOverride,\n )\n\n if (!('classifyAudio' in engine) || typeof (engine as unknown as Record<string, unknown>)['classifyAudio'] !== 'function') {\n throw new Error(`Addon \"${audioNode.addon}\" has no classifyAudio method`)\n }\n\n const output = await (engine as unknown as { classifyAudio: (input: AudioChunkInput) => Promise<ClassifierOutput> }).classifyAudio(chunk)\n const stepMs = performance.now() - stepStart\n\n const stepResult: StepResult = {\n addon: audioNode.addon,\n slot: 'classifier',\n output,\n resultId,\n inferenceMs: output.inferenceMs,\n preprocessMs: 0,\n totalMs: stepMs,\n }\n results.push(stepResult)\n timings[audioNode.step] = stepMs\n } catch (error: unknown) {\n const stepMs = performance.now() - stepStart\n const message = error instanceof Error ? error.message : String(error)\n results.push({\n addon: audioNode.addon,\n slot: 'classifier',\n output: { classifications: [], inferenceMs: 0, modelId: '' } as unknown as ClassifierOutput,\n resultId,\n inferenceMs: 0,\n preprocessMs: 0,\n totalMs: stepMs,\n error: {\n code: 'ADDON_ERROR',\n message,\n childrenSkipped: true,\n },\n })\n }\n\n return {\n results,\n totalMs: performance.now() - startTime,\n timings,\n frameTimestamp: chunk.timestamp,\n }\n }\n\n private async executeNode(\n node: PipelineNode,\n frame: FrameInput,\n parentDetection: { det: SpatialDetection; resultId: string } | null,\n results: StepResult[],\n timings: Record<string, number>,\n ): Promise<void> {\n const resultId = randomUUID()\n const stepStart = performance.now()\n\n try {\n // Get or create engine for this addon\n const globalConfig = this.addonConfigs.get(node.addon) ?? {}\n const engine = await this.engineManager.getOrCreateEngine(\n node.addon, globalConfig, node.configOverride,\n )\n\n // Determine slot type and execute\n let output: DetectorOutput | CropperOutput | ClassifierOutput\n\n if (parentDetection) {\n // This is a child node — needs crop input\n const cropInput: CropInput = {\n frame,\n roi: parentDetection.det.bbox,\n parentDetection: parentDetection.det,\n }\n\n // Try cropper first, then classifier, then detector\n if ('crop' in engine && typeof (engine as unknown as Record<string, unknown>)['crop'] === 'function') {\n output = await (engine as unknown as { crop: (input: CropInput) => Promise<CropperOutput> }).crop(cropInput)\n } else if ('classify' in engine && typeof (engine as unknown as Record<string, unknown>)['classify'] === 'function') {\n output = await (engine as unknown as { classify: (input: CropInput) => Promise<ClassifierOutput> }).classify(cropInput)\n } else if ('detect' in engine && typeof (engine as unknown as Record<string, unknown>)['detect'] === 'function') {\n // Detector child (e.g., object-detection triggered by motion)\n output = await (engine as unknown as { detect: (input: FrameInput) => Promise<DetectorOutput> }).detect(frame)\n } else {\n throw new Error(`Addon \"${node.addon}\" has no detect/crop/classify method`)\n }\n } else {\n // Root node — full frame\n if ('detect' in engine && typeof (engine as unknown as Record<string, unknown>)['detect'] === 'function') {\n output = await (engine as unknown as { detect: (input: FrameInput) => Promise<DetectorOutput> }).detect(frame)\n } else if ('classify' in engine && typeof (engine as unknown as Record<string, unknown>)['classify'] === 'function') {\n // Audio classifier at root\n const rootCropInput: CropInput = {\n frame,\n roi: { x: 0, y: 0, w: frame.width, h: frame.height },\n parentDetection: { class: '', originalClass: '', score: 1, bbox: { x: 0, y: 0, w: frame.width, h: frame.height } },\n }\n output = await (engine as unknown as { classify: (input: CropInput) => Promise<ClassifierOutput> }).classify(rootCropInput)\n } else {\n throw new Error(`Addon \"${node.addon}\" has no detect/classify method`)\n }\n }\n\n const stepMs = performance.now() - stepStart\n\n // Determine slot type from output shape\n const slot: PipelineSlot =\n 'detections' in output ? 'detector' :\n 'crops' in output ? 'cropper' :\n 'classifier'\n\n const stepResult: StepResult = {\n addon: node.addon,\n slot,\n output,\n parentResultId: parentDetection?.resultId,\n resultId,\n inferenceMs: output.inferenceMs,\n preprocessMs: 0,\n totalMs: stepMs,\n }\n results.push(stepResult)\n timings[node.step] = stepMs\n\n // Process children\n if (node.children?.length) {\n const detections: readonly SpatialDetection[] =\n 'detections' in output ? output.detections :\n 'crops' in output ? output.crops :\n []\n\n // For each detection, find children with matching inputClasses and execute\n await this.executeChildren(node.children, frame, detections, resultId, results, timings)\n }\n } catch (error: unknown) {\n const stepMs = performance.now() - stepStart\n const message = error instanceof Error ? error.message : String(error)\n results.push({\n addon: node.addon,\n slot: 'detector',\n output: { detections: [], inferenceMs: 0, modelId: '' },\n parentResultId: parentDetection?.resultId,\n resultId,\n inferenceMs: 0,\n preprocessMs: 0,\n totalMs: stepMs,\n error: {\n code: 'ADDON_ERROR',\n message,\n childrenSkipped: true,\n },\n })\n }\n }\n\n private async executeChildren(\n children: readonly PipelineNode[],\n frame: FrameInput,\n parentDetections: readonly SpatialDetection[],\n parentResultId: string,\n results: StepResult[],\n timings: Record<string, number>,\n ): Promise<void> {\n // For each parent detection, run all matching children in parallel\n const promises: Promise<void>[] = []\n\n for (const detection of parentDetections) {\n for (const child of children) {\n // TODO: Check inputClasses matching from addon manifest\n // For now, run all children on all detections (caller configures tree correctly)\n promises.push(\n this.executeNode(child, frame, { det: detection, resultId: parentResultId }, results, timings),\n )\n }\n }\n\n await Promise.allSettled(promises)\n }\n}\n","import { fork, spawn, type ChildProcess } from 'node:child_process'\nimport type { IScopedLogger } from '@camstack/types'\nimport type {\n ProcessConfig,\n ProcessStats,\n ManagedProcessStatus,\n ProcessState,\n ProcessEventEmitter,\n} from './interfaces.js'\n\nconst DEFAULT_MAX_RESTARTS = 10\nconst MAX_BACKOFF_MS = 60_000\nconst GRACEFUL_SHUTDOWN_MS = 5_000\n\nexport class ManagedProcess {\n private childProcess: ChildProcess | null = null\n private _state: ProcessState = 'stopped'\n private _startedAt?: number\n private restartTimer?: ReturnType<typeof setTimeout>\n private _restartCount = 0\n private _lastCrashAt?: number\n private _lastCrashError?: string\n\n constructor(\n private readonly config: ProcessConfig,\n private readonly events: ProcessEventEmitter,\n private readonly logger: IScopedLogger,\n ) {}\n\n get state(): ProcessState {\n return this._state\n }\n\n async start(): Promise<void> {\n this._state = 'starting'\n\n try {\n if (this.config.modulePath) {\n this.childProcess = fork(this.config.modulePath, this.config.args ?? [], {\n env: { ...process.env, ...this.config.env },\n stdio: ['pipe', 'pipe', 'pipe', 'ipc'],\n })\n } else if (this.config.command) {\n this.childProcess = spawn(this.config.command, this.config.args ?? [], {\n env: { ...process.env, ...this.config.env },\n stdio: ['pipe', 'pipe', 'pipe'],\n })\n } else {\n throw new Error('No command or modulePath specified')\n }\n\n this.childProcess.stdout?.on('data', (data: Buffer) => {\n this.logger.debug(data.toString().trim())\n })\n\n this.childProcess.stderr?.on('data', (data: Buffer) => {\n this.logger.warn(data.toString().trim())\n })\n\n this.childProcess.on('exit', (code, signal) => {\n const msg = `Process exited: code=${code}, signal=${signal}`\n\n if (code === 0) {\n this.logger.info(msg)\n this._state = 'stopped'\n } else {\n this._lastCrashAt = Date.now()\n this._lastCrashError = msg\n this.logger.error(msg)\n this._state = 'error'\n\n this.events.emitProcessCrashed(\n this.config.id,\n code,\n signal,\n this._restartCount,\n )\n\n const maxRestarts = this.config.maxRestarts ?? DEFAULT_MAX_RESTARTS\n if (this.config.autoRestart && this._restartCount < maxRestarts) {\n this.scheduleRestart()\n }\n }\n\n this.childProcess = null\n })\n\n this.childProcess.on('error', (err: Error) => {\n this.logger.error(`Process error: ${err.message}`)\n this._lastCrashError = err.message\n this._state = 'error'\n })\n\n this._state = 'running'\n this._startedAt = Date.now()\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n this._state = 'error'\n this._lastCrashError = msg\n throw err\n }\n }\n\n async stop(): Promise<void> {\n if (this.restartTimer) {\n clearTimeout(this.restartTimer)\n this.restartTimer = undefined\n }\n\n if (this._state === 'stopped') {\n return\n }\n\n this._state = 'stopping'\n\n if (this.childProcess && !this.childProcess.killed) {\n this.childProcess.kill('SIGTERM')\n\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n if (this.childProcess && !this.childProcess.killed) {\n this.childProcess.kill('SIGKILL')\n }\n resolve()\n }, GRACEFUL_SHUTDOWN_MS)\n\n this.childProcess?.on('exit', () => {\n clearTimeout(timeout)\n resolve()\n })\n })\n }\n\n // The exit handler may have already set state to 'stopped' asynchronously\n const currentState = this._state as string\n if (currentState !== 'stopped') {\n this._state = 'stopped'\n }\n }\n\n getStatus(): ManagedProcessStatus {\n return {\n id: this.config.id,\n label: this.config.label,\n state: this._state,\n pid: this.childProcess?.pid,\n stats: this.childProcess?.pid ? this.getStats() : undefined,\n lastCrashAt: this._lastCrashAt,\n lastCrashError: this._lastCrashError,\n restartCount: this._restartCount,\n nextRestartAt: this.restartTimer ? this.getNextRestartTime() : undefined,\n }\n }\n\n private scheduleRestart(): void {\n this._restartCount++\n const delayMs = Math.min(1000 * Math.pow(2, this._restartCount - 1), MAX_BACKOFF_MS)\n\n this.logger.info(`Scheduling restart #${this._restartCount} in ${delayMs}ms`)\n\n this.events.emitProcessRestartScheduled(\n this.config.id,\n this._restartCount,\n delayMs,\n )\n\n this.restartTimer = setTimeout(async () => {\n this.restartTimer = undefined\n try {\n await this.start()\n this.events.emitProcessRestarted(this.config.id, this._restartCount)\n } catch (err) {\n this.logger.error(`Restart failed: ${err}`)\n }\n }, delayMs)\n }\n\n private getStats(): ProcessStats | undefined {\n if (!this.childProcess?.pid) return undefined\n const uptime = this._startedAt ? Date.now() - this._startedAt : 0\n return {\n pid: this.childProcess.pid,\n cpu: 0,\n memory: 0,\n uptime,\n restartCount: this._restartCount,\n }\n }\n\n private getNextRestartTime(): number | undefined {\n if (!this._lastCrashAt) return undefined\n const delayMs = Math.min(1000 * Math.pow(2, this._restartCount - 1), MAX_BACKOFF_MS)\n return this._lastCrashAt + delayMs\n }\n}\n","import { ManagedProcess } from './managed-process.js'\nimport type {\n ProcessConfig,\n ManagedProcessStatus,\n ProcessEventEmitter,\n ProcessLoggerFactory,\n} from './interfaces.js'\n\nexport class ProcessManager {\n private readonly processes: Map<string, ManagedProcess> = new Map()\n\n constructor(\n private readonly events: ProcessEventEmitter,\n private readonly loggerFactory: ProcessLoggerFactory,\n ) {}\n\n register(config: ProcessConfig): ManagedProcess {\n if (this.processes.has(config.id)) {\n throw new Error(`Process already registered: ${config.id}`)\n }\n\n const logger = this.loggerFactory.createLogger(`process:${config.id}`)\n const managed = new ManagedProcess(config, this.events, logger)\n this.processes.set(config.id, managed)\n return managed\n }\n\n async start(id: string): Promise<void> {\n const p = this.get(id)\n await p.start()\n }\n\n async stop(id: string): Promise<void> {\n const p = this.get(id)\n await p.stop()\n }\n\n async restart(id: string): Promise<void> {\n const p = this.get(id)\n await p.stop()\n await p.start()\n }\n\n get(id: string): ManagedProcess {\n const p = this.processes.get(id)\n if (!p) throw new Error(`Process not found: ${id}`)\n return p\n }\n\n listAll(): readonly ManagedProcessStatus[] {\n return [...this.processes.values()].map((p) => p.getStatus())\n }\n\n async shutdownAll(): Promise<void> {\n const running = [...this.processes.values()].filter(\n (p) => p.getStatus().state === 'running',\n )\n\n await Promise.all(running.map((p) => p.stop()))\n }\n}\n","import type {\n StreamNetworkStats,\n ClientNetworkStats,\n DeviceNetworkStats,\n INetworkQualityTracker,\n} from '@camstack/types'\n\nexport type {\n StreamNetworkStats,\n ClientNetworkStats,\n DeviceNetworkStats,\n INetworkQualityTracker,\n}\n\ninterface MutableStreamStats {\n nominalBitrateKbps: number\n samples: number[]\n peakBitrateKbps: number\n packetLossSamples: number[]\n lastUpdated: number\n}\n\nexport class NetworkQualityTracker implements INetworkQualityTracker {\n private readonly devices = new Map<string, {\n streams: Map<string, MutableStreamStats>\n client: (ClientNetworkStats & { lastUpdated: number }) | null\n }>()\n\n private static readonly MAX_SAMPLES = 30 // ~5 min at 10s reporting interval\n\n reportStreamStats(deviceId: string, streamId: string, bitrateKbps: number, packetLoss?: number): void {\n const device = this.getOrCreateDevice(deviceId)\n let stream = device.streams.get(streamId)\n if (!stream) {\n stream = { nominalBitrateKbps: bitrateKbps, samples: [], peakBitrateKbps: 0, packetLossSamples: [], lastUpdated: 0 }\n device.streams.set(streamId, stream)\n }\n\n stream.samples.push(bitrateKbps)\n if (stream.samples.length > NetworkQualityTracker.MAX_SAMPLES) stream.samples.shift()\n\n stream.peakBitrateKbps = Math.max(stream.peakBitrateKbps, bitrateKbps)\n\n if (packetLoss !== undefined) {\n stream.packetLossSamples.push(packetLoss)\n if (stream.packetLossSamples.length > NetworkQualityTracker.MAX_SAMPLES) stream.packetLossSamples.shift()\n }\n\n stream.lastUpdated = Date.now()\n }\n\n reportClientStats(deviceId: string, stats: Omit<ClientNetworkStats, 'lastUpdated'>): void {\n const device = this.getOrCreateDevice(deviceId)\n device.client = { ...stats, lastUpdated: Date.now() }\n }\n\n getDeviceStats(deviceId: string): DeviceNetworkStats | null {\n const device = this.devices.get(deviceId)\n if (!device) return null\n\n const streams: Record<string, StreamNetworkStats> = {}\n for (const [streamId, s] of device.streams) {\n const avg = (arr: number[]) => arr.length === 0 ? 0 : arr.reduce((a, b) => a + b, 0) / arr.length\n streams[streamId] = {\n nominalBitrateKbps: s.nominalBitrateKbps,\n observedBitrateKbps: Math.round(avg(s.samples)),\n peakBitrateKbps: s.peakBitrateKbps,\n packetLossPercent: Math.round(avg(s.packetLossSamples) * 10) / 10,\n lastUpdated: s.lastUpdated,\n }\n }\n\n return { deviceId, streams, client: device.client ?? undefined }\n }\n\n getAllStats(): readonly DeviceNetworkStats[] {\n const results: DeviceNetworkStats[] = []\n for (const deviceId of this.devices.keys()) {\n const stats = this.getDeviceStats(deviceId)\n if (stats) results.push(stats)\n }\n return results\n }\n\n private getOrCreateDevice(deviceId: string) {\n let device = this.devices.get(deviceId)\n if (!device) {\n device = { streams: new Map(), client: null }\n this.devices.set(deviceId, device)\n }\n return device\n }\n}\n","import * as vm from 'node:vm'\nimport * as util from 'node:util'\nimport type {\n IReplEngine,\n IReplContextProvider,\n ReplSessionContext,\n ReplResult,\n} from './interfaces.js'\n\nconst EXECUTION_TIMEOUT_MS = 5000\nconst COMPLETION_TIMEOUT_MS = 1000\n\nexport class ReplEngine implements IReplEngine {\n constructor(\n private readonly contextProvider: IReplContextProvider,\n ) {}\n\n async execute(code: string, context: ReplSessionContext): Promise<ReplResult> {\n const start = Date.now()\n const sandbox = this.buildSandbox(context)\n\n try {\n const vmContext = vm.createContext(sandbox)\n const script = new vm.Script(code)\n let result = script.runInContext(vmContext, { timeout: EXECUTION_TIMEOUT_MS })\n\n // If result is a Promise, await it with timeout\n if (result && typeof result.then === 'function') {\n result = await Promise.race([\n result,\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error('Async timeout (5s)')), EXECUTION_TIMEOUT_MS),\n ),\n ])\n }\n\n const duration = Date.now() - start\n\n if (result === undefined) {\n return { output: 'undefined', type: 'void', duration }\n }\n\n return {\n output: util.inspect(result, {\n depth: 4,\n colors: false,\n maxArrayLength: 50,\n maxStringLength: 1000,\n }),\n type: 'value',\n duration,\n }\n } catch (err: unknown) {\n // Errors thrown inside vm contexts may not be instanceof Error\n // because they use a different Error constructor from the sandbox\n const message =\n err instanceof Error\n ? err.message\n : typeof err === 'object' && err !== null && 'message' in err\n ? String((err as { message: unknown }).message)\n : String(err)\n return {\n output: message,\n type: 'error',\n duration: Date.now() - start,\n }\n }\n }\n\n async getCompletions(partial: string, context: ReplSessionContext): Promise<string[]> {\n const sandbox = this.buildSandbox(context)\n const keys = Object.keys(sandbox)\n\n if (!partial) return keys\n\n const lastDot = partial.lastIndexOf('.')\n if (lastDot === -1) {\n return keys.filter(k => k.startsWith(partial))\n }\n\n // Object property completion: \"device.get\" -> look up device, return matching keys\n const objPath = partial.substring(0, lastDot)\n const propPrefix = partial.substring(lastDot + 1)\n\n try {\n const vmContext = vm.createContext(sandbox)\n const obj = vm.runInContext(objPath, vmContext, { timeout: COMPLETION_TIMEOUT_MS })\n if (obj && typeof obj === 'object') {\n const proto = Object.getPrototypeOf(obj)\n const objKeys = Object.getOwnPropertyNames(obj)\n .concat(Object.getOwnPropertyNames(proto ?? {}))\n .filter(k => k.startsWith(propPrefix))\n return [...new Set(objKeys)].map(k => `${objPath}.${k}`)\n }\n } catch {\n // Ignore errors during completion\n }\n\n return []\n }\n\n private buildSandbox(context: ReplSessionContext): Record<string, unknown> {\n const base: Record<string, unknown> = {\n console: {\n log: (...args: unknown[]) => util.inspect(args),\n warn: (...args: unknown[]) => util.inspect(args),\n },\n JSON,\n Math,\n Date,\n Array,\n Object,\n String,\n Number,\n Boolean,\n Map,\n Set,\n Promise,\n Buffer,\n // Blocked globals\n setTimeout: undefined,\n setInterval: undefined,\n fetch: undefined,\n require: undefined,\n process: undefined,\n // Merge user-provided variables\n ...context.variables,\n }\n\n switch (context.scope.type) {\n case 'system':\n return { ...base, ...this.contextProvider.getSystemSandbox() }\n\n case 'device':\n return { ...base, ...this.contextProvider.getDeviceSandbox(context.scope.deviceId!) }\n\n case 'provider':\n return { ...base, ...this.contextProvider.getProviderSandbox(context.scope.providerId!) }\n\n case 'addon':\n return { ...base, ...this.contextProvider.getAddonSandbox(context.scope.addonId!) }\n\n default:\n return base\n }\n }\n}\n","import type {\n AgentInfo,\n AgentStatus,\n AgentEntry,\n AgentEventEmitter,\n} from './interfaces.js'\n\nexport class AgentRegistry {\n private readonly agents: Map<string, AgentEntry> = new Map()\n private readonly heartbeatIntervals: Map<string, NodeJS.Timeout> = new Map()\n\n constructor(\n private readonly events: AgentEventEmitter,\n private readonly heartbeatTimeoutMs: number = 30000,\n private readonly heartbeatCheckIntervalMs: number = 10000,\n ) {}\n\n /** Register a new agent */\n registerAgent(info: AgentInfo): void {\n const entry: AgentEntry = {\n info,\n state: 'online',\n connectedSince: Date.now(),\n lastHeartbeat: Date.now(),\n activeTaskCount: 0,\n completedTaskCount: 0,\n failedTaskCount: 0,\n }\n\n this.agents.set(info.id, entry)\n this.startHeartbeatCheck(info.id)\n\n this.events.emitAgentRegistered(info.id, [...info.capabilities])\n }\n\n /** Remove agent */\n unregisterAgent(id: string): void {\n const interval = this.heartbeatIntervals.get(id)\n if (interval) {\n clearInterval(interval)\n this.heartbeatIntervals.delete(id)\n }\n\n this.agents.delete(id)\n this.events.emitAgentUnregistered(id)\n }\n\n /** Update heartbeat timestamp */\n heartbeat(id: string): void {\n const entry = this.agents.get(id)\n if (!entry) return\n\n entry.lastHeartbeat = Date.now()\n\n if (entry.state === 'offline') {\n entry.state = 'online'\n this.events.emitAgentOnline(id)\n }\n }\n\n /** Find agents with a specific capability */\n getAgentsWithCapability(capability: string): readonly AgentEntry[] {\n return [...this.agents.values()].filter(\n (a) => a.state === 'online' && a.info.capabilities.includes(capability),\n )\n }\n\n /** Get best agent for a task (least loaded) */\n selectAgent(capability: string, preferredId?: string): AgentEntry | null {\n const capable = this.getAgentsWithCapability(capability)\n if (capable.length === 0) return null\n\n if (preferredId) {\n const preferred = capable.find((a) => a.info.id === preferredId)\n if (preferred) return preferred\n }\n\n // Least loaded: sort by activeTaskCount ascending\n const sorted = [...capable].sort((a, b) => a.activeTaskCount - b.activeTaskCount)\n return sorted[0] ?? null\n }\n\n /** List all agents with status */\n listAgents(): readonly AgentStatus[] {\n return [...this.agents.values()].map((entry) => ({\n id: entry.info.id,\n name: entry.info.name,\n state: entry.state,\n capabilities: [...entry.info.capabilities],\n lastHeartbeat: entry.lastHeartbeat,\n connectedSince: entry.connectedSince,\n resources: entry.info.resources,\n activeTaskCount: entry.activeTaskCount,\n completedTaskCount: entry.completedTaskCount,\n failedTaskCount: entry.failedTaskCount,\n }))\n }\n\n /** Get single agent */\n getAgent(id: string): AgentEntry | null {\n return this.agents.get(id) ?? null\n }\n\n /** Destroy all heartbeat intervals */\n destroy(): void {\n for (const interval of this.heartbeatIntervals.values()) {\n clearInterval(interval)\n }\n this.heartbeatIntervals.clear()\n }\n\n private startHeartbeatCheck(id: string): void {\n const interval = setInterval(() => {\n const entry = this.agents.get(id)\n if (!entry) return\n\n const elapsed = Date.now() - entry.lastHeartbeat\n if (elapsed > this.heartbeatTimeoutMs && entry.state === 'online') {\n entry.state = 'offline'\n this.events.emitAgentOffline(id)\n }\n }, this.heartbeatCheckIntervalMs)\n\n this.heartbeatIntervals.set(id, interval)\n }\n}\n","import type { AgentRegistry } from './agent-registry.js'\nimport type {\n AgentTask,\n AgentTaskResult,\n AgentEntry,\n TaskDispatchOptions,\n AgentEventEmitter,\n} from './interfaces.js'\n\ninterface PendingTask {\n readonly resolve: (result: AgentTaskResult) => void\n readonly reject: (error: Error) => void\n readonly timeout: NodeJS.Timeout\n}\n\nexport class TaskDispatcher {\n private readonly pendingTasks: Map<string, PendingTask> = new Map()\n private readonly localExecutors: Map<\n string,\n (input: Record<string, unknown>) => Promise<Record<string, unknown>>\n > = new Map()\n\n constructor(\n private readonly agentRegistry: AgentRegistry,\n private readonly events: AgentEventEmitter,\n ) {}\n\n /** Dispatch a task to the best available agent */\n async dispatch(task: AgentTask, options?: TaskDispatchOptions): Promise<AgentTaskResult> {\n const capability = options?.capability ?? task.capability\n const agent = this.agentRegistry.selectAgent(capability, options?.preferredAgent)\n\n if (!agent && !options?.remoteOnly) {\n return this.executeLocally(task)\n }\n\n if (!agent) {\n return {\n taskId: task.id,\n agentId: 'none',\n status: 'error',\n error: 'No agent available',\n durationMs: 0,\n }\n }\n\n return this.sendToAgent(task, agent)\n }\n\n /** Register a local executor for a capability (in-process fallback) */\n registerLocalExecutor(\n capability: string,\n executor: (input: Record<string, unknown>) => Promise<Record<string, unknown>>,\n ): void {\n this.localExecutors.set(capability, executor)\n }\n\n /** Called when an agent returns a result */\n handleTaskResult(result: AgentTaskResult): void {\n const pending = this.pendingTasks.get(result.taskId)\n if (pending) {\n clearTimeout(pending.timeout)\n this.pendingTasks.delete(result.taskId)\n pending.resolve(result)\n }\n\n // Update agent stats\n const agent = this.agentRegistry.getAgent(result.agentId)\n if (agent) {\n agent.activeTaskCount--\n if (result.status === 'success') {\n agent.completedTaskCount++\n } else {\n agent.failedTaskCount++\n }\n }\n }\n\n private async executeLocally(task: AgentTask): Promise<AgentTaskResult> {\n const executor = this.localExecutors.get(task.capability)\n if (!executor) {\n return {\n taskId: task.id,\n agentId: 'local',\n status: 'error',\n error: `No local executor for ${task.capability}`,\n durationMs: 0,\n }\n }\n\n const start = Date.now()\n try {\n const output = await executor(task.input)\n return {\n taskId: task.id,\n agentId: 'local',\n status: 'success',\n output,\n durationMs: Date.now() - start,\n }\n } catch (err) {\n return {\n taskId: task.id,\n agentId: 'local',\n status: 'error',\n error: String(err),\n durationMs: Date.now() - start,\n }\n }\n }\n\n private sendToAgent(task: AgentTask, agent: AgentEntry): Promise<AgentTaskResult> {\n agent.activeTaskCount++\n\n return new Promise((resolve) => {\n const timeout = setTimeout(() => {\n this.pendingTasks.delete(task.id)\n agent.activeTaskCount--\n agent.failedTaskCount++\n resolve({\n taskId: task.id,\n agentId: agent.info.id,\n status: 'timeout',\n durationMs: task.timeout,\n error: 'Task timed out',\n })\n }, task.timeout)\n\n this.pendingTasks.set(task.id, { resolve, reject: () => {}, timeout })\n\n this.events.emitTaskDispatched(task.id, agent.info.id, task.capability)\n })\n }\n}\n","'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n BINARY_TYPES,\n CLOSE_TIMEOUT: 30000,\n EMPTY_BUFFER: Buffer.alloc(0),\n GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n hasBlob,\n kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n kListener: Symbol('kListener'),\n kStatusCode: Symbol('status-code'),\n kWebSocket: Symbol('websocket'),\n NOOP: () => {}\n};\n","'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n if (list.length === 0) return EMPTY_BUFFER;\n if (list.length === 1) return list[0];\n\n const target = Buffer.allocUnsafe(totalLength);\n let offset = 0;\n\n for (let i = 0; i < list.length; i++) {\n const buf = list[i];\n target.set(buf, offset);\n offset += buf.length;\n }\n\n if (offset < totalLength) {\n return new FastBuffer(target.buffer, target.byteOffset, offset);\n }\n\n return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n for (let i = 0; i < length; i++) {\n output[offset + i] = source[i] ^ mask[i & 3];\n }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n if (buf.length === buf.buffer.byteLength) {\n return buf.buffer;\n }\n\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n toBuffer.readOnly = true;\n\n if (Buffer.isBuffer(data)) return data;\n\n let buf;\n\n if (data instanceof ArrayBuffer) {\n buf = new FastBuffer(data);\n } else if (ArrayBuffer.isView(data)) {\n buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n } else {\n buf = Buffer.from(data);\n toBuffer.readOnly = false;\n }\n\n return buf;\n}\n\nmodule.exports = {\n concat,\n mask: _mask,\n toArrayBuffer,\n toBuffer,\n unmask: _unmask\n};\n\n/* istanbul ignore else */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n try {\n const bufferUtil = require('bufferutil');\n\n module.exports.mask = function (source, mask, output, offset, length) {\n if (length < 48) _mask(source, mask, output, offset, length);\n else bufferUtil.mask(source, mask, output, offset, length);\n };\n\n module.exports.unmask = function (buffer, mask) {\n if (buffer.length < 32) _unmask(buffer, mask);\n else bufferUtil.unmask(buffer, mask);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n /**\n * Creates a new `Limiter`.\n *\n * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n * to run concurrently\n */\n constructor(concurrency) {\n this[kDone] = () => {\n this.pending--;\n this[kRun]();\n };\n this.concurrency = concurrency || Infinity;\n this.jobs = [];\n this.pending = 0;\n }\n\n /**\n * Adds a job to the queue.\n *\n * @param {Function} job The job to run\n * @public\n */\n add(job) {\n this.jobs.push(job);\n this[kRun]();\n }\n\n /**\n * Removes a job from the queue and runs it if possible.\n *\n * @private\n */\n [kRun]() {\n if (this.pending === this.concurrency) return;\n\n if (this.jobs.length) {\n const job = this.jobs.shift();\n\n this.pending++;\n job(this[kDone]);\n }\n }\n}\n\nmodule.exports = Limiter;\n","'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n /**\n * Creates a PerMessageDeflate instance.\n *\n * @param {Object} [options] Configuration options\n * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n * for, or request, a custom client window size\n * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n * acknowledge disabling of client context takeover\n * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n * calls to zlib\n * @param {Boolean} [options.isServer=false] Create the instance in either\n * server or client mode\n * @param {Number} [options.maxPayload=0] The maximum allowed message length\n * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n * use of a custom server window size\n * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n * disabling of server context takeover\n * @param {Number} [options.threshold=1024] Size (in bytes) below which\n * messages should not be compressed if context takeover is disabled\n * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n * deflate\n * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n * inflate\n */\n constructor(options) {\n this._options = options || {};\n this._threshold =\n this._options.threshold !== undefined ? this._options.threshold : 1024;\n this._maxPayload = this._options.maxPayload | 0;\n this._isServer = !!this._options.isServer;\n this._deflate = null;\n this._inflate = null;\n\n this.params = null;\n\n if (!zlibLimiter) {\n const concurrency =\n this._options.concurrencyLimit !== undefined\n ? this._options.concurrencyLimit\n : 10;\n zlibLimiter = new Limiter(concurrency);\n }\n }\n\n /**\n * @type {String}\n */\n static get extensionName() {\n return 'permessage-deflate';\n }\n\n /**\n * Create an extension negotiation offer.\n *\n * @return {Object} Extension parameters\n * @public\n */\n offer() {\n const params = {};\n\n if (this._options.serverNoContextTakeover) {\n params.server_no_context_takeover = true;\n }\n if (this._options.clientNoContextTakeover) {\n params.client_no_context_takeover = true;\n }\n if (this._options.serverMaxWindowBits) {\n params.server_max_window_bits = this._options.serverMaxWindowBits;\n }\n if (this._options.clientMaxWindowBits) {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n } else if (this._options.clientMaxWindowBits == null) {\n params.client_max_window_bits = true;\n }\n\n return params;\n }\n\n /**\n * Accept an extension negotiation offer/response.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Object} Accepted configuration\n * @public\n */\n accept(configurations) {\n configurations = this.normalizeParams(configurations);\n\n this.params = this._isServer\n ? this.acceptAsServer(configurations)\n : this.acceptAsClient(configurations);\n\n return this.params;\n }\n\n /**\n * Releases all resources used by the extension.\n *\n * @public\n */\n cleanup() {\n if (this._inflate) {\n this._inflate.close();\n this._inflate = null;\n }\n\n if (this._deflate) {\n const callback = this._deflate[kCallback];\n\n this._deflate.close();\n this._deflate = null;\n\n if (callback) {\n callback(\n new Error(\n 'The deflate stream was closed while data was being processed'\n )\n );\n }\n }\n }\n\n /**\n * Accept an extension negotiation offer.\n *\n * @param {Array} offers The extension negotiation offers\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsServer(offers) {\n const opts = this._options;\n const accepted = offers.find((params) => {\n if (\n (opts.serverNoContextTakeover === false &&\n params.server_no_context_takeover) ||\n (params.server_max_window_bits &&\n (opts.serverMaxWindowBits === false ||\n (typeof opts.serverMaxWindowBits === 'number' &&\n opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n (typeof opts.clientMaxWindowBits === 'number' &&\n !params.client_max_window_bits)\n ) {\n return false;\n }\n\n return true;\n });\n\n if (!accepted) {\n throw new Error('None of the extension offers can be accepted');\n }\n\n if (opts.serverNoContextTakeover) {\n accepted.server_no_context_takeover = true;\n }\n if (opts.clientNoContextTakeover) {\n accepted.client_no_context_takeover = true;\n }\n if (typeof opts.serverMaxWindowBits === 'number') {\n accepted.server_max_window_bits = opts.serverMaxWindowBits;\n }\n if (typeof opts.clientMaxWindowBits === 'number') {\n accepted.client_max_window_bits = opts.clientMaxWindowBits;\n } else if (\n accepted.client_max_window_bits === true ||\n opts.clientMaxWindowBits === false\n ) {\n delete accepted.client_max_window_bits;\n }\n\n return accepted;\n }\n\n /**\n * Accept the extension negotiation response.\n *\n * @param {Array} response The extension negotiation response\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsClient(response) {\n const params = response[0];\n\n if (\n this._options.clientNoContextTakeover === false &&\n params.client_no_context_takeover\n ) {\n throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n }\n\n if (!params.client_max_window_bits) {\n if (typeof this._options.clientMaxWindowBits === 'number') {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n }\n } else if (\n this._options.clientMaxWindowBits === false ||\n (typeof this._options.clientMaxWindowBits === 'number' &&\n params.client_max_window_bits > this._options.clientMaxWindowBits)\n ) {\n throw new Error(\n 'Unexpected or invalid parameter \"client_max_window_bits\"'\n );\n }\n\n return params;\n }\n\n /**\n * Normalize parameters.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Array} The offers/response with normalized parameters\n * @private\n */\n normalizeParams(configurations) {\n configurations.forEach((params) => {\n Object.keys(params).forEach((key) => {\n let value = params[key];\n\n if (value.length > 1) {\n throw new Error(`Parameter \"${key}\" must have only a single value`);\n }\n\n value = value[0];\n\n if (key === 'client_max_window_bits') {\n if (value !== true) {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (!this._isServer) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else if (key === 'server_max_window_bits') {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (\n key === 'client_no_context_takeover' ||\n key === 'server_no_context_takeover'\n ) {\n if (value !== true) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else {\n throw new Error(`Unknown parameter \"${key}\"`);\n }\n\n params[key] = value;\n });\n });\n\n return configurations;\n }\n\n /**\n * Decompress data. Concurrency limited.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n decompress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._decompress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Compress data. Concurrency limited.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n compress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._compress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Decompress data.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _decompress(data, fin, callback) {\n const endpoint = this._isServer ? 'client' : 'server';\n\n if (!this._inflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._inflate = zlib.createInflateRaw({\n ...this._options.zlibInflateOptions,\n windowBits\n });\n this._inflate[kPerMessageDeflate] = this;\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n this._inflate.on('error', inflateOnError);\n this._inflate.on('data', inflateOnData);\n }\n\n this._inflate[kCallback] = callback;\n\n this._inflate.write(data);\n if (fin) this._inflate.write(TRAILER);\n\n this._inflate.flush(() => {\n const err = this._inflate[kError];\n\n if (err) {\n this._inflate.close();\n this._inflate = null;\n callback(err);\n return;\n }\n\n const data = bufferUtil.concat(\n this._inflate[kBuffers],\n this._inflate[kTotalLength]\n );\n\n if (this._inflate._readableState.endEmitted) {\n this._inflate.close();\n this._inflate = null;\n } else {\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._inflate.reset();\n }\n }\n\n callback(null, data);\n });\n }\n\n /**\n * Compress data.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _compress(data, fin, callback) {\n const endpoint = this._isServer ? 'server' : 'client';\n\n if (!this._deflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._deflate = zlib.createDeflateRaw({\n ...this._options.zlibDeflateOptions,\n windowBits\n });\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n this._deflate.on('data', deflateOnData);\n }\n\n this._deflate[kCallback] = callback;\n\n this._deflate.write(data);\n this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n if (!this._deflate) {\n //\n // The deflate stream was closed while data was being processed.\n //\n return;\n }\n\n let data = bufferUtil.concat(\n this._deflate[kBuffers],\n this._deflate[kTotalLength]\n );\n\n if (fin) {\n data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4);\n }\n\n //\n // Ensure that the callback will not be called again in\n // `PerMessageDeflate#cleanup()`.\n //\n this._deflate[kCallback] = null;\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._deflate.reset();\n }\n\n callback(null, data);\n });\n }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n this[kBuffers].push(chunk);\n this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n this[kTotalLength] += chunk.length;\n\n if (\n this[kPerMessageDeflate]._maxPayload < 1 ||\n this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n ) {\n this[kBuffers].push(chunk);\n return;\n }\n\n this[kError] = new RangeError('Max payload size exceeded');\n this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n this[kError][kStatusCode] = 1009;\n this.removeListener('data', inflateOnData);\n\n //\n // The choice to employ `zlib.reset()` over `zlib.close()` is dictated by the\n // fact that in Node.js versions prior to 13.10.0, the callback for\n // `zlib.flush()` is not called if `zlib.close()` is used. Utilizing\n // `zlib.reset()` ensures that either the callback is invoked or an error is\n // emitted.\n //\n this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n //\n // There is no need to call `Zlib#close()` as the handle is automatically\n // closed when an error is emitted.\n //\n this[kPerMessageDeflate]._inflate = null;\n\n if (this[kError]) {\n this[kCallback](this[kError]);\n return;\n }\n\n err[kStatusCode] = 1007;\n this[kCallback](err);\n}\n","'use strict';\n\nconst { isUtf8 } = require('buffer');\n\nconst { hasBlob } = require('./constants');\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n return (\n (code >= 1000 &&\n code <= 1014 &&\n code !== 1004 &&\n code !== 1005 &&\n code !== 1006) ||\n (code >= 3000 && code <= 4999)\n );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n const len = buf.length;\n let i = 0;\n\n while (i < len) {\n if ((buf[i] & 0x80) === 0) {\n // 0xxxxxxx\n i++;\n } else if ((buf[i] & 0xe0) === 0xc0) {\n // 110xxxxx 10xxxxxx\n if (\n i + 1 === len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i] & 0xfe) === 0xc0 // Overlong\n ) {\n return false;\n }\n\n i += 2;\n } else if ((buf[i] & 0xf0) === 0xe0) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n if (\n i + 2 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n ) {\n return false;\n }\n\n i += 3;\n } else if ((buf[i] & 0xf8) === 0xf0) {\n // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n if (\n i + 3 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i + 3] & 0xc0) !== 0x80 ||\n (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n buf[i] > 0xf4 // > U+10FFFF\n ) {\n return false;\n }\n\n i += 4;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Determines whether a value is a `Blob`.\n *\n * @param {*} value The value to be tested\n * @return {Boolean} `true` if `value` is a `Blob`, else `false`\n * @private\n */\nfunction isBlob(value) {\n return (\n hasBlob &&\n typeof value === 'object' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n (value[Symbol.toStringTag] === 'Blob' ||\n value[Symbol.toStringTag] === 'File')\n );\n}\n\nmodule.exports = {\n isBlob,\n isValidStatusCode,\n isValidUTF8: _isValidUTF8,\n tokenChars\n};\n\nif (isUtf8) {\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);\n };\n} /* istanbul ignore else */ else if (!process.env.WS_NO_UTF_8_VALIDATE) {\n try {\n const isValidUTF8 = require('utf-8-validate');\n\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n kStatusCode,\n kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst FastBuffer = Buffer[Symbol.species];\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\nconst DEFER_EVENT = 6;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n /**\n * Creates a Receiver instance.\n *\n * @param {Object} [options] Options object\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {String} [options.binaryType=nodebuffer] The type for binary data\n * @param {Object} [options.extensions] An object containing the negotiated\n * extensions\n * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n * client or server mode\n * @param {Number} [options.maxPayload=0] The maximum allowed message length\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n */\n constructor(options = {}) {\n super();\n\n this._allowSynchronousEvents =\n options.allowSynchronousEvents !== undefined\n ? options.allowSynchronousEvents\n : true;\n this._binaryType = options.binaryType || BINARY_TYPES[0];\n this._extensions = options.extensions || {};\n this._isServer = !!options.isServer;\n this._maxPayload = options.maxPayload | 0;\n this._skipUTF8Validation = !!options.skipUTF8Validation;\n this[kWebSocket] = undefined;\n\n this._bufferedBytes = 0;\n this._buffers = [];\n\n this._compressed = false;\n this._payloadLength = 0;\n this._mask = undefined;\n this._fragmented = 0;\n this._masked = false;\n this._fin = false;\n this._opcode = 0;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragments = [];\n\n this._errored = false;\n this._loop = false;\n this._state = GET_INFO;\n }\n\n /**\n * Implements `Writable.prototype._write()`.\n *\n * @param {Buffer} chunk The chunk of data to write\n * @param {String} encoding The character encoding of `chunk`\n * @param {Function} cb Callback\n * @private\n */\n _write(chunk, encoding, cb) {\n if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n this._bufferedBytes += chunk.length;\n this._buffers.push(chunk);\n this.startLoop(cb);\n }\n\n /**\n * Consumes `n` bytes from the buffered data.\n *\n * @param {Number} n The number of bytes to consume\n * @return {Buffer} The consumed bytes\n * @private\n */\n consume(n) {\n this._bufferedBytes -= n;\n\n if (n === this._buffers[0].length) return this._buffers.shift();\n\n if (n < this._buffers[0].length) {\n const buf = this._buffers[0];\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n\n return new FastBuffer(buf.buffer, buf.byteOffset, n);\n }\n\n const dst = Buffer.allocUnsafe(n);\n\n do {\n const buf = this._buffers[0];\n const offset = dst.length - n;\n\n if (n >= buf.length) {\n dst.set(this._buffers.shift(), offset);\n } else {\n dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n }\n\n n -= buf.length;\n } while (n > 0);\n\n return dst;\n }\n\n /**\n * Starts the parsing loop.\n *\n * @param {Function} cb Callback\n * @private\n */\n startLoop(cb) {\n this._loop = true;\n\n do {\n switch (this._state) {\n case GET_INFO:\n this.getInfo(cb);\n break;\n case GET_PAYLOAD_LENGTH_16:\n this.getPayloadLength16(cb);\n break;\n case GET_PAYLOAD_LENGTH_64:\n this.getPayloadLength64(cb);\n break;\n case GET_MASK:\n this.getMask();\n break;\n case GET_DATA:\n this.getData(cb);\n break;\n case INFLATING:\n case DEFER_EVENT:\n this._loop = false;\n return;\n }\n } while (this._loop);\n\n if (!this._errored) cb();\n }\n\n /**\n * Reads the first two bytes of a frame.\n *\n * @param {Function} cb Callback\n * @private\n */\n getInfo(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(2);\n\n if ((buf[0] & 0x30) !== 0x00) {\n const error = this.createError(\n RangeError,\n 'RSV2 and RSV3 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_2_3'\n );\n\n cb(error);\n return;\n }\n\n const compressed = (buf[0] & 0x40) === 0x40;\n\n if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n this._fin = (buf[0] & 0x80) === 0x80;\n this._opcode = buf[0] & 0x0f;\n this._payloadLength = buf[1] & 0x7f;\n\n if (this._opcode === 0x00) {\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fragmented) {\n const error = this.createError(\n RangeError,\n 'invalid opcode 0',\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._opcode = this._fragmented;\n } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n if (this._fragmented) {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._compressed = compressed;\n } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n if (!this._fin) {\n const error = this.createError(\n RangeError,\n 'FIN must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_FIN'\n );\n\n cb(error);\n return;\n }\n\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (\n this._payloadLength > 0x7d ||\n (this._opcode === 0x08 && this._payloadLength === 1)\n ) {\n const error = this.createError(\n RangeError,\n `invalid payload length ${this._payloadLength}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n } else {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n this._masked = (buf[1] & 0x80) === 0x80;\n\n if (this._isServer) {\n if (!this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n } else if (this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n\n if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n else this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+16).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength16(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n this._payloadLength = this.consume(2).readUInt16BE(0);\n this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+64).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength64(cb) {\n if (this._bufferedBytes < 8) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(8);\n const num = buf.readUInt32BE(0);\n\n //\n // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n // if payload length is greater than this number.\n //\n if (num > Math.pow(2, 53 - 32) - 1) {\n const error = this.createError(\n RangeError,\n 'Unsupported WebSocket frame: payload length > 2^53 - 1',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n this.haveLength(cb);\n }\n\n /**\n * Payload length has been read.\n *\n * @param {Function} cb Callback\n * @private\n */\n haveLength(cb) {\n if (this._payloadLength && this._opcode < 0x08) {\n this._totalPayloadLength += this._payloadLength;\n if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n }\n\n if (this._masked) this._state = GET_MASK;\n else this._state = GET_DATA;\n }\n\n /**\n * Reads mask bytes.\n *\n * @private\n */\n getMask() {\n if (this._bufferedBytes < 4) {\n this._loop = false;\n return;\n }\n\n this._mask = this.consume(4);\n this._state = GET_DATA;\n }\n\n /**\n * Reads data bytes.\n *\n * @param {Function} cb Callback\n * @private\n */\n getData(cb) {\n let data = EMPTY_BUFFER;\n\n if (this._payloadLength) {\n if (this._bufferedBytes < this._payloadLength) {\n this._loop = false;\n return;\n }\n\n data = this.consume(this._payloadLength);\n\n if (\n this._masked &&\n (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n ) {\n unmask(data, this._mask);\n }\n }\n\n if (this._opcode > 0x07) {\n this.controlMessage(data, cb);\n return;\n }\n\n if (this._compressed) {\n this._state = INFLATING;\n this.decompress(data, cb);\n return;\n }\n\n if (data.length) {\n //\n // This message is not compressed so its length is the sum of the payload\n // length of all fragments.\n //\n this._messageLength = this._totalPayloadLength;\n this._fragments.push(data);\n }\n\n this.dataMessage(cb);\n }\n\n /**\n * Decompresses data.\n *\n * @param {Buffer} data Compressed data\n * @param {Function} cb Callback\n * @private\n */\n decompress(data, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n if (err) return cb(err);\n\n if (buf.length) {\n this._messageLength += buf.length;\n if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._fragments.push(buf);\n }\n\n this.dataMessage(cb);\n if (this._state === GET_INFO) this.startLoop(cb);\n });\n }\n\n /**\n * Handles a data message.\n *\n * @param {Function} cb Callback\n * @private\n */\n dataMessage(cb) {\n if (!this._fin) {\n this._state = GET_INFO;\n return;\n }\n\n const messageLength = this._messageLength;\n const fragments = this._fragments;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragmented = 0;\n this._fragments = [];\n\n if (this._opcode === 2) {\n let data;\n\n if (this._binaryType === 'nodebuffer') {\n data = concat(fragments, messageLength);\n } else if (this._binaryType === 'arraybuffer') {\n data = toArrayBuffer(concat(fragments, messageLength));\n } else if (this._binaryType === 'blob') {\n data = new Blob(fragments);\n } else {\n data = fragments;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit('message', data, true);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', data, true);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n } else {\n const buf = concat(fragments, messageLength);\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n if (this._state === INFLATING || this._allowSynchronousEvents) {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n }\n\n /**\n * Handles a control message.\n *\n * @param {Buffer} data Data to handle\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n controlMessage(data, cb) {\n if (this._opcode === 0x08) {\n if (data.length === 0) {\n this._loop = false;\n this.emit('conclude', 1005, EMPTY_BUFFER);\n this.end();\n } else {\n const code = data.readUInt16BE(0);\n\n if (!isValidStatusCode(code)) {\n const error = this.createError(\n RangeError,\n `invalid status code ${code}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CLOSE_CODE'\n );\n\n cb(error);\n return;\n }\n\n const buf = new FastBuffer(\n data.buffer,\n data.byteOffset + 2,\n data.length - 2\n );\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n this._loop = false;\n this.emit('conclude', code, buf);\n this.end();\n }\n\n this._state = GET_INFO;\n return;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n\n /**\n * Builds an error object.\n *\n * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n * @param {String} message The error message\n * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n * `message`\n * @param {Number} statusCode The status code\n * @param {String} errorCode The exposed error code\n * @return {(Error|RangeError)} The error\n * @private\n */\n createError(ErrorCtor, message, prefix, statusCode, errorCode) {\n this._loop = false;\n this._errored = true;\n\n const err = new ErrorCtor(\n prefix ? `Invalid WebSocket frame: ${message}` : message\n );\n\n Error.captureStackTrace(err, this.createError);\n err.code = errorCode;\n err[kStatusCode] = statusCode;\n return err;\n }\n}\n\nmodule.exports = Receiver;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex\" }] */\n\n'use strict';\n\nconst { Duplex } = require('stream');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants');\nconst { isBlob, isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\nconst RANDOM_POOL_SIZE = 8 * 1024;\nlet randomPool;\nlet randomPoolPointer = RANDOM_POOL_SIZE;\n\nconst DEFAULT = 0;\nconst DEFLATING = 1;\nconst GET_BLOB_DATA = 2;\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n /**\n * Creates a Sender instance.\n *\n * @param {Duplex} socket The connection socket\n * @param {Object} [extensions] An object containing the negotiated extensions\n * @param {Function} [generateMask] The function used to generate the masking\n * key\n */\n constructor(socket, extensions, generateMask) {\n this._extensions = extensions || {};\n\n if (generateMask) {\n this._generateMask = generateMask;\n this._maskBuffer = Buffer.alloc(4);\n }\n\n this._socket = socket;\n\n this._firstFragment = true;\n this._compress = false;\n\n this._bufferedBytes = 0;\n this._queue = [];\n this._state = DEFAULT;\n this.onerror = NOOP;\n this[kWebSocket] = undefined;\n }\n\n /**\n * Frames a piece of data according to the HyBi WebSocket protocol.\n *\n * @param {(Buffer|String)} data The data to frame\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @return {(Buffer|String)[]} The framed data\n * @public\n */\n static frame(data, options) {\n let mask;\n let merge = false;\n let offset = 2;\n let skipMasking = false;\n\n if (options.mask) {\n mask = options.maskBuffer || maskBuffer;\n\n if (options.generateMask) {\n options.generateMask(mask);\n } else {\n if (randomPoolPointer === RANDOM_POOL_SIZE) {\n /* istanbul ignore else */\n if (randomPool === undefined) {\n //\n // This is lazily initialized because server-sent frames must not\n // be masked so it may never be used.\n //\n randomPool = Buffer.alloc(RANDOM_POOL_SIZE);\n }\n\n randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);\n randomPoolPointer = 0;\n }\n\n mask[0] = randomPool[randomPoolPointer++];\n mask[1] = randomPool[randomPoolPointer++];\n mask[2] = randomPool[randomPoolPointer++];\n mask[3] = randomPool[randomPoolPointer++];\n }\n\n skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n offset = 6;\n }\n\n let dataLength;\n\n if (typeof data === 'string') {\n if (\n (!options.mask || skipMasking) &&\n options[kByteLength] !== undefined\n ) {\n dataLength = options[kByteLength];\n } else {\n data = Buffer.from(data);\n dataLength = data.length;\n }\n } else {\n dataLength = data.length;\n merge = options.mask && options.readOnly && !skipMasking;\n }\n\n let payloadLength = dataLength;\n\n if (dataLength >= 65536) {\n offset += 8;\n payloadLength = 127;\n } else if (dataLength > 125) {\n offset += 2;\n payloadLength = 126;\n }\n\n const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset);\n\n target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n if (options.rsv1) target[0] |= 0x40;\n\n target[1] = payloadLength;\n\n if (payloadLength === 126) {\n target.writeUInt16BE(dataLength, 2);\n } else if (payloadLength === 127) {\n target[2] = target[3] = 0;\n target.writeUIntBE(dataLength, 4, 6);\n }\n\n if (!options.mask) return [target, data];\n\n target[1] |= 0x80;\n target[offset - 4] = mask[0];\n target[offset - 3] = mask[1];\n target[offset - 2] = mask[2];\n target[offset - 1] = mask[3];\n\n if (skipMasking) return [target, data];\n\n if (merge) {\n applyMask(data, mask, target, offset, dataLength);\n return [target];\n }\n\n applyMask(data, mask, data, 0, dataLength);\n return [target, data];\n }\n\n /**\n * Sends a close message to the other peer.\n *\n * @param {Number} [code] The status code component of the body\n * @param {(String|Buffer)} [data] The message component of the body\n * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n * @param {Function} [cb] Callback\n * @public\n */\n close(code, data, mask, cb) {\n let buf;\n\n if (code === undefined) {\n buf = EMPTY_BUFFER;\n } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n throw new TypeError('First argument must be a valid error code number');\n } else if (data === undefined || !data.length) {\n buf = Buffer.allocUnsafe(2);\n buf.writeUInt16BE(code, 0);\n } else {\n const length = Buffer.byteLength(data);\n\n if (length > 123) {\n throw new RangeError('The message must not be greater than 123 bytes');\n }\n\n buf = Buffer.allocUnsafe(2 + length);\n buf.writeUInt16BE(code, 0);\n\n if (typeof data === 'string') {\n buf.write(data, 2);\n } else {\n buf.set(data, 2);\n }\n }\n\n const options = {\n [kByteLength]: buf.length,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x08,\n readOnly: false,\n rsv1: false\n };\n\n if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, buf, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(buf, options), cb);\n }\n }\n\n /**\n * Sends a ping message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n ping(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x09,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a pong message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n pong(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x0a,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a data message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Object} options Options object\n * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n * or text\n * @param {Boolean} [options.compress=false] Specifies whether or not to\n * compress `data`\n * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Function} [cb] Callback\n * @public\n */\n send(data, options, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n let opcode = options.binary ? 2 : 1;\n let rsv1 = options.compress;\n\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (this._firstFragment) {\n this._firstFragment = false;\n if (\n rsv1 &&\n perMessageDeflate &&\n perMessageDeflate.params[\n perMessageDeflate._isServer\n ? 'server_no_context_takeover'\n : 'client_no_context_takeover'\n ]\n ) {\n rsv1 = byteLength >= perMessageDeflate._threshold;\n }\n this._compress = rsv1;\n } else {\n rsv1 = false;\n opcode = 0;\n }\n\n if (options.fin) this._firstFragment = true;\n\n const opts = {\n [kByteLength]: byteLength,\n fin: options.fin,\n generateMask: this._generateMask,\n mask: options.mask,\n maskBuffer: this._maskBuffer,\n opcode,\n readOnly,\n rsv1\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, this._compress, opts, cb]);\n } else {\n this.getBlobData(data, this._compress, opts, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n } else {\n this.dispatch(data, this._compress, opts, cb);\n }\n }\n\n /**\n * Gets the contents of a blob as binary data.\n *\n * @param {Blob} blob The blob\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * the data\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n getBlobData(blob, compress, options, cb) {\n this._bufferedBytes += options[kByteLength];\n this._state = GET_BLOB_DATA;\n\n blob\n .arrayBuffer()\n .then((arrayBuffer) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while the blob was being read'\n );\n\n //\n // `callCallbacks` is called in the next tick to ensure that errors\n // that might be thrown in the callbacks behave like errors thrown\n // outside the promise chain.\n //\n process.nextTick(callCallbacks, this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n const data = toBuffer(arrayBuffer);\n\n if (!compress) {\n this._state = DEFAULT;\n this.sendFrame(Sender.frame(data, options), cb);\n this.dequeue();\n } else {\n this.dispatch(data, compress, options, cb);\n }\n })\n .catch((err) => {\n //\n // `onError` is called in the next tick for the same reason that\n // `callCallbacks` above is.\n //\n process.nextTick(onError, this, err, cb);\n });\n }\n\n /**\n * Dispatches a message.\n *\n * @param {(Buffer|String)} data The message to send\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * `data`\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n dispatch(data, compress, options, cb) {\n if (!compress) {\n this.sendFrame(Sender.frame(data, options), cb);\n return;\n }\n\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n this._bufferedBytes += options[kByteLength];\n this._state = DEFLATING;\n perMessageDeflate.compress(data, options.fin, (_, buf) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while data was being compressed'\n );\n\n callCallbacks(this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n this._state = DEFAULT;\n options.readOnly = false;\n this.sendFrame(Sender.frame(buf, options), cb);\n this.dequeue();\n });\n }\n\n /**\n * Executes queued send operations.\n *\n * @private\n */\n dequeue() {\n while (this._state === DEFAULT && this._queue.length) {\n const params = this._queue.shift();\n\n this._bufferedBytes -= params[3][kByteLength];\n Reflect.apply(params[0], this, params.slice(1));\n }\n }\n\n /**\n * Enqueues a send operation.\n *\n * @param {Array} params Send operation parameters.\n * @private\n */\n enqueue(params) {\n this._bufferedBytes += params[3][kByteLength];\n this._queue.push(params);\n }\n\n /**\n * Sends a frame.\n *\n * @param {(Buffer | String)[]} list The frame to send\n * @param {Function} [cb] Callback\n * @private\n */\n sendFrame(list, cb) {\n if (list.length === 2) {\n this._socket.cork();\n this._socket.write(list[0]);\n this._socket.write(list[1], cb);\n this._socket.uncork();\n } else {\n this._socket.write(list[0], cb);\n }\n }\n}\n\nmodule.exports = Sender;\n\n/**\n * Calls queued callbacks with an error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error to call the callbacks with\n * @param {Function} [cb] The first callback\n * @private\n */\nfunction callCallbacks(sender, err, cb) {\n if (typeof cb === 'function') cb(err);\n\n for (let i = 0; i < sender._queue.length; i++) {\n const params = sender._queue[i];\n const callback = params[params.length - 1];\n\n if (typeof callback === 'function') callback(err);\n }\n}\n\n/**\n * Handles a `Sender` error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error\n * @param {Function} [cb] The first pending callback\n * @private\n */\nfunction onError(sender, err, cb) {\n callCallbacks(sender, err, cb);\n sender.onerror(err);\n}\n","'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n /**\n * Create a new `Event`.\n *\n * @param {String} type The name of the event\n * @throws {TypeError} If the `type` argument is not specified\n */\n constructor(type) {\n this[kTarget] = null;\n this[kType] = type;\n }\n\n /**\n * @type {*}\n */\n get target() {\n return this[kTarget];\n }\n\n /**\n * @type {String}\n */\n get type() {\n return this[kType];\n }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n /**\n * Create a new `CloseEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {Number} [options.code=0] The status code explaining why the\n * connection was closed\n * @param {String} [options.reason=''] A human-readable string explaining why\n * the connection was closed\n * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n * connection was cleanly closed\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kCode] = options.code === undefined ? 0 : options.code;\n this[kReason] = options.reason === undefined ? '' : options.reason;\n this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n }\n\n /**\n * @type {Number}\n */\n get code() {\n return this[kCode];\n }\n\n /**\n * @type {String}\n */\n get reason() {\n return this[kReason];\n }\n\n /**\n * @type {Boolean}\n */\n get wasClean() {\n return this[kWasClean];\n }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n /**\n * Create a new `ErrorEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.error=null] The error that generated this event\n * @param {String} [options.message=''] The error message\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kError] = options.error === undefined ? null : options.error;\n this[kMessage] = options.message === undefined ? '' : options.message;\n }\n\n /**\n * @type {*}\n */\n get error() {\n return this[kError];\n }\n\n /**\n * @type {String}\n */\n get message() {\n return this[kMessage];\n }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n /**\n * Create a new `MessageEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.data=null] The message content\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kData] = options.data === undefined ? null : options.data;\n }\n\n /**\n * @type {*}\n */\n get data() {\n return this[kData];\n }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n /**\n * Register an event listener.\n *\n * @param {String} type A string representing the event type to listen for\n * @param {(Function|Object)} handler The listener to add\n * @param {Object} [options] An options object specifies characteristics about\n * the event listener\n * @param {Boolean} [options.once=false] A `Boolean` indicating that the\n * listener should be invoked at most once after being added. If `true`,\n * the listener would be automatically removed when invoked.\n * @public\n */\n addEventListener(type, handler, options = {}) {\n for (const listener of this.listeners(type)) {\n if (\n !options[kForOnEventAttribute] &&\n listener[kListener] === handler &&\n !listener[kForOnEventAttribute]\n ) {\n return;\n }\n }\n\n let wrapper;\n\n if (type === 'message') {\n wrapper = function onMessage(data, isBinary) {\n const event = new MessageEvent('message', {\n data: isBinary ? data : data.toString()\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'close') {\n wrapper = function onClose(code, message) {\n const event = new CloseEvent('close', {\n code,\n reason: message.toString(),\n wasClean: this._closeFrameReceived && this._closeFrameSent\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'error') {\n wrapper = function onError(error) {\n const event = new ErrorEvent('error', {\n error,\n message: error.message\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'open') {\n wrapper = function onOpen() {\n const event = new Event('open');\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else {\n return;\n }\n\n wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n wrapper[kListener] = handler;\n\n if (options.once) {\n this.once(type, wrapper);\n } else {\n this.on(type, wrapper);\n }\n },\n\n /**\n * Remove an event listener.\n *\n * @param {String} type A string representing the event type to remove\n * @param {(Function|Object)} handler The listener to remove\n * @public\n */\n removeEventListener(type, handler) {\n for (const listener of this.listeners(type)) {\n if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n this.removeListener(type, listener);\n break;\n }\n }\n }\n};\n\nmodule.exports = {\n CloseEvent,\n ErrorEvent,\n Event,\n EventTarget,\n MessageEvent\n};\n\n/**\n * Call an event listener\n *\n * @param {(Function|Object)} listener The listener to call\n * @param {*} thisArg The value to use as `this`` when calling the listener\n * @param {Event} event The event to pass to the listener\n * @private\n */\nfunction callListener(listener, thisArg, event) {\n if (typeof listener === 'object' && listener.handleEvent) {\n listener.handleEvent.call(listener, event);\n } else {\n listener.call(thisArg, event);\n }\n}\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n * parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n if (dest[name] === undefined) dest[name] = [elem];\n else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n const offers = Object.create(null);\n let params = Object.create(null);\n let mustUnescape = false;\n let isEscaping = false;\n let inQuotes = false;\n let extensionName;\n let paramName;\n let start = -1;\n let code = -1;\n let end = -1;\n let i = 0;\n\n for (; i < header.length; i++) {\n code = header.charCodeAt(i);\n\n if (extensionName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n const name = header.slice(start, end);\n if (code === 0x2c) {\n push(offers, name, params);\n params = Object.create(null);\n } else {\n extensionName = name;\n }\n\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (paramName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 || code === 0x09) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n push(params, header.slice(start, end), true);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n start = end = -1;\n } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n paramName = header.slice(start, i);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else {\n //\n // The value of a quoted-string after unescaping must conform to the\n // token ABNF, so only token characters are valid.\n // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n //\n if (isEscaping) {\n if (tokenChars[code] !== 1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (start === -1) start = i;\n else if (!mustUnescape) mustUnescape = true;\n isEscaping = false;\n } else if (inQuotes) {\n if (tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x22 /* '\"' */ && start !== -1) {\n inQuotes = false;\n end = i;\n } else if (code === 0x5c /* '\\' */) {\n isEscaping = true;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n inQuotes = true;\n } else if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n if (end === -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n let value = header.slice(start, end);\n if (mustUnescape) {\n value = value.replace(/\\\\/g, '');\n mustUnescape = false;\n }\n push(params, paramName, value);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n paramName = undefined;\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n }\n\n if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n if (end === -1) end = i;\n const token = header.slice(start, end);\n if (extensionName === undefined) {\n push(offers, token, params);\n } else {\n if (paramName === undefined) {\n push(params, token, true);\n } else if (mustUnescape) {\n push(params, paramName, token.replace(/\\\\/g, ''));\n } else {\n push(params, paramName, token);\n }\n push(offers, extensionName, params);\n }\n\n return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n return Object.keys(extensions)\n .map((extension) => {\n let configurations = extensions[extension];\n if (!Array.isArray(configurations)) configurations = [configurations];\n return configurations\n .map((params) => {\n return [extension]\n .concat(\n Object.keys(params).map((k) => {\n let values = params[k];\n if (!Array.isArray(values)) values = [values];\n return values\n .map((v) => (v === true ? k : `${k}=${v}`))\n .join('; ');\n })\n )\n .join('; ');\n })\n .join(', ');\n })\n .join(', ');\n}\n\nmodule.exports = { format, parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex|Readable$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Duplex, Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst { isBlob } = require('./validation');\n\nconst {\n BINARY_TYPES,\n CLOSE_TIMEOUT,\n EMPTY_BUFFER,\n GUID,\n kForOnEventAttribute,\n kListener,\n kStatusCode,\n kWebSocket,\n NOOP\n} = require('./constants');\nconst {\n EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n /**\n * Create a new `WebSocket`.\n *\n * @param {(String|URL)} address The URL to which to connect\n * @param {(String|String[])} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n */\n constructor(address, protocols, options) {\n super();\n\n this._binaryType = BINARY_TYPES[0];\n this._closeCode = 1006;\n this._closeFrameReceived = false;\n this._closeFrameSent = false;\n this._closeMessage = EMPTY_BUFFER;\n this._closeTimer = null;\n this._errorEmitted = false;\n this._extensions = {};\n this._paused = false;\n this._protocol = '';\n this._readyState = WebSocket.CONNECTING;\n this._receiver = null;\n this._sender = null;\n this._socket = null;\n\n if (address !== null) {\n this._bufferedAmount = 0;\n this._isServer = false;\n this._redirects = 0;\n\n if (protocols === undefined) {\n protocols = [];\n } else if (!Array.isArray(protocols)) {\n if (typeof protocols === 'object' && protocols !== null) {\n options = protocols;\n protocols = [];\n } else {\n protocols = [protocols];\n }\n }\n\n initAsClient(this, address, protocols, options);\n } else {\n this._autoPong = options.autoPong;\n this._closeTimeout = options.closeTimeout;\n this._isServer = true;\n }\n }\n\n /**\n * For historical reasons, the custom \"nodebuffer\" type is used by the default\n * instead of \"blob\".\n *\n * @type {String}\n */\n get binaryType() {\n return this._binaryType;\n }\n\n set binaryType(type) {\n if (!BINARY_TYPES.includes(type)) return;\n\n this._binaryType = type;\n\n //\n // Allow to change `binaryType` on the fly.\n //\n if (this._receiver) this._receiver._binaryType = type;\n }\n\n /**\n * @type {Number}\n */\n get bufferedAmount() {\n if (!this._socket) return this._bufferedAmount;\n\n return this._socket._writableState.length + this._sender._bufferedBytes;\n }\n\n /**\n * @type {String}\n */\n get extensions() {\n return Object.keys(this._extensions).join();\n }\n\n /**\n * @type {Boolean}\n */\n get isPaused() {\n return this._paused;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onclose() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onerror() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onopen() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onmessage() {\n return null;\n }\n\n /**\n * @type {String}\n */\n get protocol() {\n return this._protocol;\n }\n\n /**\n * @type {Number}\n */\n get readyState() {\n return this._readyState;\n }\n\n /**\n * @type {String}\n */\n get url() {\n return this._url;\n }\n\n /**\n * Set up the socket and the internal resources.\n *\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Object} options Options object\n * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.maxPayload=0] The maximum allowed message size\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\n setSocket(socket, head, options) {\n const receiver = new Receiver({\n allowSynchronousEvents: options.allowSynchronousEvents,\n binaryType: this.binaryType,\n extensions: this._extensions,\n isServer: this._isServer,\n maxPayload: options.maxPayload,\n skipUTF8Validation: options.skipUTF8Validation\n });\n\n const sender = new Sender(socket, this._extensions, options.generateMask);\n\n this._receiver = receiver;\n this._sender = sender;\n this._socket = socket;\n\n receiver[kWebSocket] = this;\n sender[kWebSocket] = this;\n socket[kWebSocket] = this;\n\n receiver.on('conclude', receiverOnConclude);\n receiver.on('drain', receiverOnDrain);\n receiver.on('error', receiverOnError);\n receiver.on('message', receiverOnMessage);\n receiver.on('ping', receiverOnPing);\n receiver.on('pong', receiverOnPong);\n\n sender.onerror = senderOnError;\n\n //\n // These methods may not be available if `socket` is just a `Duplex`.\n //\n if (socket.setTimeout) socket.setTimeout(0);\n if (socket.setNoDelay) socket.setNoDelay();\n\n if (head.length > 0) socket.unshift(head);\n\n socket.on('close', socketOnClose);\n socket.on('data', socketOnData);\n socket.on('end', socketOnEnd);\n socket.on('error', socketOnError);\n\n this._readyState = WebSocket.OPEN;\n this.emit('open');\n }\n\n /**\n * Emit the `'close'` event.\n *\n * @private\n */\n emitClose() {\n if (!this._socket) {\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n return;\n }\n\n if (this._extensions[PerMessageDeflate.extensionName]) {\n this._extensions[PerMessageDeflate.extensionName].cleanup();\n }\n\n this._receiver.removeAllListeners();\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n }\n\n /**\n * Start a closing handshake.\n *\n * +----------+ +-----------+ +----------+\n * - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n * | +----------+ +-----------+ +----------+ |\n * +----------+ +-----------+ |\n * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING\n * +----------+ +-----------+ |\n * | | | +---+ |\n * +------------------------+-->|fin| - - - -\n * | +---+ | +---+\n * - - - - -|fin|<---------------------+\n * +---+\n *\n * @param {Number} [code] Status code explaining why the connection is closing\n * @param {(String|Buffer)} [data] The reason why the connection is\n * closing\n * @public\n */\n close(code, data) {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this.readyState === WebSocket.CLOSING) {\n if (\n this._closeFrameSent &&\n (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n ) {\n this._socket.end();\n }\n\n return;\n }\n\n this._readyState = WebSocket.CLOSING;\n this._sender.close(code, data, !this._isServer, (err) => {\n //\n // This error is handled by the `'error'` listener on the socket. We only\n // want to know if the close frame has been sent here.\n //\n if (err) return;\n\n this._closeFrameSent = true;\n\n if (\n this._closeFrameReceived ||\n this._receiver._writableState.errorEmitted\n ) {\n this._socket.end();\n }\n });\n\n setCloseTimer(this);\n }\n\n /**\n * Pause the socket.\n *\n * @public\n */\n pause() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = true;\n this._socket.pause();\n }\n\n /**\n * Send a ping.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the ping is sent\n * @public\n */\n ping(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a pong.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the pong is sent\n * @public\n */\n pong(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Resume the socket.\n *\n * @public\n */\n resume() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = false;\n if (!this._receiver._writableState.needDrain) this._socket.resume();\n }\n\n /**\n * Send a data message.\n *\n * @param {*} data The message to send\n * @param {Object} [options] Options object\n * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n * text\n * @param {Boolean} [options.compress] Specifies whether or not to compress\n * `data`\n * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when data is written out\n * @public\n */\n send(data, options, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n const opts = {\n binary: typeof data !== 'string',\n mask: !this._isServer,\n compress: true,\n fin: true,\n ...options\n };\n\n if (!this._extensions[PerMessageDeflate.extensionName]) {\n opts.compress = false;\n }\n\n this._sender.send(data || EMPTY_BUFFER, opts, cb);\n }\n\n /**\n * Forcibly close the connection.\n *\n * @public\n */\n terminate() {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this._socket) {\n this._readyState = WebSocket.CLOSING;\n this._socket.destroy();\n }\n }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n[\n 'binaryType',\n 'bufferedAmount',\n 'extensions',\n 'isPaused',\n 'protocol',\n 'readyState',\n 'url'\n].forEach((property) => {\n Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n Object.defineProperty(WebSocket.prototype, `on${method}`, {\n enumerable: true,\n get() {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) return listener[kListener];\n }\n\n return null;\n },\n set(handler) {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) {\n this.removeListener(method, listener);\n break;\n }\n }\n\n if (typeof handler !== 'function') return;\n\n this.addEventListener(method, handler, {\n [kForOnEventAttribute]: true\n });\n }\n });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any\n * of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple\n * times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to wait\n * for the closing handshake to finish after `websocket.close()` is called\n * @param {Function} [options.finishRequest] A function which can be used to\n * customize the headers of each http request before it is sent\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n * redirects\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n * handshake request\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n * allowed\n * @param {String} [options.origin] Value of the `Origin` or\n * `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n * permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n * `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n const opts = {\n allowSynchronousEvents: true,\n autoPong: true,\n closeTimeout: CLOSE_TIMEOUT,\n protocolVersion: protocolVersions[1],\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: true,\n followRedirects: false,\n maxRedirects: 10,\n ...options,\n socketPath: undefined,\n hostname: undefined,\n protocol: undefined,\n timeout: undefined,\n method: 'GET',\n host: undefined,\n path: undefined,\n port: undefined\n };\n\n websocket._autoPong = opts.autoPong;\n websocket._closeTimeout = opts.closeTimeout;\n\n if (!protocolVersions.includes(opts.protocolVersion)) {\n throw new RangeError(\n `Unsupported protocol version: ${opts.protocolVersion} ` +\n `(supported versions: ${protocolVersions.join(', ')})`\n );\n }\n\n let parsedUrl;\n\n if (address instanceof URL) {\n parsedUrl = address;\n } else {\n try {\n parsedUrl = new URL(address);\n } catch {\n throw new SyntaxError(`Invalid URL: ${address}`);\n }\n }\n\n if (parsedUrl.protocol === 'http:') {\n parsedUrl.protocol = 'ws:';\n } else if (parsedUrl.protocol === 'https:') {\n parsedUrl.protocol = 'wss:';\n }\n\n websocket._url = parsedUrl.href;\n\n const isSecure = parsedUrl.protocol === 'wss:';\n const isIpcUrl = parsedUrl.protocol === 'ws+unix:';\n let invalidUrlMessage;\n\n if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) {\n invalidUrlMessage =\n 'The URL\\'s protocol must be one of \"ws:\", \"wss:\", ' +\n '\"http:\", \"https:\", or \"ws+unix:\"';\n } else if (isIpcUrl && !parsedUrl.pathname) {\n invalidUrlMessage = \"The URL's pathname is empty\";\n } else if (parsedUrl.hash) {\n invalidUrlMessage = 'The URL contains a fragment identifier';\n }\n\n if (invalidUrlMessage) {\n const err = new SyntaxError(invalidUrlMessage);\n\n if (websocket._redirects === 0) {\n throw err;\n } else {\n emitErrorAndClose(websocket, err);\n return;\n }\n }\n\n const defaultPort = isSecure ? 443 : 80;\n const key = randomBytes(16).toString('base64');\n const request = isSecure ? https.request : http.request;\n const protocolSet = new Set();\n let perMessageDeflate;\n\n opts.createConnection =\n opts.createConnection || (isSecure ? tlsConnect : netConnect);\n opts.defaultPort = opts.defaultPort || defaultPort;\n opts.port = parsedUrl.port || defaultPort;\n opts.host = parsedUrl.hostname.startsWith('[')\n ? parsedUrl.hostname.slice(1, -1)\n : parsedUrl.hostname;\n opts.headers = {\n ...opts.headers,\n 'Sec-WebSocket-Version': opts.protocolVersion,\n 'Sec-WebSocket-Key': key,\n Connection: 'Upgrade',\n Upgrade: 'websocket'\n };\n opts.path = parsedUrl.pathname + parsedUrl.search;\n opts.timeout = opts.handshakeTimeout;\n\n if (opts.perMessageDeflate) {\n perMessageDeflate = new PerMessageDeflate({\n ...opts.perMessageDeflate,\n isServer: false,\n maxPayload: opts.maxPayload\n });\n opts.headers['Sec-WebSocket-Extensions'] = format({\n [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n });\n }\n if (protocols.length) {\n for (const protocol of protocols) {\n if (\n typeof protocol !== 'string' ||\n !subprotocolRegex.test(protocol) ||\n protocolSet.has(protocol)\n ) {\n throw new SyntaxError(\n 'An invalid or duplicated subprotocol was specified'\n );\n }\n\n protocolSet.add(protocol);\n }\n\n opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');\n }\n if (opts.origin) {\n if (opts.protocolVersion < 13) {\n opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n } else {\n opts.headers.Origin = opts.origin;\n }\n }\n if (parsedUrl.username || parsedUrl.password) {\n opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n }\n\n if (isIpcUrl) {\n const parts = opts.path.split(':');\n\n opts.socketPath = parts[0];\n opts.path = parts[1];\n }\n\n let req;\n\n if (opts.followRedirects) {\n if (websocket._redirects === 0) {\n websocket._originalIpc = isIpcUrl;\n websocket._originalSecure = isSecure;\n websocket._originalHostOrSocketPath = isIpcUrl\n ? opts.socketPath\n : parsedUrl.host;\n\n const headers = options && options.headers;\n\n //\n // Shallow copy the user provided options so that headers can be changed\n // without mutating the original object.\n //\n options = { ...options, headers: {} };\n\n if (headers) {\n for (const [key, value] of Object.entries(headers)) {\n options.headers[key.toLowerCase()] = value;\n }\n }\n } else if (websocket.listenerCount('redirect') === 0) {\n const isSameHost = isIpcUrl\n ? websocket._originalIpc\n ? opts.socketPath === websocket._originalHostOrSocketPath\n : false\n : websocket._originalIpc\n ? false\n : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n //\n // Match curl 7.77.0 behavior and drop the following headers. These\n // headers are also dropped when following a redirect to a subdomain.\n //\n delete opts.headers.authorization;\n delete opts.headers.cookie;\n\n if (!isSameHost) delete opts.headers.host;\n\n opts.auth = undefined;\n }\n }\n\n //\n // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n // If the `Authorization` header is set, then there is nothing to do as it\n // will take precedence.\n //\n if (opts.auth && !options.headers.authorization) {\n options.headers.authorization =\n 'Basic ' + Buffer.from(opts.auth).toString('base64');\n }\n\n req = websocket._req = request(opts);\n\n if (websocket._redirects) {\n //\n // Unlike what is done for the `'upgrade'` event, no early exit is\n // triggered here if the user calls `websocket.close()` or\n // `websocket.terminate()` from a listener of the `'redirect'` event. This\n // is because the user can also call `request.destroy()` with an error\n // before calling `websocket.close()` or `websocket.terminate()` and this\n // would result in an error being emitted on the `request` object with no\n // `'error'` event listeners attached.\n //\n websocket.emit('redirect', websocket.url, req);\n }\n } else {\n req = websocket._req = request(opts);\n }\n\n if (opts.timeout) {\n req.on('timeout', () => {\n abortHandshake(websocket, req, 'Opening handshake has timed out');\n });\n }\n\n req.on('error', (err) => {\n if (req === null || req[kAborted]) return;\n\n req = websocket._req = null;\n emitErrorAndClose(websocket, err);\n });\n\n req.on('response', (res) => {\n const location = res.headers.location;\n const statusCode = res.statusCode;\n\n if (\n location &&\n opts.followRedirects &&\n statusCode >= 300 &&\n statusCode < 400\n ) {\n if (++websocket._redirects > opts.maxRedirects) {\n abortHandshake(websocket, req, 'Maximum redirects exceeded');\n return;\n }\n\n req.abort();\n\n let addr;\n\n try {\n addr = new URL(location, address);\n } catch (e) {\n const err = new SyntaxError(`Invalid URL: ${location}`);\n emitErrorAndClose(websocket, err);\n return;\n }\n\n initAsClient(websocket, addr, protocols, options);\n } else if (!websocket.emit('unexpected-response', req, res)) {\n abortHandshake(\n websocket,\n req,\n `Unexpected server response: ${res.statusCode}`\n );\n }\n });\n\n req.on('upgrade', (res, socket, head) => {\n websocket.emit('upgrade', res);\n\n //\n // The user may have closed the connection from a listener of the\n // `'upgrade'` event.\n //\n if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n req = websocket._req = null;\n\n const upgrade = res.headers.upgrade;\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n abortHandshake(websocket, socket, 'Invalid Upgrade header');\n return;\n }\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n if (res.headers['sec-websocket-accept'] !== digest) {\n abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n return;\n }\n\n const serverProt = res.headers['sec-websocket-protocol'];\n let protError;\n\n if (serverProt !== undefined) {\n if (!protocolSet.size) {\n protError = 'Server sent a subprotocol but none was requested';\n } else if (!protocolSet.has(serverProt)) {\n protError = 'Server sent an invalid subprotocol';\n }\n } else if (protocolSet.size) {\n protError = 'Server sent no subprotocol';\n }\n\n if (protError) {\n abortHandshake(websocket, socket, protError);\n return;\n }\n\n if (serverProt) websocket._protocol = serverProt;\n\n const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n if (secWebSocketExtensions !== undefined) {\n if (!perMessageDeflate) {\n const message =\n 'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n 'was requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n let extensions;\n\n try {\n extensions = parse(secWebSocketExtensions);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n const extensionNames = Object.keys(extensions);\n\n if (\n extensionNames.length !== 1 ||\n extensionNames[0] !== PerMessageDeflate.extensionName\n ) {\n const message = 'Server indicated an extension that was not requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n try {\n perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n websocket._extensions[PerMessageDeflate.extensionName] =\n perMessageDeflate;\n }\n\n websocket.setSocket(socket, head, {\n allowSynchronousEvents: opts.allowSynchronousEvents,\n generateMask: opts.generateMask,\n maxPayload: opts.maxPayload,\n skipUTF8Validation: opts.skipUTF8Validation\n });\n });\n\n if (opts.finishRequest) {\n opts.finishRequest(req, websocket);\n } else {\n req.end();\n }\n}\n\n/**\n * Emit the `'error'` and `'close'` events.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n websocket._readyState = WebSocket.CLOSING;\n //\n // The following assignment is practically useless and is done only for\n // consistency.\n //\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n options.path = options.socketPath;\n return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n options.path = undefined;\n\n if (!options.servername && options.servername !== '') {\n options.servername = net.isIP(options.host) ? '' : options.host;\n }\n\n return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n * abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n websocket._readyState = WebSocket.CLOSING;\n\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshake);\n\n if (stream.setHeader) {\n stream[kAborted] = true;\n stream.abort();\n\n if (stream.socket && !stream.socket.destroyed) {\n //\n // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n // called after the request completed. See\n // https://github.com/websockets/ws/issues/1869.\n //\n stream.socket.destroy();\n }\n\n process.nextTick(emitErrorAndClose, websocket, err);\n } else {\n stream.destroy(err);\n stream.once('error', websocket.emit.bind(websocket, 'error'));\n stream.once('close', websocket.emitClose.bind(websocket));\n }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n if (data) {\n const length = isBlob(data) ? data.size : toBuffer(data).length;\n\n //\n // The `_bufferedAmount` property is used only when the peer is a client and\n // the opening handshake fails. Under these circumstances, in fact, the\n // `setSocket()` method is not called, so the `_socket` and `_sender`\n // properties are set to `null`.\n //\n if (websocket._socket) websocket._sender._bufferedBytes += length;\n else websocket._bufferedAmount += length;\n }\n\n if (cb) {\n const err = new Error(\n `WebSocket is not open: readyState ${websocket.readyState} ` +\n `(${readyStates[websocket.readyState]})`\n );\n process.nextTick(cb, err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {Buffer} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n const websocket = this[kWebSocket];\n\n websocket._closeFrameReceived = true;\n websocket._closeMessage = reason;\n websocket._closeCode = code;\n\n if (websocket._socket[kWebSocket] === undefined) return;\n\n websocket._socket.removeListener('data', socketOnData);\n process.nextTick(resume, websocket._socket);\n\n if (code === 1005) websocket.close();\n else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n const websocket = this[kWebSocket];\n\n if (!websocket.isPaused) websocket._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket._socket[kWebSocket] !== undefined) {\n websocket._socket.removeListener('data', socketOnData);\n\n //\n // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n // https://github.com/websockets/ws/issues/1940.\n //\n process.nextTick(resume, websocket._socket);\n\n websocket.close(err[kStatusCode]);\n }\n\n if (!websocket._errorEmitted) {\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {Buffer|ArrayBuffer|Buffer[])} data The message\n * @param {Boolean} isBinary Specifies whether the message is binary or not\n * @private\n */\nfunction receiverOnMessage(data, isBinary) {\n this[kWebSocket].emit('message', data, isBinary);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n const websocket = this[kWebSocket];\n\n if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP);\n websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n stream.resume();\n}\n\n/**\n * The `Sender` error event handler.\n *\n * @param {Error} The error\n * @private\n */\nfunction senderOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket.readyState === WebSocket.CLOSED) return;\n if (websocket.readyState === WebSocket.OPEN) {\n websocket._readyState = WebSocket.CLOSING;\n setCloseTimer(websocket);\n }\n\n //\n // `socket.end()` is used instead of `socket.destroy()` to allow the other\n // peer to finish sending queued data. There is no need to set a timer here\n // because `CLOSING` means that it is already set or not needed.\n //\n this._socket.end();\n\n if (!websocket._errorEmitted) {\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n }\n}\n\n/**\n * Set a timer to destroy the underlying raw socket of a WebSocket.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @private\n */\nfunction setCloseTimer(websocket) {\n websocket._closeTimer = setTimeout(\n websocket._socket.destroy.bind(websocket._socket),\n websocket._closeTimeout\n );\n}\n\n/**\n * The listener of the socket `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n const websocket = this[kWebSocket];\n\n this.removeListener('close', socketOnClose);\n this.removeListener('data', socketOnData);\n this.removeListener('end', socketOnEnd);\n\n websocket._readyState = WebSocket.CLOSING;\n\n //\n // The close frame might not have been received or the `'end'` event emitted,\n // for example, if the socket was destroyed due to an error. Ensure that the\n // `receiver` stream is closed after writing any remaining buffered data to\n // it. If the readable side of the socket is in flowing mode then there is no\n // buffered data as everything has been already written. If instead, the\n // socket is paused, any possible buffered data will be read as a single\n // chunk.\n //\n if (\n !this._readableState.endEmitted &&\n !websocket._closeFrameReceived &&\n !websocket._receiver._writableState.errorEmitted &&\n this._readableState.length !== 0\n ) {\n const chunk = this.read(this._readableState.length);\n\n websocket._receiver.write(chunk);\n }\n\n websocket._receiver.end();\n\n this[kWebSocket] = undefined;\n\n clearTimeout(websocket._closeTimer);\n\n if (\n websocket._receiver._writableState.finished ||\n websocket._receiver._writableState.errorEmitted\n ) {\n websocket.emitClose();\n } else {\n websocket._receiver.on('error', receiverOnFinish);\n websocket._receiver.on('finish', receiverOnFinish);\n }\n}\n\n/**\n * The listener of the socket `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n if (!this[kWebSocket]._receiver.write(chunk)) {\n this.pause();\n }\n}\n\n/**\n * The listener of the socket `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n const websocket = this[kWebSocket];\n\n websocket._readyState = WebSocket.CLOSING;\n websocket._receiver.end();\n this.end();\n}\n\n/**\n * The listener of the socket `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n const websocket = this[kWebSocket];\n\n this.removeListener('error', socketOnError);\n this.on('error', NOOP);\n\n if (websocket) {\n websocket._readyState = WebSocket.CLOSING;\n this.destroy();\n }\n}\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^WebSocket$\" }] */\n'use strict';\n\nconst WebSocket = require('./websocket');\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n if (!this.destroyed && this._writableState.finished) {\n this.destroy();\n }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n this.removeListener('error', duplexOnError);\n this.destroy();\n if (this.listenerCount('error') === 0) {\n // Do not suppress the throwing behavior.\n this.emit('error', err);\n }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n let terminateOnDestroy = true;\n\n const duplex = new Duplex({\n ...options,\n autoDestroy: false,\n emitClose: false,\n objectMode: false,\n writableObjectMode: false\n });\n\n ws.on('message', function message(msg, isBinary) {\n const data =\n !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n if (!duplex.push(data)) ws.pause();\n });\n\n ws.once('error', function error(err) {\n if (duplex.destroyed) return;\n\n // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n //\n // - If the `'error'` event is emitted before the `'open'` event, then\n // `ws.terminate()` is a noop as no socket is assigned.\n // - Otherwise, the error is re-emitted by the listener of the `'error'`\n // event of the `Receiver` object. The listener already closes the\n // connection by calling `ws.close()`. This allows a close frame to be\n // sent to the other peer. If `ws.terminate()` is called right after this,\n // then the close frame might not be sent.\n terminateOnDestroy = false;\n duplex.destroy(err);\n });\n\n ws.once('close', function close() {\n if (duplex.destroyed) return;\n\n duplex.push(null);\n });\n\n duplex._destroy = function (err, callback) {\n if (ws.readyState === ws.CLOSED) {\n callback(err);\n process.nextTick(emitClose, duplex);\n return;\n }\n\n let called = false;\n\n ws.once('error', function error(err) {\n called = true;\n callback(err);\n });\n\n ws.once('close', function close() {\n if (!called) callback(err);\n process.nextTick(emitClose, duplex);\n });\n\n if (terminateOnDestroy) ws.terminate();\n };\n\n duplex._final = function (callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._final(callback);\n });\n return;\n }\n\n // If the value of the `_socket` property is `null` it means that `ws` is a\n // client websocket and the handshake failed. In fact, when this happens, a\n // socket is never assigned to the websocket. Wait for the `'error'` event\n // that will be emitted by the websocket.\n if (ws._socket === null) return;\n\n if (ws._socket._writableState.finished) {\n callback();\n if (duplex._readableState.endEmitted) duplex.destroy();\n } else {\n ws._socket.once('finish', function finish() {\n // `duplex` is not destroyed here because the `'end'` event will be\n // emitted on `duplex` after this `'finish'` event. The EOF signaling\n // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n callback();\n });\n ws.close();\n }\n };\n\n duplex._read = function () {\n if (ws.isPaused) ws.resume();\n };\n\n duplex._write = function (chunk, encoding, callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._write(chunk, encoding, callback);\n });\n return;\n }\n\n ws.send(chunk, callback);\n };\n\n duplex.on('end', duplexOnEnd);\n duplex.on('error', duplexOnError);\n return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n const protocols = new Set();\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (i; i < header.length; i++) {\n const code = header.charCodeAt(i);\n\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n\n const protocol = header.slice(start, end);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n\n if (start === -1 || end !== -1) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n const protocol = header.slice(start, i);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n return protocols;\n}\n\nmodule.exports = { parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst { Duplex } = require('stream');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\nconst { CLOSE_TIMEOUT, GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n /**\n * Create a `WebSocketServer` instance.\n *\n * @param {Object} options Configuration options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Number} [options.backlog=511] The maximum length of the queue of\n * pending connections\n * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n * track clients\n * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to\n * wait for the closing handshake to finish after `websocket.close()` is\n * called\n * @param {Function} [options.handleProtocols] A hook to handle protocols\n * @param {String} [options.host] The hostname where to bind the server\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.noServer=false] Enable no server mode\n * @param {String} [options.path] Accept only connections matching this path\n * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n * permessage-deflate\n * @param {Number} [options.port] The port where to bind the server\n * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n * server to use\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @param {Function} [options.verifyClient] A hook to reject connections\n * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n * class to use. It must be the `WebSocket` class or class that extends it\n * @param {Function} [callback] A listener for the `listening` event\n */\n constructor(options, callback) {\n super();\n\n options = {\n allowSynchronousEvents: true,\n autoPong: true,\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: false,\n handleProtocols: null,\n clientTracking: true,\n closeTimeout: CLOSE_TIMEOUT,\n verifyClient: null,\n noServer: false,\n backlog: null, // use default (511 as implemented in net.js)\n server: null,\n host: null,\n path: null,\n port: null,\n WebSocket,\n ...options\n };\n\n if (\n (options.port == null && !options.server && !options.noServer) ||\n (options.port != null && (options.server || options.noServer)) ||\n (options.server && options.noServer)\n ) {\n throw new TypeError(\n 'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n 'must be specified'\n );\n }\n\n if (options.port != null) {\n this._server = http.createServer((req, res) => {\n const body = http.STATUS_CODES[426];\n\n res.writeHead(426, {\n 'Content-Length': body.length,\n 'Content-Type': 'text/plain'\n });\n res.end(body);\n });\n this._server.listen(\n options.port,\n options.host,\n options.backlog,\n callback\n );\n } else if (options.server) {\n this._server = options.server;\n }\n\n if (this._server) {\n const emitConnection = this.emit.bind(this, 'connection');\n\n this._removeListeners = addListeners(this._server, {\n listening: this.emit.bind(this, 'listening'),\n error: this.emit.bind(this, 'error'),\n upgrade: (req, socket, head) => {\n this.handleUpgrade(req, socket, head, emitConnection);\n }\n });\n }\n\n if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n if (options.clientTracking) {\n this.clients = new Set();\n this._shouldEmitClose = false;\n }\n\n this.options = options;\n this._state = RUNNING;\n }\n\n /**\n * Returns the bound address, the address family name, and port of the server\n * as reported by the operating system if listening on an IP socket.\n * If the server is listening on a pipe or UNIX domain socket, the name is\n * returned as a string.\n *\n * @return {(Object|String|null)} The address of the server\n * @public\n */\n address() {\n if (this.options.noServer) {\n throw new Error('The server is operating in \"noServer\" mode');\n }\n\n if (!this._server) return null;\n return this._server.address();\n }\n\n /**\n * Stop the server from accepting new connections and emit the `'close'` event\n * when all existing connections are closed.\n *\n * @param {Function} [cb] A one-time listener for the `'close'` event\n * @public\n */\n close(cb) {\n if (this._state === CLOSED) {\n if (cb) {\n this.once('close', () => {\n cb(new Error('The server is not running'));\n });\n }\n\n process.nextTick(emitClose, this);\n return;\n }\n\n if (cb) this.once('close', cb);\n\n if (this._state === CLOSING) return;\n this._state = CLOSING;\n\n if (this.options.noServer || this.options.server) {\n if (this._server) {\n this._removeListeners();\n this._removeListeners = this._server = null;\n }\n\n if (this.clients) {\n if (!this.clients.size) {\n process.nextTick(emitClose, this);\n } else {\n this._shouldEmitClose = true;\n }\n } else {\n process.nextTick(emitClose, this);\n }\n } else {\n const server = this._server;\n\n this._removeListeners();\n this._removeListeners = this._server = null;\n\n //\n // The HTTP/S server was created internally. Close it, and rely on its\n // `'close'` event.\n //\n server.close(() => {\n emitClose(this);\n });\n }\n }\n\n /**\n * See if a given request should be handled by this server instance.\n *\n * @param {http.IncomingMessage} req Request object to inspect\n * @return {Boolean} `true` if the request is valid, else `false`\n * @public\n */\n shouldHandle(req) {\n if (this.options.path) {\n const index = req.url.indexOf('?');\n const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n if (pathname !== this.options.path) return false;\n }\n\n return true;\n }\n\n /**\n * Handle a HTTP Upgrade request.\n *\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @public\n */\n handleUpgrade(req, socket, head, cb) {\n socket.on('error', socketOnError);\n\n const key = req.headers['sec-websocket-key'];\n const upgrade = req.headers.upgrade;\n const version = +req.headers['sec-websocket-version'];\n\n if (req.method !== 'GET') {\n const message = 'Invalid HTTP method';\n abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n return;\n }\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n const message = 'Invalid Upgrade header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (key === undefined || !keyRegex.test(key)) {\n const message = 'Missing or invalid Sec-WebSocket-Key header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (version !== 13 && version !== 8) {\n const message = 'Missing or invalid Sec-WebSocket-Version header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message, {\n 'Sec-WebSocket-Version': '13, 8'\n });\n return;\n }\n\n if (!this.shouldHandle(req)) {\n abortHandshake(socket, 400);\n return;\n }\n\n const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n let protocols = new Set();\n\n if (secWebSocketProtocol !== undefined) {\n try {\n protocols = subprotocol.parse(secWebSocketProtocol);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Protocol header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n const extensions = {};\n\n if (\n this.options.perMessageDeflate &&\n secWebSocketExtensions !== undefined\n ) {\n const perMessageDeflate = new PerMessageDeflate({\n ...this.options.perMessageDeflate,\n isServer: true,\n maxPayload: this.options.maxPayload\n });\n\n try {\n const offers = extension.parse(secWebSocketExtensions);\n\n if (offers[PerMessageDeflate.extensionName]) {\n perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n }\n } catch (err) {\n const message =\n 'Invalid or unacceptable Sec-WebSocket-Extensions header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n //\n // Optionally call external client verification handler.\n //\n if (this.options.verifyClient) {\n const info = {\n origin:\n req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n secure: !!(req.socket.authorized || req.socket.encrypted),\n req\n };\n\n if (this.options.verifyClient.length === 2) {\n this.options.verifyClient(info, (verified, code, message, headers) => {\n if (!verified) {\n return abortHandshake(socket, code || 401, message, headers);\n }\n\n this.completeUpgrade(\n extensions,\n key,\n protocols,\n req,\n socket,\n head,\n cb\n );\n });\n return;\n }\n\n if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n }\n\n this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n }\n\n /**\n * Upgrade the connection to WebSocket.\n *\n * @param {Object} extensions The accepted extensions\n * @param {String} key The value of the `Sec-WebSocket-Key` header\n * @param {Set} protocols The subprotocols\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @throws {Error} If called more than once with the same socket\n * @private\n */\n completeUpgrade(extensions, key, protocols, req, socket, head, cb) {\n //\n // Destroy the socket if the client has already sent a FIN packet.\n //\n if (!socket.readable || !socket.writable) return socket.destroy();\n\n if (socket[kWebSocket]) {\n throw new Error(\n 'server.handleUpgrade() was called more than once with the same ' +\n 'socket, possibly due to a misconfiguration'\n );\n }\n\n if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n const headers = [\n 'HTTP/1.1 101 Switching Protocols',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Accept: ${digest}`\n ];\n\n const ws = new this.options.WebSocket(null, undefined, this.options);\n\n if (protocols.size) {\n //\n // Optionally call external protocol selection handler.\n //\n const protocol = this.options.handleProtocols\n ? this.options.handleProtocols(protocols, req)\n : protocols.values().next().value;\n\n if (protocol) {\n headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n ws._protocol = protocol;\n }\n }\n\n if (extensions[PerMessageDeflate.extensionName]) {\n const params = extensions[PerMessageDeflate.extensionName].params;\n const value = extension.format({\n [PerMessageDeflate.extensionName]: [params]\n });\n headers.push(`Sec-WebSocket-Extensions: ${value}`);\n ws._extensions = extensions;\n }\n\n //\n // Allow external modification/inspection of handshake headers.\n //\n this.emit('headers', headers, req);\n\n socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n socket.removeListener('error', socketOnError);\n\n ws.setSocket(socket, head, {\n allowSynchronousEvents: this.options.allowSynchronousEvents,\n maxPayload: this.options.maxPayload,\n skipUTF8Validation: this.options.skipUTF8Validation\n });\n\n if (this.clients) {\n this.clients.add(ws);\n ws.on('close', () => {\n this.clients.delete(ws);\n\n if (this._shouldEmitClose && !this.clients.size) {\n process.nextTick(emitClose, this);\n }\n });\n }\n\n cb(ws, req);\n }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of <event, listener>\n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.<String, Function>} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n * called\n * @private\n */\nfunction addListeners(server, map) {\n for (const event of Object.keys(map)) server.on(event, map[event]);\n\n return function removeListeners() {\n for (const event of Object.keys(map)) {\n server.removeListener(event, map[event]);\n }\n };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n server._state = CLOSED;\n server.emit('close');\n}\n\n/**\n * Handle socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n //\n // The socket is writable unless the user destroyed or ended it before calling\n // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n // error. Handling this does not make much sense as the worst that can happen\n // is that some of the data written by the user might be discarded due to the\n // call to `socket.end()` below, which triggers an `'error'` event that in\n // turn causes the socket to be destroyed.\n //\n message = message || http.STATUS_CODES[code];\n headers = {\n Connection: 'close',\n 'Content-Type': 'text/html',\n 'Content-Length': Buffer.byteLength(message),\n ...headers\n };\n\n socket.once('finish', socket.destroy);\n\n socket.end(\n `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n Object.keys(headers)\n .map((h) => `${h}: ${headers[h]}`)\n .join('\\r\\n') +\n '\\r\\n\\r\\n' +\n message\n );\n}\n\n/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} message The HTTP response body\n * @param {Object} [headers] The HTTP response headers\n * @private\n */\nfunction abortHandshakeOrEmitwsClientError(\n server,\n req,\n socket,\n code,\n message,\n headers\n) {\n if (server.listenerCount('wsClientError')) {\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n server.emit('wsClientError', err, socket, req);\n } else {\n abortHandshake(socket, code, message, headers);\n }\n}\n","'use strict';\n\nconst createWebSocketStream = require('./lib/stream');\nconst extension = require('./lib/extension');\nconst PerMessageDeflate = require('./lib/permessage-deflate');\nconst Receiver = require('./lib/receiver');\nconst Sender = require('./lib/sender');\nconst subprotocol = require('./lib/subprotocol');\nconst WebSocket = require('./lib/websocket');\nconst WebSocketServer = require('./lib/websocket-server');\n\nWebSocket.createWebSocketStream = createWebSocketStream;\nWebSocket.extension = extension;\nWebSocket.PerMessageDeflate = PerMessageDeflate;\nWebSocket.Receiver = Receiver;\nWebSocket.Sender = Sender;\nWebSocket.Server = WebSocketServer;\nWebSocket.subprotocol = subprotocol;\nWebSocket.WebSocket = WebSocket;\nWebSocket.WebSocketServer = WebSocketServer;\n\nmodule.exports = WebSocket;\n","import type {\n AgentToHubMessage,\n HubToAgentMessage,\n AgentRegistrationInfo,\n AgentRuntimeStatus,\n} from '@camstack/types'\nimport type { IScopedLogger } from '../logging/scoped-logger.js'\n\nconst RECONNECT_BASE_MS = 1000\nconst RECONNECT_MAX_MS = 30000\nconst HEARTBEAT_INTERVAL_MS = 10_000\n\nexport interface AgentClientConfig {\n readonly hubUrl: string\n readonly token?: string\n readonly logger: IScopedLogger\n readonly registrationInfo: AgentRegistrationInfo\n}\n\nexport type MessageHandler = (msg: HubToAgentMessage) => void\nexport type BinaryHandler = (data: Buffer) => void\nexport type ConnectionHandler = () => void\n\n/**\n * WebSocket client for agent mode. Framework-agnostic (no NestJS).\n * Connects to the hub, sends registration, handles messages,\n * reconnects with exponential backoff.\n */\nexport class AgentClient {\n private ws: import('ws').WebSocket | null = null\n private reconnectAttempt = 0\n private reconnectTimer: NodeJS.Timeout | null = null\n private heartbeatTimer: NodeJS.Timeout | null = null\n private destroyed = false\n\n private readonly messageHandlers: MessageHandler[] = []\n private readonly binaryHandlers: BinaryHandler[] = []\n private readonly connectHandlers: ConnectionHandler[] = []\n private readonly disconnectHandlers: ConnectionHandler[] = []\n\n private readonly logger: IScopedLogger\n private readonly hubUrl: string\n private readonly token?: string\n private readonly registrationInfo: AgentRegistrationInfo\n\n private runtimeStatus: AgentRuntimeStatus = {\n activeCameras: 0,\n cpuPercent: 0,\n memoryPercent: 0,\n fps: {},\n errors: [],\n }\n\n constructor(config: AgentClientConfig) {\n this.hubUrl = config.hubUrl\n this.token = config.token\n this.logger = config.logger\n this.registrationInfo = config.registrationInfo\n }\n\n /** Connect to the hub WebSocket */\n async connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.destroyed = false\n this.doConnect(resolve, reject)\n })\n }\n\n /** Disconnect and stop reconnecting */\n disconnect(): void {\n this.destroyed = true\n this.clearTimers()\n if (this.ws) {\n this.ws.close()\n this.ws = null\n }\n }\n\n /** Send a JSON control message to the hub */\n send(msg: AgentToHubMessage): void {\n if (!this.ws || this.ws.readyState !== 1 /* WebSocket.OPEN */) {\n this.logger.warn('send() called while not connected')\n return\n }\n this.ws.send(JSON.stringify(msg))\n }\n\n /** Send a binary frame to the hub */\n sendBinary(data: Buffer): void {\n if (!this.ws || this.ws.readyState !== 1) {\n return\n }\n this.ws.send(data)\n }\n\n /** Register a handler for JSON messages from hub */\n onMessage(handler: MessageHandler): void {\n this.messageHandlers.push(handler)\n }\n\n /** Register a handler for binary frames from hub */\n onBinaryFrame(handler: BinaryHandler): void {\n this.binaryHandlers.push(handler)\n }\n\n /** Register a handler for successful connection */\n onConnect(handler: ConnectionHandler): void {\n this.connectHandlers.push(handler)\n }\n\n /** Register a handler for disconnection */\n onDisconnect(handler: ConnectionHandler): void {\n this.disconnectHandlers.push(handler)\n }\n\n /** Update the runtime status (used in heartbeat) */\n updateStatus(status: AgentRuntimeStatus): void {\n this.runtimeStatus = status\n }\n\n /** Whether currently connected */\n get connected(): boolean {\n return this.ws?.readyState === 1\n }\n\n private doConnect(\n onConnect?: (value: void) => void,\n onError?: (err: Error) => void,\n ): void {\n if (this.destroyed) return\n\n // Dynamic import ws to keep this file framework-agnostic at the type level\n import('ws').then(({ default: WebSocket }) => {\n if (this.destroyed) return\n\n const url = this.token\n ? `${this.hubUrl}?token=${encodeURIComponent(this.token)}`\n : this.hubUrl\n\n // Accept self-signed certs when connecting over WSS (safe for local LAN)\n const wsOptions = this.hubUrl.startsWith('wss://')\n ? { rejectUnauthorized: false }\n : {}\n\n try {\n this.ws = new WebSocket(url, wsOptions)\n } catch (err) {\n this.scheduleReconnect()\n if (onError) {\n onError(err instanceof Error ? err : new Error(String(err)))\n onError = undefined\n }\n return\n }\n\n this.ws.once('open', () => {\n this.reconnectAttempt = 0\n this.logger.info(`Connected to hub: ${this.hubUrl}`)\n\n // Send registration\n this.send({ type: 'register', info: this.registrationInfo })\n\n // Start heartbeat\n this.startHeartbeat()\n\n for (const h of this.connectHandlers) h()\n\n if (onConnect) {\n onConnect()\n onConnect = undefined\n }\n })\n\n this.ws.on('message', (data: Buffer | string, isBinary: boolean) => {\n const buf = Buffer.isBuffer(data) ? data : Buffer.from(data as unknown as ArrayBuffer)\n if (isBinary) {\n for (const h of this.binaryHandlers) h(buf)\n } else {\n try {\n const msg = JSON.parse(buf.toString()) as HubToAgentMessage\n this.handleBuiltinMessage(msg)\n for (const h of this.messageHandlers) h(msg)\n } catch {\n this.logger.warn('Failed to parse message from hub')\n }\n }\n })\n\n this.ws.once('close', () => {\n this.stopHeartbeat()\n for (const h of this.disconnectHandlers) h()\n if (!this.destroyed) {\n this.logger.warn('Disconnected from hub, scheduling reconnect')\n this.scheduleReconnect()\n }\n })\n\n this.ws.once('error', (err) => {\n this.logger.error('WebSocket error', { message: err.message })\n if (onError) {\n onError(err)\n onError = undefined\n }\n })\n }).catch((err) => {\n this.logger.error('Failed to import ws module', { message: String(err) })\n if (onError) {\n onError(err instanceof Error ? err : new Error(String(err)))\n }\n })\n }\n\n private handleBuiltinMessage(msg: HubToAgentMessage): void {\n if (msg.type === 'ping') {\n this.send({ type: 'pong' })\n }\n }\n\n private scheduleReconnect(): void {\n if (this.destroyed) return\n const delay = Math.min(\n RECONNECT_BASE_MS * Math.pow(2, this.reconnectAttempt),\n RECONNECT_MAX_MS,\n )\n this.reconnectAttempt++\n this.logger.info(`Reconnecting in ${delay}ms (attempt ${this.reconnectAttempt})`)\n this.reconnectTimer = setTimeout(() => {\n this.doConnect()\n }, delay)\n }\n\n private startHeartbeat(): void {\n this.stopHeartbeat()\n this.heartbeatTimer = setInterval(() => {\n this.send({ type: 'heartbeat', status: this.runtimeStatus })\n }, HEARTBEAT_INTERVAL_MS)\n }\n\n private stopHeartbeat(): void {\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer)\n this.heartbeatTimer = null\n }\n }\n\n private clearTimers(): void {\n this.stopHeartbeat()\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer)\n this.reconnectTimer = null\n }\n }\n}\n","import type { ITaskHandler, TaskContext, TaskProgress } from '@camstack/types'\nimport type { IScopedLogger } from '../logging/scoped-logger.js'\nimport type { AgentClient } from './agent-client.js'\n\ninterface RunningTask {\n readonly taskId: string\n readonly taskType: string\n cancelled: boolean\n}\n\n/**\n * Receives task assignments from hub, routes to registered ITaskHandler instances.\n * Maintains handler registry, manages task lifecycle.\n * Framework-agnostic (no NestJS).\n */\nexport class AgentTaskRunner {\n private readonly handlers = new Map<string, ITaskHandler>()\n private readonly runningTasks = new Map<string, RunningTask>()\n private readonly logger: IScopedLogger\n\n constructor(\n private readonly agentId: string,\n private readonly client: AgentClient,\n logger: IScopedLogger,\n ) {\n this.logger = logger.child('TaskRunner')\n }\n\n /** Register a task handler for a given task type */\n registerHandler(handler: ITaskHandler): void {\n if (this.handlers.has(handler.taskType)) {\n this.logger.warn(`Overwriting handler for task type: ${handler.taskType}`)\n }\n this.handlers.set(handler.taskType, handler)\n this.logger.debug(`Registered handler: ${handler.taskType}`)\n }\n\n /** Unregister a task handler */\n unregisterHandler(taskType: string): void {\n this.handlers.delete(taskType)\n }\n\n /** Get all registered task types */\n getTaskTypes(): readonly string[] {\n return [...this.handlers.keys()]\n }\n\n /** Get a handler by task type */\n getHandler(taskType: string): ITaskHandler | undefined {\n return this.handlers.get(taskType)\n }\n\n /**\n * Execute a task dispatched from the hub.\n * Sends result or error back to hub via the AgentClient.\n */\n async executeTask(taskId: string, taskType: string, payload: unknown): Promise<void> {\n const handler = this.handlers.get(taskType)\n if (!handler) {\n this.client.send({\n type: 'task.result',\n taskId,\n success: false,\n error: `No handler registered for task type: ${taskType}`,\n })\n return\n }\n\n const runningTask: RunningTask = { taskId, taskType, cancelled: false }\n this.runningTasks.set(taskId, runningTask)\n\n const context: TaskContext = {\n taskId,\n agentId: this.agentId,\n logger: this.logger.child(taskType),\n reportProgress: (progress: TaskProgress) => {\n this.client.send({ type: 'task.progress', taskId, progress })\n },\n isCancelled: () => runningTask.cancelled,\n }\n\n try {\n const result = await handler.handle(payload, context)\n this.runningTasks.delete(taskId)\n\n if (!runningTask.cancelled) {\n this.client.send({\n type: 'task.result',\n taskId,\n success: true,\n result,\n })\n }\n } catch (err) {\n this.runningTasks.delete(taskId)\n\n this.logger.error(`Task ${taskType} (${taskId}) failed`, {\n message: err instanceof Error ? err.message : String(err),\n })\n\n this.client.send({\n type: 'task.result',\n taskId,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n })\n }\n }\n\n /** Cancel a running task */\n async cancelTask(taskId: string): Promise<void> {\n const running = this.runningTasks.get(taskId)\n if (!running) return\n\n running.cancelled = true\n\n const handler = this.handlers.get(running.taskType)\n if (handler?.cancel) {\n try {\n await handler.cancel()\n } catch (err) {\n this.logger.error(`Error cancelling task ${taskId}`, {\n message: err instanceof Error ? err.message : String(err),\n })\n }\n }\n\n this.runningTasks.delete(taskId)\n }\n\n /** Number of currently running tasks */\n get activeTaskCount(): number {\n return this.runningTasks.size\n }\n\n /** Destroy: cancel all running tasks */\n async destroy(): Promise<void> {\n const taskIds = [...this.runningTasks.keys()]\n for (const taskId of taskIds) {\n await this.cancelTask(taskId)\n }\n this.handlers.clear()\n }\n}\n","import type { ITaskHandler, TaskContext } from '@camstack/types'\n\n/**\n * Stub task handler for pipeline.decode.\n * In the full implementation, this would start a StreamBroker for a camera\n * and send decoded frames to the hub via the AgentClient.\n */\nexport class DecodeTaskHandler implements ITaskHandler {\n readonly taskType = 'pipeline.decode'\n readonly description = 'Decode an RTSP stream and produce JPEG frames'\n\n async handle(payload: unknown, context: TaskContext): Promise<unknown> {\n const { logger } = context\n const config = payload as { cameraId?: string; rtspUrl?: string; fps?: number }\n\n if (!config.cameraId || !config.rtspUrl) {\n throw new Error('pipeline.decode requires cameraId and rtspUrl in payload')\n }\n\n logger.info(`Decode task started: camera=${config.cameraId} url=${config.rtspUrl} fps=${config.fps ?? 1}`)\n\n // Stub: actual implementation would start ffmpeg, produce frames,\n // and send them via the AgentClient's sendBinary method.\n return { status: 'started', cameraId: config.cameraId }\n }\n\n async cancel(): Promise<void> {\n // Stub: stop ffmpeg process\n }\n}\n\n/**\n * Stub task handler for pipeline.detect.\n * In the full implementation, this would receive frames (via binary WS),\n * run them through the detection engine, and send results back.\n */\nexport class DetectTaskHandler implements ITaskHandler {\n readonly taskType = 'pipeline.detect'\n readonly description = 'Run object detection on received frames'\n\n async handle(payload: unknown, context: TaskContext): Promise<unknown> {\n const { logger } = context\n const config = payload as {\n cameraId?: string\n modelId?: string\n runtime?: string\n confidence?: number\n }\n\n if (!config.cameraId) {\n throw new Error('pipeline.detect requires cameraId in payload')\n }\n\n logger.info(`Detect task started: camera=${config.cameraId} model=${config.modelId ?? 'default'} runtime=${config.runtime ?? 'auto'}`)\n\n // Stub: actual implementation would subscribe to binary frame stream,\n // run inference, and send detection results back to hub.\n return { status: 'started', cameraId: config.cameraId }\n }\n\n async cancel(): Promise<void> {\n // Stub: stop detection loop\n }\n}\n\n/**\n * Stub task handler for pipeline.record.\n * In the full implementation, this would start recording an RTSP stream\n * to disk in segments and report segment metadata back to the hub.\n */\nexport class RecordTaskHandler implements ITaskHandler {\n readonly taskType = 'pipeline.record'\n readonly description = 'Record an RTSP stream to disk segments'\n\n async handle(payload: unknown, context: TaskContext): Promise<unknown> {\n const { logger } = context\n const config = payload as { cameraId?: string; rtspUrl?: string; storagePath?: string }\n\n if (!config.cameraId || !config.rtspUrl) {\n throw new Error('pipeline.record requires cameraId and rtspUrl in payload')\n }\n\n logger.info(`Record task started: camera=${config.cameraId} url=${config.rtspUrl}`)\n\n // Stub: actual implementation would start ffmpeg copy-mode recording.\n return { status: 'started', cameraId: config.cameraId }\n }\n\n async cancel(): Promise<void> {\n // Stub: stop recording process\n }\n}\n","import * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport type {\n IStorageProvider as INewStorageProvider,\n StorageLocationType,\n} from '@camstack/types'\n\n// Inline constants to avoid runtime dependency on @camstack/types\n// (types is external in tsup bundle, may not be resolvable from data/addons/)\nconst STORAGE_LOCATION_TYPES: readonly StorageLocationType[] = [\n 'recordings-high', 'recordings-low', 'recordings-clips', 'event-images',\n 'models', 'addons-data', 'cache', 'logs',\n]\n\nconst DEFAULT_LOCATION_SUBDIRS: Readonly<Record<StorageLocationType, string>> = {\n 'recordings-high': 'recordings-high',\n 'recordings-low': 'recordings-low',\n 'recordings-clips': 'recordings-clips',\n 'event-images': 'event-images',\n 'models': 'models',\n 'addons-data': 'addons-data',\n 'cache': '/tmp/camstack-cache',\n 'logs': 'logs',\n}\n\n/**\n * Filesystem storage provider — serves all location types from a local directory tree.\n *\n * Default layout:\n * {rootPath}/recordings-high/\n * {rootPath}/recordings-low/\n * {rootPath}/recordings-clips/\n * {rootPath}/event-images/\n * {rootPath}/models/\n * {rootPath}/addons-data/\n * {rootPath}/logs/\n * /tmp/camstack-cache/ (cache is always local)\n *\n * Individual location paths can be overridden.\n */\nexport class FilesystemStorageProvider implements INewStorageProvider {\n readonly id = 'local'\n readonly name = 'Local Filesystem'\n readonly supportedLocations: readonly StorageLocationType[] = [...STORAGE_LOCATION_TYPES]\n\n private readonly rootPath: string\n private readonly locationPaths: Map<StorageLocationType, string>\n\n constructor(rootPath: string, overrides?: Partial<Record<StorageLocationType, string>>) {\n this.rootPath = path.resolve(rootPath)\n this.locationPaths = new Map()\n\n for (const loc of STORAGE_LOCATION_TYPES) {\n const override = overrides?.[loc]\n if (override) {\n this.locationPaths.set(loc, path.resolve(override))\n } else {\n const subdir = DEFAULT_LOCATION_SUBDIRS[loc]\n // Absolute paths (like /tmp/camstack-cache) are used as-is\n this.locationPaths.set(\n loc,\n path.isAbsolute(subdir) ? subdir : path.join(this.rootPath, subdir),\n )\n }\n }\n }\n\n resolve(location: StorageLocationType, relativePath: string): string {\n const base = this.locationPaths.get(location)\n if (!base) throw new Error(`Unknown storage location: ${location}`)\n return path.join(base, relativePath)\n }\n\n async write(location: StorageLocationType, relativePath: string, data: Buffer | NodeJS.ReadableStream): Promise<void> {\n const filePath = this.resolve(location, relativePath)\n await fs.promises.mkdir(path.dirname(filePath), { recursive: true })\n\n if (Buffer.isBuffer(data)) {\n await fs.promises.writeFile(filePath, data)\n } else {\n // Stream\n const writeStream = fs.createWriteStream(filePath)\n await new Promise<void>((resolve, reject) => {\n (data as NodeJS.ReadableStream).pipe(writeStream)\n writeStream.on('finish', resolve)\n writeStream.on('error', reject)\n })\n }\n }\n\n async read(location: StorageLocationType, relativePath: string): Promise<Buffer> {\n return fs.promises.readFile(this.resolve(location, relativePath))\n }\n\n async exists(location: StorageLocationType, relativePath: string): Promise<boolean> {\n try {\n await fs.promises.access(this.resolve(location, relativePath))\n return true\n } catch {\n return false\n }\n }\n\n async list(location: StorageLocationType, prefix?: string): Promise<readonly string[]> {\n const base = this.locationPaths.get(location)\n if (!base) return []\n const dir = prefix ? path.join(base, prefix) : base\n try {\n const entries = await fs.promises.readdir(dir, { withFileTypes: true })\n return entries.map(e => (prefix ? `${prefix}/${e.name}` : e.name))\n } catch {\n return []\n }\n }\n\n async delete(location: StorageLocationType, relativePath: string): Promise<void> {\n const filePath = this.resolve(location, relativePath)\n await fs.promises.rm(filePath, { force: true })\n }\n\n async getAvailableSpace(location: StorageLocationType): Promise<number | null> {\n const base = this.locationPaths.get(location)\n if (!base) return null\n try {\n const stats = await fs.promises.statfs(base)\n return stats.bavail * stats.bsize\n } catch {\n return null\n }\n }\n\n async initialize(): Promise<void> {\n for (const [, dirPath] of this.locationPaths) {\n await fs.promises.mkdir(dirPath, { recursive: true })\n }\n }\n\n async shutdown(): Promise<void> {\n // Nothing to clean up for filesystem\n }\n\n /** Get the resolved path for a location type */\n getLocationPath(location: StorageLocationType): string {\n const p = this.locationPaths.get(location)\n if (!p) throw new Error(`Unknown storage location: ${location}`)\n return p\n }\n\n /** Get the root path */\n getRootPath(): string {\n return this.rootPath\n }\n}\n\nexport default FilesystemStorageProvider\n","import type {\n ICamstackAddon,\n AddonManifest,\n AddonContext,\n IConfigurable,\n ConfigUISchema,\n CapabilityProviderMap,\n} from '@camstack/types'\nimport { FilesystemStorageProvider } from './filesystem-storage-provider'\n\n/**\n * Filesystem Storage addon — provides local disk storage for all location types.\n * Capability: 'storage' (collection)\n */\nexport class FilesystemStorageAddon implements ICamstackAddon, IConfigurable {\n readonly manifest: AddonManifest = {\n id: 'filesystem-storage',\n name: 'Local Filesystem Storage',\n version: '1.0.0',\n capabilities: [{ name: 'storage', mode: 'collection' }],\n }\n\n private provider: FilesystemStorageProvider | null = null\n private currentConfig = {\n rootPath: 'camstack-data',\n }\n\n async initialize(context: AddonContext): Promise<void> {\n const rootPath = (context.addonConfig.rootPath as string) ?? this.currentConfig.rootPath\n this.currentConfig.rootPath = rootPath\n\n // Read location overrides from config\n const overrides: Partial<Record<string, string>> = {}\n for (const key of Object.keys(context.addonConfig)) {\n if (key.startsWith('override.')) {\n const loc = key.slice('override.'.length)\n overrides[loc] = context.addonConfig[key] as string\n }\n }\n\n this.provider = new FilesystemStorageProvider(rootPath, overrides as any)\n await this.provider.initialize()\n context.logger.info(`Filesystem storage initialized at ${this.provider.getRootPath()}`)\n }\n\n async shutdown(): Promise<void> {\n await this.provider?.shutdown()\n }\n\n getCapabilityProvider<K extends keyof CapabilityProviderMap>(\n name: K,\n ): CapabilityProviderMap[K] | null {\n if (name === 'storage' && this.provider) {\n return this.provider as unknown as CapabilityProviderMap[K]\n }\n return null\n }\n\n getProvider(): FilesystemStorageProvider | null {\n return this.provider\n }\n\n getConfigSchema(): ConfigUISchema {\n return { sections: [] }\n }\n\n getConfig(): Record<string, unknown> {\n return { ...this.currentConfig }\n }\n\n async onConfigChange(config: Record<string, unknown>): Promise<void> {\n this.currentConfig.rootPath = (config.rootPath as string) ?? this.currentConfig.rootPath\n }\n}\n\nexport default FilesystemStorageAddon\n","import Database from 'better-sqlite3'\nimport { randomUUID } from 'node:crypto'\nimport type {\n ISettingsBackend,\n SettingsCollection,\n SettingsRecord,\n QueryFilter,\n} from '@camstack/types'\n\n/**\n * SQLite implementation of ISettingsBackend.\n *\n * One table per collection, auto-created on first access.\n * All data stored as JSON in a TEXT column.\n * WAL mode for concurrent reads.\n */\nexport class SqliteSettingsBackend implements ISettingsBackend {\n private db: Database.Database | null = null\n private readonly ensuredTables = new Set<string>()\n private readonly runtimeDefaults: Record<string, unknown>\n\n constructor(private readonly dbPath: string, runtimeDefaults?: Record<string, unknown>) {\n this.runtimeDefaults = runtimeDefaults ?? {}\n }\n\n async initialize(): Promise<void> {\n // Ensure parent directory exists\n const dir = this.dbPath.substring(0, this.dbPath.lastIndexOf('/'))\n if (dir) {\n const fs = await import('node:fs')\n fs.mkdirSync(dir, { recursive: true })\n }\n this.db = new Database(this.dbPath)\n this.db.pragma('journal_mode = WAL')\n this.db.pragma('foreign_keys = ON')\n\n // Seed system-settings on first boot\n const isEmpty = await this.isEmpty('system-settings')\n if (isEmpty) {\n await this.seedDefaults()\n }\n }\n\n async shutdown(): Promise<void> {\n this.db?.close()\n this.db = null\n }\n\n // ---------------------------------------------------------------------------\n // ISettingsBackend implementation\n // ---------------------------------------------------------------------------\n\n async get(collection: SettingsCollection, key: string): Promise<unknown> {\n this.ensureTable(collection)\n const row = this.getDb()\n .prepare<[string], { data: string }>(`SELECT data FROM \"${collection}\" WHERE id = ?`)\n .get(key)\n if (!row) return undefined\n return JSON.parse(row.data)\n }\n\n async set(collection: SettingsCollection, key: string, value: unknown): Promise<void> {\n this.ensureTable(collection)\n this.getDb()\n .prepare(`INSERT INTO \"${collection}\" (id, data) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data`)\n .run(key, JSON.stringify(value))\n }\n\n async query(collection: SettingsCollection, filter?: QueryFilter): Promise<readonly SettingsRecord[]> {\n this.ensureTable(collection)\n let sql = `SELECT id, data FROM \"${collection}\"`\n const params: unknown[] = []\n\n const whereClauses: string[] = []\n\n if (filter?.where) {\n for (const [field, value] of Object.entries(filter.where)) {\n if (field === 'id') {\n whereClauses.push('id = ?')\n params.push(value)\n } else {\n whereClauses.push(`json_extract(data, '$.${field}') = ?`)\n params.push(typeof value === 'object' ? JSON.stringify(value) : value)\n }\n }\n }\n\n if (filter?.whereIn) {\n for (const [field, values] of Object.entries(filter.whereIn)) {\n const placeholders = values.map(() => '?').join(', ')\n if (field === 'id') {\n whereClauses.push(`id IN (${placeholders})`)\n } else {\n whereClauses.push(`json_extract(data, '$.${field}') IN (${placeholders})`)\n }\n params.push(...values)\n }\n }\n\n if (filter?.whereBetween) {\n for (const [field, [low, high]] of Object.entries(filter.whereBetween)) {\n if (field === 'id') {\n whereClauses.push('id BETWEEN ? AND ?')\n } else {\n whereClauses.push(`json_extract(data, '$.${field}') BETWEEN ? AND ?`)\n }\n params.push(low, high)\n }\n }\n\n if (whereClauses.length > 0) {\n sql += ` WHERE ${whereClauses.join(' AND ')}`\n }\n\n if (filter?.orderBy) {\n const dir = filter.orderBy.direction === 'desc' ? 'DESC' : 'ASC'\n if (filter.orderBy.field === 'id') {\n sql += ` ORDER BY id ${dir}`\n } else {\n sql += ` ORDER BY json_extract(data, '$.${filter.orderBy.field}') ${dir}`\n }\n }\n\n if (filter?.limit) {\n sql += ` LIMIT ?`\n params.push(filter.limit)\n }\n\n if (filter?.offset) {\n sql += ` OFFSET ?`\n params.push(filter.offset)\n }\n\n const rows = this.getDb()\n .prepare<unknown[], { id: string; data: string }>(sql)\n .all(...params)\n\n return rows.map(row => ({\n id: row.id,\n data: JSON.parse(row.data),\n }))\n }\n\n async insert(collection: SettingsCollection, record: SettingsRecord): Promise<void> {\n this.ensureTable(collection)\n const id = record.id || randomUUID()\n this.getDb()\n .prepare(`INSERT INTO \"${collection}\" (id, data) VALUES (?, ?)`)\n .run(id, JSON.stringify(record.data))\n }\n\n async update(collection: SettingsCollection, id: string, data: Record<string, unknown>): Promise<void> {\n this.ensureTable(collection)\n this.getDb()\n .prepare(`UPDATE \"${collection}\" SET data = ? WHERE id = ?`)\n .run(JSON.stringify(data), id)\n }\n\n async delete(collection: SettingsCollection, key: string): Promise<void> {\n this.ensureTable(collection)\n this.getDb()\n .prepare(`DELETE FROM \"${collection}\" WHERE id = ?`)\n .run(key)\n }\n\n async count(collection: SettingsCollection, filter?: QueryFilter): Promise<number> {\n this.ensureTable(collection)\n if (!filter) {\n const row = this.getDb()\n .prepare<[], { cnt: number }>(`SELECT COUNT(*) AS cnt FROM \"${collection}\"`)\n .get()\n return row?.cnt ?? 0\n }\n const rows = await this.query(collection, { ...filter, limit: undefined, offset: undefined })\n return rows.length\n }\n\n async isEmpty(collection: SettingsCollection): Promise<boolean> {\n this.ensureTable(collection)\n const row = this.getDb()\n .prepare<[], { cnt: number }>(`SELECT COUNT(*) AS cnt FROM \"${collection}\"`)\n .get()\n return (row?.cnt ?? 0) === 0\n }\n\n // ---------------------------------------------------------------------------\n // Legacy SettingsStore compatibility (used by ConfigManager.setSettingsStore)\n // ---------------------------------------------------------------------------\n\n /** Get a system setting by dot-notation key */\n getSystem(key: string): unknown {\n this.ensureTable('system-settings')\n const row = this.getDb()\n .prepare<[string], { data: string }>('SELECT data FROM \"system-settings\" WHERE id = ?')\n .get(key)\n if (!row) return undefined\n return JSON.parse(row.data)\n }\n\n /** Set a system setting */\n setSystem(key: string, value: unknown): void {\n this.ensureTable('system-settings')\n this.getDb()\n .prepare('INSERT INTO \"system-settings\" (id, data) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data')\n .run(key, JSON.stringify(value))\n }\n\n /** Get all system settings as flat key-value */\n getAllSystem(): Record<string, unknown> {\n this.ensureTable('system-settings')\n const rows = this.getDb()\n .prepare<[], { id: string; data: string }>('SELECT id, data FROM \"system-settings\"')\n .all()\n return Object.fromEntries(rows.map(r => [r.id, JSON.parse(r.data)]))\n }\n\n /** Get all settings for an addon */\n getAllAddon(addonId: string): Record<string, unknown> {\n this.ensureTable('addon-settings')\n const rows = this.getDb()\n .prepare<[string], { id: string; data: string }>('SELECT id, data FROM \"addon-settings\" WHERE json_extract(data, \\'$.addonId\\') = ?')\n .all(addonId)\n if (rows.length === 0) return {}\n // addon-settings stores all keys for an addon as separate rows with id = \"addonId.key\"\n const result: Record<string, unknown> = {}\n for (const row of rows) {\n const parsed = JSON.parse(row.data)\n const key = row.id.startsWith(`${addonId}.`) ? row.id.slice(addonId.length + 1) : row.id\n result[key] = parsed.value ?? parsed\n }\n return result\n }\n\n /** Bulk-set all settings for an addon */\n setAllAddon(addonId: string, config: Record<string, unknown>): void {\n this.ensureTable('addon-settings')\n const db = this.getDb()\n const deleteStmt = db.prepare('DELETE FROM \"addon-settings\" WHERE id LIKE ? || \\'%\\'')\n const insertStmt = db.prepare('INSERT INTO \"addon-settings\" (id, data) VALUES (?, ?)')\n db.transaction(() => {\n deleteStmt.run(`${addonId}.`)\n for (const [key, value] of Object.entries(config)) {\n insertStmt.run(`${addonId}.${key}`, JSON.stringify({ addonId, key, value }))\n }\n })()\n }\n\n /** Get all settings for a provider */\n getAllProvider(providerId: string): Record<string, unknown> {\n return this.getAllScoped('provider-settings', providerId)\n }\n\n /** Set a provider setting */\n setProvider(providerId: string, key: string, value: unknown): void {\n this.setScopedKey('provider-settings', providerId, key, value)\n }\n\n /** Get all settings for a device */\n getAllDevice(deviceId: string): Record<string, unknown> {\n return this.getAllScoped('device-settings', deviceId)\n }\n\n /** Set a device setting */\n setDevice(deviceId: string, key: string, value: unknown): void {\n this.setScopedKey('device-settings', deviceId, key, value)\n }\n\n /** Seed system-settings with runtime defaults (first boot) */\n private async seedDefaults(): Promise<void> {\n this.ensureTable('system-settings')\n const insert = this.getDb().prepare(\n 'INSERT OR IGNORE INTO \"system-settings\" (id, data) VALUES (?, ?)',\n )\n this.getDb().transaction(() => {\n for (const [key, value] of Object.entries(this.runtimeDefaults)) {\n insert.run(key, JSON.stringify(value))\n }\n })()\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private getDb(): Database.Database {\n if (!this.db) throw new Error('SqliteSettingsBackend not initialized — call initialize() first')\n return this.db\n }\n\n private ensureTable(collection: string): void {\n if (this.ensuredTables.has(collection)) return\n this.getDb().exec(\n `CREATE TABLE IF NOT EXISTS \"${collection}\" (id TEXT PRIMARY KEY, data TEXT NOT NULL)`,\n )\n this.ensuredTables.add(collection)\n }\n\n private getAllScoped(collection: string, scopeId: string): Record<string, unknown> {\n this.ensureTable(collection)\n const rows = this.getDb()\n .prepare<[string], { id: string; data: string }>(`SELECT id, data FROM \"${collection}\" WHERE id LIKE ? || '.%'`)\n .all(scopeId)\n const result: Record<string, unknown> = {}\n for (const row of rows) {\n const key = row.id.slice(scopeId.length + 1)\n const parsed = JSON.parse(row.data)\n result[key] = parsed.value ?? parsed\n }\n return result\n }\n\n private setScopedKey(collection: string, scopeId: string, key: string, value: unknown): void {\n this.ensureTable(collection)\n this.getDb()\n .prepare(`INSERT INTO \"${collection}\" (id, data) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data`)\n .run(`${scopeId}.${key}`, JSON.stringify({ scopeId, key, value }))\n }\n}\n\nexport default SqliteSettingsBackend\n","import type {\n ICamstackAddon,\n AddonManifest,\n AddonContext,\n IConfigurable,\n ConfigUISchema,\n CapabilityProviderMap,\n} from '@camstack/types'\nimport { SqliteSettingsBackend } from './sqlite-settings-backend'\n\n/**\n * SQLite Settings addon — provides persistent settings storage.\n * Capability: 'settings-store' (singleton)\n *\n * Depends on 'storage' capability for resolving the DB file path.\n */\nexport class SqliteSettingsAddon implements ICamstackAddon, IConfigurable {\n readonly manifest: AddonManifest = {\n id: 'sqlite-settings',\n name: 'SQLite Settings',\n version: '1.0.0',\n capabilities: [{ name: 'settings-store', mode: 'singleton' }],\n }\n\n private backend: SqliteSettingsBackend | null = null\n\n async initialize(context: AddonContext): Promise<void> {\n // Resolve DB path from storage provider (addons-data location)\n const dbPath = context.storageProvider\n ? context.storageProvider.resolve('addons-data', `${context.id.replace('addon:', '')}/camstack.db`)\n : context.dataDir\n ? `${context.dataDir}/camstack.db`\n : 'camstack-data/addons-data/sqlite-settings/camstack.db'\n\n const runtimeDefaults = (context.addonConfig._runtimeDefaults as Record<string, unknown>) ?? {}\n this.backend = new SqliteSettingsBackend(dbPath, runtimeDefaults)\n await this.backend.initialize()\n context.logger.info(`SQLite settings initialized at ${dbPath}`)\n }\n\n async shutdown(): Promise<void> {\n await this.backend?.shutdown()\n }\n\n getBackend(): SqliteSettingsBackend | null {\n return this.backend\n }\n\n getCapabilityProvider<K extends keyof CapabilityProviderMap>(\n name: K,\n ): CapabilityProviderMap[K] | null {\n if (name === ('settings-store' as string) && this.backend) {\n return this.backend as unknown as CapabilityProviderMap[K]\n }\n return null\n }\n\n getConfigSchema(): ConfigUISchema {\n return { sections: [] }\n }\n\n getConfig(): Record<string, unknown> {\n return {}\n }\n\n async onConfigChange(_config: Record<string, unknown>): Promise<void> {\n // DB path changes require restart\n }\n}\n\nexport default SqliteSettingsAddon\n","import Database from 'better-sqlite3'\nimport * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport type {\n IStorageProvider,\n IStorageLocation,\n IStructuredStorage,\n IFileStorage,\n StorageLocationName,\n StorageRecord,\n QueryFilter,\n} from '@camstack/types'\n\ntype LocationType = 'structured' | 'files' | 'both'\n\n/** Which locations need structured (SQL) storage, files storage, or both.\n * All structured locations share a SINGLE SQLite database (camstack.db).\n * File locations use the filesystem at their configured path. */\nconst LOCATION_TYPES: Record<string, LocationType> = {\n // New location names (from StorageLocationManager)\n data: 'structured', // settings, events, trails — SQL only\n media: 'files', // crops, snapshots, thumbnails — files only\n recordings: 'files', // video segments — files only\n models: 'files', // ONNX/TFLite models — files only\n cache: 'files', // temp files — files only\n logs: 'files', // Winston log files — files only\n // Legacy location names (backward compat)\n config: 'structured',\n events: 'structured',\n addon: 'both',\n}\n\nclass SqliteStructuredStorage implements IStructuredStorage {\n private readonly ensuredTables = new Set<string>()\n\n constructor(private readonly db: Database.Database) {}\n\n private ensureTable(collection: string): void {\n if (this.ensuredTables.has(collection)) return\n this.db.exec(\n `CREATE TABLE IF NOT EXISTS \"${collection}\" (id TEXT PRIMARY KEY, data TEXT)`,\n )\n this.ensuredTables.add(collection)\n }\n\n async insert(record: StorageRecord): Promise<StorageRecord> {\n this.ensureTable(record.collection)\n const id = record.id || randomUUID()\n const newRecord: StorageRecord = {\n collection: record.collection,\n id,\n data: record.data,\n }\n this.db\n .prepare(`INSERT INTO \"${record.collection}\" (id, data) VALUES (?, ?)`)\n .run(id, JSON.stringify(newRecord.data))\n return newRecord\n }\n\n async query(collection: string, filter?: QueryFilter): Promise<readonly StorageRecord[]> {\n this.ensureTable(collection)\n const { sql, params } = this.buildSelect(collection, filter)\n const rows = this.db.prepare(sql).all(...params) as Array<{ id: string; data: string }>\n return rows.map((row) => ({\n collection,\n id: row.id,\n data: JSON.parse(row.data) as Record<string, unknown>,\n }))\n }\n\n async update(\n collection: string,\n id: string,\n data: Record<string, unknown>,\n ): Promise<StorageRecord> {\n this.ensureTable(collection)\n this.db\n .prepare(`UPDATE \"${collection}\" SET data = ? WHERE id = ?`)\n .run(JSON.stringify(data), id)\n return { collection, id, data }\n }\n\n async delete(collection: string, id: string): Promise<void> {\n this.ensureTable(collection)\n this.db.prepare(`DELETE FROM \"${collection}\" WHERE id = ?`).run(id)\n }\n\n async count(collection: string, filter?: QueryFilter): Promise<number> {\n this.ensureTable(collection)\n const { sql, params } = this.buildCount(collection, filter)\n const row = this.db.prepare(sql).get(...params) as { cnt: number }\n return row.cnt\n }\n\n private buildWhereClause(filter?: QueryFilter): { clause: string; params: unknown[] } {\n if (!filter) return { clause: '', params: [] }\n\n const conditions: string[] = []\n const params: unknown[] = []\n\n if (filter.where) {\n for (const [field, value] of Object.entries(filter.where)) {\n if (field === 'id') {\n conditions.push('id = ?')\n params.push(value)\n } else {\n conditions.push(`json_extract(data, '$.${field}') = ?`)\n params.push(value)\n }\n }\n }\n\n if (filter.whereIn) {\n for (const [field, values] of Object.entries(filter.whereIn)) {\n const placeholders = values.map(() => '?').join(', ')\n if (field === 'id') {\n conditions.push(`id IN (${placeholders})`)\n } else {\n conditions.push(`json_extract(data, '$.${field}') IN (${placeholders})`)\n }\n params.push(...values)\n }\n }\n\n if (filter.whereBetween) {\n for (const [field, [low, high]] of Object.entries(filter.whereBetween)) {\n if (field === 'id') {\n conditions.push('id BETWEEN ? AND ?')\n } else {\n conditions.push(`json_extract(data, '$.${field}') BETWEEN ? AND ?`)\n }\n params.push(low, high)\n }\n }\n\n const clause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : ''\n return { clause, params }\n }\n\n private buildSelect(collection: string, filter?: QueryFilter): { sql: string; params: unknown[] } {\n const { clause, params } = this.buildWhereClause(filter)\n let sql = `SELECT id, data FROM \"${collection}\"${clause}`\n\n if (filter?.orderBy) {\n const dir = filter.orderBy.direction === 'desc' ? 'DESC' : 'ASC'\n if (filter.orderBy.field === 'id') {\n sql += ` ORDER BY id ${dir}`\n } else {\n sql += ` ORDER BY json_extract(data, '$.${filter.orderBy.field}') ${dir}`\n }\n }\n\n if (filter?.limit !== undefined) {\n sql += ` LIMIT ?`\n params.push(filter.limit)\n }\n\n if (filter?.offset !== undefined) {\n sql += ` OFFSET ?`\n params.push(filter.offset)\n }\n\n return { sql, params }\n }\n\n private buildCount(collection: string, filter?: QueryFilter): { sql: string; params: unknown[] } {\n const { clause, params } = this.buildWhereClause(filter)\n return { sql: `SELECT COUNT(*) as cnt FROM \"${collection}\"${clause}`, params }\n }\n}\n\nexport class FileSystemStorage implements IFileStorage {\n constructor(private readonly basePath: string) {}\n\n async readFile(filePath: string): Promise<Buffer> {\n const fullPath = path.join(this.basePath, filePath)\n return fs.promises.readFile(fullPath)\n }\n\n async writeFile(filePath: string, data: Buffer): Promise<void> {\n const fullPath = path.join(this.basePath, filePath)\n fs.mkdirSync(path.dirname(fullPath), { recursive: true })\n await fs.promises.writeFile(fullPath, data)\n }\n\n async deleteFile(filePath: string): Promise<void> {\n const fullPath = path.join(this.basePath, filePath)\n await fs.promises.unlink(fullPath)\n }\n\n async listFiles(prefix?: string): Promise<readonly string[]> {\n const searchDir = prefix ? path.join(this.basePath, prefix) : this.basePath\n try {\n const entries = await fs.promises.readdir(searchDir, { recursive: true })\n const files: string[] = []\n for (const entry of entries) {\n const entryStr = String(entry)\n const relative = prefix ? path.join(prefix, entryStr) : entryStr\n const fullPath = path.join(this.basePath, relative)\n try {\n const stat = await fs.promises.stat(fullPath)\n if (stat.isFile()) {\n files.push(relative)\n }\n } catch {\n // Skip entries that can't be stat'd\n }\n }\n return files\n } catch {\n return []\n }\n }\n\n async getFileUrl(_path: string): Promise<string> {\n return null as unknown as string\n }\n\n async exists(filePath: string): Promise<boolean> {\n const fullPath = path.join(this.basePath, filePath)\n try {\n await fs.promises.access(fullPath, fs.constants.F_OK)\n return true\n } catch {\n return false\n }\n }\n}\n\n/** @deprecated Use FilesystemStorageProvider + SqliteSettingsBackend instead */\nexport class SqliteStorageProvider {\n private mainDb: Database.Database | null = null\n private sharedStructured: SqliteStructuredStorage | null = null\n private readonly locations = new Map<StorageLocationName, IStorageLocation>()\n\n async initialize(): Promise<void> {\n // Called by interface contract; actual setup done via configure()\n }\n\n /**\n * Configure all storage locations.\n * ONE single SQLite database (camstack.db) is used for ALL structured storage.\n * File-based locations use the filesystem at their configured path.\n */\n async configure(config: { locations: Record<string, string> }): Promise<void> {\n // Find the 'data' location path for the single DB (fall back to first structured location)\n const dataPath = config.locations['data'] ?? config.locations['config'] ?? Object.values(config.locations)[0]\n if (!dataPath) throw new Error('No data path configured for SQLite storage')\n\n // Create single database\n fs.mkdirSync(dataPath, { recursive: true })\n const dbPath = path.join(dataPath, 'camstack.db')\n this.mainDb = new Database(dbPath)\n this.mainDb.pragma('journal_mode = WAL')\n this.sharedStructured = new SqliteStructuredStorage(this.mainDb)\n\n // Configure each location\n for (const [name, dirPath] of Object.entries(config.locations)) {\n const locationName = name as StorageLocationName\n const locationType = LOCATION_TYPES[name] ?? 'files'\n\n fs.mkdirSync(dirPath, { recursive: true })\n\n const location: IStorageLocation = {}\n\n // All structured storage shares the single DB\n if (locationType === 'structured' || locationType === 'both') {\n location.structured = this.sharedStructured\n }\n\n if (locationType === 'files' || locationType === 'both') {\n location.files = new FileSystemStorage(dirPath)\n }\n\n this.locations.set(locationName, location)\n }\n }\n\n getLocation(name: StorageLocationName): IStorageLocation {\n const location = this.locations.get(name)\n if (!location) {\n throw new Error(`Storage location \"${name}\" not found`)\n }\n return location\n }\n\n async shutdown(): Promise<void> {\n if (this.mainDb) {\n this.mainDb.close()\n this.mainDb = null\n this.sharedStructured = null\n }\n this.locations.clear()\n }\n\n async export(_locationName: StorageLocationName): Promise<Buffer> {\n throw new Error('Export not yet implemented')\n }\n\n async import(_locationName: StorageLocationName, _data: Buffer): Promise<void> {\n throw new Error('Import not yet implemented')\n }\n}\n","import type {\n ICamstackAddon,\n AddonManifest,\n AddonContext,\n IConfigurable,\n ConfigUISchema,\n CapabilityProviderMap,\n} from '@camstack/types'\nimport { SqliteStorageProvider } from './sqlite-storage.provider'\n\nexport class SqliteStorageAddon implements ICamstackAddon, IConfigurable {\n readonly manifest: AddonManifest = {\n id: 'sqlite-storage',\n name: 'SQLite Storage',\n version: '1.0.0',\n capabilities: ['storage'],\n }\n\n private provider: SqliteStorageProvider | null = null\n\n async initialize(context: AddonContext): Promise<void> {\n const storageConfig = {\n locations: { ...context.locationPaths } as Record<string, string>,\n }\n this.provider = new SqliteStorageProvider()\n await this.provider.configure(storageConfig)\n context.logger.info('SQLite storage initialized')\n }\n\n async shutdown(): Promise<void> {\n await this.provider?.shutdown()\n }\n\n getProvider(): SqliteStorageProvider {\n if (!this.provider) throw new Error('SQLite storage not initialized')\n return this.provider\n }\n\n getCapabilityProvider<K extends keyof CapabilityProviderMap>(\n name: K,\n ): CapabilityProviderMap[K] | null {\n if (name === 'storage' && this.provider) {\n return this.provider as unknown as CapabilityProviderMap[K]\n }\n return null\n }\n\n getConfigSchema(): ConfigUISchema {\n return {\n sections: [],\n }\n }\n\n getConfig(): Record<string, unknown> {\n return {}\n }\n\n async onConfigChange(_config: Record<string, unknown>): Promise<void> {\n // No configurable fields\n }\n}\n","/** Core table DDL statements -- executed on first boot */\nexport const CORE_TABLE_DDL: readonly string[] = [\n // Settings tables\n `CREATE TABLE IF NOT EXISTS system_settings (\n key TEXT PRIMARY KEY,\n value JSON NOT NULL,\n updated_at INTEGER NOT NULL DEFAULT (unixepoch())\n )`,\n `CREATE TABLE IF NOT EXISTS addon_settings (\n addon_id TEXT NOT NULL,\n key TEXT NOT NULL,\n value JSON NOT NULL,\n updated_at INTEGER NOT NULL DEFAULT (unixepoch()),\n PRIMARY KEY (addon_id, key)\n )`,\n `CREATE TABLE IF NOT EXISTS provider_settings (\n provider_id TEXT NOT NULL,\n key TEXT NOT NULL,\n value JSON NOT NULL,\n updated_at INTEGER NOT NULL DEFAULT (unixepoch()),\n PRIMARY KEY (provider_id, key)\n )`,\n `CREATE TABLE IF NOT EXISTS device_settings (\n device_id TEXT NOT NULL,\n key TEXT NOT NULL,\n value JSON NOT NULL,\n updated_at INTEGER NOT NULL DEFAULT (unixepoch()),\n PRIMARY KEY (device_id, key)\n )`,\n\n // Detection events\n `CREATE TABLE IF NOT EXISTS detection_events (\n id TEXT PRIMARY KEY,\n timestamp INTEGER NOT NULL,\n device_id TEXT NOT NULL,\n class_name TEXT NOT NULL,\n score REAL NOT NULL,\n severity TEXT NOT NULL,\n track_id TEXT,\n zones JSON,\n recognition JSON,\n media_files JSON,\n data JSON\n )`,\n `CREATE INDEX IF NOT EXISTS idx_det_device_ts ON detection_events(device_id, timestamp)`,\n `CREATE INDEX IF NOT EXISTS idx_det_class_ts ON detection_events(class_name, timestamp)`,\n\n // Audio levels\n `CREATE TABLE IF NOT EXISTS audio_levels (\n id TEXT PRIMARY KEY,\n timestamp INTEGER NOT NULL,\n device_id TEXT NOT NULL,\n dbfs REAL NOT NULL,\n rms REAL NOT NULL,\n state TEXT NOT NULL\n )`,\n `CREATE INDEX IF NOT EXISTS idx_audio_device_ts ON audio_levels(device_id, timestamp)`,\n\n // Track trails\n `CREATE TABLE IF NOT EXISTS track_trails (\n track_id TEXT PRIMARY KEY,\n device_id TEXT NOT NULL,\n class_name TEXT NOT NULL,\n first_seen INTEGER NOT NULL,\n last_seen INTEGER NOT NULL,\n positions JSON NOT NULL,\n snapshots JSON,\n total_distance REAL,\n zones_visited JSON\n )`,\n `CREATE INDEX IF NOT EXISTS idx_trails_device_ts ON track_trails(device_id, first_seen)`,\n]\n\n/** Addon table schema declaration */\nexport interface AddonTableSchema {\n readonly name: string\n readonly columns: ReadonlyArray<{\n readonly name: string\n readonly type: 'TEXT' | 'INTEGER' | 'REAL' | 'JSON'\n readonly primaryKey?: boolean\n readonly notNull?: boolean\n }>\n readonly indexes?: ReadonlyArray<{\n readonly name: string\n readonly columns: readonly string[]\n readonly unique?: boolean\n }>\n}\n\n/** Generate CREATE TABLE DDL from addon schema */\nexport function addonTableToDdl(schema: AddonTableSchema): string[] {\n const pks = schema.columns.filter(c => c.primaryKey).map(c => c.name)\n const colDefs = schema.columns.map(c => {\n const parts = [c.name, c.type]\n if (c.notNull) parts.push('NOT NULL')\n return parts.join(' ')\n })\n\n let ddl = `CREATE TABLE IF NOT EXISTS ${schema.name} (\\n ${colDefs.join(',\\n ')}`\n if (pks.length > 0) {\n ddl += `,\\n PRIMARY KEY (${pks.join(', ')})`\n }\n ddl += '\\n)'\n\n const stmts = [ddl]\n for (const idx of schema.indexes ?? []) {\n const unique = idx.unique ? 'UNIQUE ' : ''\n stmts.push(`CREATE ${unique}INDEX IF NOT EXISTS ${idx.name} ON ${schema.name}(${idx.columns.join(', ')})`)\n }\n return stmts\n}\n","import Database from 'better-sqlite3'\nimport { CORE_TABLE_DDL } from './sql-schema.js'\nimport { RUNTIME_DEFAULTS } from '@camstack/kernel'\n\n/**\n * Thin wrapper over better-sqlite3 that manages the four settings tables:\n * system_settings, addon_settings, provider_settings, device_settings.\n *\n * All values are stored as JSON text and deserialized on read.\n */\nexport class SettingsStore {\n private readonly db: Database.Database\n\n constructor(dbPath: string) {\n this.db = new Database(dbPath)\n this.db.pragma('journal_mode = WAL')\n this.db.pragma('foreign_keys = ON')\n this.initTables()\n }\n\n // ---------------------------------------------------------------------------\n // System settings\n // ---------------------------------------------------------------------------\n\n getSystem(key: string): unknown {\n const row = this.db\n .prepare<[string], { value: string }>('SELECT value FROM system_settings WHERE key = ?')\n .get(key)\n if (row === undefined) return undefined\n return JSON.parse(row.value)\n }\n\n setSystem(key: string, value: unknown): void {\n this.db\n .prepare(\n `INSERT INTO system_settings (key, value, updated_at) VALUES (?, json(?), unixepoch())\n ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`,\n )\n .run(key, JSON.stringify(value))\n }\n\n getAllSystem(): Record<string, unknown> {\n const rows = this.db\n .prepare<[], { key: string; value: string }>('SELECT key, value FROM system_settings')\n .all()\n return Object.fromEntries(rows.map(r => [r.key, JSON.parse(r.value)]))\n }\n\n // ---------------------------------------------------------------------------\n // Addon settings\n // ---------------------------------------------------------------------------\n\n getAddon(addonId: string, key: string): unknown {\n const row = this.db\n .prepare<[string, string], { value: string }>(\n 'SELECT value FROM addon_settings WHERE addon_id = ? AND key = ?',\n )\n .get(addonId, key)\n if (row === undefined) return undefined\n return JSON.parse(row.value)\n }\n\n setAddon(addonId: string, key: string, value: unknown): void {\n this.db\n .prepare(\n `INSERT INTO addon_settings (addon_id, key, value, updated_at) VALUES (?, ?, json(?), unixepoch())\n ON CONFLICT(addon_id, key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`,\n )\n .run(addonId, key, JSON.stringify(value))\n }\n\n getAllAddon(addonId: string): Record<string, unknown> {\n const rows = this.db\n .prepare<[string], { key: string; value: string }>(\n 'SELECT key, value FROM addon_settings WHERE addon_id = ?',\n )\n .all(addonId)\n return Object.fromEntries(rows.map(r => [r.key, JSON.parse(r.value)]))\n }\n\n /** Bulk-replace all keys for an addon (within a transaction). */\n setAllAddon(addonId: string, config: Record<string, unknown>): void {\n const deleteStmt = this.db.prepare('DELETE FROM addon_settings WHERE addon_id = ?')\n const insertStmt = this.db.prepare(\n `INSERT INTO addon_settings (addon_id, key, value, updated_at) VALUES (?, ?, json(?), unixepoch())`,\n )\n this.db.transaction(() => {\n deleteStmt.run(addonId)\n for (const [key, value] of Object.entries(config)) {\n insertStmt.run(addonId, key, JSON.stringify(value))\n }\n })()\n }\n\n // ---------------------------------------------------------------------------\n // Provider settings\n // ---------------------------------------------------------------------------\n\n getProvider(providerId: string, key: string): unknown {\n const row = this.db\n .prepare<[string, string], { value: string }>(\n 'SELECT value FROM provider_settings WHERE provider_id = ? AND key = ?',\n )\n .get(providerId, key)\n if (row === undefined) return undefined\n return JSON.parse(row.value)\n }\n\n setProvider(providerId: string, key: string, value: unknown): void {\n this.db\n .prepare(\n `INSERT INTO provider_settings (provider_id, key, value, updated_at) VALUES (?, ?, json(?), unixepoch())\n ON CONFLICT(provider_id, key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`,\n )\n .run(providerId, key, JSON.stringify(value))\n }\n\n getAllProvider(providerId: string): Record<string, unknown> {\n const rows = this.db\n .prepare<[string], { key: string; value: string }>(\n 'SELECT key, value FROM provider_settings WHERE provider_id = ?',\n )\n .all(providerId)\n return Object.fromEntries(rows.map(r => [r.key, JSON.parse(r.value)]))\n }\n\n // ---------------------------------------------------------------------------\n // Device settings\n // ---------------------------------------------------------------------------\n\n getDevice(deviceId: string, key: string): unknown {\n const row = this.db\n .prepare<[string, string], { value: string }>(\n 'SELECT value FROM device_settings WHERE device_id = ? AND key = ?',\n )\n .get(deviceId, key)\n if (row === undefined) return undefined\n return JSON.parse(row.value)\n }\n\n setDevice(deviceId: string, key: string, value: unknown): void {\n this.db\n .prepare(\n `INSERT INTO device_settings (device_id, key, value, updated_at) VALUES (?, ?, json(?), unixepoch())\n ON CONFLICT(device_id, key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`,\n )\n .run(deviceId, key, JSON.stringify(value))\n }\n\n getAllDevice(deviceId: string): Record<string, unknown> {\n const rows = this.db\n .prepare<[string], { key: string; value: string }>(\n 'SELECT key, value FROM device_settings WHERE device_id = ?',\n )\n .all(deviceId)\n return Object.fromEntries(rows.map(r => [r.key, JSON.parse(r.value)]))\n }\n\n // ---------------------------------------------------------------------------\n // Lifecycle\n // ---------------------------------------------------------------------------\n\n /** Close the SQLite connection (call on shutdown). */\n close(): void {\n this.db.close()\n }\n\n /** Check if system_settings is empty (used for first-boot seeding). */\n isSystemSettingsEmpty(): boolean {\n const row = this.db\n .prepare<[], { cnt: number }>('SELECT COUNT(*) AS cnt FROM system_settings')\n .get()\n return (row?.cnt ?? 0) === 0\n }\n\n /** Seed system_settings with RUNTIME_DEFAULTS (only on first boot). */\n seedDefaults(): void {\n const insert = this.db.prepare(\n `INSERT OR IGNORE INTO system_settings (key, value, updated_at) VALUES (?, json(?), unixepoch())`,\n )\n this.db.transaction(() => {\n for (const [key, value] of Object.entries(RUNTIME_DEFAULTS)) {\n insert.run(key, JSON.stringify(value))\n }\n })()\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private initTables(): void {\n this.db.transaction(() => {\n for (const stmt of CORE_TABLE_DDL) {\n this.db.prepare(stmt).run()\n }\n })()\n }\n}\n","/** Core table DDL statements -- executed on first boot */\nexport const CORE_TABLE_DDL: readonly string[] = [\n // Settings tables\n `CREATE TABLE IF NOT EXISTS system_settings (\n key TEXT PRIMARY KEY,\n value JSON NOT NULL,\n updated_at INTEGER NOT NULL DEFAULT (unixepoch())\n )`,\n `CREATE TABLE IF NOT EXISTS addon_settings (\n addon_id TEXT NOT NULL,\n key TEXT NOT NULL,\n value JSON NOT NULL,\n updated_at INTEGER NOT NULL DEFAULT (unixepoch()),\n PRIMARY KEY (addon_id, key)\n )`,\n `CREATE TABLE IF NOT EXISTS provider_settings (\n provider_id TEXT NOT NULL,\n key TEXT NOT NULL,\n value JSON NOT NULL,\n updated_at INTEGER NOT NULL DEFAULT (unixepoch()),\n PRIMARY KEY (provider_id, key)\n )`,\n `CREATE TABLE IF NOT EXISTS device_settings (\n device_id TEXT NOT NULL,\n key TEXT NOT NULL,\n value JSON NOT NULL,\n updated_at INTEGER NOT NULL DEFAULT (unixepoch()),\n PRIMARY KEY (device_id, key)\n )`,\n\n // Detection events\n `CREATE TABLE IF NOT EXISTS detection_events (\n id TEXT PRIMARY KEY,\n timestamp INTEGER NOT NULL,\n device_id TEXT NOT NULL,\n class_name TEXT NOT NULL,\n score REAL NOT NULL,\n severity TEXT NOT NULL,\n track_id TEXT,\n zones JSON,\n recognition JSON,\n media_files JSON,\n data JSON\n )`,\n `CREATE INDEX IF NOT EXISTS idx_det_device_ts ON detection_events(device_id, timestamp)`,\n `CREATE INDEX IF NOT EXISTS idx_det_class_ts ON detection_events(class_name, timestamp)`,\n\n // Audio levels\n `CREATE TABLE IF NOT EXISTS audio_levels (\n id TEXT PRIMARY KEY,\n timestamp INTEGER NOT NULL,\n device_id TEXT NOT NULL,\n dbfs REAL NOT NULL,\n rms REAL NOT NULL,\n state TEXT NOT NULL\n )`,\n `CREATE INDEX IF NOT EXISTS idx_audio_device_ts ON audio_levels(device_id, timestamp)`,\n\n // Track trails\n `CREATE TABLE IF NOT EXISTS track_trails (\n track_id TEXT PRIMARY KEY,\n device_id TEXT NOT NULL,\n class_name TEXT NOT NULL,\n first_seen INTEGER NOT NULL,\n last_seen INTEGER NOT NULL,\n positions JSON NOT NULL,\n snapshots JSON,\n total_distance REAL,\n zones_visited JSON\n )`,\n `CREATE INDEX IF NOT EXISTS idx_trails_device_ts ON track_trails(device_id, first_seen)`,\n]\n\n/** Addon table schema declaration */\nexport interface AddonTableSchema {\n readonly name: string\n readonly columns: ReadonlyArray<{\n readonly name: string\n readonly type: 'TEXT' | 'INTEGER' | 'REAL' | 'JSON'\n readonly primaryKey?: boolean\n readonly notNull?: boolean\n }>\n readonly indexes?: ReadonlyArray<{\n readonly name: string\n readonly columns: readonly string[]\n readonly unique?: boolean\n }>\n}\n\n/** Generate CREATE TABLE DDL from addon schema */\nexport function addonTableToDdl(schema: AddonTableSchema): string[] {\n const pks = schema.columns.filter(c => c.primaryKey).map(c => c.name)\n const colDefs = schema.columns.map(c => {\n const parts = [c.name, c.type]\n if (c.notNull) parts.push('NOT NULL')\n return parts.join(' ')\n })\n\n let ddl = `CREATE TABLE IF NOT EXISTS ${schema.name} (\\n ${colDefs.join(',\\n ')}`\n if (pks.length > 0) {\n ddl += `,\\n PRIMARY KEY (${pks.join(', ')})`\n }\n ddl += '\\n)'\n\n const stmts = [ddl]\n for (const idx of schema.indexes ?? []) {\n const unique = idx.unique ? 'UNIQUE ' : ''\n stmts.push(`CREATE ${unique}INDEX IF NOT EXISTS ${idx.name} ON ${schema.name}(${idx.columns.join(', ')})`)\n }\n return stmts\n}\n","// New providers\nexport { FilesystemStorageProvider } from './filesystem-storage-provider'\nexport { FilesystemStorageAddon } from './filesystem-storage.addon'\nexport { SqliteSettingsBackend } from './sqlite-settings-backend'\nexport { SqliteSettingsAddon } from './sqlite-settings.addon'\n\n// Legacy (still used by backend during migration)\nexport { SqliteStorageAddon } from './sqlite-storage.addon'\nexport { SqliteStorageProvider, FileSystemStorage } from './sqlite-storage.provider'\nexport { SettingsStore } from './settings-store'\nexport { CORE_TABLE_DDL, addonTableToDdl } from './sql-schema'\nexport type { AddonTableSchema } from './sql-schema'\n\n// Default export for AddonLoader\nexport { FilesystemStorageAddon as default } from './filesystem-storage.addon'\n","import * as winston from 'winston'\nimport DailyRotateFile from 'winston-daily-rotate-file'\nimport * as path from 'node:path'\nimport type { ILogDestination, LogEntry, LogFilter } from '@camstack/types'\n\ninterface WinstonConfig {\n readonly level: string\n readonly retentionDays: number\n /** Resolved absolute path to the logs directory (replaces the old dataPath field). */\n readonly logsDir: string\n}\n\nfunction formatScope(scope: readonly string[]): string {\n if (scope.length === 0) return ''\n const [first, ...rest] = scope\n const restFormatted = rest.map((s) => `[${s}]`).join('')\n return `(${first})${restFormatted}`\n}\n\nexport class WinstonDestination implements ILogDestination {\n private logger: winston.Logger | null = null\n\n async initialize(config?: WinstonConfig): Promise<void> {\n const {\n level = 'info',\n retentionDays = 30,\n logsDir = path.join('camstack-data', 'logs'),\n } = config ?? {}\n\n const consoleFormat = winston.format.combine(\n winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),\n winston.format.colorize(),\n winston.format.printf(({ timestamp, level: lvl, message, scope }) => {\n const scopeStr = scope ? ` ${scope}` : ''\n return `${timestamp} [${lvl}]${scopeStr} - ${message}`\n }),\n )\n\n const fileFormat = winston.format.combine(\n winston.format.timestamp(),\n winston.format.json(),\n )\n\n this.logger = winston.createLogger({\n level,\n transports: [\n new winston.transports.Console({\n format: consoleFormat,\n }),\n new DailyRotateFile({\n dirname: logsDir,\n filename: 'camstack-%DATE%.log',\n datePattern: 'YYYY-MM-DD',\n maxFiles: `${retentionDays}d`,\n format: fileFormat,\n }),\n ],\n })\n }\n\n write(entry: LogEntry): void {\n if (!this.logger) return\n\n const scope = formatScope(entry.scope)\n const meta = entry.meta ?? {}\n\n this.logger.log({\n level: entry.level,\n message: entry.message,\n scope,\n timestamp: entry.timestamp.toISOString(),\n ...meta,\n })\n }\n\n async query(_filter: LogFilter): Promise<readonly LogEntry[]> {\n // File-based log querying is not implemented; use structured storage for log queries\n return []\n }\n\n async shutdown(): Promise<void> {\n if (!this.logger) return\n\n await new Promise<void>((resolve) => {\n this.logger!.on('finish', resolve)\n this.logger!.end()\n })\n this.logger = null\n }\n}\n","import type {\n ICamstackAddon,\n AddonManifest,\n AddonContext,\n IConfigurable,\n ConfigUISchema,\n CapabilityProviderMap,\n} from '@camstack/types'\nimport { WinstonDestination } from './winston-destination'\n\nexport class WinstonLoggingAddon implements ICamstackAddon, IConfigurable {\n readonly manifest: AddonManifest = {\n id: 'winston-logging',\n name: 'Winston Logging',\n version: '1.0.0',\n capabilities: ['log-destination'],\n }\n\n private destination: WinstonDestination | null = null\n private currentConfig = {\n level: 'info',\n retentionDays: 30,\n }\n\n async initialize(context: AddonContext): Promise<void> {\n this.currentConfig = {\n level: (context.addonConfig.level as string) ?? this.currentConfig.level,\n retentionDays: (context.addonConfig.retentionDays as number) ?? this.currentConfig.retentionDays,\n }\n const logsDir = context.locationPaths.logs\n this.destination = new WinstonDestination()\n await this.destination.initialize({ ...this.currentConfig, logsDir })\n context.logger.info('Winston logging initialized')\n }\n\n async shutdown(): Promise<void> {\n await this.destination?.shutdown()\n }\n\n getDestination(): WinstonDestination {\n if (!this.destination) throw new Error('Winston not initialized')\n return this.destination\n }\n\n getCapabilityProvider<K extends keyof CapabilityProviderMap>(\n name: K,\n ): CapabilityProviderMap[K] | null {\n if (name === 'log-destination' && this.destination) {\n return this.destination as unknown as CapabilityProviderMap[K]\n }\n return null\n }\n\n getConfigSchema(): ConfigUISchema {\n return {\n sections: [\n {\n id: 'winston-retention',\n title: 'Log Retention',\n description: 'How long Winston keeps rotated log files on disk.',\n columns: 1,\n fields: [\n {\n type: 'number',\n key: 'retentionDays',\n label: 'Retention (days)',\n description: 'Number of days to keep rotated log files before deletion',\n min: 1,\n max: 365,\n step: 1,\n unit: 'days',\n },\n ],\n },\n ],\n }\n }\n\n getConfig(): Record<string, unknown> {\n return { ...this.currentConfig }\n }\n\n async onConfigChange(config: Record<string, unknown>): Promise<void> {\n this.currentConfig = {\n level: (config.level as string) ?? this.currentConfig.level,\n retentionDays: (config.retentionDays as number) ?? this.currentConfig.retentionDays,\n }\n }\n}\n","export { WinstonLoggingAddon } from './winston-logging.addon'\nexport { WinstonDestination } from './winston-destination'\nexport { WinstonLoggingAddon as default } from './winston-logging.addon'\n","import { randomUUID } from 'node:crypto'\nimport type { IScopedLogger, IEventBus, IStorageLocation, BackupManifest } from '@camstack/types'\n\nexport type { BackupManifest }\n\nexport interface BackupConfig {\n readonly backupDir: string\n readonly retentionCount: number\n}\n\nexport class LocalBackupService {\n private manifests: BackupManifest[] = []\n\n constructor(\n private readonly config: BackupConfig,\n private readonly logger: IScopedLogger,\n private readonly eventBus: IEventBus,\n private readonly storage: IStorageLocation,\n ) {}\n\n /** Create a backup of specified locations */\n async backup(options?: {\n locations?: string[]\n label?: string\n }): Promise<BackupManifest> {\n const id = randomUUID()\n const timestamp = Date.now()\n const locations = options?.locations ?? ['config', 'events', 'logs']\n\n this.logger.info(`Starting backup ${id} (${locations.join(', ')})`)\n\n const manifest: BackupManifest = {\n id,\n timestamp,\n label: options?.label,\n locations,\n sizeMB: 0,\n path: `${this.config.backupDir}/${id}`,\n }\n\n const updated = [...this.manifests, manifest]\n this.manifests = updated\n\n await this.pruneOldBackups()\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'addon', id: 'local-backup' },\n category: 'backup.completed',\n data: { backupId: id, locations: [...locations], sizeMB: manifest.sizeMB },\n })\n\n this.logger.info(`Backup ${id} completed`)\n return manifest\n }\n\n /** Restore from a backup */\n async restore(backupId: string): Promise<void> {\n const manifest = this.manifests.find((m) => m.id === backupId)\n if (!manifest) throw new Error(`Backup ${backupId} not found`)\n\n this.logger.info(`Restoring from backup ${backupId}`)\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'addon', id: 'local-backup' },\n category: 'backup.restored',\n data: { backupId },\n })\n }\n\n /** List all backups sorted by timestamp descending */\n list(): readonly BackupManifest[] {\n return [...this.manifests].sort((a, b) => b.timestamp - a.timestamp)\n }\n\n /** Delete a specific backup */\n async delete(backupId: string): Promise<void> {\n this.manifests = this.manifests.filter((m) => m.id !== backupId)\n }\n\n private async pruneOldBackups(): Promise<void> {\n const sorted = [...this.manifests].sort((a, b) => a.timestamp - b.timestamp)\n\n while (sorted.length > this.config.retentionCount) {\n const oldest = sorted.shift()\n if (oldest) {\n this.logger.info(`Pruning old backup ${oldest.id}`)\n this.manifests = this.manifests.filter((m) => m.id !== oldest.id)\n }\n }\n }\n}\n","import * as path from 'node:path'\nimport type {\n ICamstackAddon, AddonManifest, AddonContext,\n IConfigurable, ConfigUISchema, CapabilityProviderMap,\n} from '@camstack/types'\nimport { LocalBackupService } from './local-backup'\nimport type { BackupConfig } from './local-backup'\n\nexport class LocalBackupAddon implements ICamstackAddon, IConfigurable {\n readonly manifest: AddonManifest = {\n id: 'local-backup',\n name: 'Local Backup',\n version: '1.0.0',\n capabilities: ['backup'],\n }\n\n private service: LocalBackupService | null = null\n private currentConfig = {\n retentionCount: 7,\n }\n\n async initialize(context: AddonContext): Promise<void> {\n this.currentConfig = {\n retentionCount: (context.addonConfig.retentionCount as number) ?? this.currentConfig.retentionCount,\n }\n const backupConfig: BackupConfig = {\n backupDir: path.join(context.locationPaths.data, 'backups'),\n retentionCount: this.currentConfig.retentionCount,\n }\n this.service = new LocalBackupService(\n backupConfig,\n context.logger,\n context.eventBus,\n context.storage,\n )\n context.logger.info('Local Backup initialized')\n }\n\n async shutdown(): Promise<void> {\n this.service = null\n }\n\n getService(): LocalBackupService {\n if (!this.service) throw new Error('Local Backup not initialized')\n return this.service\n }\n\n getCapabilityProvider<K extends keyof CapabilityProviderMap>(\n name: K,\n ): CapabilityProviderMap[K] | null {\n if (name === 'backup' as string && this.service) {\n return this.service as unknown as CapabilityProviderMap[K]\n }\n return null\n }\n\n getConfigSchema(): ConfigUISchema {\n return {\n sections: [\n {\n id: 'backup-retention',\n title: 'Backup Retention',\n description: 'How many local backup snapshots to keep on disk.',\n columns: 1,\n fields: [\n {\n type: 'number',\n key: 'retentionCount',\n label: 'Retention Count',\n description: 'Number of backup snapshots to keep before deleting the oldest',\n min: 1,\n max: 100,\n step: 1,\n },\n ],\n },\n ],\n }\n }\n\n getConfig(): Record<string, unknown> {\n return { ...this.currentConfig }\n }\n\n async onConfigChange(config: Record<string, unknown>): Promise<void> {\n this.currentConfig = {\n retentionCount: (config.retentionCount as number) ?? this.currentConfig.retentionCount,\n }\n }\n}\n","export { LocalBackupService } from './local-backup'\nexport type { BackupManifest, BackupConfig } from './local-backup'\nexport { LocalBackupAddon } from './local-backup.addon'\nexport { LocalBackupAddon as default } from './local-backup.addon'\n","import { randomUUID } from 'node:crypto'\nimport type { IScopedLogger, IEventBus } from '@camstack/types'\n\nexport type ElementState = 'stopped' | 'starting' | 'running' | 'stopping' | 'error' | 'disabled'\n\nexport interface ElementStatus {\n state: ElementState\n error?: string\n startedAt?: number\n stoppedAt?: number\n restartCount: number\n uptime: number\n}\n\nconst VALID_TRANSITIONS: Readonly<Record<ElementState, readonly ElementState[]>> = {\n stopped: ['starting', 'disabled'],\n starting: ['running', 'error', 'stopping'],\n running: ['stopping', 'error'],\n stopping: ['stopped', 'error'],\n error: ['starting', 'stopped', 'disabled'],\n disabled: ['stopped'],\n}\n\nexport class LifecycleStateMachine {\n private _state: ElementState = 'stopped'\n private _error?: string\n private _startedAt?: number\n private _stoppedAt?: number\n private _restartCount = 0\n private _hasStartedOnce = false\n\n constructor(\n private readonly elementId: string,\n private readonly elementType: 'provider' | 'device' | 'addon' | 'process',\n private readonly eventBus: IEventBus,\n private readonly logger: IScopedLogger,\n ) {}\n\n get state(): ElementState {\n return this._state\n }\n\n getStatus(): ElementStatus {\n return {\n state: this._state,\n error: this._error,\n startedAt: this._startedAt,\n stoppedAt: this._stoppedAt,\n restartCount: this._restartCount,\n uptime:\n this._state === 'running' && this._startedAt\n ? Date.now() - this._startedAt\n : 0,\n }\n }\n\n transition(to: ElementState, error?: string): boolean {\n const from = this._state\n\n if (!this.isValidTransition(from, to)) {\n this.logger.warn(`Invalid state transition: ${from} → ${to}`)\n return false\n }\n\n this._state = to\n this._error = error\n\n if (to === 'running') {\n if (this._hasStartedOnce) {\n this._restartCount++\n }\n this._hasStartedOnce = true\n this._startedAt = Date.now()\n this._stoppedAt = undefined\n }\n\n if (to === 'stopped' || to === 'error' || to === 'disabled') {\n this._stoppedAt = Date.now()\n }\n\n this.logger.info(`State: ${from} → ${to}${error ? ` (${error})` : ''}`)\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: this.elementType, id: this.elementId },\n category: `${this.elementType}.state.${to}`,\n data: { from, to, error, elementId: this.elementId },\n })\n\n return true\n }\n\n incrementRestartCount(): void {\n this._restartCount++\n }\n\n private isValidTransition(from: ElementState, to: ElementState): boolean {\n return VALID_TRANSITIONS[from]?.includes(to) ?? false\n }\n}\n","import type { FeatureManifest, FeatureFlag } from '@camstack/types'\n\nexport type { FeatureManifest, FeatureFlag }\n\nexport type FeatureConfigReader = {\n readonly features: FeatureManifest\n}\n\nexport class FeatureManager {\n constructor(private readonly configReader: FeatureConfigReader) {}\n\n isEnabled(flag: FeatureFlag): boolean {\n return this.configReader.features[flag]\n }\n\n getManifest(): FeatureManifest {\n return { ...this.configReader.features }\n }\n}\n","import type {\n EventSource,\n SystemEvent,\n EventFilter,\n IEventBus,\n} from '@camstack/types'\n\nexport type { EventSource, SystemEvent, EventFilter }\n\ninterface Subscriber {\n readonly filter: EventFilter\n readonly callback: (event: SystemEvent) => void\n}\n\nclass EventRingBuffer {\n private readonly buffer: Array<SystemEvent | undefined>\n private head = 0\n private count = 0\n\n constructor(private readonly capacity: number) {\n this.buffer = new Array(capacity)\n }\n\n push(event: SystemEvent): void {\n this.buffer[this.head] = event\n this.head = (this.head + 1) % this.capacity\n if (this.count < this.capacity) {\n this.count++\n }\n }\n\n getAll(): readonly SystemEvent[] {\n const result: SystemEvent[] = []\n for (let i = 0; i < this.count; i++) {\n const index = (this.head - 1 - i + this.capacity) % this.capacity\n result.push(this.buffer[index]!)\n }\n return result\n }\n\n query(filter?: EventFilter, limit?: number): readonly SystemEvent[] {\n let result = [...this.getAll()]\n\n if (filter) {\n result = result.filter((event) => matchesFilter(event, filter))\n }\n\n if (limit !== undefined && limit > 0) {\n return result.slice(0, limit)\n }\n\n return result\n }\n}\n\nfunction matchesCategory(eventCategory: string, filterCategory: string): boolean {\n if (filterCategory.endsWith('.*')) {\n const prefix = filterCategory.slice(0, -2)\n return eventCategory.startsWith(prefix + '.') || eventCategory === prefix\n }\n return eventCategory === filterCategory\n}\n\nfunction matchesFilter(event: SystemEvent, filter: EventFilter): boolean {\n if (filter.category && !matchesCategory(event.category, filter.category)) {\n return false\n }\n\n if (filter.source) {\n if (event.source.type !== filter.source.type || event.source.id !== filter.source.id) {\n return false\n }\n }\n\n if (filter.since && event.timestamp < filter.since) {\n return false\n }\n\n return true\n}\n\nexport class SystemEventBus implements IEventBus {\n private readonly ringBuffer: EventRingBuffer\n private readonly subscribers: Subscriber[] = []\n\n constructor(bufferSize: number = 10000) {\n this.ringBuffer = new EventRingBuffer(bufferSize)\n }\n\n emit(event: SystemEvent): void {\n this.ringBuffer.push(event)\n\n for (const subscriber of this.subscribers) {\n if (matchesFilter(event, subscriber.filter)) {\n subscriber.callback(event)\n }\n }\n }\n\n subscribe(filter: EventFilter, handler: (event: SystemEvent) => void): () => void {\n const subscriber: Subscriber = { filter, callback: handler }\n this.subscribers.push(subscriber)\n\n return () => {\n const index = this.subscribers.indexOf(subscriber)\n if (index !== -1) {\n this.subscribers.splice(index, 1)\n }\n }\n }\n\n getRecent(filter?: EventFilter, limit?: number): readonly SystemEvent[] {\n return this.ringBuffer.query(filter, limit)\n }\n}\n","import type { LogLevel, LogEntry, LogFilter } from '@camstack/types'\n\nexport type { LogLevel, LogEntry, LogFilter }\n\nexport class LogRingBuffer {\n private readonly buffer: Array<LogEntry | undefined>\n private head = 0\n private count = 0\n\n constructor(private readonly capacity: number = 10000) {\n this.buffer = new Array(capacity)\n }\n\n push(entry: LogEntry): void {\n this.buffer[this.head] = entry\n this.head = (this.head + 1) % this.capacity\n if (this.count < this.capacity) {\n this.count++\n }\n }\n\n getAll(): LogEntry[] {\n const result: LogEntry[] = []\n\n for (let i = 0; i < this.count; i++) {\n const index = (this.head - 1 - i + this.capacity) % this.capacity\n result.push(this.buffer[index]!)\n }\n\n return result\n }\n\n query(filter: LogFilter): LogEntry[] {\n const all = this.getAll()\n let result = all\n\n if (filter.scope && filter.scope.length > 0) {\n result = result.filter((entry) => {\n for (let i = 0; i < filter.scope!.length; i++) {\n if (entry.scope[i] !== filter.scope![i]) return false\n }\n return true\n })\n }\n\n if (filter.level) {\n result = result.filter((entry) => entry.level === filter.level)\n }\n\n if (filter.since) {\n result = result.filter((entry) => entry.timestamp >= filter.since!)\n }\n\n if (filter.until) {\n result = result.filter((entry) => entry.timestamp <= filter.until!)\n }\n\n if (filter.limit !== undefined && filter.limit > 0) {\n result = result.slice(0, filter.limit)\n }\n\n return result\n }\n}\n","import type { IScopedLogger } from '@camstack/types'\nimport type { LogEntry, LogLevel } from './log-ring-buffer.js'\n\nexport type { IScopedLogger }\n\nexport class ScopedLogger implements IScopedLogger {\n constructor(\n private readonly scope: string[],\n private readonly writeFn: (entry: LogEntry) => void,\n ) {}\n\n debug(message: string, meta?: Record<string, unknown>): void {\n this.write('debug', message, meta)\n }\n\n info(message: string, meta?: Record<string, unknown>): void {\n this.write('info', message, meta)\n }\n\n warn(message: string, meta?: Record<string, unknown>): void {\n this.write('warn', message, meta)\n }\n\n error(message: string, meta?: Record<string, unknown>): void {\n this.write('error', message, meta)\n }\n\n child(childScope: string): IScopedLogger {\n return new ScopedLogger([...this.scope, childScope], this.writeFn)\n }\n\n private write(level: LogLevel, message: string, meta?: Record<string, unknown>): void {\n const entry: LogEntry = {\n timestamp: new Date(),\n level,\n scope: this.scope,\n message,\n ...(meta !== undefined ? { meta } : {}),\n }\n this.writeFn(entry)\n }\n}\n","import { LogRingBuffer, type LogEntry, type LogFilter } from './log-ring-buffer.js'\nimport { ScopedLogger, type IScopedLogger } from './scoped-logger.js'\n\nexport interface ILogDestination {\n initialize(): Promise<void>\n shutdown(): Promise<void>\n write(entry: LogEntry): void\n query?(filter: LogFilter): Promise<readonly LogEntry[]>\n}\n\nexport class LogManager {\n private readonly ringBuffer: LogRingBuffer\n private readonly destinations: ILogDestination[] = []\n\n constructor(bufferSize: number = 10000) {\n this.ringBuffer = new LogRingBuffer(bufferSize)\n }\n\n createLogger(scope: string): IScopedLogger {\n return new ScopedLogger([scope], (entry: LogEntry) => {\n this.ringBuffer.push(entry)\n for (const dest of this.destinations) {\n dest.write(entry)\n }\n })\n }\n\n addDestination(dest: ILogDestination): void {\n this.destinations.push(dest)\n }\n\n removeDestination(dest: ILogDestination): void {\n const index = this.destinations.indexOf(dest)\n if (index !== -1) {\n this.destinations.splice(index, 1)\n }\n }\n\n query(filter: LogFilter): LogEntry[] {\n return this.ringBuffer.query(filter)\n }\n}\n","import { existsSync, mkdirSync, accessSync, constants } from 'node:fs'\nimport { join, resolve, isAbsolute } from 'node:path'\n\nexport interface IStorageBackend {\n /** Backend type identifier */\n readonly type: string\n /** Base path of this backend */\n readonly basePath: string\n /** Resolve a subpath to an absolute path */\n resolve(subpath: string): string\n /** Check if the backend path exists and is writable */\n isAvailable(): boolean\n /** Ensure base directory exists (mkdir -p equivalent) */\n initialize(): Promise<void>\n}\n\nexport class FsStorageBackend implements IStorageBackend {\n readonly type = 'local'\n readonly basePath: string\n\n constructor(basePath: string) {\n this.basePath = resolve(basePath)\n }\n\n resolve(subpath: string): string {\n if (isAbsolute(subpath)) return subpath\n return join(this.basePath, subpath)\n }\n\n isAvailable(): boolean {\n try {\n if (!existsSync(this.basePath)) return false\n accessSync(this.basePath, constants.W_OK)\n return true\n } catch {\n return false\n }\n }\n\n async initialize(): Promise<void> {\n mkdirSync(this.basePath, { recursive: true })\n }\n}\n","import { join, isAbsolute } from 'node:path'\nimport { FsStorageBackend, type IStorageBackend } from './fs-storage-backend.js'\n\nexport type StorageLocationName = 'data' | 'media' | 'recordings' | 'models' | 'cache' | 'logs'\n\nexport class StorageLocationManager {\n private readonly backends: Map<StorageLocationName, IStorageBackend> = new Map()\n private readonly dataPath: string\n\n constructor(dataPath: string) {\n this.dataPath = dataPath\n }\n\n /** Initialize all locations with default paths */\n async initializeDefaults(): Promise<void> {\n const defaults: Record<StorageLocationName, string> = {\n data: join(this.dataPath, 'db'),\n media: join(this.dataPath, 'media'),\n recordings: join(this.dataPath, 'recordings'),\n models: join(this.dataPath, 'models'),\n cache: '/tmp/camstack-cache',\n logs: join(this.dataPath, 'logs'),\n }\n\n for (const [name, path] of Object.entries(defaults)) {\n const backend = new FsStorageBackend(path)\n await backend.initialize()\n this.backends.set(name as StorageLocationName, backend)\n }\n }\n\n /** Override a specific location's backend path */\n async setLocationPath(name: StorageLocationName, basePath: string): Promise<void> {\n const resolved = isAbsolute(basePath) ? basePath : join(this.dataPath, basePath)\n const backend = new FsStorageBackend(resolved)\n await backend.initialize()\n this.backends.set(name, backend)\n }\n\n /** Get the backend for a location */\n getBackend(name: StorageLocationName): IStorageBackend {\n const backend = this.backends.get(name)\n if (!backend) throw new Error(`Storage location \"${name}\" not initialized`)\n return backend\n }\n\n /** Resolve a path within a location */\n resolve(location: StorageLocationName, subpath: string): string {\n return this.getBackend(location).resolve(subpath)\n }\n\n /** Check if all locations are available */\n getStatus(): Array<{ name: StorageLocationName; available: boolean; path: string }> {\n return Array.from(this.backends.entries()).map(([name, backend]) => ({\n name,\n available: backend.isAvailable(),\n path: backend.basePath,\n }))\n }\n\n /** All location names */\n getLocationNames(): StorageLocationName[] {\n return Array.from(this.backends.keys())\n }\n}\n","import type { StorageLocationManager, StorageLocationName } from './storage-location-manager.js'\nimport type {\n IStorageProvider as INewStorageProvider,\n ISettingsBackend,\n} from '@camstack/types'\n\n// Legacy interfaces — still used by consumers during migration\nexport interface IStorageProvider {\n initialize(): Promise<void>\n shutdown(): Promise<void>\n getLocation(name: StorageLocationName): IStorageLocation\n export?(locationName: StorageLocationName): Promise<Buffer>\n import?(locationName: StorageLocationName, data: Buffer): Promise<void>\n}\n\nexport interface QueryFilter {\n where?: Record<string, unknown>\n whereIn?: Record<string, unknown[]>\n whereBetween?: Record<string, [unknown, unknown]>\n orderBy?: { field: string; direction: 'asc' | 'desc' }\n limit?: number\n offset?: number\n}\n\nexport interface StorageRecord {\n collection: string\n id: string\n data: Record<string, unknown>\n}\n\nexport interface IStructuredStorage {\n query(collection: string, filter?: QueryFilter): Promise<readonly StorageRecord[]>\n insert(record: StorageRecord): Promise<StorageRecord>\n update(collection: string, id: string, data: Record<string, unknown>): Promise<StorageRecord>\n delete(collection: string, id: string): Promise<void>\n count(collection: string, filter?: QueryFilter): Promise<number>\n}\n\nexport interface IFileStorage {\n readFile(path: string): Promise<Buffer>\n writeFile(path: string, data: Buffer): Promise<void>\n deleteFile(path: string): Promise<void>\n listFiles(prefix?: string): Promise<readonly string[]>\n getFileUrl(path: string): Promise<string>\n exists(path: string): Promise<boolean>\n}\n\nexport interface IStorageLocation {\n structured?: IStructuredStorage\n files?: IFileStorage\n}\n\n/**\n * StorageManager — bridge between legacy code (getLocation/getLocationPath)\n * and the new capability-based storage system.\n *\n * Legacy consumers call getLocation('addon', namespace) to get structured + file storage.\n * This manager builds the response from:\n * - SettingsBackend (for structured queries) — provided by sqlite-settings addon\n * - LocationManager (for file paths) — set during Phase 2 boot\n */\nexport class StorageManager {\n private legacyProvider: IStorageProvider | null = null\n private locationManager: StorageLocationManager | null = null\n private newStorageProvider: INewStorageProvider | null = null\n private settingsBackend: ISettingsBackend | null = null\n\n /** @deprecated Set by legacy capability consumer — use setNewStorageProvider instead */\n setProvider(provider: IStorageProvider | INewStorageProvider): void {\n // Check if it's the new provider (has 'supportedLocations') or legacy (has 'getLocation')\n if ('getLocation' in provider && typeof (provider as any).getLocation === 'function') {\n this.legacyProvider = provider as IStorageProvider\n } else {\n this.newStorageProvider = provider as INewStorageProvider\n }\n }\n\n setNewStorageProvider(provider: INewStorageProvider): void {\n this.newStorageProvider = provider\n }\n\n setSettingsBackend(backend: ISettingsBackend): void {\n this.settingsBackend = backend\n }\n\n getProvider(): IStorageProvider {\n if (this.legacyProvider) return this.legacyProvider\n if (!this.newStorageProvider && !this.settingsBackend && !this.locationManager) {\n throw new Error('No storage provider configured')\n }\n // Return a shim that wraps new providers\n return this.createLegacyShim()\n }\n\n setLocationManager(manager: StorageLocationManager): void {\n this.locationManager = manager\n }\n\n getLocationManager(): StorageLocationManager {\n if (!this.locationManager) {\n throw new Error('StorageLocationManager not initialized')\n }\n return this.locationManager\n }\n\n async initializeLocations(dataPath: string): Promise<void> {\n const { StorageLocationManager } = await import('./storage-location-manager.js')\n const manager = new StorageLocationManager(dataPath)\n await manager.initializeDefaults()\n this.locationManager = manager\n }\n\n getLocationPath(name: StorageLocationName): string {\n return this.getLocationManager().getBackend(name).basePath\n }\n\n /**\n * Get a storage location with optional namespace scoping.\n * Builds IStorageLocation from settingsBackend (structured) + locationManager (files).\n */\n getLocation(name: StorageLocationName | string, namespace?: string): IStorageLocation {\n if (!this.legacyProvider && !this.newStorageProvider && !this.settingsBackend && !this.locationManager) {\n throw new Error('No storage provider configured')\n }\n // Try legacy provider first\n if (this.legacyProvider) {\n try {\n const LEGACY_MAP: Record<string, string> = { config: 'data', events: 'data', addon: 'data' }\n const mappedName = (LEGACY_MAP[name] ?? name) as StorageLocationName\n const location = this.legacyProvider.getLocation(mappedName)\n return namespace ? this.createNamespacedLocation(location, namespace) : location\n } catch {\n // Fall through to new approach\n }\n }\n\n // Build from new providers\n const location: IStorageLocation = {}\n\n // Structured storage from settingsBackend\n if (this.settingsBackend) {\n const backend = this.settingsBackend\n location.structured = {\n async query(collection: string, filter?: QueryFilter) {\n const results = await backend.query(collection as any, filter)\n return results.map(r => ({ collection, id: r.id, data: r.data }))\n },\n async insert(record: StorageRecord) {\n const id = record.id || (await import('node:crypto')).randomUUID()\n await backend.insert(record.collection as any, { id, data: record.data })\n return { ...record, id }\n },\n async update(collection: string, id: string, data: Record<string, unknown>) {\n await backend.update(collection as any, id, data)\n return { collection, id, data }\n },\n async delete(collection: string, id: string) {\n await backend.delete(collection as any, id)\n },\n async count(collection: string, filter?: QueryFilter) {\n return backend.count(collection as any, filter)\n },\n }\n }\n\n // File storage from locationManager\n if (this.locationManager) {\n const LEGACY_MAP: Record<string, string> = { config: 'data', events: 'data', addon: 'data' }\n const mappedName = (LEGACY_MAP[name] ?? name) as StorageLocationName\n try {\n const basePath = this.locationManager.getBackend(mappedName).basePath\n const fs = require('node:fs') as typeof import('node:fs')\n const path = require('node:path') as typeof import('node:path')\n location.files = {\n async readFile(p: string) { return fs.promises.readFile(path.join(basePath, p)) },\n async writeFile(p: string, data: Buffer) {\n const full = path.join(basePath, p)\n await fs.promises.mkdir(path.dirname(full), { recursive: true })\n await fs.promises.writeFile(full, data)\n },\n async deleteFile(p: string) { await fs.promises.rm(path.join(basePath, p), { force: true }) },\n async listFiles(prefix?: string) {\n const dir = prefix ? path.join(basePath, prefix) : basePath\n try { return (await fs.promises.readdir(dir)).map(f => prefix ? `${prefix}/${f}` : f) } catch { return [] }\n },\n async getFileUrl(p: string) { return path.join(basePath, p) },\n async exists(p: string) { try { await fs.promises.access(path.join(basePath, p)); return true } catch { return false } },\n }\n } catch {\n // Location not available\n }\n }\n\n return namespace ? this.createNamespacedLocation(location, namespace) : location\n }\n\n private createLegacyShim(): IStorageProvider {\n const self = this\n return {\n async initialize() {},\n async shutdown() {},\n getLocation(name: StorageLocationName) { return self.getLocation(name) },\n }\n }\n\n private createNamespacedLocation(location: IStorageLocation, namespace: string): IStorageLocation {\n const prefix = namespace.endsWith('/') ? namespace : `${namespace}/`\n\n return {\n structured: location.structured ? {\n async query(collection: string, filter?: QueryFilter) {\n return location.structured!.query(`${prefix}${collection}`, filter)\n },\n async insert(record: StorageRecord) {\n return location.structured!.insert({ ...record, collection: `${prefix}${record.collection}` })\n },\n async update(collection: string, id: string, data: Record<string, unknown>) {\n return location.structured!.update(`${prefix}${collection}`, id, data)\n },\n async delete(collection: string, id: string) {\n return location.structured!.delete(`${prefix}${collection}`, id)\n },\n async count(collection: string, filter?: QueryFilter) {\n return location.structured!.count(`${prefix}${collection}`, filter)\n },\n } : undefined,\n\n files: location.files ? {\n async readFile(p: string) { return location.files!.readFile(`${prefix}${p}`) },\n async writeFile(p: string, data: Buffer) { return location.files!.writeFile(`${prefix}${p}`, data) },\n async deleteFile(p: string) { return location.files!.deleteFile(`${prefix}${p}`) },\n async listFiles(filePrefix?: string) { return location.files!.listFiles(`${prefix}${filePrefix ?? ''}`) },\n async getFileUrl(p: string) { return location.files!.getFileUrl(`${prefix}${p}`) },\n async exists(p: string) { return location.files!.exists(`${prefix}${p}`) },\n } : undefined,\n }\n }\n}\n","import * as jwt from 'jsonwebtoken'\nimport * as bcrypt from 'bcryptjs'\nimport * as crypto from 'node:crypto'\nimport type { ScopedToken, UserRole, TokenPayload } from '@camstack/types'\nimport type { ScopedTokenManager } from './scoped-token-manager.js'\n\nexport type { UserRole, TokenPayload }\n\nexport type AuthConfigReader = {\n get<T>(path: string): T\n update(section: string, data: Record<string, unknown>): void\n}\n\nexport class AuthManager {\n private readonly jwtSecret: string\n private scopedTokenManager: ScopedTokenManager | null = null\n\n constructor(private readonly config: AuthConfigReader) {\n const configured = this.config.get<string>('auth.jwtSecret')\n if (configured) {\n this.jwtSecret = configured\n } else {\n const secret = crypto.randomBytes(32).toString('hex')\n // Persist directly into config.yaml so it survives restarts\n this.config.update('auth', { jwtSecret: secret })\n console.log('[AuthManager] Generated JWT secret and saved to config.yaml (auth.jwtSecret)')\n this.jwtSecret = secret\n }\n }\n\n signToken(payload: Omit<TokenPayload, 'iat' | 'exp'>): string {\n return jwt.sign({ ...payload }, this.jwtSecret, { expiresIn: '24h' })\n }\n\n verifyToken(token: string): TokenPayload {\n return jwt.verify(token, this.jwtSecret) as TokenPayload\n }\n\n async hashPassword(password: string): Promise<string> {\n return bcrypt.hash(password, 10)\n }\n\n async comparePassword(password: string, hash: string): Promise<boolean> {\n return bcrypt.compare(password, hash)\n }\n\n generateApiKey(): { token: string; hash: string; prefix: string } {\n const token = crypto.randomBytes(32).toString('hex')\n const hash = crypto.createHash('sha256').update(token).digest('hex')\n const prefix = token.slice(0, 8)\n return { token, hash, prefix }\n }\n\n validateApiKey(token: string, storedHash: string): boolean {\n const hash = crypto.createHash('sha256').update(token).digest('hex')\n return hash === storedHash\n }\n\n /**\n * Create a service token for agent/worker authentication.\n * Used when forking workers or when agents register.\n */\n createServiceToken(opts: {\n readonly agentId: string\n readonly role?: string\n readonly expiresIn?: string\n }): string {\n const payload: Record<string, unknown> = {\n userId: opts.agentId,\n username: opts.agentId,\n role: opts.role ?? 'agent',\n type: 'service',\n agentId: opts.agentId,\n allowedProviders: '*',\n allowedDevices: {},\n }\n const expiresIn = (opts.expiresIn ?? '24h') as jwt.SignOptions['expiresIn']\n return jwt.sign(payload as object, this.jwtSecret, { expiresIn })\n }\n\n /**\n * Set the scoped token manager for the auth chain.\n */\n setScopedTokenManager(manager: ScopedTokenManager): void {\n this.scopedTokenManager = manager\n }\n\n /**\n * Validate a scoped token string.\n * Returns the token record if valid, null otherwise.\n */\n async validateScopedToken(rawToken: string): Promise<ScopedToken | null> {\n if (!this.scopedTokenManager) {\n return null\n }\n return this.scopedTokenManager.validate(rawToken)\n }\n\n /**\n * Check whether a scoped token grants access to a given addon/route/capability.\n */\n matchesScopedTokenScope(\n token: ScopedToken,\n addonId?: string,\n routePath?: string,\n capability?: string,\n ): boolean {\n if (!this.scopedTokenManager) {\n return false\n }\n return this.scopedTokenManager.matchesScope(token, addonId, routePath, capability)\n }\n}\n","import * as crypto from 'node:crypto'\nimport type { AuthManager, UserRole } from './auth-manager.js'\nimport type { IStructuredStorage, StorageRecord, QueryFilter } from '../storage/storage-manager.js'\n\nexport interface ApiKeyRecord {\n id: string\n label: string\n role: UserRole\n allowedProviders: string[] | '*'\n allowedDevices: Record<string, string[] | '*'>\n tokenHash: string\n tokenPrefix: string\n createdAt: number\n lastUsedAt?: number\n}\n\ninterface CreateApiKeyInput {\n label: string\n role: UserRole\n allowedProviders?: string[] | '*'\n allowedDevices?: Record<string, string[] | '*'>\n}\n\nconst API_KEYS_COLLECTION = 'api_keys'\n\nexport type ApiKeyStorageAccess = {\n getStructuredStorage(): IStructuredStorage\n}\n\nexport class ApiKeyManager {\n constructor(\n private readonly storageAccess: ApiKeyStorageAccess,\n private readonly auth: AuthManager,\n ) {}\n\n private get structured(): IStructuredStorage {\n return this.storageAccess.getStructuredStorage()\n }\n\n async create(input: CreateApiKeyInput): Promise<{ record: ApiKeyRecord; token: string }> {\n const { token, hash, prefix } = this.auth.generateApiKey()\n const now = Date.now()\n\n const record: ApiKeyRecord = {\n id: crypto.randomUUID(),\n label: input.label,\n role: input.role,\n allowedProviders: input.allowedProviders ?? '*',\n allowedDevices: input.allowedDevices ?? {},\n tokenHash: hash,\n tokenPrefix: prefix,\n createdAt: now,\n }\n\n await this.structured.insert({\n collection: API_KEYS_COLLECTION,\n id: record.id,\n data: record as unknown as Record<string, unknown>,\n })\n\n return { record, token }\n }\n\n async validateToken(token: string): Promise<ApiKeyRecord | null> {\n const allKeys = await this.structured.query(API_KEYS_COLLECTION)\n\n for (const entry of allKeys) {\n const record = entry.data as unknown as ApiKeyRecord\n if (this.auth.validateApiKey(token, record.tokenHash)) {\n const updatedData: Record<string, unknown> = {\n ...record,\n lastUsedAt: Date.now(),\n }\n await this.structured.update(API_KEYS_COLLECTION, record.id, updatedData)\n return { ...record, lastUsedAt: updatedData.lastUsedAt as number }\n }\n }\n\n return null\n }\n\n async listAll(): Promise<Omit<ApiKeyRecord, 'tokenHash'>[]> {\n const results = await this.structured.query(API_KEYS_COLLECTION)\n return results.map((r) => {\n const { tokenHash, ...rest } = r.data as unknown as ApiKeyRecord\n return rest\n })\n }\n\n async revoke(id: string): Promise<void> {\n await this.structured.delete(API_KEYS_COLLECTION, id)\n }\n\n async findById(id: string): Promise<ApiKeyRecord | null> {\n const results = await this.structured.query(API_KEYS_COLLECTION, {\n where: { id },\n })\n\n if (results.length === 0) {\n return null\n }\n\n return results[0]!.data as unknown as ApiKeyRecord\n }\n}\n","import * as crypto from 'node:crypto'\nimport type { AuthManager, UserRole } from './auth-manager.js'\nimport type { IStructuredStorage } from '../storage/storage-manager.js'\nimport type { UserRecord } from '@camstack/types'\n\nexport type { UserRecord }\n\ninterface CreateUserInput {\n username: string\n password: string\n role: UserRole\n allowedProviders?: string[] | '*'\n allowedDevices?: Record<string, string[] | '*'>\n}\n\ntype UpdatableUserFields = Partial<Pick<UserRecord, 'role' | 'allowedProviders' | 'allowedDevices'>>\n\nconst USERS_COLLECTION = 'users'\n\nexport type UserStorageAccess = {\n getStructuredStorage(): IStructuredStorage\n}\n\nexport type UserConfigReader = {\n get<T>(path: string): T\n}\n\nexport class UserManager {\n constructor(\n private readonly storageAccess: UserStorageAccess,\n private readonly auth: AuthManager,\n private readonly config: UserConfigReader,\n ) {}\n\n private get structured(): IStructuredStorage {\n return this.storageAccess.getStructuredStorage()\n }\n\n async create(input: CreateUserInput): Promise<UserRecord> {\n const existing = await this.findByUsername(input.username)\n if (existing) {\n throw new Error(`User with username \"${input.username}\" already exists`)\n }\n\n const passwordHash = await this.auth.hashPassword(input.password)\n const now = Date.now()\n const record: UserRecord = {\n id: crypto.randomUUID(),\n username: input.username,\n passwordHash,\n role: input.role,\n allowedProviders: input.allowedProviders ?? '*',\n allowedDevices: input.allowedDevices ?? {},\n createdAt: now,\n updatedAt: now,\n }\n\n await this.structured.insert({\n collection: USERS_COLLECTION,\n id: record.id,\n data: record as unknown as Record<string, unknown>,\n })\n\n return record\n }\n\n async findByUsername(username: string): Promise<UserRecord | null> {\n const results = await this.structured.query(USERS_COLLECTION, {\n where: { username },\n })\n\n if (results.length === 0) {\n return null\n }\n\n return results[0]!.data as unknown as UserRecord\n }\n\n async findById(id: string): Promise<UserRecord | null> {\n const results = await this.structured.query(USERS_COLLECTION, {\n where: { id },\n })\n\n if (results.length === 0) {\n return null\n }\n\n return results[0]!.data as unknown as UserRecord\n }\n\n async validateCredentials(username: string, password: string): Promise<UserRecord | null> {\n const user = await this.findByUsername(username)\n if (!user) {\n return null\n }\n\n const valid = await this.auth.comparePassword(password, user.passwordHash)\n return valid ? user : null\n }\n\n async listAll(): Promise<Omit<UserRecord, 'passwordHash'>[]> {\n const results = await this.structured.query(USERS_COLLECTION)\n return results.map((r) => {\n const { passwordHash, ...rest } = r.data as unknown as UserRecord\n return rest\n })\n }\n\n async update(id: string, data: UpdatableUserFields): Promise<void> {\n const existing = await this.findById(id)\n if (!existing) {\n throw new Error(`User with id \"${id}\" not found`)\n }\n\n const updatedData: Record<string, unknown> = {\n ...existing,\n ...data,\n updatedAt: Date.now(),\n }\n\n await this.structured.update(USERS_COLLECTION, id, updatedData)\n }\n\n async delete(id: string): Promise<void> {\n await this.structured.delete(USERS_COLLECTION, id)\n }\n\n async resetPassword(id: string, newPassword: string): Promise<void> {\n const existing = await this.findById(id)\n if (!existing) {\n throw new Error(`User with id \"${id}\" not found`)\n }\n\n const passwordHash = await this.auth.hashPassword(newPassword)\n const updatedData: Record<string, unknown> = {\n ...existing,\n passwordHash,\n updatedAt: Date.now(),\n }\n\n await this.structured.update(USERS_COLLECTION, id, updatedData)\n }\n\n async ensureAdminExists(): Promise<void> {\n const adminUsername = this.config.get<string>('auth.adminUsername')\n const adminPassword = this.config.get<string>('auth.adminPassword')\n\n if (!adminUsername || !adminPassword) {\n return\n }\n\n const existing = await this.findByUsername(adminUsername)\n if (existing) {\n return\n }\n\n await this.create({\n username: adminUsername,\n password: adminPassword,\n role: 'super_admin',\n allowedProviders: '*',\n allowedDevices: {},\n })\n }\n}\n","import * as crypto from 'node:crypto'\nimport type { ScopedToken, TokenScope } from '@camstack/types'\nimport type { IStructuredStorage, StorageRecord } from '../storage/storage-manager.js'\n\nconst TOKENS_COLLECTION = 'scoped_tokens'\nconst TOKEN_PREFIX = 'cst_'\n\n/**\n * Manages scoped API tokens with restricted addon/route/capability access.\n * Framework-agnostic — dependencies injected via constructor.\n */\nexport class ScopedTokenManager {\n constructor(private readonly storage: IStructuredStorage) {}\n\n /**\n * Create a new scoped token. Returns the raw token string (shown once)\n * and the stored record (with hash, not the raw token).\n */\n async create(\n userId: string,\n name: string,\n scopes: TokenScope[],\n expiresAt?: number,\n ): Promise<{ token: string; record: ScopedToken }> {\n const rawHex = crypto.randomBytes(32).toString('hex')\n const rawToken = `${TOKEN_PREFIX}${rawHex}`\n const tokenHash = crypto.createHash('sha256').update(rawToken).digest('hex')\n const tokenPrefix = rawToken.slice(0, 12)\n\n const record: ScopedToken = {\n id: crypto.randomUUID(),\n userId,\n name,\n tokenHash,\n tokenPrefix,\n scopes: scopes.map((s) => ({ ...s })),\n expiresAt,\n lastUsedAt: undefined,\n createdAt: Date.now(),\n }\n\n await this.storage.insert({\n collection: TOKENS_COLLECTION,\n id: record.id,\n data: record as unknown as Record<string, unknown>,\n })\n\n return { token: rawToken, record }\n }\n\n /**\n * Validate a raw token string. Returns the token record if valid, null otherwise.\n */\n async validate(rawToken: string): Promise<ScopedToken | null> {\n if (!rawToken.startsWith(TOKEN_PREFIX)) {\n return null\n }\n\n const tokenHash = crypto.createHash('sha256').update(rawToken).digest('hex')\n const results = await this.storage.query(TOKENS_COLLECTION, {\n where: { tokenHash },\n })\n\n if (results.length === 0) {\n return null\n }\n\n const record = results[0]!.data as unknown as ScopedToken\n if (record.expiresAt !== undefined && record.expiresAt !== null && Date.now() > record.expiresAt) {\n return null\n }\n\n // Update last used timestamp (fire and forget)\n this.updateLastUsed(record.id).catch(() => {})\n\n return record\n }\n\n /**\n * Check whether a token's scopes grant access to the given addon, route, or capability.\n */\n matchesScope(\n token: ScopedToken,\n addonId?: string,\n routePath?: string,\n capability?: string,\n ): boolean {\n for (const scope of token.scopes) {\n switch (scope.type) {\n case 'addon':\n if (addonId && scope.target === addonId) return true\n break\n case 'route-prefix':\n if (routePath && routePath.startsWith(scope.target)) return true\n break\n case 'capability':\n if (capability && scope.target === capability) return true\n break\n }\n }\n return false\n }\n\n /**\n * Revoke a token by ID.\n */\n async revoke(tokenId: string): Promise<void> {\n await this.storage.delete(TOKENS_COLLECTION, tokenId)\n }\n\n /**\n * List all tokens for a user (without exposing the raw token).\n */\n async listForUser(userId: string): Promise<ScopedToken[]> {\n const results = await this.storage.query(TOKENS_COLLECTION, {\n where: { userId },\n })\n return results.map((r: StorageRecord) => r.data as unknown as ScopedToken)\n }\n\n /**\n * Update the lastUsedAt timestamp for a token.\n */\n async updateLastUsed(tokenId: string): Promise<void> {\n const results = await this.storage.query(TOKENS_COLLECTION, {\n where: { id: tokenId },\n })\n if (results.length === 0) return\n\n const existing = results[0]!.data as unknown as ScopedToken\n await this.storage.update(TOKENS_COLLECTION, tokenId, {\n ...existing,\n lastUsedAt: Date.now(),\n } as unknown as Record<string, unknown>)\n }\n}\n","import type { INotificationOutput, Notification } from '@camstack/types'\nimport type { IScopedLogger } from '../logging/scoped-logger.js'\nimport type { CapabilityRegistry } from '@camstack/kernel'\n\n/**\n * Central notification service that routes notifications to configured outputs.\n * Framework-agnostic — dependencies injected via constructor.\n *\n * Outputs are resolved from the CapabilityRegistry's 'notification-output'\n * collection on each call (proxy pattern). Falls back to a local map\n * when no registry is provided (backward compat).\n */\nexport class NotificationService {\n private readonly localOutputs = new Map<string, INotificationOutput>()\n private readonly routing = new Map<string, string[]>()\n private readonly rateLimits = new Map<string, number>()\n private readonly lastSent = new Map<string, number>()\n private registry: CapabilityRegistry | null = null\n\n constructor(private readonly logger: IScopedLogger) {}\n\n /** Set the registry for live output lookup. Called once during boot. */\n setRegistry(registry: CapabilityRegistry): void {\n this.registry = registry\n }\n\n /** Resolve all outputs — prefers registry, falls back to local map */\n private get outputs(): ReadonlyMap<string, INotificationOutput> {\n if (this.registry) {\n const collection = this.registry.getCollection<INotificationOutput>('notification-output')\n const map = new Map<string, INotificationOutput>()\n for (const output of collection) {\n map.set(output.id, output)\n }\n return map\n }\n return this.localOutputs\n }\n\n /** @deprecated Use registry-based resolution. Kept for backward compat only. */\n addOutput(output: INotificationOutput): void {\n this.localOutputs.set(output.id, output)\n this.logger.info(`Notification output added: ${output.name} (${output.id})`)\n }\n\n /** @deprecated Use registry-based resolution. Kept for backward compat only. */\n removeOutput(id: string): void {\n this.localOutputs.delete(id)\n this.logger.info(`Notification output removed: ${id}`)\n }\n\n setRouting(category: string, outputIds: string[]): void {\n this.routing.set(category, [...outputIds])\n }\n\n setRateLimit(category: string, minIntervalMs: number): void {\n this.rateLimits.set(category, minIntervalMs)\n }\n\n async notify(notification: Notification): Promise<void> {\n const { category, deviceId } = notification\n\n // Rate limit check\n const rateLimitKey = deviceId ? `${category}:${deviceId}` : category\n const minInterval = this.rateLimits.get(category) ?? 0\n if (minInterval > 0) {\n const last = this.lastSent.get(rateLimitKey) ?? 0\n if (notification.timestamp - last < minInterval) {\n this.logger.debug(`Rate limited: ${rateLimitKey}`)\n return\n }\n }\n\n // Determine target outputs\n const targetIds = this.routing.get(category) ?? this.routing.get('*') ?? []\n if (targetIds.length === 0) {\n this.logger.debug(`No routing configured for category \"${category}\"`)\n return\n }\n\n const currentOutputs = this.outputs\n\n // Update last-sent timestamp\n this.lastSent.set(rateLimitKey, notification.timestamp)\n\n // Send to all targets in parallel with error isolation\n await Promise.allSettled(\n targetIds\n .map((id) => currentOutputs.get(id))\n .filter((output): output is INotificationOutput => output !== undefined)\n .map(async (output) => {\n try {\n await output.send(notification)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n this.logger.error(`Notification output \"${output.id}\" failed: ${msg}`)\n }\n }),\n )\n\n return undefined\n }\n\n getOutputs(): ReadonlyArray<{ id: string; name: string; icon: string }> {\n return Array.from(this.outputs.values()).map(({ id, name, icon }) => ({ id, name, icon }))\n }\n\n getRouting(): ReadonlyMap<string, string[]> {\n return this.routing\n }\n\n getOutput(id: string): INotificationOutput | undefined {\n return this.outputs.get(id)\n }\n}\n","import type { Toast } from '@camstack/types'\n\nexport type Unsubscribe = () => void\n\ninterface ListenerEntry {\n readonly userId: string\n readonly callback: (toast: Toast) => void\n}\n\n/**\n * Service for broadcasting toast notifications to connected UI clients.\n * Framework-agnostic — integrates with tRPC subscriptions via subscribe().\n */\nexport class ToastService {\n private readonly listeners = new Map<string, ListenerEntry>()\n\n /**\n * Subscribe to toast events for a specific user.\n * Returns an unsubscribe function.\n */\n subscribe(connectionId: string, userId: string, callback: (toast: Toast) => void): Unsubscribe {\n this.listeners.set(connectionId, { userId, callback })\n return () => {\n this.listeners.delete(connectionId)\n }\n }\n\n /**\n * Broadcast a toast to all connected clients.\n */\n broadcast(toast: Toast): void {\n for (const entry of this.listeners.values()) {\n entry.callback(toast)\n }\n }\n\n /**\n * Send a toast to a specific user's connections only.\n */\n sendToUser(userId: string, toast: Toast): void {\n for (const entry of this.listeners.values()) {\n if (entry.userId === userId) {\n entry.callback(toast)\n }\n }\n }\n}\n","import type { IAddonHttpRoute, IAddonRouteProvider } from '@camstack/types'\n\ninterface RouteMatch {\n readonly route: IAddonHttpRoute\n readonly addonId: string\n readonly params: Record<string, string>\n}\n\ninterface RegisteredRoute {\n readonly addonId: string\n readonly route: IAddonHttpRoute\n /** Full path including /addon/{addonId}/ prefix */\n readonly fullPath: string\n}\n\n/**\n * Registry for dynamic HTTP routes registered by addons.\n * Framework-agnostic — the server HTTP layer queries this registry to dispatch requests.\n */\nexport class AddonRouteRegistry {\n private readonly routes = new Map<string, RegisteredRoute[]>()\n\n /**\n * Register all routes from an addon's route provider.\n */\n registerRoutes(addonId: string, provider: IAddonRouteProvider): void {\n const addonRoutes = provider.getRoutes()\n const registered: RegisteredRoute[] = addonRoutes.map((route) => {\n const normalizedPath = route.path.startsWith('/') ? route.path : `/${route.path}`\n return {\n addonId,\n route,\n fullPath: `/addon/${addonId}${normalizedPath}`,\n }\n })\n this.routes.set(addonId, registered)\n }\n\n /**\n * Unregister all routes for an addon.\n */\n unregisterRoutes(addonId: string): void {\n this.routes.delete(addonId)\n }\n\n /**\n * Match an incoming request method + path to a registered route.\n * Supports simple path parameters (e.g., /items/:id).\n */\n matchRoute(method: string, path: string): RouteMatch | null {\n const normalizedMethod = method.toUpperCase()\n\n for (const registeredRoutes of this.routes.values()) {\n for (const entry of registeredRoutes) {\n if (entry.route.method !== normalizedMethod) continue\n\n const params = matchPath(entry.fullPath, path)\n if (params !== null) {\n return {\n route: entry.route,\n addonId: entry.addonId,\n params,\n }\n }\n }\n }\n\n return null\n }\n\n /**\n * List all registered routes across all addons.\n */\n listRoutes(): ReadonlyArray<{ addonId: string; method: string; path: string; access: string; description?: string }> {\n const result: Array<{ addonId: string; method: string; path: string; access: string; description?: string }> = []\n for (const registeredRoutes of this.routes.values()) {\n for (const entry of registeredRoutes) {\n result.push({\n addonId: entry.addonId,\n method: entry.route.method,\n path: entry.fullPath,\n access: entry.route.access,\n description: entry.route.description,\n })\n }\n }\n return result\n }\n}\n\n/**\n * Match a route pattern against an actual path.\n * Supports :param segments (e.g., /addon/:addonId/items/:id).\n * Returns extracted params or null if no match.\n */\nfunction matchPath(pattern: string, path: string): Record<string, string> | null {\n const patternParts = pattern.split('/').filter(Boolean)\n const pathParts = path.split('/').filter(Boolean)\n\n if (patternParts.length !== pathParts.length) {\n return null\n }\n\n const params: Record<string, string> = {}\n\n for (let i = 0; i < patternParts.length; i++) {\n const patternPart = patternParts[i]!\n const pathPart = pathParts[i]!\n\n if (patternPart.startsWith(':')) {\n params[patternPart.slice(1)] = pathPart\n } else if (patternPart !== pathPart) {\n return null\n }\n }\n\n return params\n}\n","import { randomUUID } from 'node:crypto'\nimport type { IScopedLogger, IEventBus, LoggerFactory } from '@camstack/types'\n\nexport interface IRegisteredDevice {\n readonly id: string\n readonly name: string\n readonly providerId: string\n readonly capabilities: readonly string[]\n}\n\nexport class DeviceRegistry<T extends IRegisteredDevice = IRegisteredDevice> {\n private readonly devices = new Map<string, T>()\n private readonly logger: IScopedLogger\n\n constructor(\n private readonly eventBus: IEventBus,\n loggingService: LoggerFactory,\n ) {\n this.logger = loggingService.createLogger('device-registry')\n }\n\n registerDevice(device: T): void {\n this.devices.set(device.id, device)\n this.logger.info(`Device registered: ${device.id} (${device.name})`)\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'core', id: 'device-registry' },\n category: 'device.registered',\n data: { deviceId: device.id, name: device.name, providerId: device.providerId },\n })\n }\n\n unregisterDevice(id: string): void {\n const device = this.devices.get(id)\n if (!device) {\n return\n }\n\n this.devices.delete(id)\n this.logger.info(`Device unregistered: ${id}`)\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'core', id: 'device-registry' },\n category: 'device.unregistered',\n data: { deviceId: id },\n })\n }\n\n getDevice(id: string): T | null {\n return this.devices.get(id) ?? null\n }\n\n listDevices(): T[] {\n return Array.from(this.devices.values())\n }\n\n getDevicesByProvider(providerId: string): T[] {\n return Array.from(this.devices.values()).filter(\n (device) => device.providerId === providerId,\n )\n }\n\n getDevicesWithCapability(cap: string): T[] {\n return Array.from(this.devices.values()).filter((device) =>\n device.capabilities.includes(cap),\n )\n }\n\n registerProviderDevices(providerId: string, devices: readonly T[]): void {\n for (const device of devices) {\n this.registerDevice(device)\n }\n this.logger.info(`Bulk registered ${devices.length} devices for provider ${providerId}`)\n }\n\n unregisterProviderDevices(providerId: string): void {\n const providerDevices = this.getDevicesByProvider(providerId)\n for (const device of providerDevices) {\n this.unregisterDevice(device.id)\n }\n this.logger.info(`Bulk unregistered ${providerDevices.length} devices for provider ${providerId}`)\n }\n}\n","export interface IDeviceCapability {\n kind: string\n}\n\nexport interface CapabilityBinding {\n source: 'native' | 'addon' | 'disabled'\n addonId?: string\n config?: Record<string, unknown>\n}\n\nexport interface IResolvableDevice {\n readonly id: string\n readonly capabilities: string[]\n getCapability<T extends IDeviceCapability>(cap: string): T | null\n}\n\nexport interface IAddonRegistryAccess {\n getAddon(addonId: string): unknown | null\n}\n\nexport class CapabilityResolver {\n private readonly bindings = new Map<\n string,\n Partial<Record<string, CapabilityBinding>>\n >()\n\n constructor(\n private readonly addonRegistry: IAddonRegistryAccess,\n ) {}\n\n resolve<T extends IDeviceCapability>(\n device: IResolvableDevice,\n cap: string,\n ): T | null {\n const deviceBindings = this.bindings.get(device.id)\n const binding = deviceBindings?.[cap]\n\n if (binding) {\n if (binding.source === 'disabled') {\n return null\n }\n\n if (binding.source === 'addon' && binding.addonId) {\n const addon = this.addonRegistry.getAddon(binding.addonId)\n if (addon && typeof (addon as any).getCapabilityForDevice === 'function') {\n return (\n (addon as any).getCapabilityForDevice(device, cap, binding.config) ?? null\n )\n }\n return null\n }\n }\n\n // native or no explicit binding -- delegate to device\n return device.getCapability<T>(cap)\n }\n\n setBinding(\n deviceId: string,\n cap: string,\n binding: CapabilityBinding,\n ): void {\n const existing = this.bindings.get(deviceId) ?? {}\n this.bindings.set(deviceId, { ...existing, [cap]: binding })\n }\n\n removeBinding(deviceId: string, cap: string): void {\n const existing = this.bindings.get(deviceId)\n if (!existing) {\n return\n }\n const updated = { ...existing }\n delete updated[cap]\n this.bindings.set(deviceId, updated)\n }\n\n getBindings(\n deviceId: string,\n ): Partial<Record<string, CapabilityBinding>> {\n return this.bindings.get(deviceId) ?? {}\n }\n\n getEffectiveCapabilities(device: IResolvableDevice): string[] {\n const deviceBindings = this.bindings.get(device.id) ?? {}\n\n const result: string[] = []\n\n // Include native capabilities that are not disabled\n for (const cap of device.capabilities) {\n const binding = deviceBindings[cap]\n if (!binding || binding.source !== 'disabled') {\n result.push(cap)\n }\n }\n\n // Include addon-bound capabilities not already in the native list\n for (const [cap, binding] of Object.entries(deviceBindings)) {\n if (\n binding && binding.source === 'addon' &&\n !device.capabilities.includes(cap)\n ) {\n result.push(cap)\n }\n }\n\n return result\n }\n}\n","import { X509Certificate } from 'node:crypto'\nimport { execFile } from 'node:child_process'\nimport { promisify } from 'node:util'\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport * as os from 'node:os'\n\nconst execFileAsync = promisify(execFile)\n\nexport interface TlsCertPair {\n readonly cert: Buffer\n readonly key: Buffer\n}\n\nexport interface EnsureTlsResult {\n readonly certPath: string\n readonly keyPath: string\n readonly generated: boolean\n}\n\nexport interface CertOptions {\n /** Common Name for the cert (default: 'camstack.local') */\n readonly commonName?: string\n /** Validity in days (default: 825 — max for browsers) */\n readonly validDays?: number\n /** Additional SANs (DNS names or IPs) */\n readonly extraSans?: readonly string[]\n}\n\n/**\n * Ensure a self-signed TLS certificate exists in the given directory.\n * Generates one if missing. Returns paths to cert and key files.\n */\nexport async function ensureTlsCert(\n dataDir: string,\n options?: CertOptions,\n): Promise<EnsureTlsResult> {\n const tlsDir = join(dataDir, 'tls')\n const certPath = join(tlsDir, 'camstack.crt')\n const keyPath = join(tlsDir, 'camstack.key')\n\n // Already exists — reuse\n if (existsSync(certPath) && existsSync(keyPath)) {\n try {\n const certPem = readFileSync(certPath)\n const x509 = new X509Certificate(certPem)\n const validTo = new Date(x509.validTo)\n if (validTo > new Date()) {\n return { certPath, keyPath, generated: false }\n }\n // Expired — regenerate below\n } catch {\n // Corrupted — regenerate below\n }\n }\n\n mkdirSync(tlsDir, { recursive: true })\n\n const cn = options?.commonName ?? 'camstack.local'\n const validDays = options?.validDays ?? 825\n\n // Collect SANs: localhost, 127.0.0.1, all local IPs, hostname\n const sanDns = new Set<string>(['localhost', cn, os.hostname()])\n const sanIps = new Set<string>(['127.0.0.1', '::1'])\n\n // Add all local network IPs\n const interfaces = os.networkInterfaces()\n for (const addrs of Object.values(interfaces)) {\n if (!addrs) continue\n for (const addr of addrs) {\n if (!addr.internal) {\n sanIps.add(addr.address)\n }\n }\n }\n\n // Add extra SANs\n for (const san of options?.extraSans ?? []) {\n if (san.match(/^\\d+\\.\\d+\\.\\d+\\.\\d+$/) || san.includes(':')) {\n sanIps.add(san)\n } else {\n sanDns.add(san)\n }\n }\n\n // Build SAN string for openssl\n const sanParts: string[] = []\n for (const dns of sanDns) {\n sanParts.push(`DNS:${dns}`)\n }\n for (const ip of sanIps) {\n sanParts.push(`IP:${ip}`)\n }\n const sanString = sanParts.join(',')\n\n // Generate self-signed certificate using openssl CLI\n await execFileAsync('openssl', [\n 'req', '-x509',\n '-newkey', 'rsa:2048',\n '-keyout', keyPath,\n '-out', certPath,\n '-days', String(validDays),\n '-nodes',\n '-subj', `/CN=${cn}`,\n '-addext', `subjectAltName=${sanString}`,\n ])\n\n // Set restrictive permissions on the key file\n const { chmod } = await import('node:fs/promises')\n await chmod(keyPath, 0o600)\n\n return { certPath, keyPath, generated: true }\n}\n\n/**\n * Load TLS cert+key from files. Returns Buffers suitable for Node.js TLS options.\n */\nexport function loadTlsCert(certPath: string, keyPath: string): TlsCertPair {\n return {\n cert: readFileSync(certPath),\n key: readFileSync(keyPath),\n }\n}\n","export { ensureTlsCert, loadTlsCert, type TlsCertPair, type EnsureTlsResult, type CertOptions } from './cert-manager.js'\n","\n//#region src/unstable-core-do-not-import/utils.ts\n/**\n* Ensures there are no duplicate keys when building a procedure.\n* @internal\n*/\nfunction mergeWithoutOverrides(obj1, ...objs) {\n\tconst newObj = Object.assign(emptyObject(), obj1);\n\tfor (const overrides of objs) for (const key in overrides) {\n\t\tif (key in newObj && newObj[key] !== overrides[key]) throw new Error(`Duplicate key ${key}`);\n\t\tnewObj[key] = overrides[key];\n\t}\n\treturn newObj;\n}\n/**\n* Check that value is object\n* @internal\n*/\nfunction isObject(value) {\n\treturn !!value && !Array.isArray(value) && typeof value === \"object\";\n}\nfunction isFunction(fn) {\n\treturn typeof fn === \"function\";\n}\n/**\n* Create an object without inheriting anything from `Object.prototype`\n* @internal\n*/\nfunction emptyObject() {\n\treturn Object.create(null);\n}\nconst asyncIteratorsSupported = typeof Symbol === \"function\" && !!Symbol.asyncIterator;\nfunction isAsyncIterable(value) {\n\treturn asyncIteratorsSupported && isObject(value) && Symbol.asyncIterator in value;\n}\n/**\n* Run an IIFE\n*/\nconst run = (fn) => fn();\nfunction noop() {}\nfunction identity(it) {\n\treturn it;\n}\n/**\n* Generic runtime assertion function. Throws, if the condition is not `true`.\n*\n* Can be used as a slightly less dangerous variant of type assertions. Code\n* mistakes would be revealed at runtime then (hopefully during testing).\n*/\nfunction assert(condition, msg = \"no additional info\") {\n\tif (!condition) throw new Error(`AssertionError: ${msg}`);\n}\nfunction sleep(ms = 0) {\n\treturn new Promise((res) => setTimeout(res, ms));\n}\n/**\n* Ponyfill for\n* [`AbortSignal.any`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any_static).\n*/\nfunction abortSignalsAnyPonyfill(signals) {\n\tif (typeof AbortSignal.any === \"function\") return AbortSignal.any(signals);\n\tconst ac = new AbortController();\n\tfor (const signal of signals) {\n\t\tif (signal.aborted) {\n\t\t\ttrigger();\n\t\t\tbreak;\n\t\t}\n\t\tsignal.addEventListener(\"abort\", trigger, { once: true });\n\t}\n\treturn ac.signal;\n\tfunction trigger() {\n\t\tac.abort();\n\t\tfor (const signal of signals) signal.removeEventListener(\"abort\", trigger);\n\t}\n}\n\n//#endregion\n//#region src/unstable-core-do-not-import/rpc/codes.ts\n/**\n* JSON-RPC 2.0 Error codes\n*\n* `-32000` to `-32099` are reserved for implementation-defined server-errors.\n* For tRPC we're copying the last digits of HTTP 4XX errors.\n*/\nconst TRPC_ERROR_CODES_BY_KEY = {\n\tPARSE_ERROR: -32700,\n\tBAD_REQUEST: -32600,\n\tINTERNAL_SERVER_ERROR: -32603,\n\tNOT_IMPLEMENTED: -32603,\n\tBAD_GATEWAY: -32603,\n\tSERVICE_UNAVAILABLE: -32603,\n\tGATEWAY_TIMEOUT: -32603,\n\tUNAUTHORIZED: -32001,\n\tPAYMENT_REQUIRED: -32002,\n\tFORBIDDEN: -32003,\n\tNOT_FOUND: -32004,\n\tMETHOD_NOT_SUPPORTED: -32005,\n\tTIMEOUT: -32008,\n\tCONFLICT: -32009,\n\tPRECONDITION_FAILED: -32012,\n\tPAYLOAD_TOO_LARGE: -32013,\n\tUNSUPPORTED_MEDIA_TYPE: -32015,\n\tUNPROCESSABLE_CONTENT: -32022,\n\tPRECONDITION_REQUIRED: -32028,\n\tTOO_MANY_REQUESTS: -32029,\n\tCLIENT_CLOSED_REQUEST: -32099\n};\nconst TRPC_ERROR_CODES_BY_NUMBER = {\n\t[-32700]: \"PARSE_ERROR\",\n\t[-32600]: \"BAD_REQUEST\",\n\t[-32603]: \"INTERNAL_SERVER_ERROR\",\n\t[-32001]: \"UNAUTHORIZED\",\n\t[-32002]: \"PAYMENT_REQUIRED\",\n\t[-32003]: \"FORBIDDEN\",\n\t[-32004]: \"NOT_FOUND\",\n\t[-32005]: \"METHOD_NOT_SUPPORTED\",\n\t[-32008]: \"TIMEOUT\",\n\t[-32009]: \"CONFLICT\",\n\t[-32012]: \"PRECONDITION_FAILED\",\n\t[-32013]: \"PAYLOAD_TOO_LARGE\",\n\t[-32015]: \"UNSUPPORTED_MEDIA_TYPE\",\n\t[-32022]: \"UNPROCESSABLE_CONTENT\",\n\t[-32028]: \"PRECONDITION_REQUIRED\",\n\t[-32029]: \"TOO_MANY_REQUESTS\",\n\t[-32099]: \"CLIENT_CLOSED_REQUEST\"\n};\n/**\n* tRPC error codes that are considered retryable\n* With out of the box SSE, the client will reconnect when these errors are encountered\n*/\nconst retryableRpcCodes = [\n\tTRPC_ERROR_CODES_BY_KEY.BAD_GATEWAY,\n\tTRPC_ERROR_CODES_BY_KEY.SERVICE_UNAVAILABLE,\n\tTRPC_ERROR_CODES_BY_KEY.GATEWAY_TIMEOUT,\n\tTRPC_ERROR_CODES_BY_KEY.INTERNAL_SERVER_ERROR\n];\n\n//#endregion\nObject.defineProperty(exports, 'TRPC_ERROR_CODES_BY_KEY', {\n enumerable: true,\n get: function () {\n return TRPC_ERROR_CODES_BY_KEY;\n }\n});\nObject.defineProperty(exports, 'TRPC_ERROR_CODES_BY_NUMBER', {\n enumerable: true,\n get: function () {\n return TRPC_ERROR_CODES_BY_NUMBER;\n }\n});\nObject.defineProperty(exports, 'abortSignalsAnyPonyfill', {\n enumerable: true,\n get: function () {\n return abortSignalsAnyPonyfill;\n }\n});\nObject.defineProperty(exports, 'assert', {\n enumerable: true,\n get: function () {\n return assert;\n }\n});\nObject.defineProperty(exports, 'emptyObject', {\n enumerable: true,\n get: function () {\n return emptyObject;\n }\n});\nObject.defineProperty(exports, 'identity', {\n enumerable: true,\n get: function () {\n return identity;\n }\n});\nObject.defineProperty(exports, 'isAsyncIterable', {\n enumerable: true,\n get: function () {\n return isAsyncIterable;\n }\n});\nObject.defineProperty(exports, 'isFunction', {\n enumerable: true,\n get: function () {\n return isFunction;\n }\n});\nObject.defineProperty(exports, 'isObject', {\n enumerable: true,\n get: function () {\n return isObject;\n }\n});\nObject.defineProperty(exports, 'mergeWithoutOverrides', {\n enumerable: true,\n get: function () {\n return mergeWithoutOverrides;\n }\n});\nObject.defineProperty(exports, 'noop', {\n enumerable: true,\n get: function () {\n return noop;\n }\n});\nObject.defineProperty(exports, 'retryableRpcCodes', {\n enumerable: true,\n get: function () {\n return retryableRpcCodes;\n }\n});\nObject.defineProperty(exports, 'run', {\n enumerable: true,\n get: function () {\n return run;\n }\n});\nObject.defineProperty(exports, 'sleep', {\n enumerable: true,\n get: function () {\n return sleep;\n }\n});","//#region rolldown:runtime\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJS = (cb, mod) => function() {\n\treturn mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\tkey = keys[i];\n\t\tif (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t});\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target, mod));\n\n//#endregion\nconst require_codes = require('./codes-BfZsPdy-.cjs');\n\n//#region src/unstable-core-do-not-import/createProxy.ts\nconst noop = () => {};\nconst freezeIfAvailable = (obj) => {\n\tif (Object.freeze) Object.freeze(obj);\n};\nfunction createInnerProxy(callback, path, memo) {\n\tvar _memo$cacheKey;\n\tconst cacheKey = path.join(\".\");\n\t(_memo$cacheKey = memo[cacheKey]) !== null && _memo$cacheKey !== void 0 || (memo[cacheKey] = new Proxy(noop, {\n\t\tget(_obj, key) {\n\t\t\tif (typeof key !== \"string\" || key === \"then\") return void 0;\n\t\t\treturn createInnerProxy(callback, [...path, key], memo);\n\t\t},\n\t\tapply(_1, _2, args) {\n\t\t\tconst lastOfPath = path[path.length - 1];\n\t\t\tlet opts = {\n\t\t\t\targs,\n\t\t\t\tpath\n\t\t\t};\n\t\t\tif (lastOfPath === \"call\") opts = {\n\t\t\t\targs: args.length >= 2 ? [args[1]] : [],\n\t\t\t\tpath: path.slice(0, -1)\n\t\t\t};\n\t\t\telse if (lastOfPath === \"apply\") opts = {\n\t\t\t\targs: args.length >= 2 ? args[1] : [],\n\t\t\t\tpath: path.slice(0, -1)\n\t\t\t};\n\t\t\tfreezeIfAvailable(opts.args);\n\t\t\tfreezeIfAvailable(opts.path);\n\t\t\treturn callback(opts);\n\t\t}\n\t}));\n\treturn memo[cacheKey];\n}\n/**\n* Creates a proxy that calls the callback with the path and arguments\n*\n* @internal\n*/\nconst createRecursiveProxy = (callback) => createInnerProxy(callback, [], require_codes.emptyObject());\n/**\n* Used in place of `new Proxy` where each handler will map 1 level deep to another value.\n*\n* @internal\n*/\nconst createFlatProxy = (callback) => {\n\treturn new Proxy(noop, { get(_obj, name) {\n\t\tif (name === \"then\") return void 0;\n\t\treturn callback(name);\n\t} });\n};\n\n//#endregion\n//#region src/unstable-core-do-not-import/http/getHTTPStatusCode.ts\nconst JSONRPC2_TO_HTTP_CODE = {\n\tPARSE_ERROR: 400,\n\tBAD_REQUEST: 400,\n\tUNAUTHORIZED: 401,\n\tPAYMENT_REQUIRED: 402,\n\tFORBIDDEN: 403,\n\tNOT_FOUND: 404,\n\tMETHOD_NOT_SUPPORTED: 405,\n\tTIMEOUT: 408,\n\tCONFLICT: 409,\n\tPRECONDITION_FAILED: 412,\n\tPAYLOAD_TOO_LARGE: 413,\n\tUNSUPPORTED_MEDIA_TYPE: 415,\n\tUNPROCESSABLE_CONTENT: 422,\n\tPRECONDITION_REQUIRED: 428,\n\tTOO_MANY_REQUESTS: 429,\n\tCLIENT_CLOSED_REQUEST: 499,\n\tINTERNAL_SERVER_ERROR: 500,\n\tNOT_IMPLEMENTED: 501,\n\tBAD_GATEWAY: 502,\n\tSERVICE_UNAVAILABLE: 503,\n\tGATEWAY_TIMEOUT: 504\n};\nconst HTTP_CODE_TO_JSONRPC2 = {\n\t400: \"BAD_REQUEST\",\n\t401: \"UNAUTHORIZED\",\n\t402: \"PAYMENT_REQUIRED\",\n\t403: \"FORBIDDEN\",\n\t404: \"NOT_FOUND\",\n\t405: \"METHOD_NOT_SUPPORTED\",\n\t408: \"TIMEOUT\",\n\t409: \"CONFLICT\",\n\t412: \"PRECONDITION_FAILED\",\n\t413: \"PAYLOAD_TOO_LARGE\",\n\t415: \"UNSUPPORTED_MEDIA_TYPE\",\n\t422: \"UNPROCESSABLE_CONTENT\",\n\t428: \"PRECONDITION_REQUIRED\",\n\t429: \"TOO_MANY_REQUESTS\",\n\t499: \"CLIENT_CLOSED_REQUEST\",\n\t500: \"INTERNAL_SERVER_ERROR\",\n\t501: \"NOT_IMPLEMENTED\",\n\t502: \"BAD_GATEWAY\",\n\t503: \"SERVICE_UNAVAILABLE\",\n\t504: \"GATEWAY_TIMEOUT\"\n};\nfunction getStatusCodeFromKey(code) {\n\tvar _JSONRPC2_TO_HTTP_COD;\n\treturn (_JSONRPC2_TO_HTTP_COD = JSONRPC2_TO_HTTP_CODE[code]) !== null && _JSONRPC2_TO_HTTP_COD !== void 0 ? _JSONRPC2_TO_HTTP_COD : 500;\n}\nfunction getStatusKeyFromCode(code) {\n\tvar _HTTP_CODE_TO_JSONRPC;\n\treturn (_HTTP_CODE_TO_JSONRPC = HTTP_CODE_TO_JSONRPC2[code]) !== null && _HTTP_CODE_TO_JSONRPC !== void 0 ? _HTTP_CODE_TO_JSONRPC : \"INTERNAL_SERVER_ERROR\";\n}\nfunction getHTTPStatusCode(json) {\n\tconst arr = Array.isArray(json) ? json : [json];\n\tconst httpStatuses = new Set(arr.map((res) => {\n\t\tif (\"error\" in res && require_codes.isObject(res.error.data)) {\n\t\t\tvar _res$error$data;\n\t\t\tif (typeof ((_res$error$data = res.error.data) === null || _res$error$data === void 0 ? void 0 : _res$error$data[\"httpStatus\"]) === \"number\") return res.error.data[\"httpStatus\"];\n\t\t\tconst code = require_codes.TRPC_ERROR_CODES_BY_NUMBER[res.error.code];\n\t\t\treturn getStatusCodeFromKey(code);\n\t\t}\n\t\treturn 200;\n\t}));\n\tif (httpStatuses.size !== 1) return 207;\n\tconst httpStatus = httpStatuses.values().next().value;\n\treturn httpStatus;\n}\nfunction getHTTPStatusCodeFromError(error) {\n\treturn getStatusCodeFromKey(error.code);\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js\nvar require_typeof = __commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js\"(exports, module) {\n\tfunction _typeof$2(o) {\n\t\t\"@babel/helpers - typeof\";\n\t\treturn module.exports = _typeof$2 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o$1) {\n\t\t\treturn typeof o$1;\n\t\t} : function(o$1) {\n\t\t\treturn o$1 && \"function\" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? \"symbol\" : typeof o$1;\n\t\t}, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof$2(o);\n\t}\n\tmodule.exports = _typeof$2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js\nvar require_toPrimitive = __commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js\"(exports, module) {\n\tvar _typeof$1 = require_typeof()[\"default\"];\n\tfunction toPrimitive$1(t, r) {\n\t\tif (\"object\" != _typeof$1(t) || !t) return t;\n\t\tvar e = t[Symbol.toPrimitive];\n\t\tif (void 0 !== e) {\n\t\t\tvar i = e.call(t, r || \"default\");\n\t\t\tif (\"object\" != _typeof$1(i)) return i;\n\t\t\tthrow new TypeError(\"@@toPrimitive must return a primitive value.\");\n\t\t}\n\t\treturn (\"string\" === r ? String : Number)(t);\n\t}\n\tmodule.exports = toPrimitive$1, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js\nvar require_toPropertyKey = __commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js\"(exports, module) {\n\tvar _typeof = require_typeof()[\"default\"];\n\tvar toPrimitive = require_toPrimitive();\n\tfunction toPropertyKey$1(t) {\n\t\tvar i = toPrimitive(t, \"string\");\n\t\treturn \"symbol\" == _typeof(i) ? i : i + \"\";\n\t}\n\tmodule.exports = toPropertyKey$1, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js\nvar require_defineProperty = __commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js\"(exports, module) {\n\tvar toPropertyKey = require_toPropertyKey();\n\tfunction _defineProperty(e, r, t) {\n\t\treturn (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n\t\t\tvalue: t,\n\t\t\tenumerable: !0,\n\t\t\tconfigurable: !0,\n\t\t\twritable: !0\n\t\t}) : e[r] = t, e;\n\t}\n\tmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js\nvar require_objectSpread2 = __commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js\"(exports, module) {\n\tvar defineProperty = require_defineProperty();\n\tfunction ownKeys(e, r) {\n\t\tvar t = Object.keys(e);\n\t\tif (Object.getOwnPropertySymbols) {\n\t\t\tvar o = Object.getOwnPropertySymbols(e);\n\t\t\tr && (o = o.filter(function(r$1) {\n\t\t\t\treturn Object.getOwnPropertyDescriptor(e, r$1).enumerable;\n\t\t\t})), t.push.apply(t, o);\n\t\t}\n\t\treturn t;\n\t}\n\tfunction _objectSpread2(e) {\n\t\tfor (var r = 1; r < arguments.length; r++) {\n\t\t\tvar t = null != arguments[r] ? arguments[r] : {};\n\t\t\tr % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) {\n\t\t\t\tdefineProperty(e, r$1, t[r$1]);\n\t\t\t}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) {\n\t\t\t\tObject.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1));\n\t\t\t});\n\t\t}\n\t\treturn e;\n\t}\n\tmodule.exports = _objectSpread2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region src/unstable-core-do-not-import/error/getErrorShape.ts\nvar import_objectSpread2 = __toESM(require_objectSpread2(), 1);\n/**\n* @internal\n*/\nfunction getErrorShape(opts) {\n\tconst { path, error, config } = opts;\n\tconst { code } = opts.error;\n\tconst shape = {\n\t\tmessage: error.message,\n\t\tcode: require_codes.TRPC_ERROR_CODES_BY_KEY[code],\n\t\tdata: {\n\t\t\tcode,\n\t\t\thttpStatus: getHTTPStatusCodeFromError(error)\n\t\t}\n\t};\n\tif (config.isDev && typeof opts.error.stack === \"string\") shape.data.stack = opts.error.stack;\n\tif (typeof path === \"string\") shape.data.path = path;\n\treturn config.errorFormatter((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, { shape }));\n}\n\n//#endregion\nObject.defineProperty(exports, 'HTTP_CODE_TO_JSONRPC2', {\n enumerable: true,\n get: function () {\n return HTTP_CODE_TO_JSONRPC2;\n }\n});\nObject.defineProperty(exports, 'JSONRPC2_TO_HTTP_CODE', {\n enumerable: true,\n get: function () {\n return JSONRPC2_TO_HTTP_CODE;\n }\n});\nObject.defineProperty(exports, '__commonJS', {\n enumerable: true,\n get: function () {\n return __commonJS;\n }\n});\nObject.defineProperty(exports, '__toESM', {\n enumerable: true,\n get: function () {\n return __toESM;\n }\n});\nObject.defineProperty(exports, 'createFlatProxy', {\n enumerable: true,\n get: function () {\n return createFlatProxy;\n }\n});\nObject.defineProperty(exports, 'createRecursiveProxy', {\n enumerable: true,\n get: function () {\n return createRecursiveProxy;\n }\n});\nObject.defineProperty(exports, 'getErrorShape', {\n enumerable: true,\n get: function () {\n return getErrorShape;\n }\n});\nObject.defineProperty(exports, 'getHTTPStatusCode', {\n enumerable: true,\n get: function () {\n return getHTTPStatusCode;\n }\n});\nObject.defineProperty(exports, 'getHTTPStatusCodeFromError', {\n enumerable: true,\n get: function () {\n return getHTTPStatusCodeFromError;\n }\n});\nObject.defineProperty(exports, 'getStatusCodeFromKey', {\n enumerable: true,\n get: function () {\n return getStatusCodeFromKey;\n }\n});\nObject.defineProperty(exports, 'getStatusKeyFromCode', {\n enumerable: true,\n get: function () {\n return getStatusKeyFromCode;\n }\n});\nObject.defineProperty(exports, 'require_defineProperty', {\n enumerable: true,\n get: function () {\n return require_defineProperty;\n }\n});\nObject.defineProperty(exports, 'require_objectSpread2', {\n enumerable: true,\n get: function () {\n return require_objectSpread2;\n }\n});","const require_getErrorShape = require('./getErrorShape-MR4DZeb7.cjs');\nconst require_codes = require('./codes-BfZsPdy-.cjs');\n\n//#region src/unstable-core-do-not-import/error/formatter.ts\nconst defaultFormatter = ({ shape }) => {\n\treturn shape;\n};\n\n//#endregion\n//#region src/unstable-core-do-not-import/error/TRPCError.ts\nvar import_defineProperty = require_getErrorShape.__toESM(require_getErrorShape.require_defineProperty(), 1);\nvar UnknownCauseError = class extends Error {};\nfunction getCauseFromUnknown(cause) {\n\tif (cause instanceof Error) return cause;\n\tconst type = typeof cause;\n\tif (type === \"undefined\" || type === \"function\" || cause === null) return void 0;\n\tif (type !== \"object\") return new Error(String(cause));\n\tif (require_codes.isObject(cause)) return Object.assign(new UnknownCauseError(), cause);\n\treturn void 0;\n}\nfunction getTRPCErrorFromUnknown(cause) {\n\tif (cause instanceof TRPCError) return cause;\n\tif (cause instanceof Error && cause.name === \"TRPCError\") return cause;\n\tconst trpcError = new TRPCError({\n\t\tcode: \"INTERNAL_SERVER_ERROR\",\n\t\tcause\n\t});\n\tif (cause instanceof Error && cause.stack) trpcError.stack = cause.stack;\n\treturn trpcError;\n}\nvar TRPCError = class extends Error {\n\tconstructor(opts) {\n\t\tvar _ref, _opts$message, _this$cause;\n\t\tconst cause = getCauseFromUnknown(opts.cause);\n\t\tconst message = (_ref = (_opts$message = opts.message) !== null && _opts$message !== void 0 ? _opts$message : cause === null || cause === void 0 ? void 0 : cause.message) !== null && _ref !== void 0 ? _ref : opts.code;\n\t\tsuper(message, { cause });\n\t\t(0, import_defineProperty.default)(this, \"cause\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"code\", void 0);\n\t\tthis.code = opts.code;\n\t\tthis.name = \"TRPCError\";\n\t\t(_this$cause = this.cause) !== null && _this$cause !== void 0 || (this.cause = cause);\n\t}\n};\n\n//#endregion\n//#region src/unstable-core-do-not-import/transformer.ts\nvar import_objectSpread2$1 = require_getErrorShape.__toESM(require_getErrorShape.require_objectSpread2(), 1);\n/**\n* @internal\n*/\nfunction getDataTransformer(transformer) {\n\tif (\"input\" in transformer) return transformer;\n\treturn {\n\t\tinput: transformer,\n\t\toutput: transformer\n\t};\n}\n/**\n* @internal\n*/\nconst defaultTransformer = {\n\tinput: {\n\t\tserialize: (obj) => obj,\n\t\tdeserialize: (obj) => obj\n\t},\n\toutput: {\n\t\tserialize: (obj) => obj,\n\t\tdeserialize: (obj) => obj\n\t}\n};\nfunction transformTRPCResponseItem(config, item) {\n\tif (\"error\" in item) return (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, item), {}, { error: config.transformer.output.serialize(item.error) });\n\tif (\"data\" in item.result) return (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, item), {}, { result: (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, item.result), {}, { data: config.transformer.output.serialize(item.result.data) }) });\n\treturn item;\n}\n/**\n* Takes a unserialized `TRPCResponse` and serializes it with the router's transformers\n**/\nfunction transformTRPCResponse(config, itemOrItems) {\n\treturn Array.isArray(itemOrItems) ? itemOrItems.map((item) => transformTRPCResponseItem(config, item)) : transformTRPCResponseItem(config, itemOrItems);\n}\n/** @internal */\nfunction transformResultInner(response, transformer) {\n\tif (\"error\" in response) {\n\t\tconst error = transformer.deserialize(response.error);\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, response), {}, { error })\n\t\t};\n\t}\n\tconst result = (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, response.result), (!response.result.type || response.result.type === \"data\") && {\n\t\ttype: \"data\",\n\t\tdata: transformer.deserialize(response.result.data)\n\t});\n\treturn {\n\t\tok: true,\n\t\tresult\n\t};\n}\nvar TransformResultError = class extends Error {\n\tconstructor() {\n\t\tsuper(\"Unable to transform response from server\");\n\t}\n};\n/**\n* Transforms and validates that the result is a valid TRPCResponse\n* @internal\n*/\nfunction transformResult(response, transformer) {\n\tlet result;\n\ttry {\n\t\tresult = transformResultInner(response, transformer);\n\t} catch (_unused) {\n\t\tthrow new TransformResultError();\n\t}\n\tif (!result.ok && (!require_codes.isObject(result.error.error) || typeof result.error.error[\"code\"] !== \"number\")) throw new TransformResultError();\n\tif (result.ok && !require_codes.isObject(result.result)) throw new TransformResultError();\n\treturn result;\n}\n\n//#endregion\n//#region src/unstable-core-do-not-import/router.ts\nvar import_objectSpread2 = require_getErrorShape.__toESM(require_getErrorShape.require_objectSpread2(), 1);\n/**\n* @internal\n*/\nconst lazyMarker = \"lazyMarker\";\nfunction once(fn) {\n\tconst uncalled = Symbol();\n\tlet result = uncalled;\n\treturn () => {\n\t\tif (result === uncalled) result = fn();\n\t\treturn result;\n\t};\n}\n/**\n* Lazy load a router\n* @see https://trpc.io/docs/server/merging-routers#lazy-load\n*/\nfunction lazy(importRouter) {\n\tasync function resolve() {\n\t\tconst mod = await importRouter();\n\t\tif (isRouter(mod)) return mod;\n\t\tconst routers = Object.values(mod);\n\t\tif (routers.length !== 1 || !isRouter(routers[0])) throw new Error(\"Invalid router module - either define exactly 1 export or return the router directly.\\nExample: `lazy(() => import('./slow.js').then((m) => m.slowRouter))`\");\n\t\treturn routers[0];\n\t}\n\tresolve[lazyMarker] = true;\n\treturn resolve;\n}\nfunction isLazy(input) {\n\treturn typeof input === \"function\" && lazyMarker in input;\n}\nfunction isRouter(value) {\n\treturn require_codes.isObject(value) && require_codes.isObject(value[\"_def\"]) && \"router\" in value[\"_def\"];\n}\nconst emptyRouter = {\n\t_ctx: null,\n\t_errorShape: null,\n\t_meta: null,\n\tqueries: {},\n\tmutations: {},\n\tsubscriptions: {},\n\terrorFormatter: defaultFormatter,\n\ttransformer: defaultTransformer\n};\n/**\n* Reserved words that can't be used as router or procedure names\n*/\nconst reservedWords = [\n\t\"then\",\n\t\"call\",\n\t\"apply\"\n];\n/**\n* @internal\n*/\nfunction createRouterFactory(config) {\n\tfunction createRouterInner(input) {\n\t\tconst reservedWordsUsed = new Set(Object.keys(input).filter((v) => reservedWords.includes(v)));\n\t\tif (reservedWordsUsed.size > 0) throw new Error(\"Reserved words used in `router({})` call: \" + Array.from(reservedWordsUsed).join(\", \"));\n\t\tconst procedures = require_codes.emptyObject();\n\t\tconst lazy$1 = require_codes.emptyObject();\n\t\tfunction createLazyLoader(opts) {\n\t\t\treturn {\n\t\t\t\tref: opts.ref,\n\t\t\t\tload: once(async () => {\n\t\t\t\t\tconst router$1 = await opts.ref();\n\t\t\t\t\tconst lazyPath = [...opts.path, opts.key];\n\t\t\t\t\tconst lazyKey = lazyPath.join(\".\");\n\t\t\t\t\topts.aggregate[opts.key] = step(router$1._def.record, lazyPath);\n\t\t\t\t\tdelete lazy$1[lazyKey];\n\t\t\t\t\tfor (const [nestedKey, nestedItem] of Object.entries(router$1._def.lazy)) {\n\t\t\t\t\t\tconst nestedRouterKey = [...lazyPath, nestedKey].join(\".\");\n\t\t\t\t\t\tlazy$1[nestedRouterKey] = createLazyLoader({\n\t\t\t\t\t\t\tref: nestedItem.ref,\n\t\t\t\t\t\t\tpath: lazyPath,\n\t\t\t\t\t\t\tkey: nestedKey,\n\t\t\t\t\t\t\taggregate: opts.aggregate[opts.key]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t};\n\t\t}\n\t\tfunction step(from, path = []) {\n\t\t\tconst aggregate = require_codes.emptyObject();\n\t\t\tfor (const [key, item] of Object.entries(from !== null && from !== void 0 ? from : {})) {\n\t\t\t\tif (isLazy(item)) {\n\t\t\t\t\tlazy$1[[...path, key].join(\".\")] = createLazyLoader({\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tref: item,\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\taggregate\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (isRouter(item)) {\n\t\t\t\t\taggregate[key] = step(item._def.record, [...path, key]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!isProcedure(item)) {\n\t\t\t\t\taggregate[key] = step(item, [...path, key]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst newPath = [...path, key].join(\".\");\n\t\t\t\tif (procedures[newPath]) throw new Error(`Duplicate key: ${newPath}`);\n\t\t\t\tprocedures[newPath] = item;\n\t\t\t\taggregate[key] = item;\n\t\t\t}\n\t\t\treturn aggregate;\n\t\t}\n\t\tconst record = step(input);\n\t\tconst _def = (0, import_objectSpread2.default)((0, import_objectSpread2.default)({\n\t\t\t_config: config,\n\t\t\trouter: true,\n\t\t\tprocedures,\n\t\t\tlazy: lazy$1\n\t\t}, emptyRouter), {}, { record });\n\t\tconst router = (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, record), {}, {\n\t\t\t_def,\n\t\t\tcreateCaller: createCallerFactory()({ _def })\n\t\t});\n\t\treturn router;\n\t}\n\treturn createRouterInner;\n}\nfunction isProcedure(procedureOrRouter) {\n\treturn typeof procedureOrRouter === \"function\";\n}\n/**\n* @internal\n*/\nasync function getProcedureAtPath(router, path) {\n\tconst { _def } = router;\n\tlet procedure = _def.procedures[path];\n\twhile (!procedure) {\n\t\tconst key = Object.keys(_def.lazy).find((key$1) => path.startsWith(key$1));\n\t\tif (!key) return null;\n\t\tconst lazyRouter = _def.lazy[key];\n\t\tawait lazyRouter.load();\n\t\tprocedure = _def.procedures[path];\n\t}\n\treturn procedure;\n}\n/**\n* @internal\n*/\nasync function callProcedure(opts) {\n\tconst { type, path } = opts;\n\tconst proc = await getProcedureAtPath(opts.router, path);\n\tif (!proc || !isProcedure(proc) || proc._def.type !== type && !opts.allowMethodOverride) throw new TRPCError({\n\t\tcode: \"NOT_FOUND\",\n\t\tmessage: `No \"${type}\"-procedure on path \"${path}\"`\n\t});\n\t/* istanbul ignore if -- @preserve */\n\tif (proc._def.type !== type && opts.allowMethodOverride && proc._def.type === \"subscription\") throw new TRPCError({\n\t\tcode: \"METHOD_NOT_SUPPORTED\",\n\t\tmessage: `Method override is not supported for subscriptions`\n\t});\n\treturn proc(opts);\n}\nfunction createCallerFactory() {\n\treturn function createCallerInner(router) {\n\t\tconst { _def } = router;\n\t\treturn function createCaller(ctxOrCallback, opts) {\n\t\t\treturn require_getErrorShape.createRecursiveProxy(async (innerOpts) => {\n\t\t\t\tconst { path, args } = innerOpts;\n\t\t\t\tconst fullPath = path.join(\".\");\n\t\t\t\tif (path.length === 1 && path[0] === \"_def\") return _def;\n\t\t\t\tconst procedure = await getProcedureAtPath(router, fullPath);\n\t\t\t\tlet ctx = void 0;\n\t\t\t\ttry {\n\t\t\t\t\tif (!procedure) throw new TRPCError({\n\t\t\t\t\t\tcode: \"NOT_FOUND\",\n\t\t\t\t\t\tmessage: `No procedure found on path \"${path}\"`\n\t\t\t\t\t});\n\t\t\t\t\tctx = require_codes.isFunction(ctxOrCallback) ? await Promise.resolve(ctxOrCallback()) : ctxOrCallback;\n\t\t\t\t\treturn await procedure({\n\t\t\t\t\t\tpath: fullPath,\n\t\t\t\t\t\tgetRawInput: async () => args[0],\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\ttype: procedure._def.type,\n\t\t\t\t\t\tsignal: opts === null || opts === void 0 ? void 0 : opts.signal,\n\t\t\t\t\t\tbatchIndex: 0\n\t\t\t\t\t});\n\t\t\t\t} catch (cause) {\n\t\t\t\t\tvar _opts$onError, _procedure$_def$type;\n\t\t\t\t\topts === null || opts === void 0 || (_opts$onError = opts.onError) === null || _opts$onError === void 0 || _opts$onError.call(opts, {\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\terror: getTRPCErrorFromUnknown(cause),\n\t\t\t\t\t\tinput: args[0],\n\t\t\t\t\t\tpath: fullPath,\n\t\t\t\t\t\ttype: (_procedure$_def$type = procedure === null || procedure === void 0 ? void 0 : procedure._def.type) !== null && _procedure$_def$type !== void 0 ? _procedure$_def$type : \"unknown\"\n\t\t\t\t\t});\n\t\t\t\t\tthrow cause;\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t};\n}\nfunction mergeRouters(...routerList) {\n\tvar _routerList$, _routerList$2;\n\tconst record = require_codes.mergeWithoutOverrides({}, ...routerList.map((r) => r._def.record));\n\tconst errorFormatter = routerList.reduce((currentErrorFormatter, nextRouter) => {\n\t\tif (nextRouter._def._config.errorFormatter && nextRouter._def._config.errorFormatter !== defaultFormatter) {\n\t\t\tif (currentErrorFormatter !== defaultFormatter && currentErrorFormatter !== nextRouter._def._config.errorFormatter) throw new Error(\"You seem to have several error formatters\");\n\t\t\treturn nextRouter._def._config.errorFormatter;\n\t\t}\n\t\treturn currentErrorFormatter;\n\t}, defaultFormatter);\n\tconst transformer = routerList.reduce((prev, current) => {\n\t\tif (current._def._config.transformer && current._def._config.transformer !== defaultTransformer) {\n\t\t\tif (prev !== defaultTransformer && prev !== current._def._config.transformer) throw new Error(\"You seem to have several transformers\");\n\t\t\treturn current._def._config.transformer;\n\t\t}\n\t\treturn prev;\n\t}, defaultTransformer);\n\tconst router = createRouterFactory({\n\t\terrorFormatter,\n\t\ttransformer,\n\t\tisDev: routerList.every((r) => r._def._config.isDev),\n\t\tallowOutsideOfServer: routerList.every((r) => r._def._config.allowOutsideOfServer),\n\t\tisServer: routerList.every((r) => r._def._config.isServer),\n\t\t$types: (_routerList$ = routerList[0]) === null || _routerList$ === void 0 ? void 0 : _routerList$._def._config.$types,\n\t\tsse: (_routerList$2 = routerList[0]) === null || _routerList$2 === void 0 ? void 0 : _routerList$2._def._config.sse\n\t})(record);\n\treturn router;\n}\n\n//#endregion\n//#region src/unstable-core-do-not-import/stream/tracked.ts\nconst trackedSymbol = Symbol();\n/**\n* Produce a typed server-sent event message\n* @deprecated use `tracked(id, data)` instead\n*/\nfunction sse(event) {\n\treturn tracked(event.id, event.data);\n}\nfunction isTrackedEnvelope(value) {\n\treturn Array.isArray(value) && value[2] === trackedSymbol;\n}\n/**\n* Automatically track an event so that it can be resumed from a given id if the connection is lost\n*/\nfunction tracked(id, data) {\n\tif (id === \"\") throw new Error(\"`id` must not be an empty string as empty string is the same as not setting the id at all\");\n\treturn [\n\t\tid,\n\t\tdata,\n\t\ttrackedSymbol\n\t];\n}\n\n//#endregion\nObject.defineProperty(exports, 'TRPCError', {\n enumerable: true,\n get: function () {\n return TRPCError;\n }\n});\nObject.defineProperty(exports, 'callProcedure', {\n enumerable: true,\n get: function () {\n return callProcedure;\n }\n});\nObject.defineProperty(exports, 'createCallerFactory', {\n enumerable: true,\n get: function () {\n return createCallerFactory;\n }\n});\nObject.defineProperty(exports, 'createRouterFactory', {\n enumerable: true,\n get: function () {\n return createRouterFactory;\n }\n});\nObject.defineProperty(exports, 'defaultFormatter', {\n enumerable: true,\n get: function () {\n return defaultFormatter;\n }\n});\nObject.defineProperty(exports, 'defaultTransformer', {\n enumerable: true,\n get: function () {\n return defaultTransformer;\n }\n});\nObject.defineProperty(exports, 'getCauseFromUnknown', {\n enumerable: true,\n get: function () {\n return getCauseFromUnknown;\n }\n});\nObject.defineProperty(exports, 'getDataTransformer', {\n enumerable: true,\n get: function () {\n return getDataTransformer;\n }\n});\nObject.defineProperty(exports, 'getProcedureAtPath', {\n enumerable: true,\n get: function () {\n return getProcedureAtPath;\n }\n});\nObject.defineProperty(exports, 'getTRPCErrorFromUnknown', {\n enumerable: true,\n get: function () {\n return getTRPCErrorFromUnknown;\n }\n});\nObject.defineProperty(exports, 'isTrackedEnvelope', {\n enumerable: true,\n get: function () {\n return isTrackedEnvelope;\n }\n});\nObject.defineProperty(exports, 'lazy', {\n enumerable: true,\n get: function () {\n return lazy;\n }\n});\nObject.defineProperty(exports, 'mergeRouters', {\n enumerable: true,\n get: function () {\n return mergeRouters;\n }\n});\nObject.defineProperty(exports, 'sse', {\n enumerable: true,\n get: function () {\n return sse;\n }\n});\nObject.defineProperty(exports, 'tracked', {\n enumerable: true,\n get: function () {\n return tracked;\n }\n});\nObject.defineProperty(exports, 'transformResult', {\n enumerable: true,\n get: function () {\n return transformResult;\n }\n});\nObject.defineProperty(exports, 'transformTRPCResponse', {\n enumerable: true,\n get: function () {\n return transformTRPCResponse;\n }\n});","const require_getErrorShape = require('./getErrorShape-MR4DZeb7.cjs');\nconst require_codes = require('./codes-BfZsPdy-.cjs');\nconst require_tracked = require('./tracked-DX1GMBVX.cjs');\n\n//#region src/unstable-core-do-not-import/middleware.ts\nvar import_objectSpread2$2 = require_getErrorShape.__toESM(require_getErrorShape.require_objectSpread2(), 1);\n/** @internal */\nconst middlewareMarker = \"middlewareMarker\";\n/**\n* @internal\n*/\nfunction createMiddlewareFactory() {\n\tfunction createMiddlewareInner(middlewares) {\n\t\treturn {\n\t\t\t_middlewares: middlewares,\n\t\t\tunstable_pipe(middlewareBuilderOrFn) {\n\t\t\t\tconst pipedMiddleware = \"_middlewares\" in middlewareBuilderOrFn ? middlewareBuilderOrFn._middlewares : [middlewareBuilderOrFn];\n\t\t\t\treturn createMiddlewareInner([...middlewares, ...pipedMiddleware]);\n\t\t\t}\n\t\t};\n\t}\n\tfunction createMiddleware(fn) {\n\t\treturn createMiddlewareInner([fn]);\n\t}\n\treturn createMiddleware;\n}\n/**\n* Create a standalone middleware\n* @see https://trpc.io/docs/v11/server/middlewares#experimental-standalone-middlewares\n* @deprecated use `.concat()` instead\n*/\nconst experimental_standaloneMiddleware = () => ({ create: createMiddlewareFactory() });\n/**\n* @internal\n* Please note, `trpc-openapi` uses this function.\n*/\nfunction createInputMiddleware(parse) {\n\tconst inputMiddleware = async function inputValidatorMiddleware(opts) {\n\t\tlet parsedInput;\n\t\tconst rawInput = await opts.getRawInput();\n\t\ttry {\n\t\t\tparsedInput = await parse(rawInput);\n\t\t} catch (cause) {\n\t\t\tthrow new require_tracked.TRPCError({\n\t\t\t\tcode: \"BAD_REQUEST\",\n\t\t\t\tcause\n\t\t\t});\n\t\t}\n\t\tconst combinedInput = require_codes.isObject(opts.input) && require_codes.isObject(parsedInput) ? (0, import_objectSpread2$2.default)((0, import_objectSpread2$2.default)({}, opts.input), parsedInput) : parsedInput;\n\t\treturn opts.next({ input: combinedInput });\n\t};\n\tinputMiddleware._type = \"input\";\n\treturn inputMiddleware;\n}\n/**\n* @internal\n*/\nfunction createOutputMiddleware(parse) {\n\tconst outputMiddleware = async function outputValidatorMiddleware({ next }) {\n\t\tconst result = await next();\n\t\tif (!result.ok) return result;\n\t\ttry {\n\t\t\tconst data = await parse(result.data);\n\t\t\treturn (0, import_objectSpread2$2.default)((0, import_objectSpread2$2.default)({}, result), {}, { data });\n\t\t} catch (cause) {\n\t\t\tthrow new require_tracked.TRPCError({\n\t\t\t\tmessage: \"Output validation failed\",\n\t\t\t\tcode: \"INTERNAL_SERVER_ERROR\",\n\t\t\t\tcause\n\t\t\t});\n\t\t}\n\t};\n\toutputMiddleware._type = \"output\";\n\treturn outputMiddleware;\n}\n\n//#endregion\n//#region src/vendor/standard-schema-v1/error.ts\nvar import_defineProperty = require_getErrorShape.__toESM(require_getErrorShape.require_defineProperty(), 1);\n/** A schema error with useful information. */\nvar StandardSchemaV1Error = class extends Error {\n\t/**\n\t* Creates a schema error with useful information.\n\t*\n\t* @param issues The schema issues.\n\t*/\n\tconstructor(issues) {\n\t\tvar _issues$;\n\t\tsuper((_issues$ = issues[0]) === null || _issues$ === void 0 ? void 0 : _issues$.message);\n\t\t(0, import_defineProperty.default)(this, \"issues\", void 0);\n\t\tthis.name = \"SchemaError\";\n\t\tthis.issues = issues;\n\t}\n};\n\n//#endregion\n//#region src/unstable-core-do-not-import/parser.ts\nfunction getParseFn(procedureParser) {\n\tconst parser = procedureParser;\n\tconst isStandardSchema = \"~standard\" in parser;\n\tif (typeof parser === \"function\" && typeof parser.assert === \"function\") return parser.assert.bind(parser);\n\tif (typeof parser === \"function\" && !isStandardSchema) return parser;\n\tif (typeof parser.parseAsync === \"function\") return parser.parseAsync.bind(parser);\n\tif (typeof parser.parse === \"function\") return parser.parse.bind(parser);\n\tif (typeof parser.validateSync === \"function\") return parser.validateSync.bind(parser);\n\tif (typeof parser.create === \"function\") return parser.create.bind(parser);\n\tif (typeof parser.assert === \"function\") return (value) => {\n\t\tparser.assert(value);\n\t\treturn value;\n\t};\n\tif (isStandardSchema) return async (value) => {\n\t\tconst result = await parser[\"~standard\"].validate(value);\n\t\tif (result.issues) throw new StandardSchemaV1Error(result.issues);\n\t\treturn result.value;\n\t};\n\tthrow new Error(\"Could not find a validator fn\");\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutPropertiesLoose.js\nvar require_objectWithoutPropertiesLoose = require_getErrorShape.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutPropertiesLoose.js\"(exports, module) {\n\tfunction _objectWithoutPropertiesLoose(r, e) {\n\t\tif (null == r) return {};\n\t\tvar t = {};\n\t\tfor (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n\t\t\tif (e.includes(n)) continue;\n\t\t\tt[n] = r[n];\n\t\t}\n\t\treturn t;\n\t}\n\tmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutProperties.js\nvar require_objectWithoutProperties = require_getErrorShape.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutProperties.js\"(exports, module) {\n\tvar objectWithoutPropertiesLoose = require_objectWithoutPropertiesLoose();\n\tfunction _objectWithoutProperties$1(e, t) {\n\t\tif (null == e) return {};\n\t\tvar o, r, i = objectWithoutPropertiesLoose(e, t);\n\t\tif (Object.getOwnPropertySymbols) {\n\t\t\tvar s = Object.getOwnPropertySymbols(e);\n\t\t\tfor (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n\t\t}\n\t\treturn i;\n\t}\n\tmodule.exports = _objectWithoutProperties$1, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region src/unstable-core-do-not-import/procedureBuilder.ts\nvar import_objectWithoutProperties = require_getErrorShape.__toESM(require_objectWithoutProperties(), 1);\nvar import_objectSpread2$1 = require_getErrorShape.__toESM(require_getErrorShape.require_objectSpread2(), 1);\nconst _excluded = [\n\t\"middlewares\",\n\t\"inputs\",\n\t\"meta\"\n];\nfunction createNewBuilder(def1, def2) {\n\tconst { middlewares = [], inputs, meta } = def2, rest = (0, import_objectWithoutProperties.default)(def2, _excluded);\n\treturn createBuilder((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, require_codes.mergeWithoutOverrides(def1, rest)), {}, {\n\t\tinputs: [...def1.inputs, ...inputs !== null && inputs !== void 0 ? inputs : []],\n\t\tmiddlewares: [...def1.middlewares, ...middlewares],\n\t\tmeta: def1.meta && meta ? (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, def1.meta), meta) : meta !== null && meta !== void 0 ? meta : def1.meta\n\t}));\n}\nfunction createBuilder(initDef = {}) {\n\tconst _def = (0, import_objectSpread2$1.default)({\n\t\tprocedure: true,\n\t\tinputs: [],\n\t\tmiddlewares: []\n\t}, initDef);\n\tconst builder = {\n\t\t_def,\n\t\tinput(input) {\n\t\t\tconst parser = getParseFn(input);\n\t\t\treturn createNewBuilder(_def, {\n\t\t\t\tinputs: [input],\n\t\t\t\tmiddlewares: [createInputMiddleware(parser)]\n\t\t\t});\n\t\t},\n\t\toutput(output) {\n\t\t\tconst parser = getParseFn(output);\n\t\t\treturn createNewBuilder(_def, {\n\t\t\t\toutput,\n\t\t\t\tmiddlewares: [createOutputMiddleware(parser)]\n\t\t\t});\n\t\t},\n\t\tmeta(meta) {\n\t\t\treturn createNewBuilder(_def, { meta });\n\t\t},\n\t\tuse(middlewareBuilderOrFn) {\n\t\t\tconst middlewares = \"_middlewares\" in middlewareBuilderOrFn ? middlewareBuilderOrFn._middlewares : [middlewareBuilderOrFn];\n\t\t\treturn createNewBuilder(_def, { middlewares });\n\t\t},\n\t\tunstable_concat(builder$1) {\n\t\t\treturn createNewBuilder(_def, builder$1._def);\n\t\t},\n\t\tconcat(builder$1) {\n\t\t\treturn createNewBuilder(_def, builder$1._def);\n\t\t},\n\t\tquery(resolver) {\n\t\t\treturn createResolver((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, _def), {}, { type: \"query\" }), resolver);\n\t\t},\n\t\tmutation(resolver) {\n\t\t\treturn createResolver((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, _def), {}, { type: \"mutation\" }), resolver);\n\t\t},\n\t\tsubscription(resolver) {\n\t\t\treturn createResolver((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, _def), {}, { type: \"subscription\" }), resolver);\n\t\t},\n\t\texperimental_caller(caller) {\n\t\t\treturn createNewBuilder(_def, { caller });\n\t\t}\n\t};\n\treturn builder;\n}\nfunction createResolver(_defIn, resolver) {\n\tconst finalBuilder = createNewBuilder(_defIn, {\n\t\tresolver,\n\t\tmiddlewares: [async function resolveMiddleware(opts) {\n\t\t\tconst data = await resolver(opts);\n\t\t\treturn {\n\t\t\t\tmarker: middlewareMarker,\n\t\t\t\tok: true,\n\t\t\t\tdata,\n\t\t\t\tctx: opts.ctx\n\t\t\t};\n\t\t}]\n\t});\n\tconst _def = (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, finalBuilder._def), {}, {\n\t\ttype: _defIn.type,\n\t\texperimental_caller: Boolean(finalBuilder._def.caller),\n\t\tmeta: finalBuilder._def.meta,\n\t\t$types: null\n\t});\n\tconst invoke = createProcedureCaller(finalBuilder._def);\n\tconst callerOverride = finalBuilder._def.caller;\n\tif (!callerOverride) return invoke;\n\tconst callerWrapper = async (...args) => {\n\t\treturn await callerOverride({\n\t\t\targs,\n\t\t\tinvoke,\n\t\t\t_def\n\t\t});\n\t};\n\tcallerWrapper._def = _def;\n\treturn callerWrapper;\n}\nconst codeblock = `\nThis is a client-only function.\nIf you want to call this function on the server, see https://trpc.io/docs/v11/server/server-side-calls\n`.trim();\nasync function callRecursive(index, _def, opts) {\n\ttry {\n\t\tconst middleware = _def.middlewares[index];\n\t\tconst result = await middleware((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts), {}, {\n\t\t\tmeta: _def.meta,\n\t\t\tinput: opts.input,\n\t\t\tnext(_nextOpts) {\n\t\t\t\tvar _nextOpts$getRawInput;\n\t\t\t\tconst nextOpts = _nextOpts;\n\t\t\t\treturn callRecursive(index + 1, _def, (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts), {}, {\n\t\t\t\t\tctx: (nextOpts === null || nextOpts === void 0 ? void 0 : nextOpts.ctx) ? (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts.ctx), nextOpts.ctx) : opts.ctx,\n\t\t\t\t\tinput: nextOpts && \"input\" in nextOpts ? nextOpts.input : opts.input,\n\t\t\t\t\tgetRawInput: (_nextOpts$getRawInput = nextOpts === null || nextOpts === void 0 ? void 0 : nextOpts.getRawInput) !== null && _nextOpts$getRawInput !== void 0 ? _nextOpts$getRawInput : opts.getRawInput\n\t\t\t\t}));\n\t\t\t}\n\t\t}));\n\t\treturn result;\n\t} catch (cause) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: require_tracked.getTRPCErrorFromUnknown(cause),\n\t\t\tmarker: middlewareMarker\n\t\t};\n\t}\n}\nfunction createProcedureCaller(_def) {\n\tasync function procedure(opts) {\n\t\tif (!opts || !(\"getRawInput\" in opts)) throw new Error(codeblock);\n\t\tconst result = await callRecursive(0, _def, opts);\n\t\tif (!result) throw new require_tracked.TRPCError({\n\t\t\tcode: \"INTERNAL_SERVER_ERROR\",\n\t\t\tmessage: \"No result from middlewares - did you forget to `return next()`?\"\n\t\t});\n\t\tif (!result.ok) throw result.error;\n\t\treturn result.data;\n\t}\n\tprocedure._def = _def;\n\tprocedure.procedure = true;\n\tprocedure.meta = _def.meta;\n\treturn procedure;\n}\n\n//#endregion\n//#region src/unstable-core-do-not-import/rootConfig.ts\nvar _globalThis$process, _globalThis$process2, _globalThis$process3;\n/**\n* The default check to see if we're in a server\n*/\nconst isServerDefault = typeof window === \"undefined\" || \"Deno\" in window || ((_globalThis$process = globalThis.process) === null || _globalThis$process === void 0 || (_globalThis$process = _globalThis$process.env) === null || _globalThis$process === void 0 ? void 0 : _globalThis$process[\"NODE_ENV\"]) === \"test\" || !!((_globalThis$process2 = globalThis.process) === null || _globalThis$process2 === void 0 || (_globalThis$process2 = _globalThis$process2.env) === null || _globalThis$process2 === void 0 ? void 0 : _globalThis$process2[\"JEST_WORKER_ID\"]) || !!((_globalThis$process3 = globalThis.process) === null || _globalThis$process3 === void 0 || (_globalThis$process3 = _globalThis$process3.env) === null || _globalThis$process3 === void 0 ? void 0 : _globalThis$process3[\"VITEST_WORKER_ID\"]);\n\n//#endregion\n//#region src/unstable-core-do-not-import/initTRPC.ts\nvar import_objectSpread2 = require_getErrorShape.__toESM(require_getErrorShape.require_objectSpread2(), 1);\nvar TRPCBuilder = class TRPCBuilder {\n\t/**\n\t* Add a context shape as a generic to the root object\n\t* @see https://trpc.io/docs/v11/server/context\n\t*/\n\tcontext() {\n\t\treturn new TRPCBuilder();\n\t}\n\t/**\n\t* Add a meta shape as a generic to the root object\n\t* @see https://trpc.io/docs/v11/quickstart\n\t*/\n\tmeta() {\n\t\treturn new TRPCBuilder();\n\t}\n\t/**\n\t* Create the root object\n\t* @see https://trpc.io/docs/v11/server/routers#initialize-trpc\n\t*/\n\tcreate(opts) {\n\t\tvar _opts$transformer, _opts$isDev, _globalThis$process$1, _opts$allowOutsideOfS, _opts$errorFormatter, _opts$isServer;\n\t\tconst config = (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, {\n\t\t\ttransformer: require_tracked.getDataTransformer((_opts$transformer = opts === null || opts === void 0 ? void 0 : opts.transformer) !== null && _opts$transformer !== void 0 ? _opts$transformer : require_tracked.defaultTransformer),\n\t\t\tisDev: (_opts$isDev = opts === null || opts === void 0 ? void 0 : opts.isDev) !== null && _opts$isDev !== void 0 ? _opts$isDev : ((_globalThis$process$1 = globalThis.process) === null || _globalThis$process$1 === void 0 ? void 0 : _globalThis$process$1.env[\"NODE_ENV\"]) !== \"production\",\n\t\t\tallowOutsideOfServer: (_opts$allowOutsideOfS = opts === null || opts === void 0 ? void 0 : opts.allowOutsideOfServer) !== null && _opts$allowOutsideOfS !== void 0 ? _opts$allowOutsideOfS : false,\n\t\t\terrorFormatter: (_opts$errorFormatter = opts === null || opts === void 0 ? void 0 : opts.errorFormatter) !== null && _opts$errorFormatter !== void 0 ? _opts$errorFormatter : require_tracked.defaultFormatter,\n\t\t\tisServer: (_opts$isServer = opts === null || opts === void 0 ? void 0 : opts.isServer) !== null && _opts$isServer !== void 0 ? _opts$isServer : isServerDefault,\n\t\t\t$types: null\n\t\t});\n\t\t{\n\t\t\tvar _opts$isServer2;\n\t\t\tconst isServer = (_opts$isServer2 = opts === null || opts === void 0 ? void 0 : opts.isServer) !== null && _opts$isServer2 !== void 0 ? _opts$isServer2 : isServerDefault;\n\t\t\tif (!isServer && (opts === null || opts === void 0 ? void 0 : opts.allowOutsideOfServer) !== true) throw new Error(`You're trying to use @trpc/server in a non-server environment. This is not supported by default.`);\n\t\t}\n\t\treturn {\n\t\t\t_config: config,\n\t\t\tprocedure: createBuilder({ meta: opts === null || opts === void 0 ? void 0 : opts.defaultMeta }),\n\t\t\tmiddleware: createMiddlewareFactory(),\n\t\t\trouter: require_tracked.createRouterFactory(config),\n\t\t\tmergeRouters: require_tracked.mergeRouters,\n\t\t\tcreateCallerFactory: require_tracked.createCallerFactory()\n\t\t};\n\t}\n};\n/**\n* Builder to initialize the tRPC root object - use this exactly once per backend\n* @see https://trpc.io/docs/v11/quickstart\n*/\nconst initTRPC = new TRPCBuilder();\n\n//#endregion\nObject.defineProperty(exports, 'StandardSchemaV1Error', {\n enumerable: true,\n get: function () {\n return StandardSchemaV1Error;\n }\n});\nObject.defineProperty(exports, 'createBuilder', {\n enumerable: true,\n get: function () {\n return createBuilder;\n }\n});\nObject.defineProperty(exports, 'createInputMiddleware', {\n enumerable: true,\n get: function () {\n return createInputMiddleware;\n }\n});\nObject.defineProperty(exports, 'createMiddlewareFactory', {\n enumerable: true,\n get: function () {\n return createMiddlewareFactory;\n }\n});\nObject.defineProperty(exports, 'createOutputMiddleware', {\n enumerable: true,\n get: function () {\n return createOutputMiddleware;\n }\n});\nObject.defineProperty(exports, 'experimental_standaloneMiddleware', {\n enumerable: true,\n get: function () {\n return experimental_standaloneMiddleware;\n }\n});\nObject.defineProperty(exports, 'getParseFn', {\n enumerable: true,\n get: function () {\n return getParseFn;\n }\n});\nObject.defineProperty(exports, 'initTRPC', {\n enumerable: true,\n get: function () {\n return initTRPC;\n }\n});\nObject.defineProperty(exports, 'isServerDefault', {\n enumerable: true,\n get: function () {\n return isServerDefault;\n }\n});\nObject.defineProperty(exports, 'middlewareMarker', {\n enumerable: true,\n get: function () {\n return middlewareMarker;\n }\n});","const require_getErrorShape = require('./getErrorShape-MR4DZeb7.cjs');\nrequire('./codes-BfZsPdy-.cjs');\nconst require_tracked = require('./tracked-DX1GMBVX.cjs');\nconst require_initTRPC = require('./initTRPC-_LnoxDdS.cjs');\n\nexports.StandardSchemaV1Error = require_initTRPC.StandardSchemaV1Error;\nexports.TRPCError = require_tracked.TRPCError;\nexports.callTRPCProcedure = require_tracked.callProcedure;\nexports.createTRPCFlatProxy = require_getErrorShape.createFlatProxy;\nexports.createTRPCRecursiveProxy = require_getErrorShape.createRecursiveProxy;\nexports.experimental_lazy = require_tracked.lazy;\nexports.experimental_standaloneMiddleware = require_initTRPC.experimental_standaloneMiddleware;\nexports.experimental_trpcMiddleware = require_initTRPC.experimental_standaloneMiddleware;\nexports.getErrorShape = require_getErrorShape.getErrorShape;\nexports.getTRPCErrorFromUnknown = require_tracked.getTRPCErrorFromUnknown;\nexports.getTRPCErrorShape = require_getErrorShape.getErrorShape;\nexports.initTRPC = require_initTRPC.initTRPC;\nexports.isTrackedEnvelope = require_tracked.isTrackedEnvelope;\nexports.lazy = require_tracked.lazy;\nexports.sse = require_tracked.sse;\nexports.tracked = require_tracked.tracked;\nexports.transformTRPCResponse = require_tracked.transformTRPCResponse;","//#region rolldown:runtime\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJS = (cb, mod) => function() {\n\treturn mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\tkey = keys[i];\n\t\tif (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t});\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target, mod));\n\n//#endregion\n\nObject.defineProperty(exports, '__commonJS', {\n enumerable: true,\n get: function () {\n return __commonJS;\n }\n});\nObject.defineProperty(exports, '__toESM', {\n enumerable: true,\n get: function () {\n return __toESM;\n }\n});","\n//#region src/observable/observable.ts\n/** @public */\nfunction isObservable(x) {\n\treturn typeof x === \"object\" && x !== null && \"subscribe\" in x;\n}\n/** @public */\nfunction observable(subscribe) {\n\tconst self = {\n\t\tsubscribe(observer) {\n\t\t\tlet teardownRef = null;\n\t\t\tlet isDone = false;\n\t\t\tlet unsubscribed = false;\n\t\t\tlet teardownImmediately = false;\n\t\t\tfunction unsubscribe() {\n\t\t\t\tif (teardownRef === null) {\n\t\t\t\t\tteardownImmediately = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (unsubscribed) return;\n\t\t\t\tunsubscribed = true;\n\t\t\t\tif (typeof teardownRef === \"function\") teardownRef();\n\t\t\t\telse if (teardownRef) teardownRef.unsubscribe();\n\t\t\t}\n\t\t\tteardownRef = subscribe({\n\t\t\t\tnext(value) {\n\t\t\t\t\tvar _observer$next;\n\t\t\t\t\tif (isDone) return;\n\t\t\t\t\t(_observer$next = observer.next) === null || _observer$next === void 0 || _observer$next.call(observer, value);\n\t\t\t\t},\n\t\t\t\terror(err) {\n\t\t\t\t\tvar _observer$error;\n\t\t\t\t\tif (isDone) return;\n\t\t\t\t\tisDone = true;\n\t\t\t\t\t(_observer$error = observer.error) === null || _observer$error === void 0 || _observer$error.call(observer, err);\n\t\t\t\t\tunsubscribe();\n\t\t\t\t},\n\t\t\t\tcomplete() {\n\t\t\t\t\tvar _observer$complete;\n\t\t\t\t\tif (isDone) return;\n\t\t\t\t\tisDone = true;\n\t\t\t\t\t(_observer$complete = observer.complete) === null || _observer$complete === void 0 || _observer$complete.call(observer);\n\t\t\t\t\tunsubscribe();\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (teardownImmediately) unsubscribe();\n\t\t\treturn { unsubscribe };\n\t\t},\n\t\tpipe(...operations) {\n\t\t\treturn operations.reduce(pipeReducer, self);\n\t\t}\n\t};\n\treturn self;\n}\nfunction pipeReducer(prev, fn) {\n\treturn fn(prev);\n}\n/** @internal */\nfunction observableToPromise(observable$1) {\n\tconst ac = new AbortController();\n\tconst promise = new Promise((resolve, reject) => {\n\t\tlet isDone = false;\n\t\tfunction onDone() {\n\t\t\tif (isDone) return;\n\t\t\tisDone = true;\n\t\t\tobs$.unsubscribe();\n\t\t}\n\t\tac.signal.addEventListener(\"abort\", () => {\n\t\t\treject(ac.signal.reason);\n\t\t});\n\t\tconst obs$ = observable$1.subscribe({\n\t\t\tnext(data) {\n\t\t\t\tisDone = true;\n\t\t\t\tresolve(data);\n\t\t\t\tonDone();\n\t\t\t},\n\t\t\terror(data) {\n\t\t\t\treject(data);\n\t\t\t},\n\t\t\tcomplete() {\n\t\t\t\tac.abort();\n\t\t\t\tonDone();\n\t\t\t}\n\t\t});\n\t});\n\treturn promise;\n}\n/**\n* @internal\n*/\nfunction observableToReadableStream(observable$1, signal) {\n\tlet unsub = null;\n\tconst onAbort = () => {\n\t\tunsub === null || unsub === void 0 || unsub.unsubscribe();\n\t\tunsub = null;\n\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t};\n\treturn new ReadableStream({\n\t\tstart(controller) {\n\t\t\tunsub = observable$1.subscribe({\n\t\t\t\tnext(data) {\n\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\tok: true,\n\t\t\t\t\t\tvalue: data\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\terror(error) {\n\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\tok: false,\n\t\t\t\t\t\terror\n\t\t\t\t\t});\n\t\t\t\t\tcontroller.close();\n\t\t\t\t},\n\t\t\t\tcomplete() {\n\t\t\t\t\tcontroller.close();\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (signal.aborted) onAbort();\n\t\t\telse signal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t},\n\t\tcancel() {\n\t\t\tonAbort();\n\t\t}\n\t});\n}\n/** @internal */\nfunction observableToAsyncIterable(observable$1, signal) {\n\tconst stream = observableToReadableStream(observable$1, signal);\n\tconst reader = stream.getReader();\n\tconst iterator = {\n\t\tasync next() {\n\t\t\tconst value = await reader.read();\n\t\t\tif (value.done) return {\n\t\t\t\tvalue: void 0,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t\tconst { value: result } = value;\n\t\t\tif (!result.ok) throw result.error;\n\t\t\treturn {\n\t\t\t\tvalue: result.value,\n\t\t\t\tdone: false\n\t\t\t};\n\t\t},\n\t\tasync return() {\n\t\t\tawait reader.cancel();\n\t\t\treturn {\n\t\t\t\tvalue: void 0,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\t};\n\treturn { [Symbol.asyncIterator]() {\n\t\treturn iterator;\n\t} };\n}\n\n//#endregion\nObject.defineProperty(exports, 'isObservable', {\n enumerable: true,\n get: function () {\n return isObservable;\n }\n});\nObject.defineProperty(exports, 'observable', {\n enumerable: true,\n get: function () {\n return observable;\n }\n});\nObject.defineProperty(exports, 'observableToAsyncIterable', {\n enumerable: true,\n get: function () {\n return observableToAsyncIterable;\n }\n});\nObject.defineProperty(exports, 'observableToPromise', {\n enumerable: true,\n get: function () {\n return observableToPromise;\n }\n});","const require_observable = require('./observable-B1Nk6r1H.cjs');\n\n//#region src/observable/operators.ts\nfunction map(project) {\n\treturn (source) => {\n\t\treturn require_observable.observable((destination) => {\n\t\t\tlet index = 0;\n\t\t\tconst subscription = source.subscribe({\n\t\t\t\tnext(value) {\n\t\t\t\t\tdestination.next(project(value, index++));\n\t\t\t\t},\n\t\t\t\terror(error) {\n\t\t\t\t\tdestination.error(error);\n\t\t\t\t},\n\t\t\t\tcomplete() {\n\t\t\t\t\tdestination.complete();\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn subscription;\n\t\t});\n\t};\n}\nfunction share(_opts) {\n\treturn (source) => {\n\t\tlet refCount = 0;\n\t\tlet subscription = null;\n\t\tconst observers = [];\n\t\tfunction startIfNeeded() {\n\t\t\tif (subscription) return;\n\t\t\tsubscription = source.subscribe({\n\t\t\t\tnext(value) {\n\t\t\t\t\tfor (const observer of observers) {\n\t\t\t\t\t\tvar _observer$next;\n\t\t\t\t\t\t(_observer$next = observer.next) === null || _observer$next === void 0 || _observer$next.call(observer, value);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror(error) {\n\t\t\t\t\tfor (const observer of observers) {\n\t\t\t\t\t\tvar _observer$error;\n\t\t\t\t\t\t(_observer$error = observer.error) === null || _observer$error === void 0 || _observer$error.call(observer, error);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcomplete() {\n\t\t\t\t\tfor (const observer of observers) {\n\t\t\t\t\t\tvar _observer$complete;\n\t\t\t\t\t\t(_observer$complete = observer.complete) === null || _observer$complete === void 0 || _observer$complete.call(observer);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfunction resetIfNeeded() {\n\t\t\tif (refCount === 0 && subscription) {\n\t\t\t\tconst _sub = subscription;\n\t\t\t\tsubscription = null;\n\t\t\t\t_sub.unsubscribe();\n\t\t\t}\n\t\t}\n\t\treturn require_observable.observable((subscriber) => {\n\t\t\trefCount++;\n\t\t\tobservers.push(subscriber);\n\t\t\tstartIfNeeded();\n\t\t\treturn { unsubscribe() {\n\t\t\t\trefCount--;\n\t\t\t\tresetIfNeeded();\n\t\t\t\tconst index = observers.findIndex((v) => v === subscriber);\n\t\t\t\tif (index > -1) observers.splice(index, 1);\n\t\t\t} };\n\t\t});\n\t};\n}\nfunction tap(observer) {\n\treturn (source) => {\n\t\treturn require_observable.observable((destination) => {\n\t\t\treturn source.subscribe({\n\t\t\t\tnext(value) {\n\t\t\t\t\tvar _observer$next2;\n\t\t\t\t\t(_observer$next2 = observer.next) === null || _observer$next2 === void 0 || _observer$next2.call(observer, value);\n\t\t\t\t\tdestination.next(value);\n\t\t\t\t},\n\t\t\t\terror(error) {\n\t\t\t\t\tvar _observer$error2;\n\t\t\t\t\t(_observer$error2 = observer.error) === null || _observer$error2 === void 0 || _observer$error2.call(observer, error);\n\t\t\t\t\tdestination.error(error);\n\t\t\t\t},\n\t\t\t\tcomplete() {\n\t\t\t\t\tvar _observer$complete2;\n\t\t\t\t\t(_observer$complete2 = observer.complete) === null || _observer$complete2 === void 0 || _observer$complete2.call(observer);\n\t\t\t\t\tdestination.complete();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n}\nconst distinctUnsetMarker = Symbol();\nfunction distinctUntilChanged(compare = (a, b) => a === b) {\n\treturn (source) => {\n\t\treturn require_observable.observable((destination) => {\n\t\t\tlet lastValue = distinctUnsetMarker;\n\t\t\treturn source.subscribe({\n\t\t\t\tnext(value) {\n\t\t\t\t\tif (lastValue !== distinctUnsetMarker && compare(lastValue, value)) return;\n\t\t\t\t\tlastValue = value;\n\t\t\t\t\tdestination.next(value);\n\t\t\t\t},\n\t\t\t\terror(error) {\n\t\t\t\t\tdestination.error(error);\n\t\t\t\t},\n\t\t\t\tcomplete() {\n\t\t\t\t\tdestination.complete();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n}\nconst isDeepEqual = (a, b) => {\n\tif (a === b) return true;\n\tconst bothAreObjects = a && b && typeof a === \"object\" && typeof b === \"object\";\n\treturn !!bothAreObjects && Object.keys(a).length === Object.keys(b).length && Object.entries(a).every(([k, v]) => isDeepEqual(v, b[k]));\n};\nfunction distinctUntilDeepChanged() {\n\treturn distinctUntilChanged(isDeepEqual);\n}\n\n//#endregion\n//#region src/observable/behaviorSubject.ts\n/**\n* @internal\n* An observable that maintains and provides a \"current value\" to subscribers\n* @see https://www.learnrxjs.io/learn-rxjs/subjects/behaviorsubject\n*/\nfunction behaviorSubject(initialValue) {\n\tlet value = initialValue;\n\tconst observerList = [];\n\tconst addObserver = (observer) => {\n\t\tif (value !== void 0) observer.next(value);\n\t\tobserverList.push(observer);\n\t};\n\tconst removeObserver = (observer) => {\n\t\tobserverList.splice(observerList.indexOf(observer), 1);\n\t};\n\tconst obs = require_observable.observable((observer) => {\n\t\taddObserver(observer);\n\t\treturn () => {\n\t\t\tremoveObserver(observer);\n\t\t};\n\t});\n\tobs.next = (nextValue) => {\n\t\tif (value === nextValue) return;\n\t\tvalue = nextValue;\n\t\tfor (const observer of observerList) observer.next(nextValue);\n\t};\n\tobs.get = () => value;\n\treturn obs;\n}\n\n//#endregion\nObject.defineProperty(exports, 'behaviorSubject', {\n enumerable: true,\n get: function () {\n return behaviorSubject;\n }\n});\nObject.defineProperty(exports, 'distinctUntilChanged', {\n enumerable: true,\n get: function () {\n return distinctUntilChanged;\n }\n});\nObject.defineProperty(exports, 'distinctUntilDeepChanged', {\n enumerable: true,\n get: function () {\n return distinctUntilDeepChanged;\n }\n});\nObject.defineProperty(exports, 'map', {\n enumerable: true,\n get: function () {\n return map;\n }\n});\nObject.defineProperty(exports, 'share', {\n enumerable: true,\n get: function () {\n return share;\n }\n});\nObject.defineProperty(exports, 'tap', {\n enumerable: true,\n get: function () {\n return tap;\n }\n});","const require_observable = require('../observable-B1Nk6r1H.cjs');\nconst require_observable$1 = require('../observable-BVzLuBs6.cjs');\n\nexports.behaviorSubject = require_observable$1.behaviorSubject;\nexports.distinctUntilChanged = require_observable$1.distinctUntilChanged;\nexports.distinctUntilDeepChanged = require_observable$1.distinctUntilDeepChanged;\nexports.isObservable = require_observable.isObservable;\nexports.map = require_observable$1.map;\nexports.observable = require_observable.observable;\nexports.observableToAsyncIterable = require_observable.observableToAsyncIterable;\nexports.observableToPromise = require_observable.observableToPromise;\nexports.share = require_observable$1.share;\nexports.tap = require_observable$1.tap;","const require_chunk = require('./chunk-DWy1uDak.cjs');\nconst __trpc_server_observable = require_chunk.__toESM(require(\"@trpc/server/observable\"));\n\n//#region src/links/internals/createChain.ts\n/** @internal */\nfunction createChain(opts) {\n\treturn (0, __trpc_server_observable.observable)((observer) => {\n\t\tfunction execute(index = 0, op = opts.op) {\n\t\t\tconst next = opts.links[index];\n\t\t\tif (!next) throw new Error(\"No more links to execute - did you forget to add an ending link?\");\n\t\t\tconst subscription = next({\n\t\t\t\top,\n\t\t\t\tnext(nextOp) {\n\t\t\t\t\tconst nextObserver = execute(index + 1, nextOp);\n\t\t\t\t\treturn nextObserver;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn subscription;\n\t\t}\n\t\tconst obs$ = execute();\n\t\treturn obs$.subscribe(observer);\n\t});\n}\n\n//#endregion\n//#region src/links/splitLink.ts\nfunction asArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\nfunction splitLink(opts) {\n\treturn (runtime) => {\n\t\tconst yes = asArray(opts.true).map((link) => link(runtime));\n\t\tconst no = asArray(opts.false).map((link) => link(runtime));\n\t\treturn (props) => {\n\t\t\treturn (0, __trpc_server_observable.observable)((observer) => {\n\t\t\t\tconst links = opts.condition(props.op) ? yes : no;\n\t\t\t\treturn createChain({\n\t\t\t\t\top: props.op,\n\t\t\t\t\tlinks\n\t\t\t\t}).subscribe(observer);\n\t\t\t});\n\t\t};\n\t};\n}\n\n//#endregion\nObject.defineProperty(exports, 'createChain', {\n enumerable: true,\n get: function () {\n return createChain;\n }\n});\nObject.defineProperty(exports, 'splitLink', {\n enumerable: true,\n get: function () {\n return splitLink;\n }\n});","const require_chunk = require('./chunk-DWy1uDak.cjs');\n\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js\nvar require_typeof = require_chunk.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js\"(exports, module) {\n\tfunction _typeof$2(o) {\n\t\t\"@babel/helpers - typeof\";\n\t\treturn module.exports = _typeof$2 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o$1) {\n\t\t\treturn typeof o$1;\n\t\t} : function(o$1) {\n\t\t\treturn o$1 && \"function\" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? \"symbol\" : typeof o$1;\n\t\t}, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof$2(o);\n\t}\n\tmodule.exports = _typeof$2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js\nvar require_toPrimitive = require_chunk.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js\"(exports, module) {\n\tvar _typeof$1 = require_typeof()[\"default\"];\n\tfunction toPrimitive$1(t, r) {\n\t\tif (\"object\" != _typeof$1(t) || !t) return t;\n\t\tvar e = t[Symbol.toPrimitive];\n\t\tif (void 0 !== e) {\n\t\t\tvar i = e.call(t, r || \"default\");\n\t\t\tif (\"object\" != _typeof$1(i)) return i;\n\t\t\tthrow new TypeError(\"@@toPrimitive must return a primitive value.\");\n\t\t}\n\t\treturn (\"string\" === r ? String : Number)(t);\n\t}\n\tmodule.exports = toPrimitive$1, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js\nvar require_toPropertyKey = require_chunk.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js\"(exports, module) {\n\tvar _typeof = require_typeof()[\"default\"];\n\tvar toPrimitive = require_toPrimitive();\n\tfunction toPropertyKey$1(t) {\n\t\tvar i = toPrimitive(t, \"string\");\n\t\treturn \"symbol\" == _typeof(i) ? i : i + \"\";\n\t}\n\tmodule.exports = toPropertyKey$1, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js\nvar require_defineProperty = require_chunk.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js\"(exports, module) {\n\tvar toPropertyKey = require_toPropertyKey();\n\tfunction _defineProperty(e, r, t) {\n\t\treturn (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n\t\t\tvalue: t,\n\t\t\tenumerable: !0,\n\t\t\tconfigurable: !0,\n\t\t\twritable: !0\n\t\t}) : e[r] = t, e;\n\t}\n\tmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js\nvar require_objectSpread2 = require_chunk.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js\"(exports, module) {\n\tvar defineProperty = require_defineProperty();\n\tfunction ownKeys(e, r) {\n\t\tvar t = Object.keys(e);\n\t\tif (Object.getOwnPropertySymbols) {\n\t\t\tvar o = Object.getOwnPropertySymbols(e);\n\t\t\tr && (o = o.filter(function(r$1) {\n\t\t\t\treturn Object.getOwnPropertyDescriptor(e, r$1).enumerable;\n\t\t\t})), t.push.apply(t, o);\n\t\t}\n\t\treturn t;\n\t}\n\tfunction _objectSpread2(e) {\n\t\tfor (var r = 1; r < arguments.length; r++) {\n\t\t\tvar t = null != arguments[r] ? arguments[r] : {};\n\t\t\tr % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) {\n\t\t\t\tdefineProperty(e, r$1, t[r$1]);\n\t\t\t}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) {\n\t\t\t\tObject.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1));\n\t\t\t});\n\t\t}\n\t\treturn e;\n\t}\n\tmodule.exports = _objectSpread2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\nObject.defineProperty(exports, 'require_defineProperty', {\n enumerable: true,\n get: function () {\n return require_defineProperty;\n }\n});\nObject.defineProperty(exports, 'require_objectSpread2', {\n enumerable: true,\n get: function () {\n return require_objectSpread2;\n }\n});","const require_codes = require('./codes-BfZsPdy-.cjs');\n\n//#region src/unstable-core-do-not-import/procedure.ts\nconst procedureTypes = [\n\t\"query\",\n\t\"mutation\",\n\t\"subscription\"\n];\n\n//#endregion\n//#region src/unstable-core-do-not-import/rpc/parseTRPCMessage.ts\n/* istanbul ignore next -- @preserve */\nfunction assertIsObject(obj) {\n\tif (!require_codes.isObject(obj)) throw new Error(\"Not an object\");\n}\n/* istanbul ignore next -- @preserve */\nfunction assertIsProcedureType(obj) {\n\tif (!procedureTypes.includes(obj)) throw new Error(\"Invalid procedure type\");\n}\n/* istanbul ignore next -- @preserve */\nfunction assertIsRequestId(obj) {\n\tif (obj !== null && typeof obj === \"number\" && isNaN(obj) && typeof obj !== \"string\") throw new Error(\"Invalid request id\");\n}\n/* istanbul ignore next -- @preserve */\nfunction assertIsString(obj) {\n\tif (typeof obj !== \"string\") throw new Error(\"Invalid string\");\n}\n/* istanbul ignore next -- @preserve */\nfunction assertIsJSONRPC2OrUndefined(obj) {\n\tif (typeof obj !== \"undefined\" && obj !== \"2.0\") throw new Error(\"Must be JSONRPC 2.0\");\n}\n/** @public */\nfunction parseTRPCMessage(obj, transformer) {\n\tassertIsObject(obj);\n\tconst { id, jsonrpc, method, params } = obj;\n\tassertIsRequestId(id);\n\tassertIsJSONRPC2OrUndefined(jsonrpc);\n\tif (method === \"subscription.stop\") return {\n\t\tid,\n\t\tjsonrpc,\n\t\tmethod\n\t};\n\tassertIsProcedureType(method);\n\tassertIsObject(params);\n\tconst { input: rawInput, path, lastEventId } = params;\n\tassertIsString(path);\n\tif (lastEventId !== void 0) assertIsString(lastEventId);\n\tconst input = transformer.input.deserialize(rawInput);\n\treturn {\n\t\tid,\n\t\tjsonrpc,\n\t\tmethod,\n\t\tparams: {\n\t\t\tinput,\n\t\t\tpath,\n\t\t\tlastEventId\n\t\t}\n\t};\n}\n\n//#endregion\nObject.defineProperty(exports, 'parseTRPCMessage', {\n enumerable: true,\n get: function () {\n return parseTRPCMessage;\n }\n});\nObject.defineProperty(exports, 'procedureTypes', {\n enumerable: true,\n get: function () {\n return procedureTypes;\n }\n});","const require_getErrorShape = require('./getErrorShape-MR4DZeb7.cjs');\nconst require_codes = require('./codes-BfZsPdy-.cjs');\nconst require_tracked = require('./tracked-DX1GMBVX.cjs');\nconst require_observable = require('./observable-B1Nk6r1H.cjs');\n\n//#region src/unstable-core-do-not-import/http/parseConnectionParams.ts\nfunction parseConnectionParamsFromUnknown(parsed) {\n\ttry {\n\t\tif (parsed === null) return null;\n\t\tif (!require_codes.isObject(parsed)) throw new Error(\"Expected object\");\n\t\tconst nonStringValues = Object.entries(parsed).filter(([_key, value]) => typeof value !== \"string\");\n\t\tif (nonStringValues.length > 0) throw new Error(`Expected connectionParams to be string values. Got ${nonStringValues.map(([key, value]) => `${key}: ${typeof value}`).join(\", \")}`);\n\t\treturn parsed;\n\t} catch (cause) {\n\t\tthrow new require_tracked.TRPCError({\n\t\t\tcode: \"PARSE_ERROR\",\n\t\t\tmessage: \"Invalid connection params shape\",\n\t\t\tcause\n\t\t});\n\t}\n}\nfunction parseConnectionParamsFromString(str) {\n\tlet parsed;\n\ttry {\n\t\tparsed = JSON.parse(str);\n\t} catch (cause) {\n\t\tthrow new require_tracked.TRPCError({\n\t\t\tcode: \"PARSE_ERROR\",\n\t\t\tmessage: \"Not JSON-parsable query params\",\n\t\t\tcause\n\t\t});\n\t}\n\treturn parseConnectionParamsFromUnknown(parsed);\n}\n\n//#endregion\n//#region src/unstable-core-do-not-import/http/contentType.ts\nvar import_objectSpread2$1 = require_getErrorShape.__toESM(require_getErrorShape.require_objectSpread2(), 1);\nfunction getAcceptHeader(headers) {\n\tvar _ref, _headers$get;\n\treturn (_ref = headers.get(\"trpc-accept\")) !== null && _ref !== void 0 ? _ref : ((_headers$get = headers.get(\"accept\")) === null || _headers$get === void 0 ? void 0 : _headers$get.split(\",\").some((t) => t.trim() === \"application/jsonl\")) ? \"application/jsonl\" : null;\n}\n/**\n* Memoize a function that takes no arguments\n* @internal\n*/\nfunction memo(fn) {\n\tlet promise = null;\n\tconst sym = Symbol.for(\"@trpc/server/http/memo\");\n\tlet value = sym;\n\treturn {\n\t\tread: async () => {\n\t\t\tvar _promise;\n\t\t\tif (value !== sym) return value;\n\t\t\t(_promise = promise) !== null && _promise !== void 0 || (promise = fn().catch((cause) => {\n\t\t\t\tif (cause instanceof require_tracked.TRPCError) throw cause;\n\t\t\t\tthrow new require_tracked.TRPCError({\n\t\t\t\t\tcode: \"BAD_REQUEST\",\n\t\t\t\t\tmessage: cause instanceof Error ? cause.message : \"Invalid input\",\n\t\t\t\t\tcause\n\t\t\t\t});\n\t\t\t}));\n\t\t\tvalue = await promise;\n\t\t\tpromise = null;\n\t\t\treturn value;\n\t\t},\n\t\tresult: () => {\n\t\t\treturn value !== sym ? value : void 0;\n\t\t}\n\t};\n}\nconst jsonContentTypeHandler = {\n\tisMatch(req) {\n\t\tvar _req$headers$get;\n\t\treturn !!((_req$headers$get = req.headers.get(\"content-type\")) === null || _req$headers$get === void 0 ? void 0 : _req$headers$get.startsWith(\"application/json\"));\n\t},\n\tasync parse(opts) {\n\t\tvar _types$values$next$va;\n\t\tconst { req } = opts;\n\t\tconst isBatchCall = opts.searchParams.get(\"batch\") === \"1\";\n\t\tconst maxBatchSize = opts.maxBatchSize;\n\t\tconst paths = isBatchCall ? opts.path.split(\",\") : [opts.path];\n\t\tif (isBatchCall && typeof maxBatchSize === \"number\" && paths.length > maxBatchSize) throw new require_tracked.TRPCError({\n\t\t\tcode: \"BAD_REQUEST\",\n\t\t\tmessage: `Batch call exceeds maximum size`\n\t\t});\n\t\tconst getInputs = memo(async () => {\n\t\t\tlet inputs = void 0;\n\t\t\tif (req.method === \"GET\") {\n\t\t\t\tconst queryInput = opts.searchParams.get(\"input\");\n\t\t\t\tif (queryInput) inputs = JSON.parse(queryInput);\n\t\t\t} else inputs = await req.json();\n\t\t\tif (inputs === void 0) return require_codes.emptyObject();\n\t\t\tif (!isBatchCall) {\n\t\t\t\tconst result = require_codes.emptyObject();\n\t\t\t\tresult[0] = opts.router._def._config.transformer.input.deserialize(inputs);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tif (!require_codes.isObject(inputs)) throw new require_tracked.TRPCError({\n\t\t\t\tcode: \"BAD_REQUEST\",\n\t\t\t\tmessage: \"\\\"input\\\" needs to be an object when doing a batch call\"\n\t\t\t});\n\t\t\tconst acc = require_codes.emptyObject();\n\t\t\tfor (const index of paths.keys()) {\n\t\t\t\tconst input = inputs[index];\n\t\t\t\tif (input !== void 0) acc[index] = opts.router._def._config.transformer.input.deserialize(input);\n\t\t\t}\n\t\t\treturn acc;\n\t\t});\n\t\tconst calls = await Promise.all(paths.map(async (path, index) => {\n\t\t\tconst procedure = await require_tracked.getProcedureAtPath(opts.router, path);\n\t\t\treturn {\n\t\t\t\tbatchIndex: index,\n\t\t\t\tpath,\n\t\t\t\tprocedure,\n\t\t\t\tgetRawInput: async () => {\n\t\t\t\t\tconst inputs = await getInputs.read();\n\t\t\t\t\tlet input = inputs[index];\n\t\t\t\t\tif ((procedure === null || procedure === void 0 ? void 0 : procedure._def.type) === \"subscription\") {\n\t\t\t\t\t\tvar _ref2, _opts$headers$get;\n\t\t\t\t\t\tconst lastEventId = (_ref2 = (_opts$headers$get = opts.headers.get(\"last-event-id\")) !== null && _opts$headers$get !== void 0 ? _opts$headers$get : opts.searchParams.get(\"lastEventId\")) !== null && _ref2 !== void 0 ? _ref2 : opts.searchParams.get(\"Last-Event-Id\");\n\t\t\t\t\t\tif (lastEventId) if (require_codes.isObject(input)) input = (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, input), {}, { lastEventId });\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar _input;\n\t\t\t\t\t\t\t(_input = input) !== null && _input !== void 0 || (input = { lastEventId });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn input;\n\t\t\t\t},\n\t\t\t\tresult: () => {\n\t\t\t\t\tvar _getInputs$result;\n\t\t\t\t\treturn (_getInputs$result = getInputs.result()) === null || _getInputs$result === void 0 ? void 0 : _getInputs$result[index];\n\t\t\t\t}\n\t\t\t};\n\t\t}));\n\t\tconst types = new Set(calls.map((call) => {\n\t\t\tvar _call$procedure;\n\t\t\treturn (_call$procedure = call.procedure) === null || _call$procedure === void 0 ? void 0 : _call$procedure._def.type;\n\t\t}).filter(Boolean));\n\t\t/* istanbul ignore if -- @preserve */\n\t\tif (types.size > 1) throw new require_tracked.TRPCError({\n\t\t\tcode: \"BAD_REQUEST\",\n\t\t\tmessage: `Cannot mix procedure types in call: ${Array.from(types).join(\", \")}`\n\t\t});\n\t\tconst type = (_types$values$next$va = types.values().next().value) !== null && _types$values$next$va !== void 0 ? _types$values$next$va : \"unknown\";\n\t\tconst connectionParamsStr = opts.searchParams.get(\"connectionParams\");\n\t\tconst info = {\n\t\t\tisBatchCall,\n\t\t\taccept: getAcceptHeader(req.headers),\n\t\t\tcalls,\n\t\t\ttype,\n\t\t\tconnectionParams: connectionParamsStr === null ? null : parseConnectionParamsFromString(connectionParamsStr),\n\t\t\tsignal: req.signal,\n\t\t\turl: opts.url\n\t\t};\n\t\treturn info;\n\t}\n};\nconst formDataContentTypeHandler = {\n\tisMatch(req) {\n\t\tvar _req$headers$get2;\n\t\treturn !!((_req$headers$get2 = req.headers.get(\"content-type\")) === null || _req$headers$get2 === void 0 ? void 0 : _req$headers$get2.startsWith(\"multipart/form-data\"));\n\t},\n\tasync parse(opts) {\n\t\tconst { req } = opts;\n\t\tif (req.method !== \"POST\") throw new require_tracked.TRPCError({\n\t\t\tcode: \"METHOD_NOT_SUPPORTED\",\n\t\t\tmessage: \"Only POST requests are supported for multipart/form-data requests\"\n\t\t});\n\t\tconst getInputs = memo(async () => {\n\t\t\tconst fd = await req.formData();\n\t\t\treturn fd;\n\t\t});\n\t\tconst procedure = await require_tracked.getProcedureAtPath(opts.router, opts.path);\n\t\treturn {\n\t\t\taccept: null,\n\t\t\tcalls: [{\n\t\t\t\tbatchIndex: 0,\n\t\t\t\tpath: opts.path,\n\t\t\t\tgetRawInput: getInputs.read,\n\t\t\t\tresult: getInputs.result,\n\t\t\t\tprocedure\n\t\t\t}],\n\t\t\tisBatchCall: false,\n\t\t\ttype: \"mutation\",\n\t\t\tconnectionParams: null,\n\t\t\tsignal: req.signal,\n\t\t\turl: opts.url\n\t\t};\n\t}\n};\nconst octetStreamContentTypeHandler = {\n\tisMatch(req) {\n\t\tvar _req$headers$get3;\n\t\treturn !!((_req$headers$get3 = req.headers.get(\"content-type\")) === null || _req$headers$get3 === void 0 ? void 0 : _req$headers$get3.startsWith(\"application/octet-stream\"));\n\t},\n\tasync parse(opts) {\n\t\tconst { req } = opts;\n\t\tif (req.method !== \"POST\") throw new require_tracked.TRPCError({\n\t\t\tcode: \"METHOD_NOT_SUPPORTED\",\n\t\t\tmessage: \"Only POST requests are supported for application/octet-stream requests\"\n\t\t});\n\t\tconst getInputs = memo(async () => {\n\t\t\treturn req.body;\n\t\t});\n\t\treturn {\n\t\t\tcalls: [{\n\t\t\t\tbatchIndex: 0,\n\t\t\t\tpath: opts.path,\n\t\t\t\tgetRawInput: getInputs.read,\n\t\t\t\tresult: getInputs.result,\n\t\t\t\tprocedure: await require_tracked.getProcedureAtPath(opts.router, opts.path)\n\t\t\t}],\n\t\t\tisBatchCall: false,\n\t\t\taccept: null,\n\t\t\ttype: \"mutation\",\n\t\t\tconnectionParams: null,\n\t\t\tsignal: req.signal,\n\t\t\turl: opts.url\n\t\t};\n\t}\n};\nconst handlers = [\n\tjsonContentTypeHandler,\n\tformDataContentTypeHandler,\n\toctetStreamContentTypeHandler\n];\nfunction getContentTypeHandler(req) {\n\tconst handler = handlers.find((handler$1) => handler$1.isMatch(req));\n\tif (handler) return handler;\n\tif (!handler && req.method === \"GET\") return jsonContentTypeHandler;\n\tthrow new require_tracked.TRPCError({\n\t\tcode: \"UNSUPPORTED_MEDIA_TYPE\",\n\t\tmessage: req.headers.has(\"content-type\") ? `Unsupported content-type \"${req.headers.get(\"content-type\")}` : \"Missing content-type header\"\n\t});\n}\nasync function getRequestInfo(opts) {\n\tconst handler = getContentTypeHandler(opts.req);\n\treturn await handler.parse(opts);\n}\n\n//#endregion\n//#region src/unstable-core-do-not-import/http/abortError.ts\nfunction isAbortError(error) {\n\treturn require_codes.isObject(error) && error[\"name\"] === \"AbortError\";\n}\nfunction throwAbortError(message = \"AbortError\") {\n\tthrow new DOMException(message, \"AbortError\");\n}\n\n//#endregion\n//#region src/vendor/is-plain-object.ts\n/*!\n* is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n*\n* Copyright (c) 2014-2017, Jon Schlinkert.\n* Released under the MIT License.\n*/\nfunction isObject$1(o) {\n\treturn Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction isPlainObject(o) {\n\tvar ctor, prot;\n\tif (isObject$1(o) === false) return false;\n\tctor = o.constructor;\n\tif (ctor === void 0) return true;\n\tprot = ctor.prototype;\n\tif (isObject$1(prot) === false) return false;\n\tif (prot.hasOwnProperty(\"isPrototypeOf\") === false) return false;\n\treturn true;\n}\n\n//#endregion\n//#region src/vendor/unpromise/unpromise.ts\nvar import_defineProperty = require_getErrorShape.__toESM(require_getErrorShape.require_defineProperty(), 1);\nlet _Symbol$toStringTag;\n/** Memory safe (weakmapped) cache of the ProxyPromise for each Promise,\n* which is retained for the lifetime of the original Promise.\n*/\nconst subscribableCache = /* @__PURE__ */ new WeakMap();\n/** A NOOP function allowing a consistent interface for settled\n* SubscribedPromises (settled promises are not subscribed - they resolve\n* immediately). */\nconst NOOP = () => {};\n_Symbol$toStringTag = Symbol.toStringTag;\n/**\n* Every `Promise<T>` can be shadowed by a single `ProxyPromise<T>`. It is\n* created once, cached and reused throughout the lifetime of the Promise. Get a\n* Promise's ProxyPromise using `Unpromise.proxy(promise)`.\n*\n* The `ProxyPromise<T>` attaches handlers to the original `Promise<T>`\n* `.then()` and `.catch()` just once. Promises derived from it use a\n* subscription- (and unsubscription-) based mechanism that monitors these\n* handlers.\n*\n* Every time you call `.subscribe()`, `.then()` `.catch()` or `.finally()` on a\n* `ProxyPromise<T>` it returns a `SubscribedPromise<T>` having an additional\n* `unsubscribe()` method. Calling `unsubscribe()` detaches reference chains\n* from the original, potentially long-lived Promise, eliminating memory leaks.\n*\n* This approach can eliminate the memory leaks that otherwise come about from\n* repeated `race()` or `any()` calls invoking `.then()` and `.catch()` multiple\n* times on the same long-lived native Promise (subscriptions which can never be\n* cleaned up).\n*\n* `Unpromise.race(promises)` is a reference implementation of `Promise.race`\n* avoiding memory leaks when using long-lived unsettled Promises.\n*\n* `Unpromise.any(promises)` is a reference implementation of `Promise.any`\n* avoiding memory leaks when using long-lived unsettled Promises.\n*\n* `Unpromise.resolve(promise)` returns an ephemeral `SubscribedPromise<T>` for\n* any given `Promise<T>` facilitating arbitrary async/await patterns. Behind\n* the scenes, `resolve` is implemented simply as\n* `Unpromise.proxy(promise).subscribe()`. Don't forget to call `.unsubscribe()`\n* to tidy up!\n*\n*/\nvar Unpromise = class Unpromise {\n\tconstructor(arg) {\n\t\t(0, import_defineProperty.default)(this, \"promise\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"subscribers\", []);\n\t\t(0, import_defineProperty.default)(this, \"settlement\", null);\n\t\t(0, import_defineProperty.default)(this, _Symbol$toStringTag, \"Unpromise\");\n\t\tif (typeof arg === \"function\") this.promise = new Promise(arg);\n\t\telse this.promise = arg;\n\t\tconst thenReturn = this.promise.then((value) => {\n\t\t\tconst { subscribers } = this;\n\t\t\tthis.subscribers = null;\n\t\t\tthis.settlement = {\n\t\t\t\tstatus: \"fulfilled\",\n\t\t\t\tvalue\n\t\t\t};\n\t\t\tsubscribers === null || subscribers === void 0 || subscribers.forEach(({ resolve }) => {\n\t\t\t\tresolve(value);\n\t\t\t});\n\t\t});\n\t\tif (\"catch\" in thenReturn) thenReturn.catch((reason) => {\n\t\t\tconst { subscribers } = this;\n\t\t\tthis.subscribers = null;\n\t\t\tthis.settlement = {\n\t\t\t\tstatus: \"rejected\",\n\t\t\t\treason\n\t\t\t};\n\t\t\tsubscribers === null || subscribers === void 0 || subscribers.forEach(({ reject }) => {\n\t\t\t\treject(reason);\n\t\t\t});\n\t\t});\n\t}\n\t/** Create a promise that mitigates uncontrolled subscription to a long-lived\n\t* Promise via .then() and .catch() - otherwise a source of memory leaks.\n\t*\n\t* The returned promise has an `unsubscribe()` method which can be called when\n\t* the Promise is no longer being tracked by application logic, and which\n\t* ensures that there is no reference chain from the original promise to the\n\t* new one, and therefore no memory leak.\n\t*\n\t* If original promise has not yet settled, this adds a new unique promise\n\t* that listens to then/catch events, along with an `unsubscribe()` method to\n\t* detach it.\n\t*\n\t* If original promise has settled, then creates a new Promise.resolve() or\n\t* Promise.reject() and provided unsubscribe is a noop.\n\t*\n\t* If you call `unsubscribe()` before the returned Promise has settled, it\n\t* will never settle.\n\t*/\n\tsubscribe() {\n\t\tlet promise;\n\t\tlet unsubscribe;\n\t\tconst { settlement } = this;\n\t\tif (settlement === null) {\n\t\t\tif (this.subscribers === null) throw new Error(\"Unpromise settled but still has subscribers\");\n\t\t\tconst subscriber = withResolvers();\n\t\t\tthis.subscribers = listWithMember(this.subscribers, subscriber);\n\t\t\tpromise = subscriber.promise;\n\t\t\tunsubscribe = () => {\n\t\t\t\tif (this.subscribers !== null) this.subscribers = listWithoutMember(this.subscribers, subscriber);\n\t\t\t};\n\t\t} else {\n\t\t\tconst { status } = settlement;\n\t\t\tif (status === \"fulfilled\") promise = Promise.resolve(settlement.value);\n\t\t\telse promise = Promise.reject(settlement.reason);\n\t\t\tunsubscribe = NOOP;\n\t\t}\n\t\treturn Object.assign(promise, { unsubscribe });\n\t}\n\t/** STANDARD PROMISE METHODS (but returning a SubscribedPromise) */\n\tthen(onfulfilled, onrejected) {\n\t\tconst subscribed = this.subscribe();\n\t\tconst { unsubscribe } = subscribed;\n\t\treturn Object.assign(subscribed.then(onfulfilled, onrejected), { unsubscribe });\n\t}\n\tcatch(onrejected) {\n\t\tconst subscribed = this.subscribe();\n\t\tconst { unsubscribe } = subscribed;\n\t\treturn Object.assign(subscribed.catch(onrejected), { unsubscribe });\n\t}\n\tfinally(onfinally) {\n\t\tconst subscribed = this.subscribe();\n\t\tconst { unsubscribe } = subscribed;\n\t\treturn Object.assign(subscribed.finally(onfinally), { unsubscribe });\n\t}\n\t/** Unpromise STATIC METHODS */\n\t/** Create or Retrieve the proxy Unpromise (a re-used Unpromise for the VM lifetime\n\t* of the provided Promise reference) */\n\tstatic proxy(promise) {\n\t\tconst cached = Unpromise.getSubscribablePromise(promise);\n\t\treturn typeof cached !== \"undefined\" ? cached : Unpromise.createSubscribablePromise(promise);\n\t}\n\t/** Create and store an Unpromise keyed by an original Promise. */\n\tstatic createSubscribablePromise(promise) {\n\t\tconst created = new Unpromise(promise);\n\t\tsubscribableCache.set(promise, created);\n\t\tsubscribableCache.set(created, created);\n\t\treturn created;\n\t}\n\t/** Retrieve a previously-created Unpromise keyed by an original Promise. */\n\tstatic getSubscribablePromise(promise) {\n\t\treturn subscribableCache.get(promise);\n\t}\n\t/** Promise STATIC METHODS */\n\t/** Lookup the Unpromise for this promise, and derive a SubscribedPromise from\n\t* it (that can be later unsubscribed to eliminate Memory leaks) */\n\tstatic resolve(value) {\n\t\tconst promise = typeof value === \"object\" && value !== null && \"then\" in value && typeof value.then === \"function\" ? value : Promise.resolve(value);\n\t\treturn Unpromise.proxy(promise).subscribe();\n\t}\n\tstatic async any(values) {\n\t\tconst valuesArray = Array.isArray(values) ? values : [...values];\n\t\tconst subscribedPromises = valuesArray.map(Unpromise.resolve);\n\t\ttry {\n\t\t\treturn await Promise.any(subscribedPromises);\n\t\t} finally {\n\t\t\tsubscribedPromises.forEach(({ unsubscribe }) => {\n\t\t\t\tunsubscribe();\n\t\t\t});\n\t\t}\n\t}\n\tstatic async race(values) {\n\t\tconst valuesArray = Array.isArray(values) ? values : [...values];\n\t\tconst subscribedPromises = valuesArray.map(Unpromise.resolve);\n\t\ttry {\n\t\t\treturn await Promise.race(subscribedPromises);\n\t\t} finally {\n\t\t\tsubscribedPromises.forEach(({ unsubscribe }) => {\n\t\t\t\tunsubscribe();\n\t\t\t});\n\t\t}\n\t}\n\t/** Create a race of SubscribedPromises that will fulfil to a single winning\n\t* Promise (in a 1-Tuple). Eliminates memory leaks from long-lived promises\n\t* accumulating .then() and .catch() subscribers. Allows simple logic to\n\t* consume the result, like...\n\t* ```ts\n\t* const [ winner ] = await Unpromise.race([ promiseA, promiseB ]);\n\t* if(winner === promiseB){\n\t* const result = await promiseB;\n\t* // do the thing\n\t* }\n\t* ```\n\t* */\n\tstatic async raceReferences(promises) {\n\t\tconst selfPromises = promises.map(resolveSelfTuple);\n\t\ttry {\n\t\t\treturn await Promise.race(selfPromises);\n\t\t} finally {\n\t\t\tfor (const promise of selfPromises) promise.unsubscribe();\n\t\t}\n\t}\n};\n/** Promises a 1-tuple containing the original promise when it resolves. Allows\n* awaiting the eventual Promise ***reference*** (easy to destructure and\n* exactly compare with ===). Avoids resolving to the Promise ***value*** (which\n* may be ambiguous and therefore hard to identify as the winner of a race).\n* You can call unsubscribe on the Promise to mitigate memory leaks.\n* */\nfunction resolveSelfTuple(promise) {\n\treturn Unpromise.proxy(promise).then(() => [promise]);\n}\n/** VENDORED (Future) PROMISE UTILITIES */\n/** Reference implementation of https://github.com/tc39/proposal-promise-with-resolvers */\nfunction withResolvers() {\n\tlet resolve;\n\tlet reject;\n\tconst promise = new Promise((_resolve, _reject) => {\n\t\tresolve = _resolve;\n\t\treject = _reject;\n\t});\n\treturn {\n\t\tpromise,\n\t\tresolve,\n\t\treject\n\t};\n}\n/** IMMUTABLE LIST OPERATIONS */\nfunction listWithMember(arr, member) {\n\treturn [...arr, member];\n}\nfunction listWithoutIndex(arr, index) {\n\treturn [...arr.slice(0, index), ...arr.slice(index + 1)];\n}\nfunction listWithoutMember(arr, member) {\n\tconst index = arr.indexOf(member);\n\tif (index !== -1) return listWithoutIndex(arr, index);\n\treturn arr;\n}\n\n//#endregion\n//#region src/unstable-core-do-not-import/stream/utils/disposable.ts\nvar _Symbol, _Symbol$dispose, _Symbol2, _Symbol2$asyncDispose;\n(_Symbol$dispose = (_Symbol = Symbol).dispose) !== null && _Symbol$dispose !== void 0 || (_Symbol.dispose = Symbol());\n(_Symbol2$asyncDispose = (_Symbol2 = Symbol).asyncDispose) !== null && _Symbol2$asyncDispose !== void 0 || (_Symbol2.asyncDispose = Symbol());\n/**\n* Takes a value and a dispose function and returns a new object that implements the Disposable interface.\n* The returned object is the original value augmented with a Symbol.dispose method.\n* @param thing The value to make disposable\n* @param dispose Function to call when disposing the resource\n* @returns The original value with Symbol.dispose method added\n*/\nfunction makeResource(thing, dispose) {\n\tconst it = thing;\n\tconst existing = it[Symbol.dispose];\n\tit[Symbol.dispose] = () => {\n\t\tdispose();\n\t\texisting === null || existing === void 0 || existing();\n\t};\n\treturn it;\n}\n/**\n* Takes a value and an async dispose function and returns a new object that implements the AsyncDisposable interface.\n* The returned object is the original value augmented with a Symbol.asyncDispose method.\n* @param thing The value to make async disposable\n* @param dispose Async function to call when disposing the resource\n* @returns The original value with Symbol.asyncDispose method added\n*/\nfunction makeAsyncResource(thing, dispose) {\n\tconst it = thing;\n\tconst existing = it[Symbol.asyncDispose];\n\tit[Symbol.asyncDispose] = async () => {\n\t\tawait dispose();\n\t\tawait (existing === null || existing === void 0 ? void 0 : existing());\n\t};\n\treturn it;\n}\n\n//#endregion\n//#region src/unstable-core-do-not-import/stream/utils/timerResource.ts\nconst disposablePromiseTimerResult = Symbol();\nfunction timerResource(ms) {\n\tlet timer = null;\n\treturn makeResource({ start() {\n\t\tif (timer) throw new Error(\"Timer already started\");\n\t\tconst promise = new Promise((resolve) => {\n\t\t\ttimer = setTimeout(() => resolve(disposablePromiseTimerResult), ms);\n\t\t});\n\t\treturn promise;\n\t} }, () => {\n\t\tif (timer) clearTimeout(timer);\n\t});\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/usingCtx.js\nvar require_usingCtx = require_getErrorShape.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/usingCtx.js\"(exports, module) {\n\tfunction _usingCtx() {\n\t\tvar r = \"function\" == typeof SuppressedError ? SuppressedError : function(r$1, e$1) {\n\t\t\tvar n$1 = Error();\n\t\t\treturn n$1.name = \"SuppressedError\", n$1.error = r$1, n$1.suppressed = e$1, n$1;\n\t\t}, e = {}, n = [];\n\t\tfunction using(r$1, e$1) {\n\t\t\tif (null != e$1) {\n\t\t\t\tif (Object(e$1) !== e$1) throw new TypeError(\"using declarations can only be used with objects, functions, null, or undefined.\");\n\t\t\t\tif (r$1) var o = e$1[Symbol.asyncDispose || Symbol[\"for\"](\"Symbol.asyncDispose\")];\n\t\t\t\tif (void 0 === o && (o = e$1[Symbol.dispose || Symbol[\"for\"](\"Symbol.dispose\")], r$1)) var t = o;\n\t\t\t\tif (\"function\" != typeof o) throw new TypeError(\"Object is not disposable.\");\n\t\t\t\tt && (o = function o$1() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tt.call(e$1);\n\t\t\t\t\t} catch (r$2) {\n\t\t\t\t\t\treturn Promise.reject(r$2);\n\t\t\t\t\t}\n\t\t\t\t}), n.push({\n\t\t\t\t\tv: e$1,\n\t\t\t\t\td: o,\n\t\t\t\t\ta: r$1\n\t\t\t\t});\n\t\t\t} else r$1 && n.push({\n\t\t\t\td: e$1,\n\t\t\t\ta: r$1\n\t\t\t});\n\t\t\treturn e$1;\n\t\t}\n\t\treturn {\n\t\t\te,\n\t\t\tu: using.bind(null, !1),\n\t\t\ta: using.bind(null, !0),\n\t\t\td: function d() {\n\t\t\t\tvar o, t = this.e, s = 0;\n\t\t\t\tfunction next() {\n\t\t\t\t\tfor (; o = n.pop();) try {\n\t\t\t\t\t\tif (!o.a && 1 === s) return s = 0, n.push(o), Promise.resolve().then(next);\n\t\t\t\t\t\tif (o.d) {\n\t\t\t\t\t\t\tvar r$1 = o.d.call(o.v);\n\t\t\t\t\t\t\tif (o.a) return s |= 2, Promise.resolve(r$1).then(next, err);\n\t\t\t\t\t\t} else s |= 1;\n\t\t\t\t\t} catch (r$2) {\n\t\t\t\t\t\treturn err(r$2);\n\t\t\t\t\t}\n\t\t\t\t\tif (1 === s) return t !== e ? Promise.reject(t) : Promise.resolve();\n\t\t\t\t\tif (t !== e) throw t;\n\t\t\t\t}\n\t\t\t\tfunction err(n$1) {\n\t\t\t\t\treturn t = t !== e ? new r(n$1, t) : n$1, next();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t}\n\t\t};\n\t}\n\tmodule.exports = _usingCtx, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/OverloadYield.js\nvar require_OverloadYield = require_getErrorShape.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/OverloadYield.js\"(exports, module) {\n\tfunction _OverloadYield(e, d) {\n\t\tthis.v = e, this.k = d;\n\t}\n\tmodule.exports = _OverloadYield, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/awaitAsyncGenerator.js\nvar require_awaitAsyncGenerator = require_getErrorShape.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/awaitAsyncGenerator.js\"(exports, module) {\n\tvar OverloadYield$2 = require_OverloadYield();\n\tfunction _awaitAsyncGenerator$5(e) {\n\t\treturn new OverloadYield$2(e, 0);\n\t}\n\tmodule.exports = _awaitAsyncGenerator$5, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/wrapAsyncGenerator.js\nvar require_wrapAsyncGenerator = require_getErrorShape.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/wrapAsyncGenerator.js\"(exports, module) {\n\tvar OverloadYield$1 = require_OverloadYield();\n\tfunction _wrapAsyncGenerator$6(e) {\n\t\treturn function() {\n\t\t\treturn new AsyncGenerator(e.apply(this, arguments));\n\t\t};\n\t}\n\tfunction AsyncGenerator(e) {\n\t\tvar r, t;\n\t\tfunction resume(r$1, t$1) {\n\t\t\ttry {\n\t\t\t\tvar n = e[r$1](t$1), o = n.value, u = o instanceof OverloadYield$1;\n\t\t\t\tPromise.resolve(u ? o.v : o).then(function(t$2) {\n\t\t\t\t\tif (u) {\n\t\t\t\t\t\tvar i = \"return\" === r$1 ? \"return\" : \"next\";\n\t\t\t\t\t\tif (!o.k || t$2.done) return resume(i, t$2);\n\t\t\t\t\t\tt$2 = e[i](t$2).value;\n\t\t\t\t\t}\n\t\t\t\t\tsettle(n.done ? \"return\" : \"normal\", t$2);\n\t\t\t\t}, function(e$1) {\n\t\t\t\t\tresume(\"throw\", e$1);\n\t\t\t\t});\n\t\t\t} catch (e$1) {\n\t\t\t\tsettle(\"throw\", e$1);\n\t\t\t}\n\t\t}\n\t\tfunction settle(e$1, n) {\n\t\t\tswitch (e$1) {\n\t\t\t\tcase \"return\":\n\t\t\t\t\tr.resolve({\n\t\t\t\t\t\tvalue: n,\n\t\t\t\t\t\tdone: !0\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"throw\":\n\t\t\t\t\tr.reject(n);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: r.resolve({\n\t\t\t\t\tvalue: n,\n\t\t\t\t\tdone: !1\n\t\t\t\t});\n\t\t\t}\n\t\t\t(r = r.next) ? resume(r.key, r.arg) : t = null;\n\t\t}\n\t\tthis._invoke = function(e$1, n) {\n\t\t\treturn new Promise(function(o, u) {\n\t\t\t\tvar i = {\n\t\t\t\t\tkey: e$1,\n\t\t\t\t\targ: n,\n\t\t\t\t\tresolve: o,\n\t\t\t\t\treject: u,\n\t\t\t\t\tnext: null\n\t\t\t\t};\n\t\t\t\tt ? t = t.next = i : (r = t = i, resume(e$1, n));\n\t\t\t});\n\t\t}, \"function\" != typeof e[\"return\"] && (this[\"return\"] = void 0);\n\t}\n\tAsyncGenerator.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function() {\n\t\treturn this;\n\t}, AsyncGenerator.prototype.next = function(e) {\n\t\treturn this._invoke(\"next\", e);\n\t}, AsyncGenerator.prototype[\"throw\"] = function(e) {\n\t\treturn this._invoke(\"throw\", e);\n\t}, AsyncGenerator.prototype[\"return\"] = function(e) {\n\t\treturn this._invoke(\"return\", e);\n\t};\n\tmodule.exports = _wrapAsyncGenerator$6, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region src/unstable-core-do-not-import/stream/utils/asyncIterable.ts\nvar import_usingCtx$4 = require_getErrorShape.__toESM(require_usingCtx(), 1);\nvar import_awaitAsyncGenerator$4 = require_getErrorShape.__toESM(require_awaitAsyncGenerator(), 1);\nvar import_wrapAsyncGenerator$5 = require_getErrorShape.__toESM(require_wrapAsyncGenerator(), 1);\nfunction iteratorResource(iterable) {\n\tconst iterator = iterable[Symbol.asyncIterator]();\n\tif (iterator[Symbol.asyncDispose]) return iterator;\n\treturn makeAsyncResource(iterator, async () => {\n\t\tvar _iterator$return;\n\t\tawait ((_iterator$return = iterator.return) === null || _iterator$return === void 0 ? void 0 : _iterator$return.call(iterator));\n\t});\n}\n/**\n* Derives a new {@link AsyncGenerator} based of {@link iterable}, that yields its first\n* {@link count} values. Then, a grace period of {@link gracePeriodMs} is started in which further\n* values may still come through. After this period, the generator aborts.\n*/\nfunction takeWithGrace(_x, _x2) {\n\treturn _takeWithGrace.apply(this, arguments);\n}\nfunction _takeWithGrace() {\n\t_takeWithGrace = (0, import_wrapAsyncGenerator$5.default)(function* (iterable, opts) {\n\t\ttry {\n\t\t\tvar _usingCtx$1 = (0, import_usingCtx$4.default)();\n\t\t\tconst iterator = _usingCtx$1.a(iteratorResource(iterable));\n\t\t\tlet result;\n\t\t\tconst timer = _usingCtx$1.u(timerResource(opts.gracePeriodMs));\n\t\t\tlet count = opts.count;\n\t\t\tlet timerPromise = new Promise(() => {});\n\t\t\twhile (true) {\n\t\t\t\tresult = yield (0, import_awaitAsyncGenerator$4.default)(Unpromise.race([iterator.next(), timerPromise]));\n\t\t\t\tif (result === disposablePromiseTimerResult) throwAbortError();\n\t\t\t\tif (result.done) return result.value;\n\t\t\t\tyield result.value;\n\t\t\t\tif (--count === 0) timerPromise = timer.start();\n\t\t\t\tresult = null;\n\t\t\t}\n\t\t} catch (_) {\n\t\t\t_usingCtx$1.e = _;\n\t\t} finally {\n\t\t\tyield (0, import_awaitAsyncGenerator$4.default)(_usingCtx$1.d());\n\t\t}\n\t});\n\treturn _takeWithGrace.apply(this, arguments);\n}\n\n//#endregion\n//#region src/unstable-core-do-not-import/stream/utils/createDeferred.ts\nfunction createDeferred() {\n\tlet resolve;\n\tlet reject;\n\tconst promise = new Promise((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\treturn {\n\t\tpromise,\n\t\tresolve,\n\t\treject\n\t};\n}\n\n//#endregion\n//#region src/unstable-core-do-not-import/stream/utils/mergeAsyncIterables.ts\nvar import_usingCtx$3 = require_getErrorShape.__toESM(require_usingCtx(), 1);\nvar import_awaitAsyncGenerator$3 = require_getErrorShape.__toESM(require_awaitAsyncGenerator(), 1);\nvar import_wrapAsyncGenerator$4 = require_getErrorShape.__toESM(require_wrapAsyncGenerator(), 1);\nfunction createManagedIterator(iterable, onResult) {\n\tconst iterator = iterable[Symbol.asyncIterator]();\n\tlet state = \"idle\";\n\tfunction cleanup() {\n\t\tstate = \"done\";\n\t\tonResult = () => {};\n\t}\n\tfunction pull() {\n\t\tif (state !== \"idle\") return;\n\t\tstate = \"pending\";\n\t\tconst next = iterator.next();\n\t\tnext.then((result) => {\n\t\t\tif (result.done) {\n\t\t\t\tstate = \"done\";\n\t\t\t\tonResult({\n\t\t\t\t\tstatus: \"return\",\n\t\t\t\t\tvalue: result.value\n\t\t\t\t});\n\t\t\t\tcleanup();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tstate = \"idle\";\n\t\t\tonResult({\n\t\t\t\tstatus: \"yield\",\n\t\t\t\tvalue: result.value\n\t\t\t});\n\t\t}).catch((cause) => {\n\t\t\tonResult({\n\t\t\t\tstatus: \"error\",\n\t\t\t\terror: cause\n\t\t\t});\n\t\t\tcleanup();\n\t\t});\n\t}\n\treturn {\n\t\tpull,\n\t\tdestroy: async () => {\n\t\t\tvar _iterator$return;\n\t\t\tcleanup();\n\t\t\tawait ((_iterator$return = iterator.return) === null || _iterator$return === void 0 ? void 0 : _iterator$return.call(iterator));\n\t\t}\n\t};\n}\n/**\n* Creates a new async iterable that merges multiple async iterables into a single stream.\n* Values from the input iterables are yielded in the order they resolve, similar to Promise.race().\n*\n* New iterables can be added dynamically using the returned {@link MergedAsyncIterables.add} method, even after iteration has started.\n*\n* If any of the input iterables throws an error, that error will be propagated through the merged stream.\n* Other iterables will not continue to be processed.\n*\n* @template TYield The type of values yielded by the input iterables\n*/\nfunction mergeAsyncIterables() {\n\tlet state = \"idle\";\n\tlet flushSignal = createDeferred();\n\t/**\n\t* used while {@link state} is `idle`\n\t*/\n\tconst iterables = [];\n\t/**\n\t* used while {@link state} is `pending`\n\t*/\n\tconst iterators = /* @__PURE__ */ new Set();\n\tconst buffer = [];\n\tfunction initIterable(iterable) {\n\t\tif (state !== \"pending\") return;\n\t\tconst iterator = createManagedIterator(iterable, (result) => {\n\t\t\tif (state !== \"pending\") return;\n\t\t\tswitch (result.status) {\n\t\t\t\tcase \"yield\":\n\t\t\t\t\tbuffer.push([iterator, result]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"return\":\n\t\t\t\t\titerators.delete(iterator);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"error\":\n\t\t\t\t\tbuffer.push([iterator, result]);\n\t\t\t\t\titerators.delete(iterator);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tflushSignal.resolve();\n\t\t});\n\t\titerators.add(iterator);\n\t\titerator.pull();\n\t}\n\treturn {\n\t\tadd(iterable) {\n\t\t\tswitch (state) {\n\t\t\t\tcase \"idle\":\n\t\t\t\t\titerables.push(iterable);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pending\":\n\t\t\t\t\tinitIterable(iterable);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"done\": break;\n\t\t\t}\n\t\t},\n\t\t[Symbol.asyncIterator]() {\n\t\t\treturn (0, import_wrapAsyncGenerator$4.default)(function* () {\n\t\t\t\ttry {\n\t\t\t\t\tvar _usingCtx$1 = (0, import_usingCtx$3.default)();\n\t\t\t\t\tif (state !== \"idle\") throw new Error(\"Cannot iterate twice\");\n\t\t\t\t\tstate = \"pending\";\n\t\t\t\t\tconst _finally = _usingCtx$1.a(makeAsyncResource({}, async () => {\n\t\t\t\t\t\tstate = \"done\";\n\t\t\t\t\t\tconst errors = [];\n\t\t\t\t\t\tawait Promise.all(Array.from(iterators.values()).map(async (it) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait it.destroy();\n\t\t\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\t\t\terrors.push(cause);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}));\n\t\t\t\t\t\tbuffer.length = 0;\n\t\t\t\t\t\titerators.clear();\n\t\t\t\t\t\tflushSignal.resolve();\n\t\t\t\t\t\tif (errors.length > 0) throw new AggregateError(errors);\n\t\t\t\t\t}));\n\t\t\t\t\twhile (iterables.length > 0) initIterable(iterables.shift());\n\t\t\t\t\twhile (iterators.size > 0) {\n\t\t\t\t\t\tyield (0, import_awaitAsyncGenerator$3.default)(flushSignal.promise);\n\t\t\t\t\t\twhile (buffer.length > 0) {\n\t\t\t\t\t\t\tconst [iterator, result] = buffer.shift();\n\t\t\t\t\t\t\tswitch (result.status) {\n\t\t\t\t\t\t\t\tcase \"yield\":\n\t\t\t\t\t\t\t\t\tyield result.value;\n\t\t\t\t\t\t\t\t\titerator.pull();\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"error\": throw result.error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tflushSignal = createDeferred();\n\t\t\t\t\t}\n\t\t\t\t} catch (_) {\n\t\t\t\t\t_usingCtx$1.e = _;\n\t\t\t\t} finally {\n\t\t\t\t\tyield (0, import_awaitAsyncGenerator$3.default)(_usingCtx$1.d());\n\t\t\t\t}\n\t\t\t})();\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/unstable-core-do-not-import/stream/utils/readableStreamFrom.ts\n/**\n* Creates a ReadableStream from an AsyncIterable.\n*\n* @param iterable - The source AsyncIterable to stream from\n* @returns A ReadableStream that yields values from the AsyncIterable\n*/\nfunction readableStreamFrom(iterable) {\n\tconst iterator = iterable[Symbol.asyncIterator]();\n\treturn new ReadableStream({\n\t\tasync cancel() {\n\t\t\tvar _iterator$return;\n\t\t\tawait ((_iterator$return = iterator.return) === null || _iterator$return === void 0 ? void 0 : _iterator$return.call(iterator));\n\t\t},\n\t\tasync pull(controller) {\n\t\t\tconst result = await iterator.next();\n\t\t\tif (result.done) {\n\t\t\t\tcontroller.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcontroller.enqueue(result.value);\n\t\t}\n\t});\n}\n\n//#endregion\n//#region src/unstable-core-do-not-import/stream/utils/withPing.ts\nvar import_usingCtx$2 = require_getErrorShape.__toESM(require_usingCtx(), 1);\nvar import_awaitAsyncGenerator$2 = require_getErrorShape.__toESM(require_awaitAsyncGenerator(), 1);\nvar import_wrapAsyncGenerator$3 = require_getErrorShape.__toESM(require_wrapAsyncGenerator(), 1);\nconst PING_SYM = Symbol(\"ping\");\n/**\n* Derives a new {@link AsyncGenerator} based of {@link iterable}, that yields {@link PING_SYM}\n* whenever no value has been yielded for {@link pingIntervalMs}.\n*/\nfunction withPing(_x, _x2) {\n\treturn _withPing.apply(this, arguments);\n}\nfunction _withPing() {\n\t_withPing = (0, import_wrapAsyncGenerator$3.default)(function* (iterable, pingIntervalMs) {\n\t\ttry {\n\t\t\tvar _usingCtx$1 = (0, import_usingCtx$2.default)();\n\t\t\tconst iterator = _usingCtx$1.a(iteratorResource(iterable));\n\t\t\tlet result;\n\t\t\tlet nextPromise = iterator.next();\n\t\t\twhile (true) try {\n\t\t\t\tvar _usingCtx3 = (0, import_usingCtx$2.default)();\n\t\t\t\tconst pingPromise = _usingCtx3.u(timerResource(pingIntervalMs));\n\t\t\t\tresult = yield (0, import_awaitAsyncGenerator$2.default)(Unpromise.race([nextPromise, pingPromise.start()]));\n\t\t\t\tif (result === disposablePromiseTimerResult) {\n\t\t\t\t\tyield PING_SYM;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (result.done) return result.value;\n\t\t\t\tnextPromise = iterator.next();\n\t\t\t\tyield result.value;\n\t\t\t\tresult = null;\n\t\t\t} catch (_) {\n\t\t\t\t_usingCtx3.e = _;\n\t\t\t} finally {\n\t\t\t\t_usingCtx3.d();\n\t\t\t}\n\t\t} catch (_) {\n\t\t\t_usingCtx$1.e = _;\n\t\t} finally {\n\t\t\tyield (0, import_awaitAsyncGenerator$2.default)(_usingCtx$1.d());\n\t\t}\n\t});\n\treturn _withPing.apply(this, arguments);\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncIterator.js\nvar require_asyncIterator = require_getErrorShape.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncIterator.js\"(exports, module) {\n\tfunction _asyncIterator$2(r) {\n\t\tvar n, t, o, e = 2;\n\t\tfor (\"undefined\" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) {\n\t\t\tif (t && null != (n = r[t])) return n.call(r);\n\t\t\tif (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r));\n\t\t\tt = \"@@asyncIterator\", o = \"@@iterator\";\n\t\t}\n\t\tthrow new TypeError(\"Object is not async iterable\");\n\t}\n\tfunction AsyncFromSyncIterator(r) {\n\t\tfunction AsyncFromSyncIteratorContinuation(r$1) {\n\t\t\tif (Object(r$1) !== r$1) return Promise.reject(new TypeError(r$1 + \" is not an object.\"));\n\t\t\tvar n = r$1.done;\n\t\t\treturn Promise.resolve(r$1.value).then(function(r$2) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: r$2,\n\t\t\t\t\tdone: n\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t\treturn AsyncFromSyncIterator = function AsyncFromSyncIterator$1(r$1) {\n\t\t\tthis.s = r$1, this.n = r$1.next;\n\t\t}, AsyncFromSyncIterator.prototype = {\n\t\t\ts: null,\n\t\t\tn: null,\n\t\t\tnext: function next() {\n\t\t\t\treturn AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));\n\t\t\t},\n\t\t\t\"return\": function _return(r$1) {\n\t\t\t\tvar n = this.s[\"return\"];\n\t\t\t\treturn void 0 === n ? Promise.resolve({\n\t\t\t\t\tvalue: r$1,\n\t\t\t\t\tdone: !0\n\t\t\t\t}) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));\n\t\t\t},\n\t\t\t\"throw\": function _throw(r$1) {\n\t\t\t\tvar n = this.s[\"return\"];\n\t\t\t\treturn void 0 === n ? Promise.reject(r$1) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));\n\t\t\t}\n\t\t}, new AsyncFromSyncIterator(r);\n\t}\n\tmodule.exports = _asyncIterator$2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region src/unstable-core-do-not-import/stream/jsonl.ts\nvar import_awaitAsyncGenerator$1 = require_getErrorShape.__toESM(require_awaitAsyncGenerator(), 1);\nvar import_wrapAsyncGenerator$2 = require_getErrorShape.__toESM(require_wrapAsyncGenerator(), 1);\nvar import_usingCtx$1 = require_getErrorShape.__toESM(require_usingCtx(), 1);\nvar import_asyncIterator$1 = require_getErrorShape.__toESM(require_asyncIterator(), 1);\nconst CHUNK_VALUE_TYPE_PROMISE = 0;\nconst CHUNK_VALUE_TYPE_ASYNC_ITERABLE = 1;\nconst PROMISE_STATUS_FULFILLED = 0;\nconst PROMISE_STATUS_REJECTED = 1;\nconst ASYNC_ITERABLE_STATUS_RETURN = 0;\nconst ASYNC_ITERABLE_STATUS_YIELD = 1;\nconst ASYNC_ITERABLE_STATUS_ERROR = 2;\nfunction isPromise(value) {\n\treturn (require_codes.isObject(value) || require_codes.isFunction(value)) && typeof (value === null || value === void 0 ? void 0 : value[\"then\"]) === \"function\" && typeof (value === null || value === void 0 ? void 0 : value[\"catch\"]) === \"function\";\n}\nvar MaxDepthError = class extends Error {\n\tconstructor(path) {\n\t\tsuper(\"Max depth reached at path: \" + path.join(\".\"));\n\t\tthis.path = path;\n\t}\n};\nfunction createBatchStreamProducer(_x3) {\n\treturn _createBatchStreamProducer.apply(this, arguments);\n}\nfunction _createBatchStreamProducer() {\n\t_createBatchStreamProducer = (0, import_wrapAsyncGenerator$2.default)(function* (opts) {\n\t\tconst { data } = opts;\n\t\tlet counter = 0;\n\t\tconst placeholder = 0;\n\t\tconst mergedIterables = mergeAsyncIterables();\n\t\tfunction registerAsync(callback) {\n\t\t\tconst idx = counter++;\n\t\t\tconst iterable$1 = callback(idx);\n\t\t\tmergedIterables.add(iterable$1);\n\t\t\treturn idx;\n\t\t}\n\t\tfunction encodePromise(promise, path) {\n\t\t\treturn registerAsync(/* @__PURE__ */ function() {\n\t\t\t\tvar _ref = (0, import_wrapAsyncGenerator$2.default)(function* (idx) {\n\t\t\t\t\tconst error = checkMaxDepth(path);\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tpromise.catch((cause) => {\n\t\t\t\t\t\t\tvar _opts$onError;\n\t\t\t\t\t\t\t(_opts$onError = opts.onError) === null || _opts$onError === void 0 || _opts$onError.call(opts, {\n\t\t\t\t\t\t\t\terror: cause,\n\t\t\t\t\t\t\t\tpath\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tpromise = Promise.reject(error);\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst next = yield (0, import_awaitAsyncGenerator$1.default)(promise);\n\t\t\t\t\t\tyield [\n\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\tPROMISE_STATUS_FULFILLED,\n\t\t\t\t\t\t\tencode(next, path)\n\t\t\t\t\t\t];\n\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\tvar _opts$onError2, _opts$formatError;\n\t\t\t\t\t\t(_opts$onError2 = opts.onError) === null || _opts$onError2 === void 0 || _opts$onError2.call(opts, {\n\t\t\t\t\t\t\terror: cause,\n\t\t\t\t\t\t\tpath\n\t\t\t\t\t\t});\n\t\t\t\t\t\tyield [\n\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\tPROMISE_STATUS_REJECTED,\n\t\t\t\t\t\t\t(_opts$formatError = opts.formatError) === null || _opts$formatError === void 0 ? void 0 : _opts$formatError.call(opts, {\n\t\t\t\t\t\t\t\terror: cause,\n\t\t\t\t\t\t\t\tpath\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn function(_x) {\n\t\t\t\t\treturn _ref.apply(this, arguments);\n\t\t\t\t};\n\t\t\t}());\n\t\t}\n\t\tfunction encodeAsyncIterable(iterable$1, path) {\n\t\t\treturn registerAsync(/* @__PURE__ */ function() {\n\t\t\t\tvar _ref2 = (0, import_wrapAsyncGenerator$2.default)(function* (idx) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar _usingCtx$1 = (0, import_usingCtx$1.default)();\n\t\t\t\t\t\tconst error = checkMaxDepth(path);\n\t\t\t\t\t\tif (error) throw error;\n\t\t\t\t\t\tconst iterator = _usingCtx$1.a(iteratorResource(iterable$1));\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\t\tconst next = yield (0, import_awaitAsyncGenerator$1.default)(iterator.next());\n\t\t\t\t\t\t\t\tif (next.done) {\n\t\t\t\t\t\t\t\t\tyield [\n\t\t\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\t\t\tASYNC_ITERABLE_STATUS_RETURN,\n\t\t\t\t\t\t\t\t\t\tencode(next.value, path)\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tyield [\n\t\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\t\tASYNC_ITERABLE_STATUS_YIELD,\n\t\t\t\t\t\t\t\t\tencode(next.value, path)\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\t\tvar _opts$onError3, _opts$formatError2;\n\t\t\t\t\t\t\t(_opts$onError3 = opts.onError) === null || _opts$onError3 === void 0 || _opts$onError3.call(opts, {\n\t\t\t\t\t\t\t\terror: cause,\n\t\t\t\t\t\t\t\tpath\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tyield [\n\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\tASYNC_ITERABLE_STATUS_ERROR,\n\t\t\t\t\t\t\t\t(_opts$formatError2 = opts.formatError) === null || _opts$formatError2 === void 0 ? void 0 : _opts$formatError2.call(opts, {\n\t\t\t\t\t\t\t\t\terror: cause,\n\t\t\t\t\t\t\t\t\tpath\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (_) {\n\t\t\t\t\t\t_usingCtx$1.e = _;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tyield (0, import_awaitAsyncGenerator$1.default)(_usingCtx$1.d());\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn function(_x2) {\n\t\t\t\t\treturn _ref2.apply(this, arguments);\n\t\t\t\t};\n\t\t\t}());\n\t\t}\n\t\tfunction checkMaxDepth(path) {\n\t\t\tif (opts.maxDepth && path.length > opts.maxDepth) return new MaxDepthError(path);\n\t\t\treturn null;\n\t\t}\n\t\tfunction encodeAsync(value, path) {\n\t\t\tif (isPromise(value)) return [CHUNK_VALUE_TYPE_PROMISE, encodePromise(value, path)];\n\t\t\tif (require_codes.isAsyncIterable(value)) {\n\t\t\t\tif (opts.maxDepth && path.length >= opts.maxDepth) throw new Error(\"Max depth reached\");\n\t\t\t\treturn [CHUNK_VALUE_TYPE_ASYNC_ITERABLE, encodeAsyncIterable(value, path)];\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\tfunction encode(value, path) {\n\t\t\tif (value === void 0) return [[]];\n\t\t\tconst reg = encodeAsync(value, path);\n\t\t\tif (reg) return [[placeholder], [null, ...reg]];\n\t\t\tif (!isPlainObject(value)) return [[value]];\n\t\t\tconst newObj = require_codes.emptyObject();\n\t\t\tconst asyncValues = [];\n\t\t\tfor (const [key, item] of Object.entries(value)) {\n\t\t\t\tconst transformed = encodeAsync(item, [...path, key]);\n\t\t\t\tif (!transformed) {\n\t\t\t\t\tnewObj[key] = item;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tnewObj[key] = placeholder;\n\t\t\t\tasyncValues.push([key, ...transformed]);\n\t\t\t}\n\t\t\treturn [[newObj], ...asyncValues];\n\t\t}\n\t\tconst newHead = require_codes.emptyObject();\n\t\tfor (const [key, item] of Object.entries(data)) newHead[key] = encode(item, [key]);\n\t\tyield newHead;\n\t\tlet iterable = mergedIterables;\n\t\tif (opts.pingMs) iterable = withPing(mergedIterables, opts.pingMs);\n\t\tvar _iteratorAbruptCompletion = false;\n\t\tvar _didIteratorError = false;\n\t\tvar _iteratorError;\n\t\ttry {\n\t\t\tfor (var _iterator = (0, import_asyncIterator$1.default)(iterable), _step; _iteratorAbruptCompletion = !(_step = yield (0, import_awaitAsyncGenerator$1.default)(_iterator.next())).done; _iteratorAbruptCompletion = false) {\n\t\t\t\tconst value = _step.value;\n\t\t\t\tyield value;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\t_didIteratorError = true;\n\t\t\t_iteratorError = err;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (_iteratorAbruptCompletion && _iterator.return != null) yield (0, import_awaitAsyncGenerator$1.default)(_iterator.return());\n\t\t\t} finally {\n\t\t\t\tif (_didIteratorError) throw _iteratorError;\n\t\t\t}\n\t\t}\n\t});\n\treturn _createBatchStreamProducer.apply(this, arguments);\n}\n/**\n* JSON Lines stream producer\n* @see https://jsonlines.org/\n*/\nfunction jsonlStreamProducer(opts) {\n\tlet stream = readableStreamFrom(createBatchStreamProducer(opts));\n\tconst { serialize } = opts;\n\tif (serialize) stream = stream.pipeThrough(new TransformStream({ transform(chunk, controller) {\n\t\tif (chunk === PING_SYM) controller.enqueue(PING_SYM);\n\t\telse controller.enqueue(serialize(chunk));\n\t} }));\n\treturn stream.pipeThrough(new TransformStream({ transform(chunk, controller) {\n\t\tif (chunk === PING_SYM) controller.enqueue(\" \");\n\t\telse controller.enqueue(JSON.stringify(chunk) + \"\\n\");\n\t} })).pipeThrough(new TextEncoderStream());\n}\nvar AsyncError = class extends Error {\n\tconstructor(data) {\n\t\tsuper(\"Received error from server\");\n\t\tthis.data = data;\n\t}\n};\nconst nodeJsStreamToReaderEsque = (source) => {\n\treturn { getReader() {\n\t\tconst stream = new ReadableStream({ start(controller) {\n\t\t\tsource.on(\"data\", (chunk) => {\n\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t});\n\t\t\tsource.on(\"end\", () => {\n\t\t\t\tcontroller.close();\n\t\t\t});\n\t\t\tsource.on(\"error\", (error) => {\n\t\t\t\tcontroller.error(error);\n\t\t\t});\n\t\t} });\n\t\treturn stream.getReader();\n\t} };\n};\nfunction createLineAccumulator(from) {\n\tconst reader = \"getReader\" in from ? from.getReader() : nodeJsStreamToReaderEsque(from).getReader();\n\tlet lineAggregate = \"\";\n\treturn new ReadableStream({\n\t\tasync pull(controller) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) controller.close();\n\t\t\telse controller.enqueue(value);\n\t\t},\n\t\tcancel() {\n\t\t\treturn reader.cancel();\n\t\t}\n\t}).pipeThrough(new TextDecoderStream()).pipeThrough(new TransformStream({ transform(chunk, controller) {\n\t\tvar _parts$pop;\n\t\tlineAggregate += chunk;\n\t\tconst parts = lineAggregate.split(\"\\n\");\n\t\tlineAggregate = (_parts$pop = parts.pop()) !== null && _parts$pop !== void 0 ? _parts$pop : \"\";\n\t\tfor (const part of parts) controller.enqueue(part);\n\t} }));\n}\nfunction createConsumerStream(from) {\n\tconst stream = createLineAccumulator(from);\n\tlet sentHead = false;\n\treturn stream.pipeThrough(new TransformStream({ transform(line, controller) {\n\t\tif (!sentHead) {\n\t\t\tconst head = JSON.parse(line);\n\t\t\tcontroller.enqueue(head);\n\t\t\tsentHead = true;\n\t\t} else {\n\t\t\tconst chunk = JSON.parse(line);\n\t\t\tcontroller.enqueue(chunk);\n\t\t}\n\t} }));\n}\n/**\n* Creates a handler for managing stream controllers and their lifecycle\n*/\nfunction createStreamsManager(abortController) {\n\tconst controllerMap = /* @__PURE__ */ new Map();\n\t/**\n\t* Checks if there are no pending controllers or deferred promises\n\t*/\n\tfunction isEmpty() {\n\t\treturn Array.from(controllerMap.values()).every((c) => c.closed);\n\t}\n\t/**\n\t* Creates a stream controller\n\t*/\n\tfunction createStreamController() {\n\t\tlet originalController;\n\t\tconst stream = new ReadableStream({ start(controller) {\n\t\t\toriginalController = controller;\n\t\t} });\n\t\tconst streamController = {\n\t\t\tenqueue: (v) => originalController.enqueue(v),\n\t\t\tclose: () => {\n\t\t\t\toriginalController.close();\n\t\t\t\tclear();\n\t\t\t\tif (isEmpty()) abortController.abort();\n\t\t\t},\n\t\t\tclosed: false,\n\t\t\tgetReaderResource: () => {\n\t\t\t\tconst reader = stream.getReader();\n\t\t\t\treturn makeResource(reader, () => {\n\t\t\t\t\tstreamController.close();\n\t\t\t\t\treader.releaseLock();\n\t\t\t\t});\n\t\t\t},\n\t\t\terror: (reason) => {\n\t\t\t\toriginalController.error(reason);\n\t\t\t\tclear();\n\t\t\t}\n\t\t};\n\t\tfunction clear() {\n\t\t\tObject.assign(streamController, {\n\t\t\t\tclosed: true,\n\t\t\t\tclose: () => {},\n\t\t\t\tenqueue: () => {},\n\t\t\t\tgetReaderResource: null,\n\t\t\t\terror: () => {}\n\t\t\t});\n\t\t}\n\t\treturn streamController;\n\t}\n\t/**\n\t* Gets or creates a stream controller\n\t*/\n\tfunction getOrCreate(chunkId) {\n\t\tlet c = controllerMap.get(chunkId);\n\t\tif (!c) {\n\t\t\tc = createStreamController();\n\t\t\tcontrollerMap.set(chunkId, c);\n\t\t}\n\t\treturn c;\n\t}\n\t/**\n\t* Cancels all pending controllers and rejects deferred promises\n\t*/\n\tfunction cancelAll(reason) {\n\t\tfor (const controller of controllerMap.values()) controller.error(reason);\n\t}\n\t/**\n\t* Closes all pending controllers to preserve buffered data\n\t*/\n\tfunction closeAll() {\n\t\tfor (const controller of controllerMap.values()) controller.close();\n\t}\n\treturn {\n\t\tgetOrCreate,\n\t\tcancelAll,\n\t\tcloseAll\n\t};\n}\n/**\n* JSON Lines stream consumer\n* @see https://jsonlines.org/\n*/\nasync function jsonlStreamConsumer(opts) {\n\tconst { deserialize = (v) => v } = opts;\n\tlet source = createConsumerStream(opts.from);\n\tif (deserialize) source = source.pipeThrough(new TransformStream({ transform(chunk, controller) {\n\t\tcontroller.enqueue(deserialize(chunk));\n\t} }));\n\tlet headDeferred = createDeferred();\n\tconst streamManager = createStreamsManager(opts.abortController);\n\tfunction decodeChunkDefinition(value) {\n\t\tconst [_path, type, chunkId] = value;\n\t\tconst controller = streamManager.getOrCreate(chunkId);\n\t\tswitch (type) {\n\t\t\tcase CHUNK_VALUE_TYPE_PROMISE: return require_codes.run(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tvar _usingCtx3 = (0, import_usingCtx$1.default)();\n\t\t\t\t\tconst reader = _usingCtx3.u(controller.getReaderResource());\n\t\t\t\t\tconst { value: value$1 } = await reader.read();\n\t\t\t\t\tconst [_chunkId, status, data] = value$1;\n\t\t\t\t\tswitch (status) {\n\t\t\t\t\t\tcase PROMISE_STATUS_FULFILLED: return decode(data);\n\t\t\t\t\t\tcase PROMISE_STATUS_REJECTED:\n\t\t\t\t\t\t\tvar _opts$formatError3, _opts$formatError4;\n\t\t\t\t\t\t\tthrow (_opts$formatError3 = (_opts$formatError4 = opts.formatError) === null || _opts$formatError4 === void 0 ? void 0 : _opts$formatError4.call(opts, { error: data })) !== null && _opts$formatError3 !== void 0 ? _opts$formatError3 : new AsyncError(data);\n\t\t\t\t\t}\n\t\t\t\t} catch (_) {\n\t\t\t\t\t_usingCtx3.e = _;\n\t\t\t\t} finally {\n\t\t\t\t\t_usingCtx3.d();\n\t\t\t\t}\n\t\t\t});\n\t\t\tcase CHUNK_VALUE_TYPE_ASYNC_ITERABLE: return require_codes.run((0, import_wrapAsyncGenerator$2.default)(function* () {\n\t\t\t\ttry {\n\t\t\t\t\tvar _usingCtx4 = (0, import_usingCtx$1.default)();\n\t\t\t\t\tconst reader = _usingCtx4.u(controller.getReaderResource());\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst { value: value$1 } = yield (0, import_awaitAsyncGenerator$1.default)(reader.read());\n\t\t\t\t\t\tconst [_chunkId, status, data] = value$1;\n\t\t\t\t\t\tswitch (status) {\n\t\t\t\t\t\t\tcase ASYNC_ITERABLE_STATUS_YIELD:\n\t\t\t\t\t\t\t\tyield decode(data);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase ASYNC_ITERABLE_STATUS_RETURN: return decode(data);\n\t\t\t\t\t\t\tcase ASYNC_ITERABLE_STATUS_ERROR:\n\t\t\t\t\t\t\t\tvar _opts$formatError5, _opts$formatError6;\n\t\t\t\t\t\t\t\tthrow (_opts$formatError5 = (_opts$formatError6 = opts.formatError) === null || _opts$formatError6 === void 0 ? void 0 : _opts$formatError6.call(opts, { error: data })) !== null && _opts$formatError5 !== void 0 ? _opts$formatError5 : new AsyncError(data);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (_) {\n\t\t\t\t\t_usingCtx4.e = _;\n\t\t\t\t} finally {\n\t\t\t\t\t_usingCtx4.d();\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t}\n\tfunction decode(value) {\n\t\tconst [[data], ...asyncProps] = value;\n\t\tfor (const value$1 of asyncProps) {\n\t\t\tconst [key] = value$1;\n\t\t\tconst decoded = decodeChunkDefinition(value$1);\n\t\t\tif (key === null) return decoded;\n\t\t\tdata[key] = decoded;\n\t\t}\n\t\treturn data;\n\t}\n\tconst handleClose = () => {\n\t\tif (headDeferred) {\n\t\t\theadDeferred.reject(new Error(\"Stream closed before head was received\"));\n\t\t\theadDeferred = null;\n\t\t}\n\t\tstreamManager.closeAll();\n\t};\n\tconst handleAbort = (reason) => {\n\t\theadDeferred === null || headDeferred === void 0 || headDeferred.reject(reason);\n\t\theadDeferred = null;\n\t\tstreamManager.cancelAll(reason);\n\t};\n\tsource.pipeTo(new WritableStream({\n\t\twrite(chunkOrHead) {\n\t\t\tif (headDeferred) {\n\t\t\t\tconst head = chunkOrHead;\n\t\t\t\tfor (const [key, value] of Object.entries(chunkOrHead)) {\n\t\t\t\t\tconst parsed = decode(value);\n\t\t\t\t\thead[key] = parsed;\n\t\t\t\t}\n\t\t\t\theadDeferred.resolve(head);\n\t\t\t\theadDeferred = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst chunk = chunkOrHead;\n\t\t\tconst [idx] = chunk;\n\t\t\tconst controller = streamManager.getOrCreate(idx);\n\t\t\tcontroller.enqueue(chunk);\n\t\t},\n\t\tclose: handleClose,\n\t\tabort: handleAbort\n\t})).catch((error) => {\n\t\tvar _opts$onError4;\n\t\t(_opts$onError4 = opts.onError) === null || _opts$onError4 === void 0 || _opts$onError4.call(opts, { error });\n\t\thandleAbort(error);\n\t});\n\treturn [await headDeferred.promise];\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncGeneratorDelegate.js\nvar require_asyncGeneratorDelegate = require_getErrorShape.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncGeneratorDelegate.js\"(exports, module) {\n\tvar OverloadYield = require_OverloadYield();\n\tfunction _asyncGeneratorDelegate$1(t) {\n\t\tvar e = {}, n = !1;\n\t\tfunction pump(e$1, r) {\n\t\t\treturn n = !0, r = new Promise(function(n$1) {\n\t\t\t\tn$1(t[e$1](r));\n\t\t\t}), {\n\t\t\t\tdone: !1,\n\t\t\t\tvalue: new OverloadYield(r, 1)\n\t\t\t};\n\t\t}\n\t\treturn e[\"undefined\" != typeof Symbol && Symbol.iterator || \"@@iterator\"] = function() {\n\t\t\treturn this;\n\t\t}, e.next = function(t$1) {\n\t\t\treturn n ? (n = !1, t$1) : pump(\"next\", t$1);\n\t\t}, \"function\" == typeof t[\"throw\"] && (e[\"throw\"] = function(t$1) {\n\t\t\tif (n) throw n = !1, t$1;\n\t\t\treturn pump(\"throw\", t$1);\n\t\t}), \"function\" == typeof t[\"return\"] && (e[\"return\"] = function(t$1) {\n\t\t\treturn n ? (n = !1, t$1) : pump(\"return\", t$1);\n\t\t}), e;\n\t}\n\tmodule.exports = _asyncGeneratorDelegate$1, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region src/unstable-core-do-not-import/stream/sse.ts\nvar import_asyncIterator = require_getErrorShape.__toESM(require_asyncIterator(), 1);\nvar import_awaitAsyncGenerator = require_getErrorShape.__toESM(require_awaitAsyncGenerator(), 1);\nvar import_wrapAsyncGenerator$1 = require_getErrorShape.__toESM(require_wrapAsyncGenerator(), 1);\nvar import_asyncGeneratorDelegate = require_getErrorShape.__toESM(require_asyncGeneratorDelegate(), 1);\nvar import_usingCtx = require_getErrorShape.__toESM(require_usingCtx(), 1);\nconst PING_EVENT = \"ping\";\nconst SERIALIZED_ERROR_EVENT = \"serialized-error\";\nconst CONNECTED_EVENT = \"connected\";\nconst RETURN_EVENT = \"return\";\n/**\n*\n* @see https://html.spec.whatwg.org/multipage/server-sent-events.html\n*/\nfunction sseStreamProducer(opts) {\n\tvar _opts$ping$enabled, _opts$ping, _opts$ping$intervalMs, _opts$ping2, _opts$client;\n\tconst { serialize = require_codes.identity } = opts;\n\tconst ping = {\n\t\tenabled: (_opts$ping$enabled = (_opts$ping = opts.ping) === null || _opts$ping === void 0 ? void 0 : _opts$ping.enabled) !== null && _opts$ping$enabled !== void 0 ? _opts$ping$enabled : false,\n\t\tintervalMs: (_opts$ping$intervalMs = (_opts$ping2 = opts.ping) === null || _opts$ping2 === void 0 ? void 0 : _opts$ping2.intervalMs) !== null && _opts$ping$intervalMs !== void 0 ? _opts$ping$intervalMs : 1e3\n\t};\n\tconst client = (_opts$client = opts.client) !== null && _opts$client !== void 0 ? _opts$client : {};\n\tif (ping.enabled && client.reconnectAfterInactivityMs && ping.intervalMs > client.reconnectAfterInactivityMs) throw new Error(`Ping interval must be less than client reconnect interval to prevent unnecessary reconnection - ping.intervalMs: ${ping.intervalMs} client.reconnectAfterInactivityMs: ${client.reconnectAfterInactivityMs}`);\n\tfunction generator() {\n\t\treturn _generator.apply(this, arguments);\n\t}\n\tfunction _generator() {\n\t\t_generator = (0, import_wrapAsyncGenerator$1.default)(function* () {\n\t\t\tyield {\n\t\t\t\tevent: CONNECTED_EVENT,\n\t\t\t\tdata: JSON.stringify(client)\n\t\t\t};\n\t\t\tlet iterable = opts.data;\n\t\t\tif (opts.emitAndEndImmediately) iterable = takeWithGrace(iterable, {\n\t\t\t\tcount: 1,\n\t\t\t\tgracePeriodMs: 1\n\t\t\t});\n\t\t\tif (ping.enabled && ping.intervalMs !== Infinity && ping.intervalMs > 0) iterable = withPing(iterable, ping.intervalMs);\n\t\t\tlet value;\n\t\t\tlet chunk;\n\t\t\tvar _iteratorAbruptCompletion = false;\n\t\t\tvar _didIteratorError = false;\n\t\t\tvar _iteratorError;\n\t\t\ttry {\n\t\t\t\tfor (var _iterator = (0, import_asyncIterator.default)(iterable), _step; _iteratorAbruptCompletion = !(_step = yield (0, import_awaitAsyncGenerator.default)(_iterator.next())).done; _iteratorAbruptCompletion = false) {\n\t\t\t\t\tvalue = _step.value;\n\t\t\t\t\t{\n\t\t\t\t\t\tif (value === PING_SYM) {\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\tevent: PING_EVENT,\n\t\t\t\t\t\t\t\tdata: \"\"\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchunk = require_tracked.isTrackedEnvelope(value) ? {\n\t\t\t\t\t\t\tid: value[0],\n\t\t\t\t\t\t\tdata: value[1]\n\t\t\t\t\t\t} : { data: value };\n\t\t\t\t\t\tchunk.data = JSON.stringify(serialize(chunk.data));\n\t\t\t\t\t\tyield chunk;\n\t\t\t\t\t\tvalue = null;\n\t\t\t\t\t\tchunk = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t_didIteratorError = true;\n\t\t\t\t_iteratorError = err;\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (_iteratorAbruptCompletion && _iterator.return != null) yield (0, import_awaitAsyncGenerator.default)(_iterator.return());\n\t\t\t\t} finally {\n\t\t\t\t\tif (_didIteratorError) throw _iteratorError;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn _generator.apply(this, arguments);\n\t}\n\tfunction generatorWithErrorHandling() {\n\t\treturn _generatorWithErrorHandling.apply(this, arguments);\n\t}\n\tfunction _generatorWithErrorHandling() {\n\t\t_generatorWithErrorHandling = (0, import_wrapAsyncGenerator$1.default)(function* () {\n\t\t\ttry {\n\t\t\t\tyield* (0, import_asyncGeneratorDelegate.default)((0, import_asyncIterator.default)(generator()));\n\t\t\t\tyield {\n\t\t\t\t\tevent: RETURN_EVENT,\n\t\t\t\t\tdata: \"\"\n\t\t\t\t};\n\t\t\t} catch (cause) {\n\t\t\t\tvar _opts$formatError, _opts$formatError2;\n\t\t\t\tif (isAbortError(cause)) return;\n\t\t\t\tconst error = require_tracked.getTRPCErrorFromUnknown(cause);\n\t\t\t\tconst data = (_opts$formatError = (_opts$formatError2 = opts.formatError) === null || _opts$formatError2 === void 0 ? void 0 : _opts$formatError2.call(opts, { error })) !== null && _opts$formatError !== void 0 ? _opts$formatError : null;\n\t\t\t\tyield {\n\t\t\t\t\tevent: SERIALIZED_ERROR_EVENT,\n\t\t\t\t\tdata: JSON.stringify(serialize(data))\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t\treturn _generatorWithErrorHandling.apply(this, arguments);\n\t}\n\tconst stream = readableStreamFrom(generatorWithErrorHandling());\n\treturn stream.pipeThrough(new TransformStream({ transform(chunk, controller) {\n\t\tif (\"event\" in chunk) controller.enqueue(`event: ${chunk.event}\\n`);\n\t\tif (\"data\" in chunk) controller.enqueue(`data: ${chunk.data}\\n`);\n\t\tif (\"id\" in chunk) controller.enqueue(`id: ${chunk.id}\\n`);\n\t\tif (\"comment\" in chunk) controller.enqueue(`: ${chunk.comment}\\n`);\n\t\tcontroller.enqueue(\"\\n\\n\");\n\t} })).pipeThrough(new TextEncoderStream());\n}\nasync function withTimeout(opts) {\n\ttry {\n\t\tvar _usingCtx$1 = (0, import_usingCtx.default)();\n\t\tconst timeoutPromise = _usingCtx$1.u(timerResource(opts.timeoutMs));\n\t\tconst res = await Unpromise.race([opts.promise, timeoutPromise.start()]);\n\t\tif (res === disposablePromiseTimerResult) return await opts.onTimeout();\n\t\treturn res;\n\t} catch (_) {\n\t\t_usingCtx$1.e = _;\n\t} finally {\n\t\t_usingCtx$1.d();\n\t}\n}\n/**\n* @see https://html.spec.whatwg.org/multipage/server-sent-events.html\n*/\nfunction sseStreamConsumer(opts) {\n\tconst { deserialize = (v) => v } = opts;\n\tlet clientOptions = require_codes.emptyObject();\n\tconst signal = opts.signal;\n\tlet _es = null;\n\tconst createStream = () => new ReadableStream({\n\t\tasync start(controller) {\n\t\t\tconst [url, init] = await Promise.all([opts.url(), opts.init()]);\n\t\t\tconst eventSource = _es = new opts.EventSource(url, init);\n\t\t\tcontroller.enqueue({\n\t\t\t\ttype: \"connecting\",\n\t\t\t\teventSource: _es,\n\t\t\t\tevent: null\n\t\t\t});\n\t\t\teventSource.addEventListener(CONNECTED_EVENT, (_msg) => {\n\t\t\t\tconst msg = _msg;\n\t\t\t\tconst options = JSON.parse(msg.data);\n\t\t\t\tclientOptions = options;\n\t\t\t\tcontroller.enqueue({\n\t\t\t\t\ttype: \"connected\",\n\t\t\t\t\toptions,\n\t\t\t\t\teventSource\n\t\t\t\t});\n\t\t\t});\n\t\t\teventSource.addEventListener(SERIALIZED_ERROR_EVENT, (_msg) => {\n\t\t\t\tconst msg = _msg;\n\t\t\t\tcontroller.enqueue({\n\t\t\t\t\ttype: \"serialized-error\",\n\t\t\t\t\terror: deserialize(JSON.parse(msg.data)),\n\t\t\t\t\teventSource\n\t\t\t\t});\n\t\t\t});\n\t\t\teventSource.addEventListener(PING_EVENT, () => {\n\t\t\t\tcontroller.enqueue({\n\t\t\t\t\ttype: \"ping\",\n\t\t\t\t\teventSource\n\t\t\t\t});\n\t\t\t});\n\t\t\teventSource.addEventListener(RETURN_EVENT, () => {\n\t\t\t\teventSource.close();\n\t\t\t\tcontroller.close();\n\t\t\t\t_es = null;\n\t\t\t});\n\t\t\teventSource.addEventListener(\"error\", (event) => {\n\t\t\t\tif (eventSource.readyState === eventSource.CLOSED) controller.error(event);\n\t\t\t\telse controller.enqueue({\n\t\t\t\t\ttype: \"connecting\",\n\t\t\t\t\teventSource,\n\t\t\t\t\tevent\n\t\t\t\t});\n\t\t\t});\n\t\t\teventSource.addEventListener(\"message\", (_msg) => {\n\t\t\t\tconst msg = _msg;\n\t\t\t\tconst chunk = deserialize(JSON.parse(msg.data));\n\t\t\t\tconst def = { data: chunk };\n\t\t\t\tif (msg.lastEventId) def.id = msg.lastEventId;\n\t\t\t\tcontroller.enqueue({\n\t\t\t\t\ttype: \"data\",\n\t\t\t\t\tdata: def,\n\t\t\t\t\teventSource\n\t\t\t\t});\n\t\t\t});\n\t\t\tconst onAbort = () => {\n\t\t\t\ttry {\n\t\t\t\t\teventSource.close();\n\t\t\t\t\tcontroller.close();\n\t\t\t\t} catch (_unused) {}\n\t\t\t};\n\t\t\tif (signal.aborted) onAbort();\n\t\t\telse signal.addEventListener(\"abort\", onAbort);\n\t\t},\n\t\tcancel() {\n\t\t\t_es === null || _es === void 0 || _es.close();\n\t\t}\n\t});\n\tconst getStreamResource = () => {\n\t\tlet stream = createStream();\n\t\tlet reader = stream.getReader();\n\t\tasync function dispose() {\n\t\t\tawait reader.cancel();\n\t\t\t_es = null;\n\t\t}\n\t\treturn makeAsyncResource({\n\t\t\tread() {\n\t\t\t\treturn reader.read();\n\t\t\t},\n\t\t\tasync recreate() {\n\t\t\t\tawait dispose();\n\t\t\t\tstream = createStream();\n\t\t\t\treader = stream.getReader();\n\t\t\t}\n\t\t}, dispose);\n\t};\n\treturn require_codes.run((0, import_wrapAsyncGenerator$1.default)(function* () {\n\t\ttry {\n\t\t\tvar _usingCtx3 = (0, import_usingCtx.default)();\n\t\t\tconst stream = _usingCtx3.a(getStreamResource());\n\t\t\twhile (true) {\n\t\t\t\tlet promise = stream.read();\n\t\t\t\tconst timeoutMs = clientOptions.reconnectAfterInactivityMs;\n\t\t\t\tif (timeoutMs) promise = withTimeout({\n\t\t\t\t\tpromise,\n\t\t\t\t\ttimeoutMs,\n\t\t\t\t\tonTimeout: async () => {\n\t\t\t\t\t\tconst res = {\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\ttype: \"timeout\",\n\t\t\t\t\t\t\t\tms: timeoutMs,\n\t\t\t\t\t\t\t\teventSource: _es\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdone: false\n\t\t\t\t\t\t};\n\t\t\t\t\t\tawait stream.recreate();\n\t\t\t\t\t\treturn res;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tconst result = yield (0, import_awaitAsyncGenerator.default)(promise);\n\t\t\t\tif (result.done) return result.value;\n\t\t\t\tyield result.value;\n\t\t\t}\n\t\t} catch (_) {\n\t\t\t_usingCtx3.e = _;\n\t\t} finally {\n\t\t\tyield (0, import_awaitAsyncGenerator.default)(_usingCtx3.d());\n\t\t}\n\t}));\n}\nconst sseHeaders = {\n\t\"Content-Type\": \"text/event-stream\",\n\t\"Cache-Control\": \"no-cache, no-transform\",\n\t\"X-Accel-Buffering\": \"no\",\n\tConnection: \"keep-alive\"\n};\n\n//#endregion\n//#region src/unstable-core-do-not-import/http/resolveResponse.ts\nvar import_wrapAsyncGenerator = require_getErrorShape.__toESM(require_wrapAsyncGenerator(), 1);\nvar import_objectSpread2 = require_getErrorShape.__toESM(require_getErrorShape.require_objectSpread2(), 1);\nfunction errorToAsyncIterable(err) {\n\treturn require_codes.run((0, import_wrapAsyncGenerator.default)(function* () {\n\t\tthrow err;\n\t}));\n}\nfunction combinedAbortController(signal) {\n\tconst controller = new AbortController();\n\tconst combinedSignal = require_codes.abortSignalsAnyPonyfill([signal, controller.signal]);\n\treturn {\n\t\tsignal: combinedSignal,\n\t\tcontroller\n\t};\n}\nconst TYPE_ACCEPTED_METHOD_MAP = {\n\tmutation: [\"POST\"],\n\tquery: [\"GET\"],\n\tsubscription: [\"GET\"]\n};\nconst TYPE_ACCEPTED_METHOD_MAP_WITH_METHOD_OVERRIDE = {\n\tmutation: [\"POST\"],\n\tquery: [\"GET\", \"POST\"],\n\tsubscription: [\"GET\", \"POST\"]\n};\nfunction initResponse(initOpts) {\n\tvar _responseMeta, _info$calls$find$proc, _info$calls$find;\n\tconst { ctx, info, responseMeta, untransformedJSON, errors = [], headers } = initOpts;\n\tlet status = untransformedJSON ? require_getErrorShape.getHTTPStatusCode(untransformedJSON) : 200;\n\tconst eagerGeneration = !untransformedJSON;\n\tconst data = eagerGeneration ? [] : Array.isArray(untransformedJSON) ? untransformedJSON : [untransformedJSON];\n\tconst meta = (_responseMeta = responseMeta === null || responseMeta === void 0 ? void 0 : responseMeta({\n\t\tctx,\n\t\tinfo,\n\t\tpaths: info === null || info === void 0 ? void 0 : info.calls.map((call) => call.path),\n\t\tdata,\n\t\terrors,\n\t\teagerGeneration,\n\t\ttype: (_info$calls$find$proc = info === null || info === void 0 || (_info$calls$find = info.calls.find((call) => {\n\t\t\tvar _call$procedure;\n\t\t\treturn (_call$procedure = call.procedure) === null || _call$procedure === void 0 ? void 0 : _call$procedure._def.type;\n\t\t})) === null || _info$calls$find === void 0 || (_info$calls$find = _info$calls$find.procedure) === null || _info$calls$find === void 0 ? void 0 : _info$calls$find._def.type) !== null && _info$calls$find$proc !== void 0 ? _info$calls$find$proc : \"unknown\"\n\t})) !== null && _responseMeta !== void 0 ? _responseMeta : {};\n\tif (meta.headers) {\n\t\tif (meta.headers instanceof Headers) for (const [key, value] of meta.headers.entries()) headers.append(key, value);\n\t\telse\n /**\n\t\t* @deprecated, delete in v12\n\t\t*/\n\t\tfor (const [key, value] of Object.entries(meta.headers)) if (Array.isArray(value)) for (const v of value) headers.append(key, v);\n\t\telse if (typeof value === \"string\") headers.set(key, value);\n\t}\n\tif (meta.status) status = meta.status;\n\treturn { status };\n}\nfunction caughtErrorToData(cause, errorOpts) {\n\tconst { router, req, onError } = errorOpts.opts;\n\tconst error = require_tracked.getTRPCErrorFromUnknown(cause);\n\tonError === null || onError === void 0 || onError({\n\t\terror,\n\t\tpath: errorOpts.path,\n\t\tinput: errorOpts.input,\n\t\tctx: errorOpts.ctx,\n\t\ttype: errorOpts.type,\n\t\treq\n\t});\n\tconst untransformedJSON = { error: require_getErrorShape.getErrorShape({\n\t\tconfig: router._def._config,\n\t\terror,\n\t\ttype: errorOpts.type,\n\t\tpath: errorOpts.path,\n\t\tinput: errorOpts.input,\n\t\tctx: errorOpts.ctx\n\t}) };\n\tconst transformedJSON = require_tracked.transformTRPCResponse(router._def._config, untransformedJSON);\n\tconst body = JSON.stringify(transformedJSON);\n\treturn {\n\t\terror,\n\t\tuntransformedJSON,\n\t\tbody\n\t};\n}\n/**\n* Check if a value is a stream-like object\n* - if it's an async iterable\n* - if it's an object with async iterables or promises\n*/\nfunction isDataStream(v) {\n\tif (!require_codes.isObject(v)) return false;\n\tif (require_codes.isAsyncIterable(v)) return true;\n\treturn Object.values(v).some(isPromise) || Object.values(v).some(require_codes.isAsyncIterable);\n}\nasync function resolveResponse(opts) {\n\tvar _ref, _opts$allowBatching, _opts$batching, _opts$allowMethodOver, _config$sse$enabled, _config$sse;\n\tconst { router, req } = opts;\n\tconst headers = new Headers([[\"vary\", \"trpc-accept, accept\"]]);\n\tconst config = router._def._config;\n\tconst url = new URL(req.url);\n\tif (req.method === \"HEAD\") return new Response(null, { status: 204 });\n\tconst allowBatching = (_ref = (_opts$allowBatching = opts.allowBatching) !== null && _opts$allowBatching !== void 0 ? _opts$allowBatching : (_opts$batching = opts.batching) === null || _opts$batching === void 0 ? void 0 : _opts$batching.enabled) !== null && _ref !== void 0 ? _ref : true;\n\tconst allowMethodOverride = ((_opts$allowMethodOver = opts.allowMethodOverride) !== null && _opts$allowMethodOver !== void 0 ? _opts$allowMethodOver : false) && req.method === \"POST\";\n\tconst infoTuple = await require_codes.run(async () => {\n\t\ttry {\n\t\t\treturn [void 0, await getRequestInfo({\n\t\t\t\treq,\n\t\t\t\tpath: decodeURIComponent(opts.path),\n\t\t\t\trouter,\n\t\t\t\tsearchParams: url.searchParams,\n\t\t\t\theaders: opts.req.headers,\n\t\t\t\turl,\n\t\t\t\tmaxBatchSize: opts.maxBatchSize\n\t\t\t})];\n\t\t} catch (cause) {\n\t\t\treturn [require_tracked.getTRPCErrorFromUnknown(cause), void 0];\n\t\t}\n\t});\n\tconst ctxManager = require_codes.run(() => {\n\t\tlet result = void 0;\n\t\treturn {\n\t\t\tvalueOrUndefined: () => {\n\t\t\t\tif (!result) return void 0;\n\t\t\t\treturn result[1];\n\t\t\t},\n\t\t\tvalue: () => {\n\t\t\t\tconst [err, ctx] = result;\n\t\t\t\tif (err) throw err;\n\t\t\t\treturn ctx;\n\t\t\t},\n\t\t\tcreate: async (info) => {\n\t\t\t\tif (result) throw new Error(\"This should only be called once - report a bug in tRPC\");\n\t\t\t\ttry {\n\t\t\t\t\tconst ctx = await opts.createContext({ info });\n\t\t\t\t\tresult = [void 0, ctx];\n\t\t\t\t} catch (cause) {\n\t\t\t\t\tresult = [require_tracked.getTRPCErrorFromUnknown(cause), void 0];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\tconst methodMapper = allowMethodOverride ? TYPE_ACCEPTED_METHOD_MAP_WITH_METHOD_OVERRIDE : TYPE_ACCEPTED_METHOD_MAP;\n\t/**\n\t* @deprecated\n\t*/\n\tconst isStreamCall = getAcceptHeader(req.headers) === \"application/jsonl\";\n\tconst experimentalSSE = (_config$sse$enabled = (_config$sse = config.sse) === null || _config$sse === void 0 ? void 0 : _config$sse.enabled) !== null && _config$sse$enabled !== void 0 ? _config$sse$enabled : true;\n\ttry {\n\t\tconst [infoError, info] = infoTuple;\n\t\tif (infoError) throw infoError;\n\t\tif (info.isBatchCall && !allowBatching) throw new require_tracked.TRPCError({\n\t\t\tcode: \"BAD_REQUEST\",\n\t\t\tmessage: `Batching is not enabled on the server`\n\t\t});\n\t\t/* istanbul ignore if -- @preserve */\n\t\tif (isStreamCall && !info.isBatchCall) throw new require_tracked.TRPCError({\n\t\t\tmessage: `Streaming requests must be batched (you can do a batch of 1)`,\n\t\t\tcode: \"BAD_REQUEST\"\n\t\t});\n\t\tawait ctxManager.create(info);\n\t\tconst rpcCalls = info.calls.map(async (call) => {\n\t\t\tconst proc = call.procedure;\n\t\t\tconst combinedAbort = combinedAbortController(opts.req.signal);\n\t\t\ttry {\n\t\t\t\tif (opts.error) throw opts.error;\n\t\t\t\tif (!proc) throw new require_tracked.TRPCError({\n\t\t\t\t\tcode: \"NOT_FOUND\",\n\t\t\t\t\tmessage: `No procedure found on path \"${call.path}\"`\n\t\t\t\t});\n\t\t\t\tif (!methodMapper[proc._def.type].includes(req.method)) throw new require_tracked.TRPCError({\n\t\t\t\t\tcode: \"METHOD_NOT_SUPPORTED\",\n\t\t\t\t\tmessage: `Unsupported ${req.method}-request to ${proc._def.type} procedure at path \"${call.path}\"`\n\t\t\t\t});\n\t\t\t\tif (proc._def.type === \"subscription\") {\n\t\t\t\t\tvar _config$sse2;\n\t\t\t\t\t/* istanbul ignore if -- @preserve */\n\t\t\t\t\tif (info.isBatchCall) throw new require_tracked.TRPCError({\n\t\t\t\t\t\tcode: \"BAD_REQUEST\",\n\t\t\t\t\t\tmessage: `Cannot batch subscription calls`\n\t\t\t\t\t});\n\t\t\t\t\tif ((_config$sse2 = config.sse) === null || _config$sse2 === void 0 ? void 0 : _config$sse2.maxDurationMs) {\n\t\t\t\t\t\tfunction cleanup() {\n\t\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\t\tcombinedAbort.signal.removeEventListener(\"abort\", cleanup);\n\t\t\t\t\t\t\tcombinedAbort.controller.abort();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst timer = setTimeout(cleanup, config.sse.maxDurationMs);\n\t\t\t\t\t\tcombinedAbort.signal.addEventListener(\"abort\", cleanup);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst data = await proc({\n\t\t\t\t\tpath: call.path,\n\t\t\t\t\tgetRawInput: call.getRawInput,\n\t\t\t\t\tctx: ctxManager.value(),\n\t\t\t\t\ttype: proc._def.type,\n\t\t\t\t\tsignal: combinedAbort.signal,\n\t\t\t\t\tbatchIndex: call.batchIndex\n\t\t\t\t});\n\t\t\t\treturn [void 0, {\n\t\t\t\t\tdata,\n\t\t\t\t\tsignal: proc._def.type === \"subscription\" ? combinedAbort.signal : void 0\n\t\t\t\t}];\n\t\t\t} catch (cause) {\n\t\t\t\tvar _opts$onError, _call$procedure$_def$, _call$procedure2;\n\t\t\t\tconst error = require_tracked.getTRPCErrorFromUnknown(cause);\n\t\t\t\tconst input = call.result();\n\t\t\t\t(_opts$onError = opts.onError) === null || _opts$onError === void 0 || _opts$onError.call(opts, {\n\t\t\t\t\terror,\n\t\t\t\t\tpath: call.path,\n\t\t\t\t\tinput,\n\t\t\t\t\tctx: ctxManager.valueOrUndefined(),\n\t\t\t\t\ttype: (_call$procedure$_def$ = (_call$procedure2 = call.procedure) === null || _call$procedure2 === void 0 ? void 0 : _call$procedure2._def.type) !== null && _call$procedure$_def$ !== void 0 ? _call$procedure$_def$ : \"unknown\",\n\t\t\t\t\treq: opts.req\n\t\t\t\t});\n\t\t\t\treturn [error, void 0];\n\t\t\t}\n\t\t});\n\t\tif (!info.isBatchCall) {\n\t\t\tconst [call] = info.calls;\n\t\t\tconst [error, result] = await rpcCalls[0];\n\t\t\tswitch (info.type) {\n\t\t\t\tcase \"unknown\":\n\t\t\t\tcase \"mutation\":\n\t\t\t\tcase \"query\": {\n\t\t\t\t\theaders.set(\"content-type\", \"application/json\");\n\t\t\t\t\tif (isDataStream(result === null || result === void 0 ? void 0 : result.data)) throw new require_tracked.TRPCError({\n\t\t\t\t\t\tcode: \"UNSUPPORTED_MEDIA_TYPE\",\n\t\t\t\t\t\tmessage: \"Cannot use stream-like response in non-streaming request - use httpBatchStreamLink\"\n\t\t\t\t\t});\n\t\t\t\t\tconst res = error ? { error: require_getErrorShape.getErrorShape({\n\t\t\t\t\t\tconfig,\n\t\t\t\t\t\tctx: ctxManager.valueOrUndefined(),\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tinput: call.result(),\n\t\t\t\t\t\tpath: call.path,\n\t\t\t\t\t\ttype: info.type\n\t\t\t\t\t}) } : { result: { data: result.data } };\n\t\t\t\t\tconst headResponse$1 = initResponse({\n\t\t\t\t\t\tctx: ctxManager.valueOrUndefined(),\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tresponseMeta: opts.responseMeta,\n\t\t\t\t\t\terrors: error ? [error] : [],\n\t\t\t\t\t\theaders,\n\t\t\t\t\t\tuntransformedJSON: [res]\n\t\t\t\t\t});\n\t\t\t\t\treturn new Response(JSON.stringify(require_tracked.transformTRPCResponse(config, res)), {\n\t\t\t\t\t\tstatus: headResponse$1.status,\n\t\t\t\t\t\theaders\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcase \"subscription\": {\n\t\t\t\t\tconst iterable = require_codes.run(() => {\n\t\t\t\t\t\tif (error) return errorToAsyncIterable(error);\n\t\t\t\t\t\tif (!experimentalSSE) return errorToAsyncIterable(new require_tracked.TRPCError({\n\t\t\t\t\t\t\tcode: \"METHOD_NOT_SUPPORTED\",\n\t\t\t\t\t\t\tmessage: \"Missing experimental flag \\\"sseSubscriptions\\\"\"\n\t\t\t\t\t\t}));\n\t\t\t\t\t\tif (!require_observable.isObservable(result.data) && !require_codes.isAsyncIterable(result.data)) return errorToAsyncIterable(new require_tracked.TRPCError({\n\t\t\t\t\t\t\tmessage: `Subscription ${call.path} did not return an observable or a AsyncGenerator`,\n\t\t\t\t\t\t\tcode: \"INTERNAL_SERVER_ERROR\"\n\t\t\t\t\t\t}));\n\t\t\t\t\t\tconst dataAsIterable = require_observable.isObservable(result.data) ? require_observable.observableToAsyncIterable(result.data, opts.req.signal) : result.data;\n\t\t\t\t\t\treturn dataAsIterable;\n\t\t\t\t\t});\n\t\t\t\t\tconst stream = sseStreamProducer((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, config.sse), {}, {\n\t\t\t\t\t\tdata: iterable,\n\t\t\t\t\t\tserialize: (v) => config.transformer.output.serialize(v),\n\t\t\t\t\t\tformatError(errorOpts) {\n\t\t\t\t\t\t\tvar _call$procedure$_def$2, _call$procedure3, _opts$onError2;\n\t\t\t\t\t\t\tconst error$1 = require_tracked.getTRPCErrorFromUnknown(errorOpts.error);\n\t\t\t\t\t\t\tconst input = call === null || call === void 0 ? void 0 : call.result();\n\t\t\t\t\t\t\tconst path = call === null || call === void 0 ? void 0 : call.path;\n\t\t\t\t\t\t\tconst type = (_call$procedure$_def$2 = call === null || call === void 0 || (_call$procedure3 = call.procedure) === null || _call$procedure3 === void 0 ? void 0 : _call$procedure3._def.type) !== null && _call$procedure$_def$2 !== void 0 ? _call$procedure$_def$2 : \"unknown\";\n\t\t\t\t\t\t\t(_opts$onError2 = opts.onError) === null || _opts$onError2 === void 0 || _opts$onError2.call(opts, {\n\t\t\t\t\t\t\t\terror: error$1,\n\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tctx: ctxManager.valueOrUndefined(),\n\t\t\t\t\t\t\t\treq: opts.req,\n\t\t\t\t\t\t\t\ttype\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tconst shape = require_getErrorShape.getErrorShape({\n\t\t\t\t\t\t\t\tconfig,\n\t\t\t\t\t\t\t\tctx: ctxManager.valueOrUndefined(),\n\t\t\t\t\t\t\t\terror: error$1,\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\ttype\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn shape;\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t\tfor (const [key, value] of Object.entries(sseHeaders)) headers.set(key, value);\n\t\t\t\t\tconst headResponse$1 = initResponse({\n\t\t\t\t\t\tctx: ctxManager.valueOrUndefined(),\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tresponseMeta: opts.responseMeta,\n\t\t\t\t\t\terrors: [],\n\t\t\t\t\t\theaders,\n\t\t\t\t\t\tuntransformedJSON: null\n\t\t\t\t\t});\n\t\t\t\t\tconst abortSignal = result === null || result === void 0 ? void 0 : result.signal;\n\t\t\t\t\tlet responseBody = stream;\n\t\t\t\t\tif (abortSignal) {\n\t\t\t\t\t\tconst reader = stream.getReader();\n\t\t\t\t\t\tconst onAbort = () => void reader.cancel();\n\t\t\t\t\t\tif (abortSignal.aborted) onAbort();\n\t\t\t\t\t\telse abortSignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\t\t\tresponseBody = new ReadableStream({\n\t\t\t\t\t\t\tasync pull(controller) {\n\t\t\t\t\t\t\t\tconst chunk = await reader.read();\n\t\t\t\t\t\t\t\tif (chunk.done) {\n\t\t\t\t\t\t\t\t\tabortSignal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t\t} else controller.enqueue(chunk.value);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcancel() {\n\t\t\t\t\t\t\t\tabortSignal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\t\t\treturn reader.cancel();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn new Response(responseBody, {\n\t\t\t\t\t\theaders,\n\t\t\t\t\t\tstatus: headResponse$1.status\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (info.accept === \"application/jsonl\") {\n\t\t\theaders.set(\"content-type\", \"application/json\");\n\t\t\theaders.set(\"transfer-encoding\", \"chunked\");\n\t\t\tconst headResponse$1 = initResponse({\n\t\t\t\tctx: ctxManager.valueOrUndefined(),\n\t\t\t\tinfo,\n\t\t\t\tresponseMeta: opts.responseMeta,\n\t\t\t\terrors: [],\n\t\t\t\theaders,\n\t\t\t\tuntransformedJSON: null\n\t\t\t});\n\t\t\tconst stream = jsonlStreamProducer((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, config.jsonl), {}, {\n\t\t\t\tmaxDepth: Infinity,\n\t\t\t\tdata: rpcCalls.map(async (res, index) => {\n\t\t\t\t\tconst [error, result] = await res;\n\t\t\t\t\tconst call = info.calls[index];\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tvar _procedure$_def$type, _procedure;\n\t\t\t\t\t\treturn { error: require_getErrorShape.getErrorShape({\n\t\t\t\t\t\t\tconfig,\n\t\t\t\t\t\t\tctx: ctxManager.valueOrUndefined(),\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\tinput: call.result(),\n\t\t\t\t\t\t\tpath: call.path,\n\t\t\t\t\t\t\ttype: (_procedure$_def$type = (_procedure = call.procedure) === null || _procedure === void 0 ? void 0 : _procedure._def.type) !== null && _procedure$_def$type !== void 0 ? _procedure$_def$type : \"unknown\"\n\t\t\t\t\t\t}) };\n\t\t\t\t\t}\n\t\t\t\t\t/**\n\t\t\t\t\t* Not very pretty, but we need to wrap nested data in promises\n\t\t\t\t\t* Our stream producer will only resolve top-level async values or async values that are directly nested in another async value\n\t\t\t\t\t*/\n\t\t\t\t\tconst iterable = require_observable.isObservable(result.data) ? require_observable.observableToAsyncIterable(result.data, opts.req.signal) : Promise.resolve(result.data);\n\t\t\t\t\treturn { result: Promise.resolve({ data: iterable }) };\n\t\t\t\t}),\n\t\t\t\tserialize: (data) => config.transformer.output.serialize(data),\n\t\t\t\tonError: (cause) => {\n\t\t\t\t\tvar _opts$onError3, _info$type;\n\t\t\t\t\t(_opts$onError3 = opts.onError) === null || _opts$onError3 === void 0 || _opts$onError3.call(opts, {\n\t\t\t\t\t\terror: require_tracked.getTRPCErrorFromUnknown(cause),\n\t\t\t\t\t\tpath: void 0,\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\tctx: ctxManager.valueOrUndefined(),\n\t\t\t\t\t\treq: opts.req,\n\t\t\t\t\t\ttype: (_info$type = info === null || info === void 0 ? void 0 : info.type) !== null && _info$type !== void 0 ? _info$type : \"unknown\"\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatError(errorOpts) {\n\t\t\t\t\tvar _call$procedure$_def$3, _call$procedure4;\n\t\t\t\t\tconst call = info === null || info === void 0 ? void 0 : info.calls[errorOpts.path[0]];\n\t\t\t\t\tconst error = require_tracked.getTRPCErrorFromUnknown(errorOpts.error);\n\t\t\t\t\tconst input = call === null || call === void 0 ? void 0 : call.result();\n\t\t\t\t\tconst path = call === null || call === void 0 ? void 0 : call.path;\n\t\t\t\t\tconst type = (_call$procedure$_def$3 = call === null || call === void 0 || (_call$procedure4 = call.procedure) === null || _call$procedure4 === void 0 ? void 0 : _call$procedure4._def.type) !== null && _call$procedure$_def$3 !== void 0 ? _call$procedure$_def$3 : \"unknown\";\n\t\t\t\t\tconst shape = require_getErrorShape.getErrorShape({\n\t\t\t\t\t\tconfig,\n\t\t\t\t\t\tctx: ctxManager.valueOrUndefined(),\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\ttype\n\t\t\t\t\t});\n\t\t\t\t\treturn shape;\n\t\t\t\t}\n\t\t\t}));\n\t\t\treturn new Response(stream, {\n\t\t\t\theaders,\n\t\t\t\tstatus: headResponse$1.status\n\t\t\t});\n\t\t}\n\t\t/**\n\t\t* Non-streaming response:\n\t\t* - await all responses in parallel, blocking on the slowest one\n\t\t* - create headers with known response body\n\t\t* - return a complete HTTPResponse\n\t\t*/\n\t\theaders.set(\"content-type\", \"application/json\");\n\t\tconst results = (await Promise.all(rpcCalls)).map((res) => {\n\t\t\tconst [error, result] = res;\n\t\t\tif (error) return res;\n\t\t\tif (isDataStream(result.data)) return [new require_tracked.TRPCError({\n\t\t\t\tcode: \"UNSUPPORTED_MEDIA_TYPE\",\n\t\t\t\tmessage: \"Cannot use stream-like response in non-streaming request - use httpBatchStreamLink\"\n\t\t\t}), void 0];\n\t\t\treturn res;\n\t\t});\n\t\tconst resultAsRPCResponse = results.map(([error, result], index) => {\n\t\t\tconst call = info.calls[index];\n\t\t\tif (error) {\n\t\t\t\tvar _call$procedure$_def$4, _call$procedure5;\n\t\t\t\treturn { error: require_getErrorShape.getErrorShape({\n\t\t\t\t\tconfig,\n\t\t\t\t\tctx: ctxManager.valueOrUndefined(),\n\t\t\t\t\terror,\n\t\t\t\t\tinput: call.result(),\n\t\t\t\t\tpath: call.path,\n\t\t\t\t\ttype: (_call$procedure$_def$4 = (_call$procedure5 = call.procedure) === null || _call$procedure5 === void 0 ? void 0 : _call$procedure5._def.type) !== null && _call$procedure$_def$4 !== void 0 ? _call$procedure$_def$4 : \"unknown\"\n\t\t\t\t}) };\n\t\t\t}\n\t\t\treturn { result: { data: result.data } };\n\t\t});\n\t\tconst errors = results.map(([error]) => error).filter(Boolean);\n\t\tconst headResponse = initResponse({\n\t\t\tctx: ctxManager.valueOrUndefined(),\n\t\t\tinfo,\n\t\t\tresponseMeta: opts.responseMeta,\n\t\t\tuntransformedJSON: resultAsRPCResponse,\n\t\t\terrors,\n\t\t\theaders\n\t\t});\n\t\treturn new Response(JSON.stringify(require_tracked.transformTRPCResponse(config, resultAsRPCResponse)), {\n\t\t\tstatus: headResponse.status,\n\t\t\theaders\n\t\t});\n\t} catch (cause) {\n\t\tvar _info$type2;\n\t\tconst [_infoError, info] = infoTuple;\n\t\tconst ctx = ctxManager.valueOrUndefined();\n\t\tconst { error, untransformedJSON, body } = caughtErrorToData(cause, {\n\t\t\topts,\n\t\t\tctx: ctxManager.valueOrUndefined(),\n\t\t\ttype: (_info$type2 = info === null || info === void 0 ? void 0 : info.type) !== null && _info$type2 !== void 0 ? _info$type2 : \"unknown\"\n\t\t});\n\t\tconst headResponse = initResponse({\n\t\t\tctx,\n\t\t\tinfo,\n\t\t\tresponseMeta: opts.responseMeta,\n\t\t\tuntransformedJSON,\n\t\t\terrors: [error],\n\t\t\theaders\n\t\t});\n\t\treturn new Response(body, {\n\t\t\tstatus: headResponse.status,\n\t\t\theaders\n\t\t});\n\t}\n}\n\n//#endregion\nObject.defineProperty(exports, 'Unpromise', {\n enumerable: true,\n get: function () {\n return Unpromise;\n }\n});\nObject.defineProperty(exports, 'createDeferred', {\n enumerable: true,\n get: function () {\n return createDeferred;\n }\n});\nObject.defineProperty(exports, 'getAcceptHeader', {\n enumerable: true,\n get: function () {\n return getAcceptHeader;\n }\n});\nObject.defineProperty(exports, 'getRequestInfo', {\n enumerable: true,\n get: function () {\n return getRequestInfo;\n }\n});\nObject.defineProperty(exports, 'isAbortError', {\n enumerable: true,\n get: function () {\n return isAbortError;\n }\n});\nObject.defineProperty(exports, 'isPromise', {\n enumerable: true,\n get: function () {\n return isPromise;\n }\n});\nObject.defineProperty(exports, 'iteratorResource', {\n enumerable: true,\n get: function () {\n return iteratorResource;\n }\n});\nObject.defineProperty(exports, 'jsonlStreamConsumer', {\n enumerable: true,\n get: function () {\n return jsonlStreamConsumer;\n }\n});\nObject.defineProperty(exports, 'jsonlStreamProducer', {\n enumerable: true,\n get: function () {\n return jsonlStreamProducer;\n }\n});\nObject.defineProperty(exports, 'makeAsyncResource', {\n enumerable: true,\n get: function () {\n return makeAsyncResource;\n }\n});\nObject.defineProperty(exports, 'makeResource', {\n enumerable: true,\n get: function () {\n return makeResource;\n }\n});\nObject.defineProperty(exports, 'parseConnectionParamsFromString', {\n enumerable: true,\n get: function () {\n return parseConnectionParamsFromString;\n }\n});\nObject.defineProperty(exports, 'parseConnectionParamsFromUnknown', {\n enumerable: true,\n get: function () {\n return parseConnectionParamsFromUnknown;\n }\n});\nObject.defineProperty(exports, 'require_usingCtx', {\n enumerable: true,\n get: function () {\n return require_usingCtx;\n }\n});\nObject.defineProperty(exports, 'resolveResponse', {\n enumerable: true,\n get: function () {\n return resolveResponse;\n }\n});\nObject.defineProperty(exports, 'sseHeaders', {\n enumerable: true,\n get: function () {\n return sseHeaders;\n }\n});\nObject.defineProperty(exports, 'sseStreamConsumer', {\n enumerable: true,\n get: function () {\n return sseStreamConsumer;\n }\n});\nObject.defineProperty(exports, 'sseStreamProducer', {\n enumerable: true,\n get: function () {\n return sseStreamProducer;\n }\n});\nObject.defineProperty(exports, 'takeWithGrace', {\n enumerable: true,\n get: function () {\n return takeWithGrace;\n }\n});\nObject.defineProperty(exports, 'throwAbortError', {\n enumerable: true,\n get: function () {\n return throwAbortError;\n }\n});","\n//#region src/unstable-core-do-not-import/http/contentTypeParsers.ts\nconst octetInputParser = {\n\t_input: null,\n\t_output: null,\n\tparse(input) {\n\t\tif (input instanceof ReadableStream) return input;\n\t\tthrow new Error(`Parsed input was expected to be a ReadableStream but was: ${typeof input}`);\n\t}\n};\n\n//#endregion\nObject.defineProperty(exports, 'octetInputParser', {\n enumerable: true,\n get: function () {\n return octetInputParser;\n }\n});","const require_codes = require('./codes-BfZsPdy-.cjs');\n\n//#region src/unstable-core-do-not-import/http/formDataToObject.ts\nconst isNumberString = (str) => /^\\d+$/.test(str);\nfunction set(obj, path, value) {\n\tif (path.length > 1) {\n\t\tconst newPath = [...path];\n\t\tconst key = newPath.shift();\n\t\tconst nextKey = newPath[0];\n\t\tif (!Object.hasOwn(obj, key)) obj[key] = isNumberString(nextKey) ? [] : require_codes.emptyObject();\n\t\telse if (Array.isArray(obj[key]) && !isNumberString(nextKey)) obj[key] = Object.fromEntries(Object.entries(obj[key]));\n\t\tset(obj[key], newPath, value);\n\t\treturn;\n\t}\n\tconst p = path[0];\n\tif (obj[p] === void 0) obj[p] = value;\n\telse if (Array.isArray(obj[p])) obj[p].push(value);\n\telse obj[p] = [obj[p], value];\n}\nfunction formDataToObject(formData) {\n\tconst obj = require_codes.emptyObject();\n\tfor (const [key, value] of formData.entries()) {\n\t\tconst parts = key.split(/[\\.\\[\\]]/).filter(Boolean);\n\t\tset(obj, parts, value);\n\t}\n\treturn obj;\n}\n\n//#endregion\nObject.defineProperty(exports, 'formDataToObject', {\n enumerable: true,\n get: function () {\n return formDataToObject;\n }\n});","const require_getErrorShape = require('./getErrorShape-MR4DZeb7.cjs');\nconst require_codes = require('./codes-BfZsPdy-.cjs');\nconst require_tracked = require('./tracked-DX1GMBVX.cjs');\nconst require_parseTRPCMessage = require('./parseTRPCMessage-7Ltmq-Fb.cjs');\nconst require_resolveResponse = require('./resolveResponse-Ck4MWy4N.cjs');\nconst require_contentTypeParsers = require('./contentTypeParsers-iAFF_pJG.cjs');\nconst require_unstable_core_do_not_import = require('./unstable-core-do-not-import-fsjhEhgh.cjs');\nrequire('./observable-B1Nk6r1H.cjs');\nconst require_initTRPC = require('./initTRPC-_LnoxDdS.cjs');\n\nexports.HTTP_CODE_TO_JSONRPC2 = require_getErrorShape.HTTP_CODE_TO_JSONRPC2;\nexports.JSONRPC2_TO_HTTP_CODE = require_getErrorShape.JSONRPC2_TO_HTTP_CODE;\nexports.StandardSchemaV1Error = require_initTRPC.StandardSchemaV1Error;\nexports.TRPCError = require_tracked.TRPCError;\nexports.TRPC_ERROR_CODES_BY_KEY = require_codes.TRPC_ERROR_CODES_BY_KEY;\nexports.TRPC_ERROR_CODES_BY_NUMBER = require_codes.TRPC_ERROR_CODES_BY_NUMBER;\nexports.Unpromise = require_resolveResponse.Unpromise;\nexports.abortSignalsAnyPonyfill = require_codes.abortSignalsAnyPonyfill;\nexports.assert = require_codes.assert;\nexports.callProcedure = require_tracked.callProcedure;\nexports.createBuilder = require_initTRPC.createBuilder;\nexports.createCallerFactory = require_tracked.createCallerFactory;\nexports.createDeferred = require_resolveResponse.createDeferred;\nexports.createFlatProxy = require_getErrorShape.createFlatProxy;\nexports.createInputMiddleware = require_initTRPC.createInputMiddleware;\nexports.createMiddlewareFactory = require_initTRPC.createMiddlewareFactory;\nexports.createOutputMiddleware = require_initTRPC.createOutputMiddleware;\nexports.createRecursiveProxy = require_getErrorShape.createRecursiveProxy;\nexports.createRouterFactory = require_tracked.createRouterFactory;\nexports.defaultFormatter = require_tracked.defaultFormatter;\nexports.defaultTransformer = require_tracked.defaultTransformer;\nexports.emptyObject = require_codes.emptyObject;\nexports.experimental_standaloneMiddleware = require_initTRPC.experimental_standaloneMiddleware;\nexports.formDataToObject = require_unstable_core_do_not_import.formDataToObject;\nexports.getAcceptHeader = require_resolveResponse.getAcceptHeader;\nexports.getCauseFromUnknown = require_tracked.getCauseFromUnknown;\nexports.getDataTransformer = require_tracked.getDataTransformer;\nexports.getErrorShape = require_getErrorShape.getErrorShape;\nexports.getHTTPStatusCode = require_getErrorShape.getHTTPStatusCode;\nexports.getHTTPStatusCodeFromError = require_getErrorShape.getHTTPStatusCodeFromError;\nexports.getParseFn = require_initTRPC.getParseFn;\nexports.getProcedureAtPath = require_tracked.getProcedureAtPath;\nexports.getRequestInfo = require_resolveResponse.getRequestInfo;\nexports.getStatusCodeFromKey = require_getErrorShape.getStatusCodeFromKey;\nexports.getStatusKeyFromCode = require_getErrorShape.getStatusKeyFromCode;\nexports.getTRPCErrorFromUnknown = require_tracked.getTRPCErrorFromUnknown;\nexports.identity = require_codes.identity;\nexports.initTRPC = require_initTRPC.initTRPC;\nexports.isAbortError = require_resolveResponse.isAbortError;\nexports.isAsyncIterable = require_codes.isAsyncIterable;\nexports.isFunction = require_codes.isFunction;\nexports.isObject = require_codes.isObject;\nexports.isPromise = require_resolveResponse.isPromise;\nexports.isServerDefault = require_initTRPC.isServerDefault;\nexports.isTrackedEnvelope = require_tracked.isTrackedEnvelope;\nexports.iteratorResource = require_resolveResponse.iteratorResource;\nexports.jsonlStreamConsumer = require_resolveResponse.jsonlStreamConsumer;\nexports.jsonlStreamProducer = require_resolveResponse.jsonlStreamProducer;\nexports.lazy = require_tracked.lazy;\nexports.makeAsyncResource = require_resolveResponse.makeAsyncResource;\nexports.makeResource = require_resolveResponse.makeResource;\nexports.mergeRouters = require_tracked.mergeRouters;\nexports.mergeWithoutOverrides = require_codes.mergeWithoutOverrides;\nexports.middlewareMarker = require_initTRPC.middlewareMarker;\nexports.noop = require_codes.noop;\nexports.octetInputParser = require_contentTypeParsers.octetInputParser;\nexports.parseConnectionParamsFromString = require_resolveResponse.parseConnectionParamsFromString;\nexports.parseConnectionParamsFromUnknown = require_resolveResponse.parseConnectionParamsFromUnknown;\nexports.parseTRPCMessage = require_parseTRPCMessage.parseTRPCMessage;\nexports.procedureTypes = require_parseTRPCMessage.procedureTypes;\nexports.resolveResponse = require_resolveResponse.resolveResponse;\nexports.retryableRpcCodes = require_codes.retryableRpcCodes;\nexports.run = require_codes.run;\nexports.sleep = require_codes.sleep;\nexports.sse = require_tracked.sse;\nexports.sseHeaders = require_resolveResponse.sseHeaders;\nexports.sseStreamConsumer = require_resolveResponse.sseStreamConsumer;\nexports.sseStreamProducer = require_resolveResponse.sseStreamProducer;\nexports.takeWithGrace = require_resolveResponse.takeWithGrace;\nexports.throwAbortError = require_resolveResponse.throwAbortError;\nexports.tracked = require_tracked.tracked;\nexports.transformResult = require_tracked.transformResult;\nexports.transformTRPCResponse = require_tracked.transformTRPCResponse;","const require_chunk = require('./chunk-DWy1uDak.cjs');\nconst require_objectSpread2$1 = require('./objectSpread2-Bsvh_OqM.cjs');\nconst __trpc_server_unstable_core_do_not_import = require_chunk.__toESM(require(\"@trpc/server/unstable-core-do-not-import\"));\n\n//#region src/TRPCClientError.ts\nvar import_defineProperty = require_chunk.__toESM(require_objectSpread2$1.require_defineProperty(), 1);\nvar import_objectSpread2 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);\nfunction isTRPCClientError(cause) {\n\treturn cause instanceof TRPCClientError;\n}\nfunction isTRPCErrorResponse(obj) {\n\treturn (0, __trpc_server_unstable_core_do_not_import.isObject)(obj) && (0, __trpc_server_unstable_core_do_not_import.isObject)(obj[\"error\"]) && typeof obj[\"error\"][\"code\"] === \"number\" && typeof obj[\"error\"][\"message\"] === \"string\";\n}\nfunction getMessageFromUnknownError(err, fallback) {\n\tif (typeof err === \"string\") return err;\n\tif ((0, __trpc_server_unstable_core_do_not_import.isObject)(err) && typeof err[\"message\"] === \"string\") return err[\"message\"];\n\treturn fallback;\n}\nvar TRPCClientError = class TRPCClientError extends Error {\n\tconstructor(message, opts) {\n\t\tvar _opts$result, _opts$result2;\n\t\tconst cause = opts === null || opts === void 0 ? void 0 : opts.cause;\n\t\tsuper(message, { cause });\n\t\t(0, import_defineProperty.default)(this, \"cause\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"shape\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"data\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"meta\", void 0);\n\t\tthis.meta = opts === null || opts === void 0 ? void 0 : opts.meta;\n\t\tthis.cause = cause;\n\t\tthis.shape = opts === null || opts === void 0 || (_opts$result = opts.result) === null || _opts$result === void 0 ? void 0 : _opts$result.error;\n\t\tthis.data = opts === null || opts === void 0 || (_opts$result2 = opts.result) === null || _opts$result2 === void 0 ? void 0 : _opts$result2.error.data;\n\t\tthis.name = \"TRPCClientError\";\n\t\tObject.setPrototypeOf(this, TRPCClientError.prototype);\n\t}\n\tstatic from(_cause, opts = {}) {\n\t\tconst cause = _cause;\n\t\tif (isTRPCClientError(cause)) {\n\t\t\tif (opts.meta) cause.meta = (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, cause.meta), opts.meta);\n\t\t\treturn cause;\n\t\t}\n\t\tif (isTRPCErrorResponse(cause)) return new TRPCClientError(cause.error.message, (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, {\n\t\t\tresult: cause,\n\t\t\tcause: opts.cause\n\t\t}));\n\t\treturn new TRPCClientError(getMessageFromUnknownError(cause, \"Unknown error\"), (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, { cause }));\n\t}\n};\n\n//#endregion\nObject.defineProperty(exports, 'TRPCClientError', {\n enumerable: true,\n get: function () {\n return TRPCClientError;\n }\n});\nObject.defineProperty(exports, 'isTRPCClientError', {\n enumerable: true,\n get: function () {\n return isTRPCClientError;\n }\n});","\n//#region src/internals/transformer.ts\n/**\n* @internal\n*/\n/**\n* @internal\n*/\nfunction getTransformer(transformer) {\n\tconst _transformer = transformer;\n\tif (!_transformer) return {\n\t\tinput: {\n\t\t\tserialize: (data) => data,\n\t\t\tdeserialize: (data) => data\n\t\t},\n\t\toutput: {\n\t\t\tserialize: (data) => data,\n\t\t\tdeserialize: (data) => data\n\t\t}\n\t};\n\tif (\"input\" in _transformer) return _transformer;\n\treturn {\n\t\tinput: _transformer,\n\t\toutput: _transformer\n\t};\n}\n\n//#endregion\nObject.defineProperty(exports, 'getTransformer', {\n enumerable: true,\n get: function () {\n return getTransformer;\n }\n});","const require_chunk = require('./chunk-DWy1uDak.cjs');\nconst require_objectSpread2$1 = require('./objectSpread2-Bsvh_OqM.cjs');\nconst require_unstable_internals = require('./unstable-internals-M84gUQCV.cjs');\n\n//#region src/getFetch.ts\nconst isFunction = (fn) => typeof fn === \"function\";\nfunction getFetch(customFetchImpl) {\n\tif (customFetchImpl) return customFetchImpl;\n\tif (typeof window !== \"undefined\" && isFunction(window.fetch)) return window.fetch;\n\tif (typeof globalThis !== \"undefined\" && isFunction(globalThis.fetch)) return globalThis.fetch;\n\tthrow new Error(\"No fetch implementation found\");\n}\n\n//#endregion\n//#region src/links/internals/httpUtils.ts\nvar import_objectSpread2 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);\nfunction resolveHTTPLinkOptions(opts) {\n\treturn {\n\t\turl: opts.url.toString(),\n\t\tfetch: opts.fetch,\n\t\ttransformer: require_unstable_internals.getTransformer(opts.transformer),\n\t\tmethodOverride: opts.methodOverride\n\t};\n}\nfunction arrayToDict(array) {\n\tconst dict = {};\n\tfor (let index = 0; index < array.length; index++) {\n\t\tconst element = array[index];\n\t\tdict[index] = element;\n\t}\n\treturn dict;\n}\nconst METHOD = {\n\tquery: \"GET\",\n\tmutation: \"POST\",\n\tsubscription: \"PATCH\"\n};\nfunction getInput(opts) {\n\treturn \"input\" in opts ? opts.transformer.input.serialize(opts.input) : arrayToDict(opts.inputs.map((_input) => opts.transformer.input.serialize(_input)));\n}\nconst getUrl = (opts) => {\n\tconst parts = opts.url.split(\"?\");\n\tconst base = parts[0].replace(/\\/$/, \"\");\n\tlet url = base + \"/\" + opts.path;\n\tconst queryParts = [];\n\tif (parts[1]) queryParts.push(parts[1]);\n\tif (\"inputs\" in opts) queryParts.push(\"batch=1\");\n\tif (opts.type === \"query\" || opts.type === \"subscription\") {\n\t\tconst input = getInput(opts);\n\t\tif (input !== void 0 && opts.methodOverride !== \"POST\") queryParts.push(`input=${encodeURIComponent(JSON.stringify(input))}`);\n\t}\n\tif (queryParts.length) url += \"?\" + queryParts.join(\"&\");\n\treturn url;\n};\nconst getBody = (opts) => {\n\tif (opts.type === \"query\" && opts.methodOverride !== \"POST\") return void 0;\n\tconst input = getInput(opts);\n\treturn input !== void 0 ? JSON.stringify(input) : void 0;\n};\nconst jsonHttpRequester = (opts) => {\n\treturn httpRequest((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, {\n\t\tcontentTypeHeader: \"application/json\",\n\t\tgetUrl,\n\t\tgetBody\n\t}));\n};\n/**\n* Polyfill for DOMException with AbortError name\n*/\nvar AbortError = class extends Error {\n\tconstructor() {\n\t\tconst name = \"AbortError\";\n\t\tsuper(name);\n\t\tthis.name = name;\n\t\tthis.message = name;\n\t}\n};\n/**\n* Polyfill for `signal.throwIfAborted()`\n*\n* @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/throwIfAborted\n*/\nconst throwIfAborted = (signal) => {\n\tvar _signal$throwIfAborte;\n\tif (!(signal === null || signal === void 0 ? void 0 : signal.aborted)) return;\n\t(_signal$throwIfAborte = signal.throwIfAborted) === null || _signal$throwIfAborte === void 0 || _signal$throwIfAborte.call(signal);\n\tif (typeof DOMException !== \"undefined\") throw new DOMException(\"AbortError\", \"AbortError\");\n\tthrow new AbortError();\n};\nasync function fetchHTTPResponse(opts) {\n\tvar _opts$methodOverride, _opts$trpcAcceptHeade;\n\tthrowIfAborted(opts.signal);\n\tconst url = opts.getUrl(opts);\n\tconst body = opts.getBody(opts);\n\tconst method = (_opts$methodOverride = opts.methodOverride) !== null && _opts$methodOverride !== void 0 ? _opts$methodOverride : METHOD[opts.type];\n\tconst resolvedHeaders = await (async () => {\n\t\tconst heads = await opts.headers();\n\t\tif (Symbol.iterator in heads) return Object.fromEntries(heads);\n\t\treturn heads;\n\t})();\n\tconst headers = (0, import_objectSpread2.default)((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts.contentTypeHeader && method !== \"GET\" ? { \"content-type\": opts.contentTypeHeader } : {}), opts.trpcAcceptHeader ? { [(_opts$trpcAcceptHeade = opts.trpcAcceptHeaderKey) !== null && _opts$trpcAcceptHeade !== void 0 ? _opts$trpcAcceptHeade : \"trpc-accept\"]: opts.trpcAcceptHeader } : void 0), resolvedHeaders);\n\treturn getFetch(opts.fetch)(url, {\n\t\tmethod,\n\t\tsignal: opts.signal,\n\t\tbody,\n\t\theaders\n\t});\n}\nasync function httpRequest(opts) {\n\tconst meta = {};\n\tconst res = await fetchHTTPResponse(opts);\n\tmeta.response = res;\n\tconst json = await res.json();\n\tmeta.responseJSON = json;\n\treturn {\n\t\tjson,\n\t\tmeta\n\t};\n}\n\n//#endregion\nObject.defineProperty(exports, 'fetchHTTPResponse', {\n enumerable: true,\n get: function () {\n return fetchHTTPResponse;\n }\n});\nObject.defineProperty(exports, 'getBody', {\n enumerable: true,\n get: function () {\n return getBody;\n }\n});\nObject.defineProperty(exports, 'getFetch', {\n enumerable: true,\n get: function () {\n return getFetch;\n }\n});\nObject.defineProperty(exports, 'getUrl', {\n enumerable: true,\n get: function () {\n return getUrl;\n }\n});\nObject.defineProperty(exports, 'httpRequest', {\n enumerable: true,\n get: function () {\n return httpRequest;\n }\n});\nObject.defineProperty(exports, 'jsonHttpRequester', {\n enumerable: true,\n get: function () {\n return jsonHttpRequester;\n }\n});\nObject.defineProperty(exports, 'resolveHTTPLinkOptions', {\n enumerable: true,\n get: function () {\n return resolveHTTPLinkOptions;\n }\n});","const require_chunk = require('./chunk-DWy1uDak.cjs');\nconst require_objectSpread2$1 = require('./objectSpread2-Bsvh_OqM.cjs');\nconst require_TRPCClientError = require('./TRPCClientError-CQrTQLrk.cjs');\nconst require_httpUtils = require('./httpUtils-wv2o-njD.cjs');\nconst __trpc_server_observable = require_chunk.__toESM(require(\"@trpc/server/observable\"));\nconst __trpc_server_unstable_core_do_not_import = require_chunk.__toESM(require(\"@trpc/server/unstable-core-do-not-import\"));\n\n//#region src/links/internals/contentTypes.ts\nfunction isOctetType(input) {\n\treturn input instanceof Uint8Array || input instanceof Blob;\n}\nfunction isFormData(input) {\n\treturn input instanceof FormData;\n}\nfunction isNonJsonSerializable(input) {\n\treturn isOctetType(input) || isFormData(input);\n}\n\n//#endregion\n//#region src/links/httpLink.ts\nvar import_objectSpread2 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);\nconst universalRequester = (opts) => {\n\tif (\"input\" in opts) {\n\t\tconst { input } = opts;\n\t\tif (isFormData(input)) {\n\t\t\tif (opts.type !== \"mutation\" && opts.methodOverride !== \"POST\") throw new Error(\"FormData is only supported for mutations\");\n\t\t\treturn require_httpUtils.httpRequest((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, {\n\t\t\t\tcontentTypeHeader: void 0,\n\t\t\t\tgetUrl: require_httpUtils.getUrl,\n\t\t\t\tgetBody: () => input\n\t\t\t}));\n\t\t}\n\t\tif (isOctetType(input)) {\n\t\t\tif (opts.type !== \"mutation\" && opts.methodOverride !== \"POST\") throw new Error(\"Octet type input is only supported for mutations\");\n\t\t\treturn require_httpUtils.httpRequest((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, {\n\t\t\t\tcontentTypeHeader: \"application/octet-stream\",\n\t\t\t\tgetUrl: require_httpUtils.getUrl,\n\t\t\t\tgetBody: () => input\n\t\t\t}));\n\t\t}\n\t}\n\treturn require_httpUtils.jsonHttpRequester(opts);\n};\n/**\n* @see https://trpc.io/docs/client/links/httpLink\n*/\nfunction httpLink(opts) {\n\tconst resolvedOpts = require_httpUtils.resolveHTTPLinkOptions(opts);\n\treturn () => {\n\t\treturn (operationOpts) => {\n\t\t\tconst { op } = operationOpts;\n\t\t\treturn (0, __trpc_server_observable.observable)((observer) => {\n\t\t\t\tconst { path, input, type } = op;\n\t\t\t\t/* istanbul ignore if -- @preserve */\n\t\t\t\tif (type === \"subscription\") throw new Error(\"Subscriptions are unsupported by `httpLink` - use `httpSubscriptionLink` or `wsLink`\");\n\t\t\t\tconst request = universalRequester((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, resolvedOpts), {}, {\n\t\t\t\t\ttype,\n\t\t\t\t\tpath,\n\t\t\t\t\tinput,\n\t\t\t\t\tsignal: op.signal,\n\t\t\t\t\theaders() {\n\t\t\t\t\t\tif (!opts.headers) return {};\n\t\t\t\t\t\tif (typeof opts.headers === \"function\") return opts.headers({ op });\n\t\t\t\t\t\treturn opts.headers;\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t\tlet meta = void 0;\n\t\t\t\trequest.then((res) => {\n\t\t\t\t\tmeta = res.meta;\n\t\t\t\t\tconst transformed = (0, __trpc_server_unstable_core_do_not_import.transformResult)(res.json, resolvedOpts.transformer.output);\n\t\t\t\t\tif (!transformed.ok) {\n\t\t\t\t\t\tobserver.error(require_TRPCClientError.TRPCClientError.from(transformed.error, { meta }));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tobserver.next({\n\t\t\t\t\t\tcontext: res.meta,\n\t\t\t\t\t\tresult: transformed.result\n\t\t\t\t\t});\n\t\t\t\t\tobserver.complete();\n\t\t\t\t}).catch((cause) => {\n\t\t\t\t\tobserver.error(require_TRPCClientError.TRPCClientError.from(cause, { meta }));\n\t\t\t\t});\n\t\t\t\treturn () => {};\n\t\t\t});\n\t\t};\n\t};\n}\n\n//#endregion\nObject.defineProperty(exports, 'httpLink', {\n enumerable: true,\n get: function () {\n return httpLink;\n }\n});\nObject.defineProperty(exports, 'isFormData', {\n enumerable: true,\n get: function () {\n return isFormData;\n }\n});\nObject.defineProperty(exports, 'isNonJsonSerializable', {\n enumerable: true,\n get: function () {\n return isNonJsonSerializable;\n }\n});\nObject.defineProperty(exports, 'isOctetType', {\n enumerable: true,\n get: function () {\n return isOctetType;\n }\n});","const require_chunk = require('./chunk-DWy1uDak.cjs');\nconst require_objectSpread2$1 = require('./objectSpread2-Bsvh_OqM.cjs');\nconst require_TRPCClientError = require('./TRPCClientError-CQrTQLrk.cjs');\nconst require_httpUtils = require('./httpUtils-wv2o-njD.cjs');\nconst __trpc_server_observable = require_chunk.__toESM(require(\"@trpc/server/observable\"));\nconst __trpc_server_unstable_core_do_not_import = require_chunk.__toESM(require(\"@trpc/server/unstable-core-do-not-import\"));\n\n//#region src/internals/dataLoader.ts\n/**\n* A function that should never be called unless we messed something up.\n*/\nconst throwFatalError = () => {\n\tthrow new Error(\"Something went wrong. Please submit an issue at https://github.com/trpc/trpc/issues/new\");\n};\n/**\n* Dataloader that's very inspired by https://github.com/graphql/dataloader\n* Less configuration, no caching, and allows you to cancel requests\n* When cancelling a single fetch the whole batch will be cancelled only when _all_ items are cancelled\n*/\nfunction dataLoader(batchLoader) {\n\tlet pendingItems = null;\n\tlet dispatchTimer = null;\n\tconst destroyTimerAndPendingItems = () => {\n\t\tclearTimeout(dispatchTimer);\n\t\tdispatchTimer = null;\n\t\tpendingItems = null;\n\t};\n\t/**\n\t* Iterate through the items and split them into groups based on the `batchLoader`'s validate function\n\t*/\n\tfunction groupItems(items) {\n\t\tconst groupedItems = [[]];\n\t\tlet index = 0;\n\t\twhile (true) {\n\t\t\tconst item = items[index];\n\t\t\tif (!item) break;\n\t\t\tconst lastGroup = groupedItems[groupedItems.length - 1];\n\t\t\tif (item.aborted) {\n\t\t\t\tvar _item$reject;\n\t\t\t\t(_item$reject = item.reject) === null || _item$reject === void 0 || _item$reject.call(item, new Error(\"Aborted\"));\n\t\t\t\tindex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst isValid = batchLoader.validate(lastGroup.concat(item).map((it) => it.key));\n\t\t\tif (isValid) {\n\t\t\t\tlastGroup.push(item);\n\t\t\t\tindex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (lastGroup.length === 0) {\n\t\t\t\tvar _item$reject2;\n\t\t\t\t(_item$reject2 = item.reject) === null || _item$reject2 === void 0 || _item$reject2.call(item, new Error(\"Input is too big for a single dispatch\"));\n\t\t\t\tindex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tgroupedItems.push([]);\n\t\t}\n\t\treturn groupedItems;\n\t}\n\tfunction dispatch() {\n\t\tconst groupedItems = groupItems(pendingItems);\n\t\tdestroyTimerAndPendingItems();\n\t\tfor (const items of groupedItems) {\n\t\t\tif (!items.length) continue;\n\t\t\tconst batch = { items };\n\t\t\tfor (const item of items) item.batch = batch;\n\t\t\tconst promise = batchLoader.fetch(batch.items.map((_item) => _item.key));\n\t\t\tpromise.then(async (result) => {\n\t\t\t\tawait Promise.all(result.map(async (valueOrPromise, index) => {\n\t\t\t\t\tconst item = batch.items[index];\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar _item$resolve;\n\t\t\t\t\t\tconst value = await Promise.resolve(valueOrPromise);\n\t\t\t\t\t\t(_item$resolve = item.resolve) === null || _item$resolve === void 0 || _item$resolve.call(item, value);\n\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\tvar _item$reject3;\n\t\t\t\t\t\t(_item$reject3 = item.reject) === null || _item$reject3 === void 0 || _item$reject3.call(item, cause);\n\t\t\t\t\t}\n\t\t\t\t\titem.batch = null;\n\t\t\t\t\titem.reject = null;\n\t\t\t\t\titem.resolve = null;\n\t\t\t\t}));\n\t\t\t\tfor (const item of batch.items) {\n\t\t\t\t\tvar _item$reject4;\n\t\t\t\t\t(_item$reject4 = item.reject) === null || _item$reject4 === void 0 || _item$reject4.call(item, new Error(\"Missing result\"));\n\t\t\t\t\titem.batch = null;\n\t\t\t\t}\n\t\t\t}).catch((cause) => {\n\t\t\t\tfor (const item of batch.items) {\n\t\t\t\t\tvar _item$reject5;\n\t\t\t\t\t(_item$reject5 = item.reject) === null || _item$reject5 === void 0 || _item$reject5.call(item, cause);\n\t\t\t\t\titem.batch = null;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\tfunction load(key) {\n\t\tvar _dispatchTimer;\n\t\tconst item = {\n\t\t\taborted: false,\n\t\t\tkey,\n\t\t\tbatch: null,\n\t\t\tresolve: throwFatalError,\n\t\t\treject: throwFatalError\n\t\t};\n\t\tconst promise = new Promise((resolve, reject) => {\n\t\t\tvar _pendingItems;\n\t\t\titem.reject = reject;\n\t\t\titem.resolve = resolve;\n\t\t\t(_pendingItems = pendingItems) !== null && _pendingItems !== void 0 || (pendingItems = []);\n\t\t\tpendingItems.push(item);\n\t\t});\n\t\t(_dispatchTimer = dispatchTimer) !== null && _dispatchTimer !== void 0 || (dispatchTimer = setTimeout(dispatch));\n\t\treturn promise;\n\t}\n\treturn { load };\n}\n\n//#endregion\n//#region src/internals/signals.ts\n/**\n* Like `Promise.all()` but for abort signals\n* - When all signals have been aborted, the merged signal will be aborted\n* - If one signal is `null`, no signal will be aborted\n*/\nfunction allAbortSignals(...signals) {\n\tconst ac = new AbortController();\n\tconst count = signals.length;\n\tlet abortedCount = 0;\n\tconst onAbort = () => {\n\t\tif (++abortedCount === count) ac.abort();\n\t};\n\tfor (const signal of signals) if (signal === null || signal === void 0 ? void 0 : signal.aborted) onAbort();\n\telse signal === null || signal === void 0 || signal.addEventListener(\"abort\", onAbort, { once: true });\n\treturn ac.signal;\n}\n/**\n* Like `Promise.race` but for abort signals\n*\n* Basically, a ponyfill for\n* [`AbortSignal.any`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any_static).\n*/\nfunction raceAbortSignals(...signals) {\n\tconst ac = new AbortController();\n\tfor (const signal of signals) if (signal === null || signal === void 0 ? void 0 : signal.aborted) ac.abort();\n\telse signal === null || signal === void 0 || signal.addEventListener(\"abort\", () => ac.abort(), { once: true });\n\treturn ac.signal;\n}\nfunction abortSignalToPromise(signal) {\n\treturn new Promise((_, reject) => {\n\t\tif (signal.aborted) {\n\t\t\treject(signal.reason);\n\t\t\treturn;\n\t\t}\n\t\tsignal.addEventListener(\"abort\", () => {\n\t\t\treject(signal.reason);\n\t\t}, { once: true });\n\t});\n}\n\n//#endregion\n//#region src/links/httpBatchLink.ts\nvar import_objectSpread2 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);\n/**\n* @see https://trpc.io/docs/client/links/httpBatchLink\n*/\nfunction httpBatchLink(opts) {\n\tvar _opts$maxURLLength, _opts$maxItems;\n\tconst resolvedOpts = require_httpUtils.resolveHTTPLinkOptions(opts);\n\tconst maxURLLength = (_opts$maxURLLength = opts.maxURLLength) !== null && _opts$maxURLLength !== void 0 ? _opts$maxURLLength : Infinity;\n\tconst maxItems = (_opts$maxItems = opts.maxItems) !== null && _opts$maxItems !== void 0 ? _opts$maxItems : Infinity;\n\treturn () => {\n\t\tconst batchLoader = (type) => {\n\t\t\treturn {\n\t\t\t\tvalidate(batchOps) {\n\t\t\t\t\tif (maxURLLength === Infinity && maxItems === Infinity) return true;\n\t\t\t\t\tif (batchOps.length > maxItems) return false;\n\t\t\t\t\tconst path = batchOps.map((op) => op.path).join(\",\");\n\t\t\t\t\tconst inputs = batchOps.map((op) => op.input);\n\t\t\t\t\tconst url = require_httpUtils.getUrl((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, resolvedOpts), {}, {\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tinputs,\n\t\t\t\t\t\tsignal: null\n\t\t\t\t\t}));\n\t\t\t\t\treturn url.length <= maxURLLength;\n\t\t\t\t},\n\t\t\t\tasync fetch(batchOps) {\n\t\t\t\t\tconst path = batchOps.map((op) => op.path).join(\",\");\n\t\t\t\t\tconst inputs = batchOps.map((op) => op.input);\n\t\t\t\t\tconst signal = allAbortSignals(...batchOps.map((op) => op.signal));\n\t\t\t\t\tconst res = await require_httpUtils.jsonHttpRequester((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, resolvedOpts), {}, {\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tinputs,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\theaders() {\n\t\t\t\t\t\t\tif (!opts.headers) return {};\n\t\t\t\t\t\t\tif (typeof opts.headers === \"function\") return opts.headers({ opList: batchOps });\n\t\t\t\t\t\t\treturn opts.headers;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsignal\n\t\t\t\t\t}));\n\t\t\t\t\tconst resJSON = Array.isArray(res.json) ? res.json : batchOps.map(() => res.json);\n\t\t\t\t\tconst result = resJSON.map((item) => ({\n\t\t\t\t\t\tmeta: res.meta,\n\t\t\t\t\t\tjson: item\n\t\t\t\t\t}));\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t\tconst query = dataLoader(batchLoader(\"query\"));\n\t\tconst mutation = dataLoader(batchLoader(\"mutation\"));\n\t\tconst loaders = {\n\t\t\tquery,\n\t\t\tmutation\n\t\t};\n\t\treturn ({ op }) => {\n\t\t\treturn (0, __trpc_server_observable.observable)((observer) => {\n\t\t\t\t/* istanbul ignore if -- @preserve */\n\t\t\t\tif (op.type === \"subscription\") throw new Error(\"Subscriptions are unsupported by `httpLink` - use `httpSubscriptionLink` or `wsLink`\");\n\t\t\t\tconst loader = loaders[op.type];\n\t\t\t\tconst promise = loader.load(op);\n\t\t\t\tlet _res = void 0;\n\t\t\t\tpromise.then((res) => {\n\t\t\t\t\t_res = res;\n\t\t\t\t\tconst transformed = (0, __trpc_server_unstable_core_do_not_import.transformResult)(res.json, resolvedOpts.transformer.output);\n\t\t\t\t\tif (!transformed.ok) {\n\t\t\t\t\t\tobserver.error(require_TRPCClientError.TRPCClientError.from(transformed.error, { meta: res.meta }));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tobserver.next({\n\t\t\t\t\t\tcontext: res.meta,\n\t\t\t\t\t\tresult: transformed.result\n\t\t\t\t\t});\n\t\t\t\t\tobserver.complete();\n\t\t\t\t}).catch((err) => {\n\t\t\t\t\tobserver.error(require_TRPCClientError.TRPCClientError.from(err, { meta: _res === null || _res === void 0 ? void 0 : _res.meta }));\n\t\t\t\t});\n\t\t\t\treturn () => {};\n\t\t\t});\n\t\t};\n\t};\n}\n\n//#endregion\nObject.defineProperty(exports, 'abortSignalToPromise', {\n enumerable: true,\n get: function () {\n return abortSignalToPromise;\n }\n});\nObject.defineProperty(exports, 'allAbortSignals', {\n enumerable: true,\n get: function () {\n return allAbortSignals;\n }\n});\nObject.defineProperty(exports, 'dataLoader', {\n enumerable: true,\n get: function () {\n return dataLoader;\n }\n});\nObject.defineProperty(exports, 'httpBatchLink', {\n enumerable: true,\n get: function () {\n return httpBatchLink;\n }\n});\nObject.defineProperty(exports, 'raceAbortSignals', {\n enumerable: true,\n get: function () {\n return raceAbortSignals;\n }\n});","const require_chunk = require('./chunk-DWy1uDak.cjs');\nconst require_objectSpread2$1 = require('./objectSpread2-Bsvh_OqM.cjs');\nconst __trpc_server_observable = require_chunk.__toESM(require(\"@trpc/server/observable\"));\n\n//#region src/links/loggerLink.ts\nvar import_objectSpread2 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);\nfunction isFormData(value) {\n\tif (typeof FormData === \"undefined\") return false;\n\treturn value instanceof FormData;\n}\nconst palettes = {\n\tcss: {\n\t\tquery: [\"72e3ff\", \"3fb0d8\"],\n\t\tmutation: [\"c5a3fc\", \"904dfc\"],\n\t\tsubscription: [\"ff49e1\", \"d83fbe\"]\n\t},\n\tansi: {\n\t\tregular: {\n\t\t\tquery: [\"\\x1B[30;46m\", \"\\x1B[97;46m\"],\n\t\t\tmutation: [\"\\x1B[30;45m\", \"\\x1B[97;45m\"],\n\t\t\tsubscription: [\"\\x1B[30;42m\", \"\\x1B[97;42m\"]\n\t\t},\n\t\tbold: {\n\t\t\tquery: [\"\\x1B[1;30;46m\", \"\\x1B[1;97;46m\"],\n\t\t\tmutation: [\"\\x1B[1;30;45m\", \"\\x1B[1;97;45m\"],\n\t\t\tsubscription: [\"\\x1B[1;30;42m\", \"\\x1B[1;97;42m\"]\n\t\t}\n\t}\n};\nfunction constructPartsAndArgs(opts) {\n\tconst { direction, type, withContext, path, id, input } = opts;\n\tconst parts = [];\n\tconst args = [];\n\tif (opts.colorMode === \"none\") parts.push(direction === \"up\" ? \">>\" : \"<<\", type, `#${id}`, path);\n\telse if (opts.colorMode === \"ansi\") {\n\t\tconst [lightRegular, darkRegular] = palettes.ansi.regular[type];\n\t\tconst [lightBold, darkBold] = palettes.ansi.bold[type];\n\t\tconst reset = \"\\x1B[0m\";\n\t\tparts.push(direction === \"up\" ? lightRegular : darkRegular, direction === \"up\" ? \">>\" : \"<<\", type, direction === \"up\" ? lightBold : darkBold, `#${id}`, path, reset);\n\t} else {\n\t\tconst [light, dark] = palettes.css[type];\n\t\tconst css = `\n background-color: #${direction === \"up\" ? light : dark};\n color: ${direction === \"up\" ? \"black\" : \"white\"};\n padding: 2px;\n `;\n\t\tparts.push(\"%c\", direction === \"up\" ? \">>\" : \"<<\", type, `#${id}`, `%c${path}%c`, \"%O\");\n\t\targs.push(css, `${css}; font-weight: bold;`, `${css}; font-weight: normal;`);\n\t}\n\tif (direction === \"up\") args.push(withContext ? {\n\t\tinput,\n\t\tcontext: opts.context\n\t} : { input });\n\telse args.push((0, import_objectSpread2.default)({\n\t\tinput,\n\t\tresult: opts.result,\n\t\telapsedMs: opts.elapsedMs\n\t}, withContext && { context: opts.context }));\n\treturn {\n\t\tparts,\n\t\targs\n\t};\n}\nconst defaultLogger = ({ c = console, colorMode = \"css\", withContext }) => (props) => {\n\tconst rawInput = props.input;\n\tconst input = isFormData(rawInput) ? Object.fromEntries(rawInput) : rawInput;\n\tconst { parts, args } = constructPartsAndArgs((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, props), {}, {\n\t\tcolorMode,\n\t\tinput,\n\t\twithContext\n\t}));\n\tconst fn = props.direction === \"down\" && props.result && (props.result instanceof Error || \"error\" in props.result.result && props.result.result.error) ? \"error\" : \"log\";\n\tc[fn].apply(null, [parts.join(\" \")].concat(args));\n};\n/**\n* @see https://trpc.io/docs/v11/client/links/loggerLink\n*/\nfunction loggerLink(opts = {}) {\n\tvar _opts$colorMode, _opts$withContext;\n\tconst { enabled = () => true } = opts;\n\tconst colorMode = (_opts$colorMode = opts.colorMode) !== null && _opts$colorMode !== void 0 ? _opts$colorMode : typeof window === \"undefined\" ? \"ansi\" : \"css\";\n\tconst withContext = (_opts$withContext = opts.withContext) !== null && _opts$withContext !== void 0 ? _opts$withContext : colorMode === \"css\";\n\tconst { logger = defaultLogger({\n\t\tc: opts.console,\n\t\tcolorMode,\n\t\twithContext\n\t}) } = opts;\n\treturn () => {\n\t\treturn ({ op, next }) => {\n\t\t\treturn (0, __trpc_server_observable.observable)((observer) => {\n\t\t\t\tif (enabled((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, op), {}, { direction: \"up\" }))) logger((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, op), {}, { direction: \"up\" }));\n\t\t\t\tconst requestStartTime = Date.now();\n\t\t\t\tfunction logResult(result) {\n\t\t\t\t\tconst elapsedMs = Date.now() - requestStartTime;\n\t\t\t\t\tif (enabled((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, op), {}, {\n\t\t\t\t\t\tdirection: \"down\",\n\t\t\t\t\t\tresult\n\t\t\t\t\t}))) logger((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, op), {}, {\n\t\t\t\t\t\tdirection: \"down\",\n\t\t\t\t\t\telapsedMs,\n\t\t\t\t\t\tresult\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t\treturn next(op).pipe((0, __trpc_server_observable.tap)({\n\t\t\t\t\tnext(result) {\n\t\t\t\t\t\tlogResult(result);\n\t\t\t\t\t},\n\t\t\t\t\terror(result) {\n\t\t\t\t\t\tlogResult(result);\n\t\t\t\t\t}\n\t\t\t\t})).subscribe(observer);\n\t\t\t});\n\t\t};\n\t};\n}\n\n//#endregion\nObject.defineProperty(exports, 'loggerLink', {\n enumerable: true,\n get: function () {\n return loggerLink;\n }\n});","const require_chunk = require('./chunk-DWy1uDak.cjs');\nconst require_objectSpread2$1 = require('./objectSpread2-Bsvh_OqM.cjs');\nconst require_TRPCClientError = require('./TRPCClientError-CQrTQLrk.cjs');\nconst require_unstable_internals = require('./unstable-internals-M84gUQCV.cjs');\nconst __trpc_server_observable = require_chunk.__toESM(require(\"@trpc/server/observable\"));\nconst __trpc_server_unstable_core_do_not_import = require_chunk.__toESM(require(\"@trpc/server/unstable-core-do-not-import\"));\n\n//#region src/links/wsLink/wsClient/encoder.ts\nconst jsonEncoder = {\n\tencode: (data) => JSON.stringify(data),\n\tdecode: (data) => {\n\t\tif (typeof data !== \"string\") throw new Error(\"jsonEncoder received binary data. JSON uses text frames. Use a binary encoder for binary data.\");\n\t\treturn JSON.parse(data);\n\t}\n};\n\n//#endregion\n//#region src/links/wsLink/wsClient/options.ts\nconst lazyDefaults = {\n\tenabled: false,\n\tcloseMs: 0\n};\nconst keepAliveDefaults = {\n\tenabled: false,\n\tpongTimeoutMs: 1e3,\n\tintervalMs: 5e3\n};\n/**\n* Calculates a delay for exponential backoff based on the retry attempt index.\n* The delay starts at 0 for the first attempt and doubles for each subsequent attempt,\n* capped at 30 seconds.\n*/\nconst exponentialBackoff = (attemptIndex) => {\n\treturn attemptIndex === 0 ? 0 : Math.min(1e3 * 2 ** attemptIndex, 3e4);\n};\n\n//#endregion\n//#region src/links/internals/urlWithConnectionParams.ts\n/**\n* Get the result of a value or function that returns a value\n* It also optionally accepts typesafe arguments for the function\n*/\nconst resultOf = (value, ...args) => {\n\treturn typeof value === \"function\" ? value(...args) : value;\n};\n\n//#endregion\n//#region src/links/wsLink/wsClient/utils.ts\nvar import_defineProperty$3 = require_chunk.__toESM(require_objectSpread2$1.require_defineProperty(), 1);\nvar TRPCWebSocketClosedError = class TRPCWebSocketClosedError extends Error {\n\tconstructor(opts) {\n\t\tsuper(opts.message, { cause: opts.cause });\n\t\tthis.name = \"TRPCWebSocketClosedError\";\n\t\tObject.setPrototypeOf(this, TRPCWebSocketClosedError.prototype);\n\t}\n};\n/**\n* Utility class for managing a timeout that can be started, stopped, and reset.\n* Useful for scenarios where the timeout duration is reset dynamically based on events.\n*/\nvar ResettableTimeout = class {\n\tconstructor(onTimeout, timeoutMs) {\n\t\tthis.onTimeout = onTimeout;\n\t\tthis.timeoutMs = timeoutMs;\n\t\t(0, import_defineProperty$3.default)(this, \"timeout\", void 0);\n\t}\n\t/**\n\t* Resets the current timeout, restarting it with the same duration.\n\t* Does nothing if no timeout is active.\n\t*/\n\treset() {\n\t\tif (!this.timeout) return;\n\t\tclearTimeout(this.timeout);\n\t\tthis.timeout = setTimeout(this.onTimeout, this.timeoutMs);\n\t}\n\tstart() {\n\t\tclearTimeout(this.timeout);\n\t\tthis.timeout = setTimeout(this.onTimeout, this.timeoutMs);\n\t}\n\tstop() {\n\t\tclearTimeout(this.timeout);\n\t\tthis.timeout = void 0;\n\t}\n};\nfunction withResolvers() {\n\tlet resolve;\n\tlet reject;\n\tconst promise = new Promise((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\treturn {\n\t\tpromise,\n\t\tresolve,\n\t\treject\n\t};\n}\n/**\n* Resolves a WebSocket URL and optionally appends connection parameters.\n*\n* If connectionParams are provided, appends 'connectionParams=1' query parameter.\n*/\nasync function prepareUrl(urlOptions) {\n\tconst url = await resultOf(urlOptions.url);\n\tif (!urlOptions.connectionParams) return url;\n\tconst prefix = url.includes(\"?\") ? \"&\" : \"?\";\n\tconst connectionParams = `${prefix}connectionParams=1`;\n\treturn url + connectionParams;\n}\nasync function buildConnectionMessage(connectionParams, encoder) {\n\tconst message = {\n\t\tmethod: \"connectionParams\",\n\t\tdata: await resultOf(connectionParams)\n\t};\n\treturn encoder.encode(message);\n}\n\n//#endregion\n//#region src/links/wsLink/wsClient/requestManager.ts\nvar import_defineProperty$2 = require_chunk.__toESM(require_objectSpread2$1.require_defineProperty(), 1);\n/**\n* Manages WebSocket requests, tracking their lifecycle and providing utility methods\n* for handling outgoing and pending requests.\n*\n* - **Outgoing requests**: Requests that are queued and waiting to be sent.\n* - **Pending requests**: Requests that have been sent and are in flight awaiting a response.\n* For subscriptions, multiple responses may be received until the subscription is closed.\n*/\nvar RequestManager = class {\n\tconstructor() {\n\t\t(0, import_defineProperty$2.default)(this, \"outgoingRequests\", new Array());\n\t\t(0, import_defineProperty$2.default)(this, \"pendingRequests\", {});\n\t}\n\t/**\n\t* Registers a new request by adding it to the outgoing queue and setting up\n\t* callbacks for lifecycle events such as completion or error.\n\t*\n\t* @param message - The outgoing message to be sent.\n\t* @param callbacks - Callback functions to observe the request's state.\n\t* @returns A cleanup function to manually remove the request.\n\t*/\n\tregister(message, callbacks) {\n\t\tconst { promise: end, resolve } = withResolvers();\n\t\tthis.outgoingRequests.push({\n\t\t\tid: String(message.id),\n\t\t\tmessage,\n\t\t\tend,\n\t\t\tcallbacks: {\n\t\t\t\tnext: callbacks.next,\n\t\t\t\tcomplete: () => {\n\t\t\t\t\tcallbacks.complete();\n\t\t\t\t\tresolve();\n\t\t\t\t},\n\t\t\t\terror: (e) => {\n\t\t\t\t\tcallbacks.error(e);\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn () => {\n\t\t\tthis.delete(message.id);\n\t\t\tcallbacks.complete();\n\t\t\tresolve();\n\t\t};\n\t}\n\t/**\n\t* Deletes a request from both the outgoing and pending collections, if it exists.\n\t*/\n\tdelete(messageId) {\n\t\tif (messageId === null) return;\n\t\tthis.outgoingRequests = this.outgoingRequests.filter(({ id }) => id !== String(messageId));\n\t\tdelete this.pendingRequests[String(messageId)];\n\t}\n\t/**\n\t* Moves all outgoing requests to the pending state and clears the outgoing queue.\n\t*\n\t* The caller is expected to handle the actual sending of the requests\n\t* (e.g., sending them over the network) after this method is called.\n\t*\n\t* @returns The list of requests that were transitioned to the pending state.\n\t*/\n\tflush() {\n\t\tconst requests = this.outgoingRequests;\n\t\tthis.outgoingRequests = [];\n\t\tfor (const request of requests) this.pendingRequests[request.id] = request;\n\t\treturn requests;\n\t}\n\t/**\n\t* Retrieves all currently pending requests, which are in flight awaiting responses\n\t* or handling ongoing subscriptions.\n\t*/\n\tgetPendingRequests() {\n\t\treturn Object.values(this.pendingRequests);\n\t}\n\t/**\n\t* Retrieves a specific pending request by its message ID.\n\t*/\n\tgetPendingRequest(messageId) {\n\t\tif (messageId === null) return null;\n\t\treturn this.pendingRequests[String(messageId)];\n\t}\n\t/**\n\t* Retrieves all outgoing requests, which are waiting to be sent.\n\t*/\n\tgetOutgoingRequests() {\n\t\treturn this.outgoingRequests;\n\t}\n\t/**\n\t* Retrieves all requests, both outgoing and pending, with their respective states.\n\t*\n\t* @returns An array of all requests with their state (\"outgoing\" or \"pending\").\n\t*/\n\tgetRequests() {\n\t\treturn [...this.getOutgoingRequests().map((request) => ({\n\t\t\tstate: \"outgoing\",\n\t\t\tmessage: request.message,\n\t\t\tend: request.end,\n\t\t\tcallbacks: request.callbacks\n\t\t})), ...this.getPendingRequests().map((request) => ({\n\t\t\tstate: \"pending\",\n\t\t\tmessage: request.message,\n\t\t\tend: request.end,\n\t\t\tcallbacks: request.callbacks\n\t\t}))];\n\t}\n\t/**\n\t* Checks if there are any pending requests, including ongoing subscriptions.\n\t*/\n\thasPendingRequests() {\n\t\treturn this.getPendingRequests().length > 0;\n\t}\n\t/**\n\t* Checks if there are any pending subscriptions\n\t*/\n\thasPendingSubscriptions() {\n\t\treturn this.getPendingRequests().some((request) => request.message.method === \"subscription\");\n\t}\n\t/**\n\t* Checks if there are any outgoing requests waiting to be sent.\n\t*/\n\thasOutgoingRequests() {\n\t\treturn this.outgoingRequests.length > 0;\n\t}\n};\n\n//#endregion\n//#region src/links/wsLink/wsClient/wsConnection.ts\nvar import_defineProperty$1 = require_chunk.__toESM(require_objectSpread2$1.require_defineProperty(), 1);\n/**\n* Opens a WebSocket connection asynchronously and returns a promise\n* that resolves when the connection is successfully established.\n* The promise rejects if an error occurs during the connection attempt.\n*/\nfunction asyncWsOpen(ws) {\n\tconst { promise, resolve, reject } = withResolvers();\n\tws.addEventListener(\"open\", () => {\n\t\tws.removeEventListener(\"error\", reject);\n\t\tresolve();\n\t});\n\tws.addEventListener(\"error\", reject);\n\treturn promise;\n}\n/**\n* Sets up a periodic ping-pong mechanism to keep the WebSocket connection alive.\n*\n* - Sends \"PING\" messages at regular intervals defined by `intervalMs`.\n* - If a \"PONG\" response is not received within the `pongTimeoutMs`, the WebSocket is closed.\n* - The ping timer resets upon receiving any message to maintain activity.\n* - Automatically starts the ping process when the WebSocket connection is opened.\n* - Cleans up timers when the WebSocket is closed.\n*\n* @param ws - The WebSocket instance to manage.\n* @param options - Configuration options for ping-pong intervals and timeouts.\n*/\nfunction setupPingInterval(ws, { intervalMs, pongTimeoutMs }) {\n\tlet pingTimeout;\n\tlet pongTimeout;\n\tfunction start() {\n\t\tpingTimeout = setTimeout(() => {\n\t\t\tws.send(\"PING\");\n\t\t\tpongTimeout = setTimeout(() => {\n\t\t\t\tws.close();\n\t\t\t}, pongTimeoutMs);\n\t\t}, intervalMs);\n\t}\n\tfunction reset() {\n\t\tclearTimeout(pingTimeout);\n\t\tstart();\n\t}\n\tfunction pong() {\n\t\tclearTimeout(pongTimeout);\n\t\treset();\n\t}\n\tws.addEventListener(\"open\", start);\n\tws.addEventListener(\"message\", ({ data }) => {\n\t\tclearTimeout(pingTimeout);\n\t\tstart();\n\t\tif (data === \"PONG\") pong();\n\t});\n\tws.addEventListener(\"close\", () => {\n\t\tclearTimeout(pingTimeout);\n\t\tclearTimeout(pongTimeout);\n\t});\n}\n/**\n* Manages a WebSocket connection with support for reconnection, keep-alive mechanisms,\n* and observable state tracking.\n*/\nvar WsConnection = class WsConnection {\n\tconstructor(opts) {\n\t\tvar _opts$WebSocketPonyfi;\n\t\t(0, import_defineProperty$1.default)(this, \"id\", ++WsConnection.connectCount);\n\t\t(0, import_defineProperty$1.default)(this, \"WebSocketPonyfill\", void 0);\n\t\t(0, import_defineProperty$1.default)(this, \"urlOptions\", void 0);\n\t\t(0, import_defineProperty$1.default)(this, \"keepAliveOpts\", void 0);\n\t\t(0, import_defineProperty$1.default)(this, \"encoder\", void 0);\n\t\t(0, import_defineProperty$1.default)(this, \"wsObservable\", (0, __trpc_server_observable.behaviorSubject)(null));\n\t\t(0, import_defineProperty$1.default)(this, \"openPromise\", null);\n\t\tthis.WebSocketPonyfill = (_opts$WebSocketPonyfi = opts.WebSocketPonyfill) !== null && _opts$WebSocketPonyfi !== void 0 ? _opts$WebSocketPonyfi : WebSocket;\n\t\tif (!this.WebSocketPonyfill) throw new Error(\"No WebSocket implementation found - you probably don't want to use this on the server, but if you do you need to pass a `WebSocket`-ponyfill\");\n\t\tthis.urlOptions = opts.urlOptions;\n\t\tthis.keepAliveOpts = opts.keepAlive;\n\t\tthis.encoder = opts.encoder;\n\t}\n\tget ws() {\n\t\treturn this.wsObservable.get();\n\t}\n\tset ws(ws) {\n\t\tthis.wsObservable.next(ws);\n\t}\n\t/**\n\t* Checks if the WebSocket connection is open and ready to communicate.\n\t*/\n\tisOpen() {\n\t\treturn !!this.ws && this.ws.readyState === this.WebSocketPonyfill.OPEN && !this.openPromise;\n\t}\n\t/**\n\t* Checks if the WebSocket connection is closed or in the process of closing.\n\t*/\n\tisClosed() {\n\t\treturn !!this.ws && (this.ws.readyState === this.WebSocketPonyfill.CLOSING || this.ws.readyState === this.WebSocketPonyfill.CLOSED);\n\t}\n\tasync open() {\n\t\tvar _this = this;\n\t\tif (_this.openPromise) return _this.openPromise;\n\t\t_this.id = ++WsConnection.connectCount;\n\t\tconst wsPromise = prepareUrl(_this.urlOptions).then((url) => new _this.WebSocketPonyfill(url));\n\t\t_this.openPromise = wsPromise.then(async (ws) => {\n\t\t\t_this.ws = ws;\n\t\t\tws.binaryType = \"arraybuffer\";\n\t\t\tws.addEventListener(\"message\", function({ data }) {\n\t\t\t\tif (data === \"PING\") this.send(\"PONG\");\n\t\t\t});\n\t\t\tif (_this.keepAliveOpts.enabled) setupPingInterval(ws, _this.keepAliveOpts);\n\t\t\tws.addEventListener(\"close\", () => {\n\t\t\t\tif (_this.ws === ws) _this.ws = null;\n\t\t\t});\n\t\t\tawait asyncWsOpen(ws);\n\t\t\tif (_this.urlOptions.connectionParams) ws.send(await buildConnectionMessage(_this.urlOptions.connectionParams, _this.encoder));\n\t\t});\n\t\ttry {\n\t\t\tawait _this.openPromise;\n\t\t} finally {\n\t\t\t_this.openPromise = null;\n\t\t}\n\t}\n\t/**\n\t* Closes the WebSocket connection gracefully.\n\t* Waits for any ongoing open operation to complete before closing.\n\t*/\n\tasync close() {\n\t\tvar _this2 = this;\n\t\ttry {\n\t\t\tawait _this2.openPromise;\n\t\t} finally {\n\t\t\tvar _this$ws;\n\t\t\t(_this$ws = _this2.ws) === null || _this$ws === void 0 || _this$ws.close();\n\t\t}\n\t}\n};\n(0, import_defineProperty$1.default)(WsConnection, \"connectCount\", 0);\n/**\n* Provides a backward-compatible representation of the connection state.\n*/\nfunction backwardCompatibility(connection) {\n\tif (connection.isOpen()) return {\n\t\tid: connection.id,\n\t\tstate: \"open\",\n\t\tws: connection.ws\n\t};\n\tif (connection.isClosed()) return {\n\t\tid: connection.id,\n\t\tstate: \"closed\",\n\t\tws: connection.ws\n\t};\n\tif (!connection.ws) return null;\n\treturn {\n\t\tid: connection.id,\n\t\tstate: \"connecting\",\n\t\tws: connection.ws\n\t};\n}\n\n//#endregion\n//#region src/links/wsLink/wsClient/wsClient.ts\nvar import_defineProperty = require_chunk.__toESM(require_objectSpread2$1.require_defineProperty(), 1);\nvar import_objectSpread2 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);\n/**\n* A WebSocket client for managing TRPC operations, supporting lazy initialization,\n* reconnection, keep-alive, and request management.\n*/\nvar WsClient = class {\n\tconstructor(opts) {\n\t\tvar _opts$experimental_en, _opts$retryDelayMs;\n\t\t(0, import_defineProperty.default)(this, \"connectionState\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"allowReconnect\", false);\n\t\t(0, import_defineProperty.default)(this, \"requestManager\", new RequestManager());\n\t\t(0, import_defineProperty.default)(this, \"activeConnection\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"reconnectRetryDelay\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"inactivityTimeout\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"callbacks\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"lazyMode\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"encoder\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"reconnecting\", null);\n\t\tthis.encoder = (_opts$experimental_en = opts.experimental_encoder) !== null && _opts$experimental_en !== void 0 ? _opts$experimental_en : jsonEncoder;\n\t\tthis.callbacks = {\n\t\t\tonOpen: opts.onOpen,\n\t\t\tonClose: opts.onClose,\n\t\t\tonError: opts.onError\n\t\t};\n\t\tconst lazyOptions = (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, lazyDefaults), opts.lazy);\n\t\tthis.inactivityTimeout = new ResettableTimeout(() => {\n\t\t\tif (this.requestManager.hasOutgoingRequests() || this.requestManager.hasPendingRequests()) {\n\t\t\t\tthis.inactivityTimeout.reset();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.close().catch(() => null);\n\t\t}, lazyOptions.closeMs);\n\t\tthis.activeConnection = new WsConnection({\n\t\t\tWebSocketPonyfill: opts.WebSocket,\n\t\t\turlOptions: opts,\n\t\t\tkeepAlive: (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, keepAliveDefaults), opts.keepAlive),\n\t\t\tencoder: this.encoder\n\t\t});\n\t\tthis.activeConnection.wsObservable.subscribe({ next: (ws) => {\n\t\t\tif (!ws) return;\n\t\t\tthis.setupWebSocketListeners(ws);\n\t\t} });\n\t\tthis.reconnectRetryDelay = (_opts$retryDelayMs = opts.retryDelayMs) !== null && _opts$retryDelayMs !== void 0 ? _opts$retryDelayMs : exponentialBackoff;\n\t\tthis.lazyMode = lazyOptions.enabled;\n\t\tthis.connectionState = (0, __trpc_server_observable.behaviorSubject)({\n\t\t\ttype: \"state\",\n\t\t\tstate: lazyOptions.enabled ? \"idle\" : \"connecting\",\n\t\t\terror: null\n\t\t});\n\t\tif (!this.lazyMode) this.open().catch(() => null);\n\t}\n\t/**\n\t* Opens the WebSocket connection. Handles reconnection attempts and updates\n\t* the connection state accordingly.\n\t*/\n\tasync open() {\n\t\tvar _this = this;\n\t\t_this.allowReconnect = true;\n\t\tif (_this.connectionState.get().state === \"idle\") _this.connectionState.next({\n\t\t\ttype: \"state\",\n\t\t\tstate: \"connecting\",\n\t\t\terror: null\n\t\t});\n\t\ttry {\n\t\t\tawait _this.activeConnection.open();\n\t\t} catch (error) {\n\t\t\t_this.reconnect(new TRPCWebSocketClosedError({\n\t\t\t\tmessage: \"Initialization error\",\n\t\t\t\tcause: error\n\t\t\t}));\n\t\t\treturn _this.reconnecting;\n\t\t}\n\t}\n\t/**\n\t* Closes the WebSocket connection and stops managing requests.\n\t* Ensures all outgoing and pending requests are properly finalized.\n\t*/\n\tasync close() {\n\t\tvar _this2 = this;\n\t\t_this2.allowReconnect = false;\n\t\t_this2.inactivityTimeout.stop();\n\t\tconst requestsToAwait = [];\n\t\tfor (const request of _this2.requestManager.getRequests()) if (request.message.method === \"subscription\") request.callbacks.complete();\n\t\telse if (request.state === \"outgoing\") request.callbacks.error(require_TRPCClientError.TRPCClientError.from(new TRPCWebSocketClosedError({ message: \"Closed before connection was established\" })));\n\t\telse requestsToAwait.push(request.end);\n\t\tawait Promise.all(requestsToAwait).catch(() => null);\n\t\tawait _this2.activeConnection.close().catch(() => null);\n\t\t_this2.connectionState.next({\n\t\t\ttype: \"state\",\n\t\t\tstate: \"idle\",\n\t\t\terror: null\n\t\t});\n\t}\n\t/**\n\t* Method to request the server.\n\t* Handles data transformation, batching of requests, and subscription lifecycle.\n\t*\n\t* @param op - The operation details including id, type, path, input and signal\n\t* @param transformer - Data transformer for serializing requests and deserializing responses\n\t* @param lastEventId - Optional ID of the last received event for subscriptions\n\t*\n\t* @returns An observable that emits operation results and handles cleanup\n\t*/\n\trequest({ op: { id, type, path, input, signal }, transformer, lastEventId }) {\n\t\treturn (0, __trpc_server_observable.observable)((observer) => {\n\t\t\tconst abort = this.batchSend({\n\t\t\t\tid,\n\t\t\t\tmethod: type,\n\t\t\t\tparams: {\n\t\t\t\t\tinput: transformer.input.serialize(input),\n\t\t\t\t\tpath,\n\t\t\t\t\tlastEventId\n\t\t\t\t}\n\t\t\t}, (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, observer), {}, { next(event) {\n\t\t\t\tconst transformed = (0, __trpc_server_unstable_core_do_not_import.transformResult)(event, transformer.output);\n\t\t\t\tif (!transformed.ok) {\n\t\t\t\t\tobserver.error(require_TRPCClientError.TRPCClientError.from(transformed.error));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tobserver.next({ result: transformed.result });\n\t\t\t} }));\n\t\t\treturn () => {\n\t\t\t\tabort();\n\t\t\t\tif (type === \"subscription\" && this.activeConnection.isOpen()) this.send({\n\t\t\t\t\tid,\n\t\t\t\t\tmethod: \"subscription.stop\"\n\t\t\t\t});\n\t\t\t\tsignal === null || signal === void 0 || signal.removeEventListener(\"abort\", abort);\n\t\t\t};\n\t\t});\n\t}\n\tget connection() {\n\t\treturn backwardCompatibility(this.activeConnection);\n\t}\n\treconnect(closedError) {\n\t\tvar _this3 = this;\n\t\tthis.connectionState.next({\n\t\t\ttype: \"state\",\n\t\t\tstate: \"connecting\",\n\t\t\terror: require_TRPCClientError.TRPCClientError.from(closedError)\n\t\t});\n\t\tif (this.reconnecting) return;\n\t\tconst tryReconnect = async (attemptIndex) => {\n\t\t\ttry {\n\t\t\t\tawait (0, __trpc_server_unstable_core_do_not_import.sleep)(_this3.reconnectRetryDelay(attemptIndex));\n\t\t\t\tif (_this3.allowReconnect) {\n\t\t\t\t\tawait _this3.activeConnection.close();\n\t\t\t\t\tawait _this3.activeConnection.open();\n\t\t\t\t\tif (_this3.requestManager.hasPendingRequests()) _this3.send(_this3.requestManager.getPendingRequests().map(({ message }) => message));\n\t\t\t\t}\n\t\t\t\t_this3.reconnecting = null;\n\t\t\t} catch (_unused) {\n\t\t\t\tawait tryReconnect(attemptIndex + 1);\n\t\t\t}\n\t\t};\n\t\tthis.reconnecting = tryReconnect(0);\n\t}\n\tsetupWebSocketListeners(ws) {\n\t\tvar _this4 = this;\n\t\tconst handleCloseOrError = (cause) => {\n\t\t\tconst reqs = this.requestManager.getPendingRequests();\n\t\t\tfor (const { message, callbacks } of reqs) {\n\t\t\t\tif (message.method === \"subscription\") continue;\n\t\t\t\tcallbacks.error(require_TRPCClientError.TRPCClientError.from(cause !== null && cause !== void 0 ? cause : new TRPCWebSocketClosedError({\n\t\t\t\t\tmessage: \"WebSocket closed\",\n\t\t\t\t\tcause\n\t\t\t\t})));\n\t\t\t\tthis.requestManager.delete(message.id);\n\t\t\t}\n\t\t};\n\t\tws.addEventListener(\"open\", () => {\n\t\t\t(0, __trpc_server_unstable_core_do_not_import.run)(async () => {\n\t\t\t\tvar _this$callbacks$onOpe, _this$callbacks;\n\t\t\t\tif (_this4.lazyMode) _this4.inactivityTimeout.start();\n\t\t\t\t(_this$callbacks$onOpe = (_this$callbacks = _this4.callbacks).onOpen) === null || _this$callbacks$onOpe === void 0 || _this$callbacks$onOpe.call(_this$callbacks);\n\t\t\t\t_this4.connectionState.next({\n\t\t\t\t\ttype: \"state\",\n\t\t\t\t\tstate: \"pending\",\n\t\t\t\t\terror: null\n\t\t\t\t});\n\t\t\t}).catch((error) => {\n\t\t\t\tws.close(3e3);\n\t\t\t\thandleCloseOrError(error);\n\t\t\t});\n\t\t});\n\t\tws.addEventListener(\"message\", ({ data }) => {\n\t\t\tthis.inactivityTimeout.reset();\n\t\t\tif ([\"PING\", \"PONG\"].includes(data)) return;\n\t\t\tconst incomingMessage = this.encoder.decode(data);\n\t\t\tif (\"method\" in incomingMessage) {\n\t\t\t\tthis.handleIncomingRequest(incomingMessage);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.handleResponseMessage(incomingMessage);\n\t\t});\n\t\tws.addEventListener(\"close\", (event) => {\n\t\t\tvar _this$callbacks$onClo, _this$callbacks2;\n\t\t\thandleCloseOrError(event);\n\t\t\t(_this$callbacks$onClo = (_this$callbacks2 = this.callbacks).onClose) === null || _this$callbacks$onClo === void 0 || _this$callbacks$onClo.call(_this$callbacks2, event);\n\t\t\tif (!this.lazyMode || this.requestManager.hasPendingSubscriptions()) this.reconnect(new TRPCWebSocketClosedError({\n\t\t\t\tmessage: \"WebSocket closed\",\n\t\t\t\tcause: event\n\t\t\t}));\n\t\t});\n\t\tws.addEventListener(\"error\", (event) => {\n\t\t\tvar _this$callbacks$onErr, _this$callbacks3;\n\t\t\thandleCloseOrError(event);\n\t\t\t(_this$callbacks$onErr = (_this$callbacks3 = this.callbacks).onError) === null || _this$callbacks$onErr === void 0 || _this$callbacks$onErr.call(_this$callbacks3, event);\n\t\t\tthis.reconnect(new TRPCWebSocketClosedError({\n\t\t\t\tmessage: \"WebSocket closed\",\n\t\t\t\tcause: event\n\t\t\t}));\n\t\t});\n\t}\n\thandleResponseMessage(message) {\n\t\tconst request = this.requestManager.getPendingRequest(message.id);\n\t\tif (!request) return;\n\t\trequest.callbacks.next(message);\n\t\tlet completed = true;\n\t\tif (\"result\" in message && request.message.method === \"subscription\") {\n\t\t\tif (message.result.type === \"data\") request.message.params.lastEventId = message.result.id;\n\t\t\tif (message.result.type !== \"stopped\") completed = false;\n\t\t}\n\t\tif (completed) {\n\t\t\trequest.callbacks.complete();\n\t\t\tthis.requestManager.delete(message.id);\n\t\t}\n\t}\n\thandleIncomingRequest(message) {\n\t\tif (message.method === \"reconnect\") this.reconnect(new TRPCWebSocketClosedError({ message: \"Server requested reconnect\" }));\n\t}\n\t/**\n\t* Sends a message or batch of messages directly to the server.\n\t*/\n\tsend(messageOrMessages) {\n\t\tif (!this.activeConnection.isOpen()) throw new Error(\"Active connection is not open\");\n\t\tconst messages = messageOrMessages instanceof Array ? messageOrMessages : [messageOrMessages];\n\t\tthis.activeConnection.ws.send(this.encoder.encode(messages.length === 1 ? messages[0] : messages));\n\t}\n\t/**\n\t* Groups requests for batch sending.\n\t*\n\t* @returns A function to abort the batched request.\n\t*/\n\tbatchSend(message, callbacks) {\n\t\tvar _this5 = this;\n\t\tthis.inactivityTimeout.reset();\n\t\t(0, __trpc_server_unstable_core_do_not_import.run)(async () => {\n\t\t\tif (!_this5.activeConnection.isOpen()) await _this5.open();\n\t\t\tawait (0, __trpc_server_unstable_core_do_not_import.sleep)(0);\n\t\t\tif (!_this5.requestManager.hasOutgoingRequests()) return;\n\t\t\t_this5.send(_this5.requestManager.flush().map(({ message: message$1 }) => message$1));\n\t\t}).catch((err) => {\n\t\t\tthis.requestManager.delete(message.id);\n\t\t\tcallbacks.error(require_TRPCClientError.TRPCClientError.from(err));\n\t\t});\n\t\treturn this.requestManager.register(message, callbacks);\n\t}\n};\n\n//#endregion\n//#region src/links/wsLink/createWsClient.ts\nfunction createWSClient(opts) {\n\treturn new WsClient(opts);\n}\n\n//#endregion\n//#region src/links/wsLink/wsLink.ts\nfunction wsLink(opts) {\n\tconst { client } = opts;\n\tconst transformer = require_unstable_internals.getTransformer(opts.transformer);\n\treturn () => {\n\t\treturn ({ op }) => {\n\t\t\treturn (0, __trpc_server_observable.observable)((observer) => {\n\t\t\t\tconst connStateSubscription = op.type === \"subscription\" ? client.connectionState.subscribe({ next(result) {\n\t\t\t\t\tobserver.next({\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\tcontext: op.context\n\t\t\t\t\t});\n\t\t\t\t} }) : null;\n\t\t\t\tconst requestSubscription = client.request({\n\t\t\t\t\top,\n\t\t\t\t\ttransformer\n\t\t\t\t}).subscribe(observer);\n\t\t\t\treturn () => {\n\t\t\t\t\trequestSubscription.unsubscribe();\n\t\t\t\t\tconnStateSubscription === null || connStateSubscription === void 0 || connStateSubscription.unsubscribe();\n\t\t\t\t};\n\t\t\t});\n\t\t};\n\t};\n}\n\n//#endregion\nObject.defineProperty(exports, 'createWSClient', {\n enumerable: true,\n get: function () {\n return createWSClient;\n }\n});\nObject.defineProperty(exports, 'jsonEncoder', {\n enumerable: true,\n get: function () {\n return jsonEncoder;\n }\n});\nObject.defineProperty(exports, 'resultOf', {\n enumerable: true,\n get: function () {\n return resultOf;\n }\n});\nObject.defineProperty(exports, 'wsLink', {\n enumerable: true,\n get: function () {\n return wsLink;\n }\n});","const require_codes = require('./codes-BfZsPdy-.cjs');\nconst require_parseTRPCMessage = require('./parseTRPCMessage-7Ltmq-Fb.cjs');\n\nexports.TRPC_ERROR_CODES_BY_KEY = require_codes.TRPC_ERROR_CODES_BY_KEY;\nexports.TRPC_ERROR_CODES_BY_NUMBER = require_codes.TRPC_ERROR_CODES_BY_NUMBER;\nexports.parseTRPCMessage = require_parseTRPCMessage.parseTRPCMessage;","const require_chunk = require('./chunk-DWy1uDak.cjs');\nconst require_splitLink = require('./splitLink-BMgxggng.cjs');\nconst require_objectSpread2$1 = require('./objectSpread2-Bsvh_OqM.cjs');\nconst require_TRPCClientError = require('./TRPCClientError-CQrTQLrk.cjs');\nconst require_httpUtils = require('./httpUtils-wv2o-njD.cjs');\nconst require_httpLink = require('./httpLink-B8Iv31Ee.cjs');\nconst require_httpBatchLink = require('./httpBatchLink-BGZRsGNf.cjs');\nconst require_unstable_internals = require('./unstable-internals-M84gUQCV.cjs');\nconst require_loggerLink = require('./loggerLink-CuYvRzyH.cjs');\nconst require_wsLink = require('./wsLink-CobRSm6C.cjs');\nconst __trpc_server_observable = require_chunk.__toESM(require(\"@trpc/server/observable\"));\nconst __trpc_server_unstable_core_do_not_import = require_chunk.__toESM(require(\"@trpc/server/unstable-core-do-not-import\"));\nconst __trpc_server = require_chunk.__toESM(require(\"@trpc/server\"));\nconst __trpc_server_rpc = require_chunk.__toESM(require(\"@trpc/server/rpc\"));\n\n//#region src/internals/TRPCUntypedClient.ts\nvar import_defineProperty = require_chunk.__toESM(require_objectSpread2$1.require_defineProperty(), 1);\nvar import_objectSpread2$4 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);\nvar TRPCUntypedClient = class {\n\tconstructor(opts) {\n\t\t(0, import_defineProperty.default)(this, \"links\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"runtime\", void 0);\n\t\t(0, import_defineProperty.default)(this, \"requestId\", void 0);\n\t\tthis.requestId = 0;\n\t\tthis.runtime = {};\n\t\tthis.links = opts.links.map((link) => link(this.runtime));\n\t}\n\t$request(opts) {\n\t\tvar _opts$context;\n\t\tconst chain$ = require_splitLink.createChain({\n\t\t\tlinks: this.links,\n\t\t\top: (0, import_objectSpread2$4.default)((0, import_objectSpread2$4.default)({}, opts), {}, {\n\t\t\t\tcontext: (_opts$context = opts.context) !== null && _opts$context !== void 0 ? _opts$context : {},\n\t\t\t\tid: ++this.requestId\n\t\t\t})\n\t\t});\n\t\treturn chain$.pipe((0, __trpc_server_observable.share)());\n\t}\n\tasync requestAsPromise(opts) {\n\t\tvar _this = this;\n\t\ttry {\n\t\t\tconst req$ = _this.$request(opts);\n\t\t\tconst envelope = await (0, __trpc_server_observable.observableToPromise)(req$);\n\t\t\tconst data = envelope.result.data;\n\t\t\treturn data;\n\t\t} catch (err) {\n\t\t\tthrow require_TRPCClientError.TRPCClientError.from(err);\n\t\t}\n\t}\n\tquery(path, input, opts) {\n\t\treturn this.requestAsPromise({\n\t\t\ttype: \"query\",\n\t\t\tpath,\n\t\t\tinput,\n\t\t\tcontext: opts === null || opts === void 0 ? void 0 : opts.context,\n\t\t\tsignal: opts === null || opts === void 0 ? void 0 : opts.signal\n\t\t});\n\t}\n\tmutation(path, input, opts) {\n\t\treturn this.requestAsPromise({\n\t\t\ttype: \"mutation\",\n\t\t\tpath,\n\t\t\tinput,\n\t\t\tcontext: opts === null || opts === void 0 ? void 0 : opts.context,\n\t\t\tsignal: opts === null || opts === void 0 ? void 0 : opts.signal\n\t\t});\n\t}\n\tsubscription(path, input, opts) {\n\t\tconst observable$ = this.$request({\n\t\t\ttype: \"subscription\",\n\t\t\tpath,\n\t\t\tinput,\n\t\t\tcontext: opts.context,\n\t\t\tsignal: opts.signal\n\t\t});\n\t\treturn observable$.subscribe({\n\t\t\tnext(envelope) {\n\t\t\t\tswitch (envelope.result.type) {\n\t\t\t\t\tcase \"state\": {\n\t\t\t\t\t\tvar _opts$onConnectionSta;\n\t\t\t\t\t\t(_opts$onConnectionSta = opts.onConnectionStateChange) === null || _opts$onConnectionSta === void 0 || _opts$onConnectionSta.call(opts, envelope.result);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"started\": {\n\t\t\t\t\t\tvar _opts$onStarted;\n\t\t\t\t\t\t(_opts$onStarted = opts.onStarted) === null || _opts$onStarted === void 0 || _opts$onStarted.call(opts, { context: envelope.context });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"stopped\": {\n\t\t\t\t\t\tvar _opts$onStopped;\n\t\t\t\t\t\t(_opts$onStopped = opts.onStopped) === null || _opts$onStopped === void 0 || _opts$onStopped.call(opts);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"data\":\n\t\t\t\t\tcase void 0: {\n\t\t\t\t\t\tvar _opts$onData;\n\t\t\t\t\t\t(_opts$onData = opts.onData) === null || _opts$onData === void 0 || _opts$onData.call(opts, envelope.result.data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\terror(err) {\n\t\t\t\tvar _opts$onError;\n\t\t\t\t(_opts$onError = opts.onError) === null || _opts$onError === void 0 || _opts$onError.call(opts, err);\n\t\t\t},\n\t\t\tcomplete() {\n\t\t\t\tvar _opts$onComplete;\n\t\t\t\t(_opts$onComplete = opts.onComplete) === null || _opts$onComplete === void 0 || _opts$onComplete.call(opts);\n\t\t\t}\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/createTRPCUntypedClient.ts\nfunction createTRPCUntypedClient(opts) {\n\treturn new TRPCUntypedClient(opts);\n}\n\n//#endregion\n//#region src/createTRPCClient.ts\nconst untypedClientSymbol = Symbol.for(\"trpc_untypedClient\");\nconst clientCallTypeMap = {\n\tquery: \"query\",\n\tmutate: \"mutation\",\n\tsubscribe: \"subscription\"\n};\n/** @internal */\nconst clientCallTypeToProcedureType = (clientCallType) => {\n\treturn clientCallTypeMap[clientCallType];\n};\n/**\n* @internal\n*/\nfunction createTRPCClientProxy(client) {\n\tconst proxy = (0, __trpc_server_unstable_core_do_not_import.createRecursiveProxy)(({ path, args }) => {\n\t\tconst pathCopy = [...path];\n\t\tconst procedureType = clientCallTypeToProcedureType(pathCopy.pop());\n\t\tconst fullPath = pathCopy.join(\".\");\n\t\treturn client[procedureType](fullPath, ...args);\n\t});\n\treturn (0, __trpc_server_unstable_core_do_not_import.createFlatProxy)((key) => {\n\t\tif (key === untypedClientSymbol) return client;\n\t\treturn proxy[key];\n\t});\n}\nfunction createTRPCClient(opts) {\n\tconst client = new TRPCUntypedClient(opts);\n\tconst proxy = createTRPCClientProxy(client);\n\treturn proxy;\n}\n/**\n* Get an untyped client from a proxy client\n* @internal\n*/\nfunction getUntypedClient(client) {\n\treturn client[untypedClientSymbol];\n}\n\n//#endregion\n//#region src/links/httpBatchStreamLink.ts\nvar import_objectSpread2$3 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);\n/**\n* @see https://trpc.io/docs/client/links/httpBatchStreamLink\n*/\nfunction httpBatchStreamLink(opts) {\n\tvar _opts$maxURLLength, _opts$maxItems;\n\tconst resolvedOpts = require_httpUtils.resolveHTTPLinkOptions(opts);\n\tconst maxURLLength = (_opts$maxURLLength = opts.maxURLLength) !== null && _opts$maxURLLength !== void 0 ? _opts$maxURLLength : Infinity;\n\tconst maxItems = (_opts$maxItems = opts.maxItems) !== null && _opts$maxItems !== void 0 ? _opts$maxItems : Infinity;\n\treturn () => {\n\t\tconst batchLoader = (type) => {\n\t\t\treturn {\n\t\t\t\tvalidate(batchOps) {\n\t\t\t\t\tif (maxURLLength === Infinity && maxItems === Infinity) return true;\n\t\t\t\t\tif (batchOps.length > maxItems) return false;\n\t\t\t\t\tconst path = batchOps.map((op) => op.path).join(\",\");\n\t\t\t\t\tconst inputs = batchOps.map((op) => op.input);\n\t\t\t\t\tconst url = require_httpUtils.getUrl((0, import_objectSpread2$3.default)((0, import_objectSpread2$3.default)({}, resolvedOpts), {}, {\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tinputs,\n\t\t\t\t\t\tsignal: null\n\t\t\t\t\t}));\n\t\t\t\t\treturn url.length <= maxURLLength;\n\t\t\t\t},\n\t\t\t\tasync fetch(batchOps) {\n\t\t\t\t\tvar _opts$streamHeader;\n\t\t\t\t\tconst path = batchOps.map((op) => op.path).join(\",\");\n\t\t\t\t\tconst inputs = batchOps.map((op) => op.input);\n\t\t\t\t\tconst batchSignals = require_httpBatchLink.allAbortSignals(...batchOps.map((op) => op.signal));\n\t\t\t\t\tconst abortController = new AbortController();\n\t\t\t\t\tconst responsePromise = require_httpUtils.fetchHTTPResponse((0, import_objectSpread2$3.default)((0, import_objectSpread2$3.default)({}, resolvedOpts), {}, {\n\t\t\t\t\t\tsignal: require_httpBatchLink.raceAbortSignals(batchSignals, abortController.signal),\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tcontentTypeHeader: \"application/json\",\n\t\t\t\t\t\ttrpcAcceptHeader: \"application/jsonl\",\n\t\t\t\t\t\ttrpcAcceptHeaderKey: (_opts$streamHeader = opts.streamHeader) !== null && _opts$streamHeader !== void 0 ? _opts$streamHeader : \"trpc-accept\",\n\t\t\t\t\t\tgetUrl: require_httpUtils.getUrl,\n\t\t\t\t\t\tgetBody: require_httpUtils.getBody,\n\t\t\t\t\t\tinputs,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\theaders() {\n\t\t\t\t\t\t\tif (!opts.headers) return {};\n\t\t\t\t\t\t\tif (typeof opts.headers === \"function\") return opts.headers({ opList: batchOps });\n\t\t\t\t\t\t\treturn opts.headers;\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t\tconst res = await responsePromise;\n\t\t\t\t\tconst [head] = await (0, __trpc_server_unstable_core_do_not_import.jsonlStreamConsumer)({\n\t\t\t\t\t\tfrom: res.body,\n\t\t\t\t\t\tdeserialize: (data) => resolvedOpts.transformer.output.deserialize(data),\n\t\t\t\t\t\tformatError(opts$1) {\n\t\t\t\t\t\t\tconst error = opts$1.error;\n\t\t\t\t\t\t\treturn require_TRPCClientError.TRPCClientError.from({ error });\n\t\t\t\t\t\t},\n\t\t\t\t\t\tabortController\n\t\t\t\t\t});\n\t\t\t\t\tconst promises = Object.keys(batchOps).map(async (key) => {\n\t\t\t\t\t\tlet json = await Promise.resolve(head[key]);\n\t\t\t\t\t\tif (\"result\" in json) {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t* Not very pretty, but we need to unwrap nested data as promises\n\t\t\t\t\t\t\t* Our stream producer will only resolve top-level async values or async values that are directly nested in another async value\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t\tconst result = await Promise.resolve(json.result);\n\t\t\t\t\t\t\tjson = { result: { data: await Promise.resolve(result.data) } };\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tjson,\n\t\t\t\t\t\t\tmeta: { response: res }\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t\treturn promises;\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t\tconst query = require_httpBatchLink.dataLoader(batchLoader(\"query\"));\n\t\tconst mutation = require_httpBatchLink.dataLoader(batchLoader(\"mutation\"));\n\t\tconst loaders = {\n\t\t\tquery,\n\t\t\tmutation\n\t\t};\n\t\treturn ({ op }) => {\n\t\t\treturn (0, __trpc_server_observable.observable)((observer) => {\n\t\t\t\t/* istanbul ignore if -- @preserve */\n\t\t\t\tif (op.type === \"subscription\") throw new Error(\"Subscriptions are unsupported by `httpBatchStreamLink` - use `httpSubscriptionLink` or `wsLink`\");\n\t\t\t\tconst loader = loaders[op.type];\n\t\t\t\tconst promise = loader.load(op);\n\t\t\t\tlet _res = void 0;\n\t\t\t\tpromise.then((res) => {\n\t\t\t\t\t_res = res;\n\t\t\t\t\tif (\"error\" in res.json) {\n\t\t\t\t\t\tobserver.error(require_TRPCClientError.TRPCClientError.from(res.json, { meta: res.meta }));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else if (\"result\" in res.json) {\n\t\t\t\t\t\tobserver.next({\n\t\t\t\t\t\t\tcontext: res.meta,\n\t\t\t\t\t\t\tresult: res.json.result\n\t\t\t\t\t\t});\n\t\t\t\t\t\tobserver.complete();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tobserver.complete();\n\t\t\t\t}).catch((err) => {\n\t\t\t\t\tobserver.error(require_TRPCClientError.TRPCClientError.from(err, { meta: _res === null || _res === void 0 ? void 0 : _res.meta }));\n\t\t\t\t});\n\t\t\t\treturn () => {};\n\t\t\t});\n\t\t};\n\t};\n}\n/**\n* @deprecated use {@link httpBatchStreamLink} instead\n*/\nconst unstable_httpBatchStreamLink = httpBatchStreamLink;\n\n//#endregion\n//#region src/internals/inputWithTrackedEventId.ts\nvar import_objectSpread2$2 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);\nfunction inputWithTrackedEventId(input, lastEventId) {\n\tif (!lastEventId) return input;\n\tif (input != null && typeof input !== \"object\") return input;\n\treturn (0, import_objectSpread2$2.default)((0, import_objectSpread2$2.default)({}, input !== null && input !== void 0 ? input : {}), {}, { lastEventId });\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncIterator.js\nvar require_asyncIterator = require_chunk.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncIterator.js\"(exports, module) {\n\tfunction _asyncIterator$1(r) {\n\t\tvar n, t, o, e = 2;\n\t\tfor (\"undefined\" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) {\n\t\t\tif (t && null != (n = r[t])) return n.call(r);\n\t\t\tif (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r));\n\t\t\tt = \"@@asyncIterator\", o = \"@@iterator\";\n\t\t}\n\t\tthrow new TypeError(\"Object is not async iterable\");\n\t}\n\tfunction AsyncFromSyncIterator(r) {\n\t\tfunction AsyncFromSyncIteratorContinuation(r$1) {\n\t\t\tif (Object(r$1) !== r$1) return Promise.reject(new TypeError(r$1 + \" is not an object.\"));\n\t\t\tvar n = r$1.done;\n\t\t\treturn Promise.resolve(r$1.value).then(function(r$2) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: r$2,\n\t\t\t\t\tdone: n\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t\treturn AsyncFromSyncIterator = function AsyncFromSyncIterator$1(r$1) {\n\t\t\tthis.s = r$1, this.n = r$1.next;\n\t\t}, AsyncFromSyncIterator.prototype = {\n\t\t\ts: null,\n\t\t\tn: null,\n\t\t\tnext: function next() {\n\t\t\t\treturn AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));\n\t\t\t},\n\t\t\t\"return\": function _return(r$1) {\n\t\t\t\tvar n = this.s[\"return\"];\n\t\t\t\treturn void 0 === n ? Promise.resolve({\n\t\t\t\t\tvalue: r$1,\n\t\t\t\t\tdone: !0\n\t\t\t\t}) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));\n\t\t\t},\n\t\t\t\"throw\": function _throw(r$1) {\n\t\t\t\tvar n = this.s[\"return\"];\n\t\t\t\treturn void 0 === n ? Promise.reject(r$1) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));\n\t\t\t}\n\t\t}, new AsyncFromSyncIterator(r);\n\t}\n\tmodule.exports = _asyncIterator$1, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region src/links/httpSubscriptionLink.ts\nvar import_asyncIterator = require_chunk.__toESM(require_asyncIterator(), 1);\nasync function urlWithConnectionParams(opts) {\n\tlet url = await require_wsLink.resultOf(opts.url);\n\tif (opts.connectionParams) {\n\t\tconst params = await require_wsLink.resultOf(opts.connectionParams);\n\t\tconst prefix = url.includes(\"?\") ? \"&\" : \"?\";\n\t\turl += prefix + \"connectionParams=\" + encodeURIComponent(JSON.stringify(params));\n\t}\n\treturn url;\n}\n/**\n* @see https://trpc.io/docs/client/links/httpSubscriptionLink\n*/\nfunction httpSubscriptionLink(opts) {\n\tconst transformer = require_unstable_internals.getTransformer(opts.transformer);\n\treturn () => {\n\t\treturn ({ op }) => {\n\t\t\treturn (0, __trpc_server_observable.observable)((observer) => {\n\t\t\t\tvar _opts$EventSource;\n\t\t\t\tconst { type, path, input } = op;\n\t\t\t\t/* istanbul ignore if -- @preserve */\n\t\t\t\tif (type !== \"subscription\") throw new Error(\"httpSubscriptionLink only supports subscriptions\");\n\t\t\t\tlet lastEventId = void 0;\n\t\t\t\tconst ac = new AbortController();\n\t\t\t\tconst signal = require_httpBatchLink.raceAbortSignals(op.signal, ac.signal);\n\t\t\t\tconst eventSourceStream = (0, __trpc_server_unstable_core_do_not_import.sseStreamConsumer)({\n\t\t\t\t\turl: async () => require_httpUtils.getUrl({\n\t\t\t\t\t\ttransformer,\n\t\t\t\t\t\turl: await urlWithConnectionParams(opts),\n\t\t\t\t\t\tinput: inputWithTrackedEventId(input, lastEventId),\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tsignal: null\n\t\t\t\t\t}),\n\t\t\t\t\tinit: () => require_wsLink.resultOf(opts.eventSourceOptions, { op }),\n\t\t\t\t\tsignal,\n\t\t\t\t\tdeserialize: (data) => transformer.output.deserialize(data),\n\t\t\t\t\tEventSource: (_opts$EventSource = opts.EventSource) !== null && _opts$EventSource !== void 0 ? _opts$EventSource : globalThis.EventSource\n\t\t\t\t});\n\t\t\t\tconst connectionState = (0, __trpc_server_observable.behaviorSubject)({\n\t\t\t\t\ttype: \"state\",\n\t\t\t\t\tstate: \"connecting\",\n\t\t\t\t\terror: null\n\t\t\t\t});\n\t\t\t\tconst connectionSub = connectionState.subscribe({ next(state) {\n\t\t\t\t\tobserver.next({ result: state });\n\t\t\t\t} });\n\t\t\t\t(0, __trpc_server_unstable_core_do_not_import.run)(async () => {\n\t\t\t\t\tvar _iteratorAbruptCompletion = false;\n\t\t\t\t\tvar _didIteratorError = false;\n\t\t\t\t\tvar _iteratorError;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (var _iterator = (0, import_asyncIterator.default)(eventSourceStream), _step; _iteratorAbruptCompletion = !(_step = await _iterator.next()).done; _iteratorAbruptCompletion = false) {\n\t\t\t\t\t\t\tconst chunk = _step.value;\n\t\t\t\t\t\t\tswitch (chunk.type) {\n\t\t\t\t\t\t\t\tcase \"ping\": break;\n\t\t\t\t\t\t\t\tcase \"data\":\n\t\t\t\t\t\t\t\t\tconst chunkData = chunk.data;\n\t\t\t\t\t\t\t\t\tlet result;\n\t\t\t\t\t\t\t\t\tif (chunkData.id) {\n\t\t\t\t\t\t\t\t\t\tlastEventId = chunkData.id;\n\t\t\t\t\t\t\t\t\t\tresult = {\n\t\t\t\t\t\t\t\t\t\t\tid: chunkData.id,\n\t\t\t\t\t\t\t\t\t\t\tdata: chunkData\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t} else result = { data: chunkData.data };\n\t\t\t\t\t\t\t\t\tobserver.next({\n\t\t\t\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\t\t\t\tcontext: { eventSource: chunk.eventSource }\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"connected\": {\n\t\t\t\t\t\t\t\t\tobserver.next({\n\t\t\t\t\t\t\t\t\t\tresult: { type: \"started\" },\n\t\t\t\t\t\t\t\t\t\tcontext: { eventSource: chunk.eventSource }\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tconnectionState.next({\n\t\t\t\t\t\t\t\t\t\ttype: \"state\",\n\t\t\t\t\t\t\t\t\t\tstate: \"pending\",\n\t\t\t\t\t\t\t\t\t\terror: null\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase \"serialized-error\": {\n\t\t\t\t\t\t\t\t\tconst error = require_TRPCClientError.TRPCClientError.from({ error: chunk.error });\n\t\t\t\t\t\t\t\t\tif (__trpc_server_unstable_core_do_not_import.retryableRpcCodes.includes(chunk.error.code)) {\n\t\t\t\t\t\t\t\t\t\tconnectionState.next({\n\t\t\t\t\t\t\t\t\t\t\ttype: \"state\",\n\t\t\t\t\t\t\t\t\t\t\tstate: \"connecting\",\n\t\t\t\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase \"connecting\": {\n\t\t\t\t\t\t\t\t\tconst lastState = connectionState.get();\n\t\t\t\t\t\t\t\t\tconst error = chunk.event && require_TRPCClientError.TRPCClientError.from(chunk.event);\n\t\t\t\t\t\t\t\t\tif (!error && lastState.state === \"connecting\") break;\n\t\t\t\t\t\t\t\t\tconnectionState.next({\n\t\t\t\t\t\t\t\t\t\ttype: \"state\",\n\t\t\t\t\t\t\t\t\t\tstate: \"connecting\",\n\t\t\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase \"timeout\": connectionState.next({\n\t\t\t\t\t\t\t\t\ttype: \"state\",\n\t\t\t\t\t\t\t\t\tstate: \"connecting\",\n\t\t\t\t\t\t\t\t\terror: new require_TRPCClientError.TRPCClientError(`Timeout of ${chunk.ms}ms reached while waiting for a response`)\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t_didIteratorError = true;\n\t\t\t\t\t\t_iteratorError = err;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (_iteratorAbruptCompletion && _iterator.return != null) await _iterator.return();\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (_didIteratorError) throw _iteratorError;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tobserver.next({ result: { type: \"stopped\" } });\n\t\t\t\t\tconnectionState.next({\n\t\t\t\t\t\ttype: \"state\",\n\t\t\t\t\t\tstate: \"idle\",\n\t\t\t\t\t\terror: null\n\t\t\t\t\t});\n\t\t\t\t\tobserver.complete();\n\t\t\t\t}).catch((error) => {\n\t\t\t\t\tobserver.error(require_TRPCClientError.TRPCClientError.from(error));\n\t\t\t\t});\n\t\t\t\treturn () => {\n\t\t\t\t\tobserver.complete();\n\t\t\t\t\tac.abort();\n\t\t\t\t\tconnectionSub.unsubscribe();\n\t\t\t\t};\n\t\t\t});\n\t\t};\n\t};\n}\n/**\n* @deprecated use {@link httpSubscriptionLink} instead\n*/\nconst unstable_httpSubscriptionLink = httpSubscriptionLink;\n\n//#endregion\n//#region src/links/retryLink.ts\nvar import_objectSpread2$1 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);\n/**\n* @see https://trpc.io/docs/v11/client/links/retryLink\n*/\nfunction retryLink(opts) {\n\treturn () => {\n\t\treturn (callOpts) => {\n\t\t\treturn (0, __trpc_server_observable.observable)((observer) => {\n\t\t\t\tlet next$;\n\t\t\t\tlet callNextTimeout = void 0;\n\t\t\t\tlet lastEventId = void 0;\n\t\t\t\tattempt(1);\n\t\t\t\tfunction opWithLastEventId() {\n\t\t\t\t\tconst op = callOpts.op;\n\t\t\t\t\tif (!lastEventId) return op;\n\t\t\t\t\treturn (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, op), {}, { input: inputWithTrackedEventId(op.input, lastEventId) });\n\t\t\t\t}\n\t\t\t\tfunction attempt(attempts) {\n\t\t\t\t\tconst op = opWithLastEventId();\n\t\t\t\t\tnext$ = callOpts.next(op).subscribe({\n\t\t\t\t\t\terror(error) {\n\t\t\t\t\t\t\tvar _opts$retryDelayMs, _opts$retryDelayMs2;\n\t\t\t\t\t\t\tconst shouldRetry = opts.retry({\n\t\t\t\t\t\t\t\top,\n\t\t\t\t\t\t\t\tattempts,\n\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (!shouldRetry) {\n\t\t\t\t\t\t\t\tobserver.error(error);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst delayMs = (_opts$retryDelayMs = (_opts$retryDelayMs2 = opts.retryDelayMs) === null || _opts$retryDelayMs2 === void 0 ? void 0 : _opts$retryDelayMs2.call(opts, attempts)) !== null && _opts$retryDelayMs !== void 0 ? _opts$retryDelayMs : 0;\n\t\t\t\t\t\t\tif (delayMs <= 0) {\n\t\t\t\t\t\t\t\tattempt(attempts + 1);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcallNextTimeout = setTimeout(() => attempt(attempts + 1), delayMs);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnext(envelope) {\n\t\t\t\t\t\t\tif ((!envelope.result.type || envelope.result.type === \"data\") && envelope.result.id) lastEventId = envelope.result.id;\n\t\t\t\t\t\t\tobserver.next(envelope);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcomplete() {\n\t\t\t\t\t\t\tobserver.complete();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn () => {\n\t\t\t\t\tnext$.unsubscribe();\n\t\t\t\t\tclearTimeout(callNextTimeout);\n\t\t\t\t};\n\t\t\t});\n\t\t};\n\t};\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/usingCtx.js\nvar require_usingCtx = require_chunk.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/usingCtx.js\"(exports, module) {\n\tfunction _usingCtx() {\n\t\tvar r = \"function\" == typeof SuppressedError ? SuppressedError : function(r$1, e$1) {\n\t\t\tvar n$1 = Error();\n\t\t\treturn n$1.name = \"SuppressedError\", n$1.error = r$1, n$1.suppressed = e$1, n$1;\n\t\t}, e = {}, n = [];\n\t\tfunction using(r$1, e$1) {\n\t\t\tif (null != e$1) {\n\t\t\t\tif (Object(e$1) !== e$1) throw new TypeError(\"using declarations can only be used with objects, functions, null, or undefined.\");\n\t\t\t\tif (r$1) var o = e$1[Symbol.asyncDispose || Symbol[\"for\"](\"Symbol.asyncDispose\")];\n\t\t\t\tif (void 0 === o && (o = e$1[Symbol.dispose || Symbol[\"for\"](\"Symbol.dispose\")], r$1)) var t = o;\n\t\t\t\tif (\"function\" != typeof o) throw new TypeError(\"Object is not disposable.\");\n\t\t\t\tt && (o = function o$1() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tt.call(e$1);\n\t\t\t\t\t} catch (r$2) {\n\t\t\t\t\t\treturn Promise.reject(r$2);\n\t\t\t\t\t}\n\t\t\t\t}), n.push({\n\t\t\t\t\tv: e$1,\n\t\t\t\t\td: o,\n\t\t\t\t\ta: r$1\n\t\t\t\t});\n\t\t\t} else r$1 && n.push({\n\t\t\t\td: e$1,\n\t\t\t\ta: r$1\n\t\t\t});\n\t\t\treturn e$1;\n\t\t}\n\t\treturn {\n\t\t\te,\n\t\t\tu: using.bind(null, !1),\n\t\t\ta: using.bind(null, !0),\n\t\t\td: function d() {\n\t\t\t\tvar o, t = this.e, s = 0;\n\t\t\t\tfunction next() {\n\t\t\t\t\tfor (; o = n.pop();) try {\n\t\t\t\t\t\tif (!o.a && 1 === s) return s = 0, n.push(o), Promise.resolve().then(next);\n\t\t\t\t\t\tif (o.d) {\n\t\t\t\t\t\t\tvar r$1 = o.d.call(o.v);\n\t\t\t\t\t\t\tif (o.a) return s |= 2, Promise.resolve(r$1).then(next, err);\n\t\t\t\t\t\t} else s |= 1;\n\t\t\t\t\t} catch (r$2) {\n\t\t\t\t\t\treturn err(r$2);\n\t\t\t\t\t}\n\t\t\t\t\tif (1 === s) return t !== e ? Promise.reject(t) : Promise.resolve();\n\t\t\t\t\tif (t !== e) throw t;\n\t\t\t\t}\n\t\t\t\tfunction err(n$1) {\n\t\t\t\t\treturn t = t !== e ? new r(n$1, t) : n$1, next();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t}\n\t\t};\n\t}\n\tmodule.exports = _usingCtx, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/OverloadYield.js\nvar require_OverloadYield = require_chunk.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/OverloadYield.js\"(exports, module) {\n\tfunction _OverloadYield(e, d) {\n\t\tthis.v = e, this.k = d;\n\t}\n\tmodule.exports = _OverloadYield, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/awaitAsyncGenerator.js\nvar require_awaitAsyncGenerator = require_chunk.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/awaitAsyncGenerator.js\"(exports, module) {\n\tvar OverloadYield$1 = require_OverloadYield();\n\tfunction _awaitAsyncGenerator$1(e) {\n\t\treturn new OverloadYield$1(e, 0);\n\t}\n\tmodule.exports = _awaitAsyncGenerator$1, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/wrapAsyncGenerator.js\nvar require_wrapAsyncGenerator = require_chunk.__commonJS({ \"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/wrapAsyncGenerator.js\"(exports, module) {\n\tvar OverloadYield = require_OverloadYield();\n\tfunction _wrapAsyncGenerator$1(e) {\n\t\treturn function() {\n\t\t\treturn new AsyncGenerator(e.apply(this, arguments));\n\t\t};\n\t}\n\tfunction AsyncGenerator(e) {\n\t\tvar r, t;\n\t\tfunction resume(r$1, t$1) {\n\t\t\ttry {\n\t\t\t\tvar n = e[r$1](t$1), o = n.value, u = o instanceof OverloadYield;\n\t\t\t\tPromise.resolve(u ? o.v : o).then(function(t$2) {\n\t\t\t\t\tif (u) {\n\t\t\t\t\t\tvar i = \"return\" === r$1 ? \"return\" : \"next\";\n\t\t\t\t\t\tif (!o.k || t$2.done) return resume(i, t$2);\n\t\t\t\t\t\tt$2 = e[i](t$2).value;\n\t\t\t\t\t}\n\t\t\t\t\tsettle(n.done ? \"return\" : \"normal\", t$2);\n\t\t\t\t}, function(e$1) {\n\t\t\t\t\tresume(\"throw\", e$1);\n\t\t\t\t});\n\t\t\t} catch (e$1) {\n\t\t\t\tsettle(\"throw\", e$1);\n\t\t\t}\n\t\t}\n\t\tfunction settle(e$1, n) {\n\t\t\tswitch (e$1) {\n\t\t\t\tcase \"return\":\n\t\t\t\t\tr.resolve({\n\t\t\t\t\t\tvalue: n,\n\t\t\t\t\t\tdone: !0\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"throw\":\n\t\t\t\t\tr.reject(n);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: r.resolve({\n\t\t\t\t\tvalue: n,\n\t\t\t\t\tdone: !1\n\t\t\t\t});\n\t\t\t}\n\t\t\t(r = r.next) ? resume(r.key, r.arg) : t = null;\n\t\t}\n\t\tthis._invoke = function(e$1, n) {\n\t\t\treturn new Promise(function(o, u) {\n\t\t\t\tvar i = {\n\t\t\t\t\tkey: e$1,\n\t\t\t\t\targ: n,\n\t\t\t\t\tresolve: o,\n\t\t\t\t\treject: u,\n\t\t\t\t\tnext: null\n\t\t\t\t};\n\t\t\t\tt ? t = t.next = i : (r = t = i, resume(e$1, n));\n\t\t\t});\n\t\t}, \"function\" != typeof e[\"return\"] && (this[\"return\"] = void 0);\n\t}\n\tAsyncGenerator.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function() {\n\t\treturn this;\n\t}, AsyncGenerator.prototype.next = function(e) {\n\t\treturn this._invoke(\"next\", e);\n\t}, AsyncGenerator.prototype[\"throw\"] = function(e) {\n\t\treturn this._invoke(\"throw\", e);\n\t}, AsyncGenerator.prototype[\"return\"] = function(e) {\n\t\treturn this._invoke(\"return\", e);\n\t};\n\tmodule.exports = _wrapAsyncGenerator$1, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n} });\n\n//#endregion\n//#region src/links/localLink.ts\nvar import_usingCtx = require_chunk.__toESM(require_usingCtx(), 1);\nvar import_awaitAsyncGenerator = require_chunk.__toESM(require_awaitAsyncGenerator(), 1);\nvar import_wrapAsyncGenerator = require_chunk.__toESM(require_wrapAsyncGenerator(), 1);\nvar import_objectSpread2 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);\n/**\n* localLink is a terminating link that allows you to make tRPC procedure calls directly in your application without going through HTTP.\n*\n* @see https://trpc.io/docs/links/localLink\n*/\nfunction unstable_localLink(opts) {\n\tconst transformer = require_unstable_internals.getTransformer(opts.transformer);\n\tconst transformChunk = (chunk) => {\n\t\tif (opts.transformer) return chunk;\n\t\tif (chunk === void 0) return chunk;\n\t\tconst serialized = JSON.stringify(transformer.input.serialize(chunk));\n\t\tconst deserialized = JSON.parse(transformer.output.deserialize(serialized));\n\t\treturn deserialized;\n\t};\n\treturn () => ({ op }) => (0, __trpc_server_observable.observable)((observer) => {\n\t\tlet ctx = void 0;\n\t\tconst ac = new AbortController();\n\t\tconst signal = require_httpBatchLink.raceAbortSignals(op.signal, ac.signal);\n\t\tconst signalPromise = require_httpBatchLink.abortSignalToPromise(signal);\n\t\tsignalPromise.catch(() => {});\n\t\tlet input = op.input;\n\t\tasync function runProcedure(newInput) {\n\t\t\tinput = newInput;\n\t\t\tctx = await opts.createContext();\n\t\t\treturn (0, __trpc_server_unstable_core_do_not_import.callProcedure)({\n\t\t\t\trouter: opts.router,\n\t\t\t\tpath: op.path,\n\t\t\t\tgetRawInput: async () => newInput,\n\t\t\t\tctx,\n\t\t\t\ttype: op.type,\n\t\t\t\tsignal,\n\t\t\t\tbatchIndex: 0\n\t\t\t});\n\t\t}\n\t\tfunction onErrorCallback(cause) {\n\t\t\tvar _opts$onError;\n\t\t\tif ((0, __trpc_server_unstable_core_do_not_import.isAbortError)(cause)) return;\n\t\t\t(_opts$onError = opts.onError) === null || _opts$onError === void 0 || _opts$onError.call(opts, {\n\t\t\t\terror: (0, __trpc_server.getTRPCErrorFromUnknown)(cause),\n\t\t\t\ttype: op.type,\n\t\t\t\tpath: op.path,\n\t\t\t\tinput,\n\t\t\t\tctx\n\t\t\t});\n\t\t}\n\t\tfunction coerceToTRPCClientError(cause) {\n\t\t\tif (require_TRPCClientError.isTRPCClientError(cause)) return cause;\n\t\t\tconst error = (0, __trpc_server.getTRPCErrorFromUnknown)(cause);\n\t\t\tconst shape = (0, __trpc_server.getTRPCErrorShape)({\n\t\t\t\tconfig: opts.router._def._config,\n\t\t\t\tctx,\n\t\t\t\terror,\n\t\t\t\tinput,\n\t\t\t\tpath: op.path,\n\t\t\t\ttype: op.type\n\t\t\t});\n\t\t\treturn require_TRPCClientError.TRPCClientError.from({ error: transformChunk(shape) }, { cause: cause instanceof Error ? cause : void 0 });\n\t\t}\n\t\t(0, __trpc_server_unstable_core_do_not_import.run)(async () => {\n\t\t\tswitch (op.type) {\n\t\t\t\tcase \"query\":\n\t\t\t\tcase \"mutation\": {\n\t\t\t\t\tconst result = await runProcedure(op.input);\n\t\t\t\t\tif (!(0, __trpc_server_unstable_core_do_not_import.isAsyncIterable)(result)) {\n\t\t\t\t\t\tobserver.next({ result: { data: transformChunk(result) } });\n\t\t\t\t\t\tobserver.complete();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tobserver.next({ result: { data: (0, import_wrapAsyncGenerator.default)(function* () {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tvar _usingCtx$1 = (0, import_usingCtx.default)();\n\t\t\t\t\t\t\tconst iterator = _usingCtx$1.a((0, __trpc_server_unstable_core_do_not_import.iteratorResource)(result));\n\t\t\t\t\t\t\tconst _finally = _usingCtx$1.u((0, __trpc_server_unstable_core_do_not_import.makeResource)({}, () => {\n\t\t\t\t\t\t\t\tobserver.complete();\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\t\t\tconst res = yield (0, import_awaitAsyncGenerator.default)(Promise.race([iterator.next(), signalPromise]));\n\t\t\t\t\t\t\t\t\tif (res.done) return transformChunk(res.value);\n\t\t\t\t\t\t\t\t\tyield transformChunk(res.value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\t\t\tonErrorCallback(cause);\n\t\t\t\t\t\t\t\tthrow coerceToTRPCClientError(cause);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (_) {\n\t\t\t\t\t\t\t_usingCtx$1.e = _;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tyield (0, import_awaitAsyncGenerator.default)(_usingCtx$1.d());\n\t\t\t\t\t\t}\n\t\t\t\t\t})() } });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"subscription\": try {\n\t\t\t\t\tvar _usingCtx3 = (0, import_usingCtx.default)();\n\t\t\t\t\tconst connectionState = (0, __trpc_server_observable.behaviorSubject)({\n\t\t\t\t\t\ttype: \"state\",\n\t\t\t\t\t\tstate: \"connecting\",\n\t\t\t\t\t\terror: null\n\t\t\t\t\t});\n\t\t\t\t\tconst connectionSub = connectionState.subscribe({ next(state) {\n\t\t\t\t\t\tobserver.next({ result: state });\n\t\t\t\t\t} });\n\t\t\t\t\tlet lastEventId = void 0;\n\t\t\t\t\tconst _finally = _usingCtx3.u((0, __trpc_server_unstable_core_do_not_import.makeResource)({}, async () => {\n\t\t\t\t\t\tobserver.complete();\n\t\t\t\t\t\tconnectionState.next({\n\t\t\t\t\t\t\ttype: \"state\",\n\t\t\t\t\t\t\tstate: \"idle\",\n\t\t\t\t\t\t\terror: null\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconnectionSub.unsubscribe();\n\t\t\t\t\t}));\n\t\t\t\t\twhile (true) try {\n\t\t\t\t\t\tvar _usingCtx4 = (0, import_usingCtx.default)();\n\t\t\t\t\t\tconst result = await runProcedure(inputWithTrackedEventId(op.input, lastEventId));\n\t\t\t\t\t\tif (!(0, __trpc_server_unstable_core_do_not_import.isAsyncIterable)(result)) throw new Error(\"Expected an async iterable\");\n\t\t\t\t\t\tconst iterator = _usingCtx4.a((0, __trpc_server_unstable_core_do_not_import.iteratorResource)(result));\n\t\t\t\t\t\tobserver.next({ result: { type: \"started\" } });\n\t\t\t\t\t\tconnectionState.next({\n\t\t\t\t\t\t\ttype: \"state\",\n\t\t\t\t\t\t\tstate: \"pending\",\n\t\t\t\t\t\t\terror: null\n\t\t\t\t\t\t});\n\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\tlet res;\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tres = await Promise.race([iterator.next(), signalPromise]);\n\t\t\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\t\t\tif ((0, __trpc_server_unstable_core_do_not_import.isAbortError)(cause)) return;\n\t\t\t\t\t\t\t\tconst error = (0, __trpc_server.getTRPCErrorFromUnknown)(cause);\n\t\t\t\t\t\t\t\tif (!__trpc_server_unstable_core_do_not_import.retryableRpcCodes.includes(__trpc_server_rpc.TRPC_ERROR_CODES_BY_KEY[error.code])) throw coerceToTRPCClientError(error);\n\t\t\t\t\t\t\t\tonErrorCallback(error);\n\t\t\t\t\t\t\t\tconnectionState.next({\n\t\t\t\t\t\t\t\t\ttype: \"state\",\n\t\t\t\t\t\t\t\t\tstate: \"connecting\",\n\t\t\t\t\t\t\t\t\terror: coerceToTRPCClientError(error)\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (res.done) return;\n\t\t\t\t\t\t\tlet chunk;\n\t\t\t\t\t\t\tif ((0, __trpc_server.isTrackedEnvelope)(res.value)) {\n\t\t\t\t\t\t\t\tlastEventId = res.value[0];\n\t\t\t\t\t\t\t\tchunk = {\n\t\t\t\t\t\t\t\t\tid: res.value[0],\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\tid: res.value[0],\n\t\t\t\t\t\t\t\t\t\tdata: res.value[1]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else chunk = { data: res.value };\n\t\t\t\t\t\t\tobserver.next({ result: (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, chunk), {}, { data: transformChunk(chunk.data) }) });\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (_) {\n\t\t\t\t\t\t_usingCtx4.e = _;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tawait _usingCtx4.d();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t} catch (_) {\n\t\t\t\t\t_usingCtx3.e = _;\n\t\t\t\t} finally {\n\t\t\t\t\t_usingCtx3.d();\n\t\t\t\t}\n\t\t\t}\n\t\t}).catch((cause) => {\n\t\t\tonErrorCallback(cause);\n\t\t\tobserver.error(coerceToTRPCClientError(cause));\n\t\t});\n\t\treturn () => {\n\t\t\tac.abort();\n\t\t};\n\t});\n}\n/**\n* @deprecated Renamed to `unstable_localLink`. This alias will be removed in a future major release.\n*/\nconst experimental_localLink = unstable_localLink;\n\n//#endregion\nexports.TRPCClientError = require_TRPCClientError.TRPCClientError;\nexports.TRPCUntypedClient = TRPCUntypedClient;\nexports.clientCallTypeToProcedureType = clientCallTypeToProcedureType;\nexports.createTRPCClient = createTRPCClient;\nexports.createTRPCClientProxy = createTRPCClientProxy;\nexports.createTRPCProxyClient = createTRPCClient;\nexports.createTRPCUntypedClient = createTRPCUntypedClient;\nexports.createWSClient = require_wsLink.createWSClient;\nexports.experimental_localLink = experimental_localLink;\nexports.getFetch = require_httpUtils.getFetch;\nexports.getUntypedClient = getUntypedClient;\nexports.httpBatchLink = require_httpBatchLink.httpBatchLink;\nexports.httpBatchStreamLink = httpBatchStreamLink;\nexports.httpLink = require_httpLink.httpLink;\nexports.httpSubscriptionLink = httpSubscriptionLink;\nexports.isFormData = require_httpLink.isFormData;\nexports.isNonJsonSerializable = require_httpLink.isNonJsonSerializable;\nexports.isOctetType = require_httpLink.isOctetType;\nexports.isTRPCClientError = require_TRPCClientError.isTRPCClientError;\nexports.jsonEncoder = require_wsLink.jsonEncoder;\nexports.loggerLink = require_loggerLink.loggerLink;\nexports.retryLink = retryLink;\nexports.splitLink = require_splitLink.splitLink;\nexports.unstable_httpBatchStreamLink = unstable_httpBatchStreamLink;\nexports.unstable_httpSubscriptionLink = unstable_httpSubscriptionLink;\nexports.unstable_localLink = unstable_localLink;\nexports.wsLink = require_wsLink.wsLink;","/**\n * Factory for creating tRPC clients for addons.\n *\n * Two modes:\n * - Direct caller (in-process): zero overhead, uses createCallerFactory\n * - WSS client (worker/agent): real WebSocket connection to the server\n */\n\nexport interface DirectCallerOptions {\n /** The tRPC router instance (from buildAppRouter) */\n readonly router: unknown\n /** Context for the caller (user identity, etc.) */\n readonly context: { readonly user: { readonly id: string; readonly username: string; readonly role: string } }\n}\n\nexport interface WssClientOptions {\n /** WebSocket URL (e.g., wss://localhost:4443/trpc) */\n readonly url: string\n /** Auth token for the connection */\n readonly token: string\n}\n\nexport class AddonApiFactory {\n /**\n * Build a WSS URL from host and port.\n */\n buildWssUrl(host: string, port: number): string {\n return `wss://${host}:${port}/trpc`\n }\n\n /**\n * Create a direct caller -- calls tRPC procedures directly in-process.\n * Zero network overhead. Used for in-process addons and dev mode.\n *\n * @param options.router - The tRPC router from buildAppRouter()\n * @param options.context - The auth context (service account)\n * @returns A tRPC caller that can be used as context.api\n */\n createDirectCaller(options: DirectCallerOptions): unknown {\n // Use the initTRPC instance to get createCallerFactory\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { initTRPC } = require('@trpc/server')\n const t = initTRPC.create()\n const callerFactory = t.createCallerFactory(options.router as never)\n return callerFactory(options.context as never)\n }\n\n /**\n * Create a WSS tRPC client -- connects to the server via WebSocket.\n * Used for forked workers and remote agents.\n *\n * @param options.url - WSS URL (e.g., wss://localhost:4443/trpc)\n * @param options.token - Bearer token for authentication\n * @returns A tRPC client that can be used as context.api\n */\n async createWssClient(options: WssClientOptions): Promise<{ readonly client: unknown; readonly close: () => void }> {\n const { createTRPCClient, createWSClient, wsLink } = await import('@trpc/client')\n\n const wsClient = createWSClient({\n url: options.url,\n connectionParams: () => ({ token: options.token }),\n })\n\n const client = createTRPCClient({\n links: [wsLink({ client: wsClient })],\n })\n\n return {\n client,\n close: () => wsClient.close(),\n }\n }\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { Backend } from './backend.js';\nimport { InferenceSession } from './inference-session.js';\n\ninterface BackendInfo {\n backend: Backend;\n priority: number;\n\n initPromise?: Promise<void>;\n initialized?: boolean;\n aborted?: boolean;\n error?: string;\n}\n\nconst backends: Map<string, BackendInfo> = new Map();\nconst backendsSortedByPriority: string[] = [];\n\n/**\n * Register a backend.\n *\n * @param name - the name as a key to lookup as an execution provider.\n * @param backend - the backend object.\n * @param priority - an integer indicating the priority of the backend. Higher number means higher priority. if priority\n * < 0, it will be considered as a 'beta' version and will not be used as a fallback backend by default.\n *\n * @ignore\n */\nexport const registerBackend = (name: string, backend: Backend, priority: number): void => {\n if (backend && typeof backend.init === 'function' && typeof backend.createInferenceSessionHandler === 'function') {\n const currentBackend = backends.get(name);\n if (currentBackend === undefined) {\n backends.set(name, { backend, priority });\n } else if (currentBackend.priority > priority) {\n // same name is already registered with a higher priority. skip registeration.\n return;\n } else if (currentBackend.priority === priority) {\n if (currentBackend.backend !== backend) {\n throw new Error(`cannot register backend \"${name}\" using priority ${priority}`);\n }\n }\n\n if (priority >= 0) {\n const i = backendsSortedByPriority.indexOf(name);\n if (i !== -1) {\n backendsSortedByPriority.splice(i, 1);\n }\n\n for (let i = 0; i < backendsSortedByPriority.length; i++) {\n if (backends.get(backendsSortedByPriority[i])!.priority <= priority) {\n backendsSortedByPriority.splice(i, 0, name);\n return;\n }\n }\n backendsSortedByPriority.push(name);\n }\n return;\n }\n\n throw new TypeError('not a valid backend');\n};\n\n/**\n * Try to resolve and initialize a backend.\n *\n * @param backendName - the name of the backend.\n * @returns the backend instance if resolved and initialized successfully, or an error message if failed.\n */\nconst tryResolveAndInitializeBackend = async (backendName: string): Promise<Backend | string> => {\n const backendInfo = backends.get(backendName);\n if (!backendInfo) {\n return 'backend not found.';\n }\n\n if (backendInfo.initialized) {\n return backendInfo.backend;\n } else if (backendInfo.aborted) {\n return backendInfo.error!;\n } else {\n const isInitializing = !!backendInfo.initPromise;\n try {\n if (!isInitializing) {\n backendInfo.initPromise = backendInfo.backend.init(backendName);\n }\n await backendInfo.initPromise;\n backendInfo.initialized = true;\n return backendInfo.backend;\n } catch (e) {\n if (!isInitializing) {\n backendInfo.error = `${e}`;\n backendInfo.aborted = true;\n }\n return backendInfo.error!;\n } finally {\n delete backendInfo.initPromise;\n }\n }\n};\n\n/**\n * Resolve execution providers from the specific session options.\n *\n * @param options - the session options object.\n * @returns a promise that resolves to a tuple of an initialized backend instance and a session options object with\n * filtered EP list.\n *\n * @ignore\n */\nexport const resolveBackendAndExecutionProviders = async (\n options: InferenceSession.SessionOptions,\n): Promise<[backend: Backend, options: InferenceSession.SessionOptions]> => {\n // extract backend hints from session options\n const eps = options.executionProviders || [];\n const backendHints = eps.map((i) => (typeof i === 'string' ? i : i.name));\n const backendNames = backendHints.length === 0 ? backendsSortedByPriority : backendHints;\n\n // try to resolve and initialize all requested backends\n let backend: Backend | undefined;\n const errors = [];\n const availableBackendNames = new Set<string>();\n for (const backendName of backendNames) {\n const resolveResult = await tryResolveAndInitializeBackend(backendName);\n if (typeof resolveResult === 'string') {\n errors.push({ name: backendName, err: resolveResult });\n } else {\n if (!backend) {\n backend = resolveResult;\n }\n if (backend === resolveResult) {\n availableBackendNames.add(backendName);\n }\n }\n }\n\n // if no backend is available, throw error.\n if (!backend) {\n throw new Error(`no available backend found. ERR: ${errors.map((e) => `[${e.name}] ${e.err}`).join(', ')}`);\n }\n\n // for each explicitly requested backend, if it's not available, output warning message.\n for (const { name, err } of errors) {\n if (backendHints.includes(name)) {\n // eslint-disable-next-line no-console\n console.warn(\n `removing requested execution provider \"${name}\" from session options because it is not available: ${err}`,\n );\n }\n }\n\n const filteredEps = eps.filter((i) => availableBackendNames.has(typeof i === 'string' ? i : i.name));\n\n return [\n backend,\n new Proxy(options, {\n get: (target, prop) => {\n if (prop === 'executionProviders') {\n return filteredEps;\n }\n return Reflect.get(target, prop);\n },\n }),\n ];\n};\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { InferenceSession } from './inference-session.js';\nimport { OnnxValue } from './onnx-value.js';\n\n/**\n * @ignore\n */\nexport declare namespace SessionHandler {\n type FeedsType = { [name: string]: OnnxValue };\n type FetchesType = { [name: string]: OnnxValue | null };\n type ReturnType = { [name: string]: OnnxValue };\n}\n\n/**\n * Represents shared SessionHandler functionality\n *\n * @ignore\n */\ninterface SessionHandler {\n dispose(): Promise<void>;\n\n readonly inputNames: readonly string[];\n readonly outputNames: readonly string[];\n\n readonly inputMetadata: readonly InferenceSession.ValueMetadata[];\n readonly outputMetadata: readonly InferenceSession.ValueMetadata[];\n}\n\n/**\n * Represent a handler instance of an inference session.\n *\n * @ignore\n */\nexport interface InferenceSessionHandler extends SessionHandler {\n startProfiling(): void;\n endProfiling(): void;\n\n run(\n feeds: SessionHandler.FeedsType,\n fetches: SessionHandler.FetchesType,\n options: InferenceSession.RunOptions,\n ): Promise<SessionHandler.ReturnType>;\n}\n\n/**\n * Represent a backend that provides implementation of model inferencing.\n *\n * @ignore\n */\nexport interface Backend {\n /**\n * Initialize the backend asynchronously. Should throw when failed.\n */\n init(backendName: string): Promise<void>;\n\n createInferenceSessionHandler(\n uriOrBuffer: string | Uint8Array,\n options?: InferenceSession.SessionOptions,\n ): Promise<InferenceSessionHandler>;\n}\n\nexport { registerBackend } from './backend-impl.js';\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\n// This file is generated by /js/scripts/update-version.ts\n// Do not modify file content manually.\n\nexport const version = '1.24.3';\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { Env } from './env.js';\nimport { version } from './version.js';\n\ntype LogLevelType = Env['logLevel'];\n\nlet logLevelValue: Required<LogLevelType> = 'warning';\n\nexport const env: Env = {\n wasm: {} as Env.WebAssemblyFlags,\n webgl: {} as Env.WebGLFlags,\n webgpu: {} as Env.WebGpuFlags,\n versions: { common: version },\n\n set logLevel(value: LogLevelType) {\n if (value === undefined) {\n return;\n }\n if (typeof value !== 'string' || ['verbose', 'info', 'warning', 'error', 'fatal'].indexOf(value) === -1) {\n throw new Error(`Unsupported logging level: ${value}`);\n }\n logLevelValue = value;\n },\n get logLevel(): Required<LogLevelType> {\n return logLevelValue;\n },\n};\n\n// set property 'logLevel' so that they can be correctly transferred to worker by `postMessage()`.\nObject.defineProperty(env, 'logLevel', { enumerable: true });\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { env as envImpl } from './env-impl.js';\nimport { TryGetGlobalType } from './type-helper.js';\n\nexport declare namespace Env {\n export type WasmPathPrefix = string;\n export interface WasmFilePaths {\n /**\n * Specify the override path for the main .wasm file.\n *\n * This path should be an absolute path.\n *\n * If not modified, the filename of the .wasm file is:\n * - `ort-wasm-simd-threaded.wasm` for default build\n * - `ort-wasm-simd-threaded.jsep.wasm` for JSEP build (with WebGPU and WebNN)\n * - `ort-wasm-simd-threaded.asyncify.wasm` for WebGPU build with Asyncify (with WebNN)\n * - `ort-wasm-simd-threaded.jspi.wasm` for WebGPU build with JSPI support (with WebNN)\n */\n wasm?: URL | string;\n /**\n * Specify the override path for the main .mjs file.\n *\n * This path should be an absolute path.\n *\n * If not modified, the filename of the .mjs file is:\n * - `ort-wasm-simd-threaded.mjs` for default build\n * - `ort-wasm-simd-threaded.jsep.mjs` for JSEP build (with WebGPU and WebNN)\n * - `ort-wasm-simd-threaded.asyncify.mjs` for WebGPU build with Asyncify (with WebNN)\n * - `ort-wasm-simd-threaded.jspi.mjs` for WebGPU build with JSPI support (with WebNN)\n */\n mjs?: URL | string;\n }\n export type WasmPrefixOrFilePaths = WasmPathPrefix | WasmFilePaths;\n export interface WebAssemblyFlags {\n /**\n * set or get number of thread(s). If omitted or set to 0, number of thread(s) will be determined by system. If set\n * to 1, no worker thread will be spawned.\n *\n * This setting is available only when WebAssembly multithread feature is available in current context.\n *\n * @defaultValue `0`\n */\n numThreads?: number;\n\n /**\n * set a value indicating whether to enable SIMD.\n *\n * ONNX Runtime will perform feature detection based on the value of this property. Specifically, when the value is\n * set to:\n * - `undefined`, `true` or `\"fixed\"`: will check availability of Fixed-width SIMD.\n * - `\"relaxed\"`: will check availability of Relaxed SIMD.\n * - `false`: will not perform SIMD feature checking.\n *\n * Setting this property does not make ONNX Runtime to switch to the corresponding runtime automatically. User need\n * to set `wasmPaths` or `wasmBinary` property to load the corresponding runtime.\n *\n * This setting is available only when WebAssembly SIMD feature is available in current context.\n *\n * @defaultValue `true`\n */\n simd?: boolean | 'fixed' | 'relaxed';\n\n /**\n * set or get a boolean value indicating whether to enable trace.\n *\n * @defaultValue `false`\n *\n * @deprecated Use `env.trace` instead. If `env.trace` is set, this property will be ignored.\n */\n trace?: boolean;\n\n /**\n * Set or get a number specifying the timeout for initialization of WebAssembly backend, in milliseconds. A zero\n * value indicates no timeout is set.\n *\n * @defaultValue `0`\n */\n initTimeout?: number;\n\n /**\n * Set a custom URL prefix to the .wasm/.mjs files, or an object of overrides for both .wasm/.mjs file. The override\n * path should be an absolute path.\n */\n wasmPaths?: WasmPrefixOrFilePaths;\n\n /**\n * Set a custom buffer which contains the WebAssembly binary. If this property is set, the `wasmPaths` property will\n * be ignored.\n */\n wasmBinary?: ArrayBufferLike | Uint8Array;\n\n /**\n * Set or get a boolean value indicating whether to proxy the execution of main thread to a worker thread.\n *\n * @defaultValue `false`\n */\n proxy?: boolean;\n }\n\n export interface WebGLFlags {\n /**\n * Set or get the WebGL Context ID (webgl or webgl2).\n *\n * @defaultValue `'webgl2'`\n */\n contextId?: 'webgl' | 'webgl2';\n /**\n * Get the WebGL rendering context.\n */\n readonly context: WebGLRenderingContext;\n /**\n * Set or get the maximum batch size for matmul. 0 means to disable batching.\n *\n * @deprecated\n */\n matmulMaxBatchSize?: number;\n /**\n * Set or get the texture cache mode.\n *\n * @defaultValue `'full'`\n */\n textureCacheMode?: 'initializerOnly' | 'full';\n /**\n * Set or get the packed texture mode\n *\n * @defaultValue `false`\n */\n pack?: boolean;\n /**\n * Set or get whether enable async download.\n *\n * @defaultValue `false`\n */\n async?: boolean;\n }\n\n export interface WebGpuProfilingDataV1TensorMetadata {\n dims: readonly number[];\n dataType: string;\n }\n export interface WebGpuProfilingDataV1 {\n version: 1;\n inputsMetadata: readonly WebGpuProfilingDataV1TensorMetadata[];\n outputsMetadata: readonly WebGpuProfilingDataV1TensorMetadata[];\n kernelId: number;\n kernelType: string;\n kernelName: string;\n programName: string;\n startTime: number;\n endTime: number;\n }\n\n export type WebGpuProfilingData = WebGpuProfilingDataV1;\n\n export interface WebGpuFlags {\n /**\n * Set or get the profiling mode.\n *\n * @deprecated Use `env.webgpu.profiling.mode` instead. If `env.webgpu.profiling.mode` is set, this property will be\n * ignored.\n */\n profilingMode?: 'off' | 'default';\n /**\n * Set or get the profiling configuration.\n */\n profiling: {\n /**\n * Set or get the profiling mode.\n *\n * @defaultValue `'off'`\n */\n mode?: 'off' | 'default';\n\n /**\n * Set or get a callback function when a profiling data is received. If not set, the profiling data will be\n * printed to console.\n */\n ondata?: (data: WebGpuProfilingData) => void;\n };\n /**\n * Set or get the power preference.\n *\n * Setting this property only has effect before the first WebGPU inference session is created. The value will be\n * used as options for `navigator.gpu.requestAdapter()`.\n *\n * See {@link https://gpuweb.github.io/gpuweb/#dictdef-gpurequestadapteroptions} for more details.\n *\n * @defaultValue `undefined`\n *\n * @deprecated Create your own GPUAdapter, use it to create a GPUDevice instance and set {@link device} property if\n * you want to use a specific power preference.\n */\n powerPreference?: 'low-power' | 'high-performance';\n /**\n * Set or get the force fallback adapter flag.\n *\n * Setting this property only has effect before the first WebGPU inference session is created. The value will be\n * used as options for `navigator.gpu.requestAdapter()`.\n *\n * See {@link https://gpuweb.github.io/gpuweb/#dictdef-gpurequestadapteroptions} for more details.\n *\n * @defaultValue `undefined`\n *\n * @deprecated Create your own GPUAdapter, use it to create a GPUDevice instance and set {@link device} property if\n * you want to use a specific fallback option.\n */\n forceFallbackAdapter?: boolean;\n /**\n * Set or get the adapter for WebGPU.\n *\n * Setting this property only has effect before the first WebGPU inference session is created. The value will be\n * used as the GPU adapter for the underlying WebGPU backend to create GPU device.\n *\n * If this property is not set, it will be available to get after the first WebGPU inference session is created. The\n * value will be the GPU adapter that created by the underlying WebGPU backend.\n *\n * When use with TypeScript, the type of this property is `GPUAdapter` defined in \"@webgpu/types\".\n *\n * @deprecated It is no longer recommended to use this property. The latest WebGPU spec adds `GPUDevice.adapterInfo`\n * (https://www.w3.org/TR/webgpu/#dom-gpudevice-adapterinfo), which allows to get the adapter information from the\n * device. When it's available, there is no need to set/get the {@link adapter} property.\n */\n adapter: TryGetGlobalType<'GPUAdapter'>;\n /**\n * Set or get the GPU device for WebGPU.\n *\n * There are 3 valid scenarios of accessing this property:\n * - Set a value before the first WebGPU inference session is created. The value will be used by the WebGPU backend\n * to perform calculations. If the value is not a `GPUDevice` object, an error will be thrown.\n * - Get the value before the first WebGPU inference session is created. This will try to create a new GPUDevice\n * instance. Returns a `Promise` that resolves to a `GPUDevice` object.\n * - Get the value after the first WebGPU inference session is created. Returns a resolved `Promise` to the\n * `GPUDevice` object used by the WebGPU backend.\n */\n get device(): Promise<TryGetGlobalType<'GPUDevice'>>;\n set device(value: TryGetGlobalType<'GPUDevice'>);\n /**\n * Set or get whether validate input content.\n *\n * @defaultValue `false`\n */\n validateInputContent?: boolean;\n }\n}\n\nexport interface Env {\n /**\n * set the severity level for logging.\n *\n * @defaultValue `'warning'`\n */\n logLevel?: 'verbose' | 'info' | 'warning' | 'error' | 'fatal';\n\n /**\n * Indicate whether run in debug mode.\n *\n * @defaultValue `false`\n */\n debug?: boolean;\n\n /**\n * set or get a boolean value indicating whether to enable trace.\n *\n * @defaultValue `false`\n */\n trace?: boolean;\n\n /**\n * Get version of the current package.\n */\n readonly versions: {\n readonly common: string;\n readonly web?: string;\n readonly node?: string;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n readonly 'react-native'?: string;\n };\n\n /**\n * Represent a set of flags for WebAssembly\n */\n readonly wasm: Env.WebAssemblyFlags;\n\n /**\n * Represent a set of flags for WebGL\n */\n readonly webgl: Env.WebGLFlags;\n\n /**\n * Represent a set of flags for WebGPU\n */\n readonly webgpu: Env.WebGpuFlags;\n\n [name: string]: unknown;\n}\n\n/**\n * Represent a set of flags as a global singleton.\n */\nexport const env: Env = envImpl;\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { TensorToDataUrlOptions, TensorToImageDataOptions } from './tensor-conversion.js';\nimport { Tensor } from './tensor.js';\n\n/**\n * implementation of Tensor.toDataURL()\n */\nexport const tensorToDataURL = (tensor: Tensor, options?: TensorToDataUrlOptions): string => {\n const canvas = typeof document !== 'undefined' ? document.createElement('canvas') : new OffscreenCanvas(1, 1);\n canvas.width = tensor.dims[3];\n canvas.height = tensor.dims[2];\n const pixels2DContext = canvas.getContext('2d') as\n | CanvasRenderingContext2D\n | OffscreenCanvasRenderingContext2D\n | null;\n\n if (pixels2DContext != null) {\n // Default values for height and width & format\n let width: number;\n let height: number;\n if (options?.tensorLayout !== undefined && options.tensorLayout === 'NHWC') {\n width = tensor.dims[2];\n height = tensor.dims[3];\n } else {\n // Default layout is NCWH\n width = tensor.dims[3];\n height = tensor.dims[2];\n }\n\n const inputformat = options?.format !== undefined ? options.format : 'RGB';\n\n const norm = options?.norm;\n let normMean: [number, number, number, number];\n let normBias: [number, number, number, number];\n if (norm === undefined || norm.mean === undefined) {\n normMean = [255, 255, 255, 255];\n } else {\n if (typeof norm.mean === 'number') {\n normMean = [norm.mean, norm.mean, norm.mean, norm.mean];\n } else {\n normMean = [norm.mean[0], norm.mean[1], norm.mean[2], 0];\n if (norm.mean[3] !== undefined) {\n normMean[3] = norm.mean[3];\n }\n }\n }\n if (norm === undefined || norm.bias === undefined) {\n normBias = [0, 0, 0, 0];\n } else {\n if (typeof norm.bias === 'number') {\n normBias = [norm.bias, norm.bias, norm.bias, norm.bias];\n } else {\n normBias = [norm.bias[0], norm.bias[1], norm.bias[2], 0];\n if (norm.bias[3] !== undefined) {\n normBias[3] = norm.bias[3];\n }\n }\n }\n\n const stride = height * width;\n // Default pointer assignments\n let rTensorPointer = 0,\n gTensorPointer = stride,\n bTensorPointer = stride * 2,\n aTensorPointer = -1;\n\n // Updating the pointer assignments based on the input image format\n if (inputformat === 'RGBA') {\n rTensorPointer = 0;\n gTensorPointer = stride;\n bTensorPointer = stride * 2;\n aTensorPointer = stride * 3;\n } else if (inputformat === 'RGB') {\n rTensorPointer = 0;\n gTensorPointer = stride;\n bTensorPointer = stride * 2;\n } else if (inputformat === 'RBG') {\n rTensorPointer = 0;\n bTensorPointer = stride;\n gTensorPointer = stride * 2;\n }\n\n for (let i = 0; i < height; i++) {\n for (let j = 0; j < width; j++) {\n const R = ((tensor.data[rTensorPointer++] as number) - normBias[0]) * normMean[0]; // R value\n const G = ((tensor.data[gTensorPointer++] as number) - normBias[1]) * normMean[1]; // G value\n const B = ((tensor.data[bTensorPointer++] as number) - normBias[2]) * normMean[2]; // B value\n const A = aTensorPointer === -1 ? 255 : ((tensor.data[aTensorPointer++] as number) - normBias[3]) * normMean[3]; // A value\n\n pixels2DContext.fillStyle = 'rgba(' + R + ',' + G + ',' + B + ',' + A + ')';\n pixels2DContext.fillRect(j, i, 1, 1);\n }\n }\n if ('toDataURL' in canvas) {\n return canvas.toDataURL();\n } else {\n throw new Error('toDataURL is not supported');\n }\n } else {\n throw new Error('Can not access image data');\n }\n};\n\n/**\n * implementation of Tensor.toImageData()\n */\nexport const tensorToImageData = (tensor: Tensor, options?: TensorToImageDataOptions): ImageData => {\n const pixels2DContext =\n typeof document !== 'undefined'\n ? document.createElement('canvas').getContext('2d')\n : (new OffscreenCanvas(1, 1).getContext('2d') as OffscreenCanvasRenderingContext2D);\n let image: ImageData;\n if (pixels2DContext != null) {\n // Default values for height and width & format\n let width: number;\n let height: number;\n let channels: number;\n if (options?.tensorLayout !== undefined && options.tensorLayout === 'NHWC') {\n width = tensor.dims[2];\n height = tensor.dims[1];\n channels = tensor.dims[3];\n } else {\n // Default layout is NCWH\n width = tensor.dims[3];\n height = tensor.dims[2];\n channels = tensor.dims[1];\n }\n const inputformat = options !== undefined ? (options.format !== undefined ? options.format : 'RGB') : 'RGB';\n\n const norm = options?.norm;\n let normMean: [number, number, number, number];\n let normBias: [number, number, number, number];\n if (norm === undefined || norm.mean === undefined) {\n normMean = [255, 255, 255, 255];\n } else {\n if (typeof norm.mean === 'number') {\n normMean = [norm.mean, norm.mean, norm.mean, norm.mean];\n } else {\n normMean = [norm.mean[0], norm.mean[1], norm.mean[2], 255];\n if (norm.mean[3] !== undefined) {\n normMean[3] = norm.mean[3];\n }\n }\n }\n if (norm === undefined || norm.bias === undefined) {\n normBias = [0, 0, 0, 0];\n } else {\n if (typeof norm.bias === 'number') {\n normBias = [norm.bias, norm.bias, norm.bias, norm.bias];\n } else {\n normBias = [norm.bias[0], norm.bias[1], norm.bias[2], 0];\n if (norm.bias[3] !== undefined) {\n normBias[3] = norm.bias[3];\n }\n }\n }\n\n const stride = height * width;\n if (options !== undefined) {\n if (\n (options.format !== undefined && channels === 4 && options.format !== 'RGBA') ||\n (channels === 3 && options.format !== 'RGB' && options.format !== 'BGR')\n ) {\n throw new Error(\"Tensor format doesn't match input tensor dims\");\n }\n }\n\n // Default pointer assignments\n const step = 4;\n let rImagePointer = 0,\n gImagePointer = 1,\n bImagePointer = 2,\n aImagePointer = 3;\n let rTensorPointer = 0,\n gTensorPointer = stride,\n bTensorPointer = stride * 2,\n aTensorPointer = -1;\n\n // Updating the pointer assignments based on the input image format\n if (inputformat === 'RGBA') {\n rTensorPointer = 0;\n gTensorPointer = stride;\n bTensorPointer = stride * 2;\n aTensorPointer = stride * 3;\n } else if (inputformat === 'RGB') {\n rTensorPointer = 0;\n gTensorPointer = stride;\n bTensorPointer = stride * 2;\n } else if (inputformat === 'RBG') {\n rTensorPointer = 0;\n bTensorPointer = stride;\n gTensorPointer = stride * 2;\n }\n\n image = pixels2DContext.createImageData(width, height);\n\n for (\n let i = 0;\n i < height * width;\n rImagePointer += step, gImagePointer += step, bImagePointer += step, aImagePointer += step, i++\n ) {\n image.data[rImagePointer] = ((tensor.data[rTensorPointer++] as number) - normBias[0]) * normMean[0]; // R value\n image.data[gImagePointer] = ((tensor.data[gTensorPointer++] as number) - normBias[1]) * normMean[1]; // G value\n image.data[bImagePointer] = ((tensor.data[bTensorPointer++] as number) - normBias[2]) * normMean[2]; // B value\n image.data[aImagePointer] =\n aTensorPointer === -1 ? 255 : ((tensor.data[aTensorPointer++] as number) - normBias[3]) * normMean[3]; // A value\n }\n } else {\n throw new Error('Can not access image data');\n }\n return image;\n};\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport {\n OptionsDimensions,\n OptionsFormat,\n OptionsNormalizationParameters,\n OptionsTensorFormat,\n OptionsTensorLayout,\n TensorFromGpuBufferOptions,\n TensorFromImageBitmapOptions,\n TensorFromImageDataOptions,\n TensorFromImageElementOptions,\n TensorFromMLTensorOptions,\n TensorFromTextureOptions,\n TensorFromUrlOptions,\n} from './tensor-factory.js';\nimport { Tensor } from './tensor-impl.js';\nimport { Tensor as TensorInterface } from './tensor.js';\n\ninterface BufferToTensorOptions\n extends OptionsDimensions,\n OptionsTensorLayout,\n OptionsNormalizationParameters,\n OptionsFormat,\n OptionsTensorFormat {}\n\n/**\n * Create a new tensor object from image object\n *\n * @param buffer - Extracted image buffer data - assuming RGBA format\n * @param imageFormat - input image configuration - required configurations height, width, format\n * @param tensorFormat - output tensor configuration - Default is RGB format\n */\nexport const bufferToTensor = (buffer: Uint8ClampedArray | undefined, options: BufferToTensorOptions): Tensor => {\n if (buffer === undefined) {\n throw new Error('Image buffer must be defined');\n }\n if (options.height === undefined || options.width === undefined) {\n throw new Error('Image height and width must be defined');\n }\n if (options.tensorLayout === 'NHWC') {\n throw new Error('NHWC Tensor layout is not supported yet');\n }\n\n const { height, width } = options;\n\n const norm = options.norm ?? { mean: 255, bias: 0 };\n let normMean: [number, number, number, number];\n let normBias: [number, number, number, number];\n\n if (typeof norm.mean === 'number') {\n normMean = [norm.mean, norm.mean, norm.mean, norm.mean];\n } else {\n normMean = [norm.mean![0], norm.mean![1], norm.mean![2], norm.mean![3] ?? 255];\n }\n\n if (typeof norm.bias === 'number') {\n normBias = [norm.bias, norm.bias, norm.bias, norm.bias];\n } else {\n normBias = [norm.bias![0], norm.bias![1], norm.bias![2], norm.bias![3] ?? 0];\n }\n\n const inputformat = options.format !== undefined ? options.format : 'RGBA';\n // default value is RGBA since imagedata and HTMLImageElement uses it\n\n const outputformat =\n options.tensorFormat !== undefined ? (options.tensorFormat !== undefined ? options.tensorFormat : 'RGB') : 'RGB';\n const stride = height * width;\n const float32Data = outputformat === 'RGBA' ? new Float32Array(stride * 4) : new Float32Array(stride * 3);\n\n // Default pointer assignments\n let step = 4,\n rImagePointer = 0,\n gImagePointer = 1,\n bImagePointer = 2,\n aImagePointer = 3;\n let rTensorPointer = 0,\n gTensorPointer = stride,\n bTensorPointer = stride * 2,\n aTensorPointer = -1;\n\n // Updating the pointer assignments based on the input image format\n if (inputformat === 'RGB') {\n step = 3;\n rImagePointer = 0;\n gImagePointer = 1;\n bImagePointer = 2;\n aImagePointer = -1;\n }\n\n // Updating the pointer assignments based on the output tensor format\n if (outputformat === 'RGBA') {\n aTensorPointer = stride * 3;\n } else if (outputformat === 'RBG') {\n rTensorPointer = 0;\n bTensorPointer = stride;\n gTensorPointer = stride * 2;\n } else if (outputformat === 'BGR') {\n bTensorPointer = 0;\n gTensorPointer = stride;\n rTensorPointer = stride * 2;\n }\n\n for (\n let i = 0;\n i < stride;\n i++, rImagePointer += step, bImagePointer += step, gImagePointer += step, aImagePointer += step\n ) {\n float32Data[rTensorPointer++] = (buffer[rImagePointer] + normBias[0]) / normMean[0];\n float32Data[gTensorPointer++] = (buffer[gImagePointer] + normBias[1]) / normMean[1];\n float32Data[bTensorPointer++] = (buffer[bImagePointer] + normBias[2]) / normMean[2];\n if (aTensorPointer !== -1 && aImagePointer !== -1) {\n float32Data[aTensorPointer++] = (buffer[aImagePointer] + normBias[3]) / normMean[3];\n }\n }\n\n // Float32Array -> ort.Tensor\n const outputTensor =\n outputformat === 'RGBA'\n ? new Tensor('float32', float32Data, [1, 4, height, width])\n : new Tensor('float32', float32Data, [1, 3, height, width]);\n return outputTensor;\n};\n\n/**\n * implementation of Tensor.fromImage().\n */\nexport const tensorFromImage = async (\n image: ImageData | HTMLImageElement | ImageBitmap | string,\n options?:\n | TensorFromImageDataOptions\n | TensorFromImageElementOptions\n | TensorFromImageBitmapOptions\n | TensorFromUrlOptions,\n): Promise<Tensor> => {\n // checking the type of image object\n const isHTMLImageEle = typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement;\n const isImageDataEle = typeof ImageData !== 'undefined' && image instanceof ImageData;\n const isImageBitmap = typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap;\n const isString = typeof image === 'string';\n\n let data: Uint8ClampedArray | undefined;\n let bufferToTensorOptions: BufferToTensorOptions = options ?? {};\n\n const createCanvas = () => {\n if (typeof document !== 'undefined') {\n return document.createElement('canvas');\n } else if (typeof OffscreenCanvas !== 'undefined') {\n return new OffscreenCanvas(1, 1);\n } else {\n throw new Error('Canvas is not supported');\n }\n };\n const createCanvasContext = (canvas: HTMLCanvasElement | OffscreenCanvas) => {\n if (typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement) {\n return canvas.getContext('2d');\n } else if (canvas instanceof OffscreenCanvas) {\n return canvas.getContext('2d') as OffscreenCanvasRenderingContext2D;\n } else {\n return null;\n }\n };\n // filling and checking image configuration options\n if (isHTMLImageEle) {\n // HTMLImageElement - image object - format is RGBA by default\n const canvas = createCanvas();\n canvas.width = image.width;\n canvas.height = image.height;\n const pixels2DContext = createCanvasContext(canvas);\n\n if (pixels2DContext != null) {\n let height = image.height;\n let width = image.width;\n if (options !== undefined && options.resizedHeight !== undefined && options.resizedWidth !== undefined) {\n height = options.resizedHeight;\n width = options.resizedWidth;\n }\n\n if (options !== undefined) {\n bufferToTensorOptions = options;\n if (options.tensorFormat !== undefined) {\n throw new Error('Image input config format must be RGBA for HTMLImageElement');\n } else {\n bufferToTensorOptions.tensorFormat = 'RGBA';\n }\n bufferToTensorOptions.height = height;\n bufferToTensorOptions.width = width;\n } else {\n bufferToTensorOptions.tensorFormat = 'RGBA';\n bufferToTensorOptions.height = height;\n bufferToTensorOptions.width = width;\n }\n\n pixels2DContext.drawImage(image, 0, 0);\n data = pixels2DContext.getImageData(0, 0, width, height).data;\n } else {\n throw new Error('Can not access image data');\n }\n } else if (isImageDataEle) {\n let height: number;\n let width: number;\n\n if (options !== undefined && options.resizedWidth !== undefined && options.resizedHeight !== undefined) {\n height = options.resizedHeight;\n width = options.resizedWidth;\n } else {\n height = image.height;\n width = image.width;\n }\n\n if (options !== undefined) {\n bufferToTensorOptions = options;\n }\n bufferToTensorOptions.format = 'RGBA';\n bufferToTensorOptions.height = height;\n bufferToTensorOptions.width = width;\n\n if (options !== undefined) {\n const tempCanvas = createCanvas();\n\n tempCanvas.width = width;\n tempCanvas.height = height;\n\n const pixels2DContext = createCanvasContext(tempCanvas);\n\n if (pixels2DContext != null) {\n pixels2DContext.putImageData(image, 0, 0);\n data = pixels2DContext.getImageData(0, 0, width, height).data;\n } else {\n throw new Error('Can not access image data');\n }\n } else {\n data = image.data;\n }\n } else if (isImageBitmap) {\n // ImageBitmap - image object - format must be provided by user\n if (options === undefined) {\n throw new Error('Please provide image config with format for Imagebitmap');\n }\n\n const canvas = createCanvas();\n canvas.width = image.width;\n canvas.height = image.height;\n const pixels2DContext = createCanvasContext(canvas);\n\n if (pixels2DContext != null) {\n const height = image.height;\n const width = image.width;\n pixels2DContext.drawImage(image, 0, 0, width, height);\n data = pixels2DContext.getImageData(0, 0, width, height).data;\n bufferToTensorOptions.height = height;\n bufferToTensorOptions.width = width;\n return bufferToTensor(data, bufferToTensorOptions);\n } else {\n throw new Error('Can not access image data');\n }\n } else if (isString) {\n return new Promise((resolve, reject) => {\n const canvas = createCanvas();\n const context = createCanvasContext(canvas);\n if (!image || !context) {\n return reject();\n }\n const newImage = new Image();\n newImage.crossOrigin = 'Anonymous';\n newImage.src = image;\n newImage.onload = () => {\n canvas.width = newImage.width;\n canvas.height = newImage.height;\n context.drawImage(newImage, 0, 0, canvas.width, canvas.height);\n const img = context.getImageData(0, 0, canvas.width, canvas.height);\n\n bufferToTensorOptions.height = canvas.height;\n bufferToTensorOptions.width = canvas.width;\n resolve(bufferToTensor(img.data, bufferToTensorOptions));\n };\n });\n } else {\n throw new Error('Input data provided is not supported - aborted tensor creation');\n }\n\n if (data !== undefined) {\n return bufferToTensor(data, bufferToTensorOptions);\n } else {\n throw new Error('Input data provided is not supported - aborted tensor creation');\n }\n};\n\n/**\n * implementation of Tensor.fromTexture().\n */\nexport const tensorFromTexture = <T extends TensorInterface.TextureDataTypes>(\n texture: TensorInterface.TextureType,\n options: TensorFromTextureOptions<T>,\n): Tensor => {\n const { width, height, download, dispose } = options;\n // Always assume RGBAF32. TODO: support different texture format\n const dims = [1, height, width, 4];\n return new Tensor({ location: 'texture', type: 'float32', texture, dims, download, dispose });\n};\n\n/**\n * implementation of Tensor.fromGpuBuffer().\n */\nexport const tensorFromGpuBuffer = <T extends TensorInterface.GpuBufferDataTypes>(\n gpuBuffer: TensorInterface.GpuBufferType,\n options: TensorFromGpuBufferOptions<T>,\n): Tensor => {\n const { dataType, dims, download, dispose } = options;\n return new Tensor({ location: 'gpu-buffer', type: dataType ?? 'float32', gpuBuffer, dims, download, dispose });\n};\n\n/**\n * implementation of Tensor.fromMLTensor().\n */\nexport const tensorFromMLTensor = <T extends TensorInterface.MLTensorDataTypes>(\n mlTensor: TensorInterface.MLTensorType,\n options: TensorFromMLTensorOptions<T>,\n): Tensor => {\n const { dataType, dims, download, dispose } = options;\n return new Tensor({ location: 'ml-tensor', type: dataType ?? 'float32', mlTensor, dims, download, dispose });\n};\n\n/**\n * implementation of Tensor.fromPinnedBuffer().\n */\nexport const tensorFromPinnedBuffer = <T extends TensorInterface.CpuPinnedDataTypes>(\n type: T,\n buffer: TensorInterface.DataTypeMap[T],\n dims?: readonly number[],\n): Tensor => new Tensor({ location: 'cpu-pinned', type, data: buffer, dims: dims ?? [buffer.length] });\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { Tensor } from './tensor.js';\n\nexport type SupportedTypedArrayConstructors =\n | Float32ArrayConstructor\n | Uint8ArrayConstructor\n | Int8ArrayConstructor\n | Uint16ArrayConstructor\n | Int16ArrayConstructor\n | Int32ArrayConstructor\n | BigInt64ArrayConstructor\n | Uint8ArrayConstructor\n | Float64ArrayConstructor\n | Uint32ArrayConstructor\n | BigUint64ArrayConstructor;\nexport type SupportedTypedArray = InstanceType<SupportedTypedArrayConstructors>;\n\n// a runtime map that maps type string to TypedArray constructor. Should match Tensor.DataTypeMap.\nexport const NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP = new Map<string, SupportedTypedArrayConstructors>([\n ['float32', Float32Array],\n ['uint8', Uint8Array],\n ['int8', Int8Array],\n ['uint16', Uint16Array],\n ['int16', Int16Array],\n ['int32', Int32Array],\n ['bool', Uint8Array],\n ['float64', Float64Array],\n ['uint32', Uint32Array],\n ['int4', Uint8Array],\n ['uint4', Uint8Array],\n]);\n\n// a runtime map that maps type string to TypedArray constructor. Should match Tensor.DataTypeMap.\nexport const NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP = new Map<SupportedTypedArrayConstructors, Tensor.Type>([\n [Float32Array, 'float32'],\n [Uint8Array, 'uint8'],\n [Int8Array, 'int8'],\n [Uint16Array, 'uint16'],\n [Int16Array, 'int16'],\n [Int32Array, 'int32'],\n [Float64Array, 'float64'],\n [Uint32Array, 'uint32'],\n]);\n\n// the following code allows delaying execution of BigInt/Float16Array checking. This allows lazy initialization for\n// NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP and NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP, which allows BigInt/Float16Array\n// polyfill if available.\nlet isTypedArrayChecked = false;\nexport const checkTypedArray = () => {\n if (!isTypedArrayChecked) {\n isTypedArrayChecked = true;\n const isBigInt64ArrayAvailable = typeof BigInt64Array !== 'undefined' && BigInt64Array.from;\n const isBigUint64ArrayAvailable = typeof BigUint64Array !== 'undefined' && BigUint64Array.from;\n\n // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-explicit-any\n const Float16Array = (globalThis as any).Float16Array;\n const isFloat16ArrayAvailable = typeof Float16Array !== 'undefined' && Float16Array.from;\n\n if (isBigInt64ArrayAvailable) {\n NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set('int64', BigInt64Array);\n NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(BigInt64Array, 'int64');\n }\n if (isBigUint64ArrayAvailable) {\n NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set('uint64', BigUint64Array);\n NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(BigUint64Array, 'uint64');\n }\n if (isFloat16ArrayAvailable) {\n NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set('float16', Float16Array);\n NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(Float16Array, 'float16');\n } else {\n // if Float16Array is not available, use 'Uint16Array' to store the data.\n NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set('float16', Uint16Array);\n }\n }\n};\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport {\n CpuPinnedConstructorParameters,\n GpuBufferConstructorParameters,\n MLTensorConstructorParameters,\n TextureConstructorParameters,\n} from './tensor-factory.js';\nimport { Tensor } from './tensor-impl.js';\n\n/**\n * calculate size from dims.\n *\n * @param dims the dims array. May be an illegal input.\n */\nexport const calculateSize = (dims: readonly unknown[]): number => {\n let size = 1;\n for (let i = 0; i < dims.length; i++) {\n const dim = dims[i];\n if (typeof dim !== 'number' || !Number.isSafeInteger(dim)) {\n throw new TypeError(`dims[${i}] must be an integer, got: ${dim}`);\n }\n if (dim < 0) {\n throw new RangeError(`dims[${i}] must be a non-negative integer, got: ${dim}`);\n }\n size *= dim;\n }\n return size;\n};\n\n/**\n * implementation of Tensor.reshape()\n */\nexport const tensorReshape = (tensor: Tensor, dims: readonly number[]): Tensor => {\n switch (tensor.location) {\n case 'cpu':\n return new Tensor(tensor.type, tensor.data, dims);\n case 'cpu-pinned':\n return new Tensor({\n location: 'cpu-pinned',\n data: tensor.data as CpuPinnedConstructorParameters['data'],\n type: tensor.type as CpuPinnedConstructorParameters['type'],\n dims,\n });\n case 'texture':\n return new Tensor({\n location: 'texture',\n texture: tensor.texture,\n type: tensor.type as TextureConstructorParameters['type'],\n dims,\n });\n case 'gpu-buffer':\n return new Tensor({\n location: 'gpu-buffer',\n gpuBuffer: tensor.gpuBuffer,\n type: tensor.type as GpuBufferConstructorParameters['type'],\n dims,\n });\n case 'ml-tensor':\n return new Tensor({\n location: 'ml-tensor',\n mlTensor: tensor.mlTensor,\n type: tensor.type as MLTensorConstructorParameters['type'],\n dims,\n });\n default:\n throw new Error(`tensorReshape: tensor location ${tensor.location} is not supported`);\n }\n};\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { tensorToDataURL, tensorToImageData } from './tensor-conversion-impl.js';\nimport { TensorToDataUrlOptions, TensorToImageDataOptions } from './tensor-conversion.js';\nimport {\n tensorFromGpuBuffer,\n tensorFromImage,\n tensorFromMLTensor,\n tensorFromPinnedBuffer,\n tensorFromTexture,\n} from './tensor-factory-impl.js';\nimport {\n CpuPinnedConstructorParameters,\n GpuBufferConstructorParameters,\n MLTensorConstructorParameters,\n TensorFromGpuBufferOptions,\n TensorFromImageBitmapOptions,\n TensorFromImageDataOptions,\n TensorFromImageElementOptions,\n TensorFromMLTensorOptions,\n TensorFromTextureOptions,\n TensorFromUrlOptions,\n TextureConstructorParameters,\n} from './tensor-factory.js';\nimport {\n checkTypedArray,\n NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP,\n NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP,\n SupportedTypedArray,\n SupportedTypedArrayConstructors,\n} from './tensor-impl-type-mapping.js';\nimport { calculateSize, tensorReshape } from './tensor-utils-impl.js';\nimport { Tensor as TensorInterface } from './tensor.js';\n\n// type aliases for those exported from Tensor interface\n\ntype TensorType = TensorInterface.Type;\ntype TensorDataType = TensorInterface.DataType;\ntype TensorDataLocation = TensorInterface.DataLocation;\ntype TensorTextureType = TensorInterface.TextureType;\ntype TensorGpuBufferType = TensorInterface.GpuBufferType;\ntype TensorMLTensorType = TensorInterface.MLTensorType;\n\n/**\n * the implementation of Tensor interface.\n *\n * @ignore\n */\nexport class Tensor implements TensorInterface {\n // #region constructors\n\n /**\n * Construct a new CPU tensor object from the given type, data and dims.\n */\n constructor(\n type: TensorType,\n data: TensorDataType | Uint8ClampedArray | readonly string[] | readonly number[] | readonly boolean[],\n dims?: readonly number[],\n );\n /**\n * Construct a new CPU tensor object from the given data and dims. Type is inferred from data.\n */\n constructor(\n data: TensorDataType | Uint8ClampedArray | readonly string[] | readonly boolean[],\n dims?: readonly number[],\n );\n /**\n * Construct a new tensor object from the pinned CPU data with the given type and dims.\n *\n * Tensor's location will be set to 'cpu-pinned'.\n *\n * @param params - Specify the parameters to construct the tensor.\n */\n constructor(params: CpuPinnedConstructorParameters);\n /**\n * Construct a new tensor object from the WebGL texture with the given type and dims.\n *\n * Tensor's location will be set to 'texture'.\n *\n * @param params - Specify the parameters to construct the tensor.\n */\n constructor(params: TextureConstructorParameters);\n /**\n * Construct a new tensor object from the WebGPU buffer with the given type and dims.\n *\n * Tensor's location will be set to 'gpu-buffer'.\n *\n * @param params - Specify the parameters to construct the tensor.\n */\n constructor(params: GpuBufferConstructorParameters);\n\n /**\n * Construct a new tensor object from the WebNN MLTensor with the given type and dims.\n *\n * Tensor's location will be set to 'ml-tensor'.\n *\n * @param params - Specify the parameters to construct the tensor.\n */\n constructor(params: MLTensorConstructorParameters);\n\n /**\n * implementation.\n */\n constructor(\n arg0:\n | TensorType\n | TensorDataType\n | Uint8ClampedArray\n | readonly string[]\n | readonly boolean[]\n | CpuPinnedConstructorParameters\n | TextureConstructorParameters\n | GpuBufferConstructorParameters\n | MLTensorConstructorParameters,\n arg1?: TensorDataType | Uint8ClampedArray | readonly number[] | readonly string[] | readonly boolean[],\n arg2?: readonly number[],\n ) {\n // perform one-time check for BigInt/Float16Array support\n checkTypedArray();\n\n let type: TensorType;\n let dims: readonly number[];\n\n if (typeof arg0 === 'object' && 'location' in arg0) {\n //\n // constructing tensor from specific location\n //\n this.dataLocation = arg0.location;\n type = arg0.type;\n dims = arg0.dims;\n switch (arg0.location) {\n case 'cpu-pinned': {\n const expectedTypedArrayConstructor = NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.get(type);\n if (!expectedTypedArrayConstructor) {\n throw new TypeError(`unsupported type \"${type}\" to create tensor from pinned buffer`);\n }\n if (!(arg0.data instanceof expectedTypedArrayConstructor)) {\n throw new TypeError(`buffer should be of type ${expectedTypedArrayConstructor.name}`);\n }\n this.cpuData = arg0.data;\n break;\n }\n case 'texture': {\n if (type !== 'float32') {\n throw new TypeError(`unsupported type \"${type}\" to create tensor from texture`);\n }\n this.gpuTextureData = arg0.texture;\n this.downloader = arg0.download;\n this.disposer = arg0.dispose;\n break;\n }\n case 'gpu-buffer': {\n if (\n type !== 'float32' &&\n type !== 'float16' &&\n type !== 'int32' &&\n type !== 'int64' &&\n type !== 'uint32' &&\n type !== 'uint8' &&\n type !== 'bool' &&\n type !== 'uint4' &&\n type !== 'int4'\n ) {\n throw new TypeError(`unsupported type \"${type}\" to create tensor from gpu buffer`);\n }\n this.gpuBufferData = arg0.gpuBuffer;\n this.downloader = arg0.download;\n this.disposer = arg0.dispose;\n break;\n }\n case 'ml-tensor': {\n if (\n type !== 'float32' &&\n type !== 'float16' &&\n type !== 'int32' &&\n type !== 'int64' &&\n type !== 'uint32' &&\n type !== 'uint64' &&\n type !== 'int8' &&\n type !== 'uint8' &&\n type !== 'bool' &&\n type !== 'uint4' &&\n type !== 'int4'\n ) {\n throw new TypeError(`unsupported type \"${type}\" to create tensor from MLTensor`);\n }\n this.mlTensorData = arg0.mlTensor;\n this.downloader = arg0.download;\n this.disposer = arg0.dispose;\n break;\n }\n default:\n throw new Error(`Tensor constructor: unsupported location '${this.dataLocation}'`);\n }\n } else {\n //\n // constructing tensor of location 'cpu'\n //\n let data: TensorDataType;\n let maybeDims: typeof arg1 | typeof arg2;\n // check whether arg0 is type or data\n if (typeof arg0 === 'string') {\n //\n // Override: constructor(type, data, ...)\n //\n type = arg0;\n maybeDims = arg2;\n if (arg0 === 'string') {\n // string tensor\n if (!Array.isArray(arg1)) {\n throw new TypeError(\"A string tensor's data must be a string array.\");\n }\n // we don't check whether every element in the array is string; this is too slow. we assume it's correct and\n // error will be populated at inference\n data = arg1;\n } else {\n // numeric tensor\n const typedArrayConstructor = NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.get(arg0);\n if (typedArrayConstructor === undefined) {\n throw new TypeError(`Unsupported tensor type: ${arg0}.`);\n }\n if (Array.isArray(arg1)) {\n if ((arg0 === 'float16' && typedArrayConstructor === Uint16Array) || arg0 === 'uint4' || arg0 === 'int4') {\n // - 'float16':\n // When no Float16Array polyfill is used, we cannot create 'float16' tensor from number array.\n //\n // Throw error here because when user try to use number array as data,\n // e.g. new Tensor('float16', [1, 2, 3, 4], dims)), it will actually call\n // Uint16Array.from(arg1) which generates wrong data.\n //\n // - 'uint4' and 'int4':\n // Uint8Array.from(arg1) will generate wrong data for 'uint4' and 'int4' tensor.\n //\n throw new TypeError(\n `Creating a ${arg0} tensor from number array is not supported. Please use ${typedArrayConstructor.name} as data.`,\n );\n } else if (arg0 === 'uint64' || arg0 === 'int64') {\n // use 'as any' here because:\n // 1. TypeScript's check on type of 'Array.isArray()' does not work with readonly arrays.\n // see https://github.com/microsoft/TypeScript/issues/17002\n // 2. TypeScript's check on union type of '(BigInt64ArrayConstructor|BigUint64ArrayConstructor).from()'\n // does not accept parameter mapFn.\n // 3. parameters of 'SupportedTypedArrayConstructors.from()' does not match the requirement of the union\n // type.\n\n // assume 'arg1' is of type \"readonly number[]|readonly bigint[]\" here.\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = (typedArrayConstructor as any).from(arg1, BigInt);\n } else {\n // assume 'arg1' is of type \"readonly number[]\" here.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = (typedArrayConstructor as any).from(arg1);\n }\n } else if (arg1 instanceof typedArrayConstructor) {\n data = arg1;\n } else if (arg1 instanceof Uint8ClampedArray) {\n if (arg0 === 'uint8') {\n data = Uint8Array.from(arg1);\n } else {\n throw new TypeError(`A Uint8ClampedArray tensor's data must be type of uint8`);\n }\n } else if (arg0 === 'float16' && arg1 instanceof Uint16Array && typedArrayConstructor !== Uint16Array) {\n // when Float16Array is available and data is of type Uint16Array.\n // We allow Uint16Array to be passed in as data for 'float16' tensor until Float16Array is generally\n // supported in JavaScript environment.\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = new (globalThis as any).Float16Array(arg1.buffer, arg1.byteOffset, arg1.length);\n } else {\n throw new TypeError(`A ${type} tensor's data must be type of ${typedArrayConstructor}`);\n }\n }\n } else {\n //\n // Override: constructor(data, ...)\n //\n maybeDims = arg1;\n if (Array.isArray(arg0)) {\n // only boolean[] and string[] is supported\n if (arg0.length === 0) {\n throw new TypeError('Tensor type cannot be inferred from an empty array.');\n }\n const firstElementType = typeof arg0[0];\n if (firstElementType === 'string') {\n type = 'string';\n data = arg0;\n } else if (firstElementType === 'boolean') {\n type = 'bool';\n // 'arg0' is of type 'boolean[]'. Uint8Array.from(boolean[]) actually works, but typescript thinks this is\n // wrong type. We use 'as any' to make it happy.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = Uint8Array.from(arg0 as any[]);\n } else {\n throw new TypeError(`Invalid element type of data array: ${firstElementType}.`);\n }\n } else if (arg0 instanceof Uint8ClampedArray) {\n type = 'uint8';\n data = Uint8Array.from(arg0);\n } else {\n // get tensor type from TypedArray\n const mappedType = NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.get(\n arg0.constructor as SupportedTypedArrayConstructors,\n );\n if (mappedType === undefined) {\n throw new TypeError(`Unsupported type for tensor data: ${arg0.constructor}.`);\n }\n type = mappedType;\n data = arg0 as SupportedTypedArray;\n }\n }\n\n // type and data is processed, now processing dims\n if (maybeDims === undefined) {\n // assume 1-D tensor if dims omitted\n maybeDims = [data.length];\n } else if (!Array.isArray(maybeDims)) {\n throw new TypeError(\"A tensor's dims must be a number array\");\n }\n dims = maybeDims as readonly number[];\n\n this.cpuData = data;\n this.dataLocation = 'cpu';\n }\n\n // perform check on dims\n const size = calculateSize(dims);\n // if data is on CPU, check whether data length matches tensor size\n if (this.cpuData && size !== this.cpuData.length) {\n if ((type === 'uint4' || type === 'int4') && Math.ceil(size / 2) === this.cpuData.length) {\n // for (u)int4, the data length is half of the tensor size. So we check this special case when size is odd.\n } else {\n throw new Error(`Tensor's size(${size}) does not match data length(${this.cpuData.length}).`);\n }\n }\n\n this.type = type;\n this.dims = dims;\n this.size = size;\n }\n // #endregion\n\n // #region factory\n static async fromImage(\n image: ImageData | HTMLImageElement | ImageBitmap | string,\n options?:\n | TensorFromImageDataOptions\n | TensorFromImageElementOptions\n | TensorFromImageBitmapOptions\n | TensorFromUrlOptions,\n ): Promise<TensorInterface> {\n return tensorFromImage(image, options);\n }\n\n static fromTexture<T extends TensorInterface.TextureDataTypes>(\n texture: TensorTextureType,\n options: TensorFromTextureOptions<T>,\n ): TensorInterface {\n return tensorFromTexture(texture, options);\n }\n\n static fromGpuBuffer<T extends TensorInterface.GpuBufferDataTypes>(\n gpuBuffer: TensorGpuBufferType,\n options: TensorFromGpuBufferOptions<T>,\n ): TensorInterface {\n return tensorFromGpuBuffer(gpuBuffer, options);\n }\n\n static fromMLTensor<T extends TensorInterface.MLTensorDataTypes>(\n mlTensor: TensorMLTensorType,\n options: TensorFromMLTensorOptions<T>,\n ): TensorInterface {\n return tensorFromMLTensor(mlTensor, options);\n }\n\n static fromPinnedBuffer<T extends TensorInterface.CpuPinnedDataTypes>(\n type: T,\n buffer: TensorInterface.DataTypeMap[T],\n dims?: readonly number[],\n ): Tensor {\n return tensorFromPinnedBuffer(type, buffer, dims);\n }\n\n // #endregion\n\n // #region conversions\n toDataURL(options?: TensorToDataUrlOptions): string {\n return tensorToDataURL(this, options);\n }\n\n toImageData(options?: TensorToImageDataOptions): ImageData {\n return tensorToImageData(this, options);\n }\n // #endregion\n\n // #region public fields\n readonly dims: readonly number[];\n readonly type: TensorType;\n readonly size: number;\n // #endregion\n\n // #region private fields\n\n /**\n * stores the location of the data.\n */\n private dataLocation: TensorDataLocation;\n\n /**\n * stores the data on CPU, if location is 'cpu' or 'cpu-pinned'. otherwise empty.\n */\n private cpuData?: TensorDataType;\n\n /**\n * stores the underlying texture when location is 'texture'. otherwise empty.\n */\n private gpuTextureData?: TensorTextureType;\n\n /**\n * stores the underlying GPU buffer when location is 'gpu-buffer'. otherwise empty.\n */\n private gpuBufferData?: TensorGpuBufferType;\n\n /**\n * stores the underlying WebNN MLTensor when location is 'ml-tensor'. otherwise empty.\n */\n private mlTensorData?: TensorMLTensorType;\n\n /**\n * stores an optional downloader function to download data from GPU to CPU.\n */\n private downloader?(): Promise<TensorDataType>;\n\n /**\n * a flag indicating whether the data is being downloaded from GPU to CPU.\n */\n private isDownloading?: boolean;\n\n /**\n * stores an optional disposer function to dispose the underlying data.\n */\n private disposer?(): void;\n // #endregion\n\n // #region properties\n get data(): TensorDataType {\n this.ensureValid();\n if (!this.cpuData) {\n throw new Error(\n 'The data is not on CPU. Use `getData()` to download GPU data to CPU, ' +\n 'or use `texture` or `gpuBuffer` property to access the GPU data directly.',\n );\n }\n return this.cpuData;\n }\n\n get location(): TensorDataLocation {\n return this.dataLocation;\n }\n\n get texture(): TensorTextureType {\n this.ensureValid();\n if (!this.gpuTextureData) {\n throw new Error('The data is not stored as a WebGL texture.');\n }\n return this.gpuTextureData;\n }\n\n get gpuBuffer(): TensorGpuBufferType {\n this.ensureValid();\n if (!this.gpuBufferData) {\n throw new Error('The data is not stored as a WebGPU buffer.');\n }\n return this.gpuBufferData;\n }\n\n get mlTensor(): TensorMLTensorType {\n this.ensureValid();\n if (!this.mlTensorData) {\n throw new Error('The data is not stored as a WebNN MLTensor.');\n }\n return this.mlTensorData;\n }\n // #endregion\n\n // #region methods\n\n async getData(releaseData?: boolean): Promise<TensorDataType> {\n this.ensureValid();\n switch (this.dataLocation) {\n case 'cpu':\n case 'cpu-pinned':\n return this.data;\n case 'texture':\n case 'gpu-buffer':\n case 'ml-tensor': {\n if (!this.downloader) {\n throw new Error('The current tensor is not created with a specified data downloader.');\n }\n if (this.isDownloading) {\n throw new Error('The current tensor is being downloaded.');\n }\n try {\n this.isDownloading = true;\n const data = await this.downloader();\n this.downloader = undefined;\n this.dataLocation = 'cpu';\n this.cpuData = data;\n\n if (releaseData && this.disposer) {\n this.disposer();\n this.disposer = undefined;\n }\n\n return data;\n } finally {\n this.isDownloading = false;\n }\n }\n default:\n throw new Error(`cannot get data from location: ${this.dataLocation}`);\n }\n }\n\n dispose(): void {\n if (this.isDownloading) {\n throw new Error('The current tensor is being downloaded.');\n }\n\n if (this.disposer) {\n this.disposer();\n this.disposer = undefined;\n }\n this.cpuData = undefined;\n this.gpuTextureData = undefined;\n this.gpuBufferData = undefined;\n this.mlTensorData = undefined;\n this.downloader = undefined;\n this.isDownloading = undefined;\n\n this.dataLocation = 'none';\n }\n\n // #endregion\n\n // #region tensor utilities\n private ensureValid(): void {\n if (this.dataLocation === 'none') {\n throw new Error('The tensor is disposed.');\n }\n }\n\n reshape(dims: readonly number[]): TensorInterface {\n this.ensureValid();\n if (this.downloader || this.disposer) {\n throw new Error('Cannot reshape a tensor that owns GPU resource.');\n }\n return tensorReshape(this, dims);\n }\n // #endregion\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { TensorFactory } from './tensor-factory.js';\nimport { Tensor as TensorImpl } from './tensor-impl.js';\nimport { TypedTensorUtils } from './tensor-utils.js';\nimport { TryGetGlobalType } from './type-helper.js';\n\n/* eslint-disable @typescript-eslint/no-redeclare */\n\n/**\n * represent a basic tensor with specified dimensions and data type.\n */\ninterface TypedTensorBase<T extends Tensor.Type> {\n /**\n * Get the dimensions of the tensor.\n */\n readonly dims: readonly number[];\n /**\n * Get the data type of the tensor.\n */\n readonly type: T;\n /**\n * Get the buffer data of the tensor.\n *\n * If the data is not on CPU (eg. it's in the form of WebGL texture or WebGPU buffer), throw error.\n */\n readonly data: Tensor.DataTypeMap[T];\n /**\n * Get the location of the data.\n */\n readonly location: Tensor.DataLocation;\n /**\n * Get the WebGL texture that holds the tensor data.\n *\n * If the data is not on GPU as WebGL texture, throw error.\n */\n readonly texture: Tensor.TextureType;\n /**\n * Get the WebGPU buffer that holds the tensor data.\n *\n * If the data is not on GPU as WebGPU buffer, throw error.\n */\n readonly gpuBuffer: Tensor.GpuBufferType;\n\n /**\n * Get the WebNN MLTensor that holds the tensor data.\n *\n * If the data is not in a WebNN MLTensor, throw error.\n */\n readonly mlTensor: Tensor.MLTensorType;\n\n /**\n * Get the buffer data of the tensor.\n *\n * If the data is on CPU, returns the data immediately.\n * If the data is on GPU, downloads the data and returns the promise.\n *\n * @param releaseData - whether release the data on GPU. Ignore if data is already on CPU.\n */\n getData(releaseData?: boolean): Promise<Tensor.DataTypeMap[T]>;\n\n /**\n * Dispose the tensor data.\n *\n * If the data is on CPU, remove its internal reference to the underlying data.\n * If the data is on GPU, release the data on GPU.\n *\n * After calling this function, the tensor is considered no longer valid. Its location will be set to 'none'.\n */\n dispose(): void;\n}\n\nexport declare namespace Tensor {\n interface DataTypeMap {\n float32: Float32Array;\n uint8: Uint8Array;\n int8: Int8Array;\n uint16: Uint16Array;\n int16: Int16Array;\n int32: Int32Array;\n int64: BigInt64Array;\n string: string[];\n bool: Uint8Array;\n float16: Uint16Array; // Keep using Uint16Array until we have a concrete solution for float 16.\n float64: Float64Array;\n uint32: Uint32Array;\n uint64: BigUint64Array;\n // complex64: never;\n // complex128: never;\n // bfloat16: never;\n uint4: Uint8Array;\n int4: Int8Array;\n }\n\n interface ElementTypeMap {\n float32: number;\n uint8: number;\n int8: number;\n uint16: number;\n int16: number;\n int32: number;\n int64: bigint;\n string: string;\n bool: boolean;\n float16: number; // Keep using Uint16Array until we have a concrete solution for float 16.\n float64: number;\n uint32: number;\n uint64: bigint;\n // complex64: never;\n // complex128: never;\n // bfloat16: never;\n uint4: number;\n int4: number;\n }\n\n type DataType = DataTypeMap[Type];\n type ElementType = ElementTypeMap[Type];\n\n /**\n * supported data types for constructing a tensor from a pinned CPU buffer\n */\n export type CpuPinnedDataTypes = Exclude<Tensor.Type, 'string'>;\n\n /**\n * type alias for WebGL texture\n */\n export type TextureType = WebGLTexture;\n\n /**\n * supported data types for constructing a tensor from a WebGL texture\n */\n export type TextureDataTypes = 'float32';\n\n type GpuBufferTypeFallback = { size: number; mapState: 'unmapped' | 'pending' | 'mapped' };\n /**\n * type alias for WebGPU buffer\n */\n export type GpuBufferType = TryGetGlobalType<'GPUBuffer', GpuBufferTypeFallback>;\n\n type MLTensorTypeFallback = { destroy(): void };\n /**\n * type alias for WebNN MLTensor\n *\n * The specification for WebNN's MLTensor is currently in flux.\n */\n export type MLTensorType = TryGetGlobalType<'MLTensor', MLTensorTypeFallback>;\n\n /**\n * supported data types for constructing a tensor from a WebGPU buffer\n */\n export type GpuBufferDataTypes = 'float32' | 'float16' | 'int32' | 'int64' | 'uint32' | 'uint8' | 'bool';\n\n /**\n * supported data types for constructing a tensor from a WebNN MLTensor\n */\n export type MLTensorDataTypes =\n | 'float32'\n | 'float16'\n | 'int8'\n | 'uint8'\n | 'int32'\n | 'uint32'\n | 'int64'\n | 'uint64'\n | 'bool'\n | 'uint4'\n | 'int4';\n\n /**\n * represent where the tensor data is stored\n */\n export type DataLocation = 'none' | 'cpu' | 'cpu-pinned' | 'texture' | 'gpu-buffer' | 'ml-tensor';\n\n /**\n * represent the data type of a tensor\n */\n export type Type = keyof DataTypeMap;\n}\n\n/**\n * Represent multi-dimensional arrays to feed to or fetch from model inferencing.\n */\nexport interface TypedTensor<T extends Tensor.Type> extends TypedTensorBase<T>, TypedTensorUtils<T> {}\n/**\n * Represent multi-dimensional arrays to feed to or fetch from model inferencing.\n */\nexport interface Tensor extends TypedTensorBase<Tensor.Type>, TypedTensorUtils<Tensor.Type> {}\n\n/**\n * type TensorConstructor defines the constructors of 'Tensor' to create CPU tensor instances.\n */\nexport interface TensorConstructor extends TensorFactory {\n // #region CPU tensor - specify element type\n /**\n * Construct a new string tensor object from the given type, data and dims.\n *\n * @param type - Specify the element type.\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (\n type: 'string',\n data: Tensor.DataTypeMap['string'] | readonly string[],\n dims?: readonly number[],\n ): TypedTensor<'string'>;\n\n /**\n * Construct a new bool tensor object from the given type, data and dims.\n *\n * @param type - Specify the element type.\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (\n type: 'bool',\n data: Tensor.DataTypeMap['bool'] | readonly boolean[],\n dims?: readonly number[],\n ): TypedTensor<'bool'>;\n\n /**\n * Construct a new uint8 tensor object from a Uint8ClampedArray, data and dims.\n *\n * @param type - Specify the element type.\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (type: 'uint8', data: Uint8ClampedArray, dims?: readonly number[]): TypedTensor<'uint8'>;\n\n /**\n * Construct a new 64-bit integer typed tensor object from the given type, data and dims.\n *\n * @param type - Specify the element type.\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new <T extends 'uint64' | 'int64'>(\n type: T,\n data: Tensor.DataTypeMap[T] | readonly bigint[] | readonly number[],\n dims?: readonly number[],\n ): TypedTensor<T>;\n\n /**\n * Construct a new numeric tensor object from the given type, data and dims.\n *\n * @param type - Specify the element type.\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new <T extends Exclude<Tensor.Type, 'string' | 'bool' | 'uint64' | 'int64'>>(\n type: T,\n data: Tensor.DataTypeMap[T] | readonly number[],\n dims?: readonly number[],\n ): TypedTensor<T>;\n // #endregion\n\n // #region CPU tensor - infer element types\n\n /**\n * Construct a new float32 tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: Float32Array, dims?: readonly number[]): TypedTensor<'float32'>;\n\n /**\n * Construct a new int8 tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: Int8Array, dims?: readonly number[]): TypedTensor<'int8'>;\n\n /**\n * Construct a new uint8 tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: Uint8Array, dims?: readonly number[]): TypedTensor<'uint8'>;\n\n /**\n * Construct a new uint8 tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: Uint8ClampedArray, dims?: readonly number[]): TypedTensor<'uint8'>;\n\n /**\n * Construct a new uint16 tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: Uint16Array, dims?: readonly number[]): TypedTensor<'uint16'>;\n\n /**\n * Construct a new int16 tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: Int16Array, dims?: readonly number[]): TypedTensor<'int16'>;\n\n /**\n * Construct a new int32 tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: Int32Array, dims?: readonly number[]): TypedTensor<'int32'>;\n\n /**\n * Construct a new int64 tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: BigInt64Array, dims?: readonly number[]): TypedTensor<'int64'>;\n\n /**\n * Construct a new string tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: readonly string[], dims?: readonly number[]): TypedTensor<'string'>;\n\n /**\n * Construct a new bool tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: readonly boolean[], dims?: readonly number[]): TypedTensor<'bool'>;\n\n /**\n * Construct a new float64 tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: Float64Array, dims?: readonly number[]): TypedTensor<'float64'>;\n\n /**\n * Construct a new uint32 tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: Uint32Array, dims?: readonly number[]): TypedTensor<'uint32'>;\n\n /**\n * Construct a new uint64 tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: BigUint64Array, dims?: readonly number[]): TypedTensor<'uint64'>;\n\n // #endregion\n\n // #region CPU tensor - fall back to non-generic tensor type declaration\n\n /**\n * Construct a new tensor object from the given type, data and dims.\n *\n * @param type - Specify the element type.\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (\n type: Tensor.Type,\n data: Tensor.DataType | readonly number[] | readonly string[] | readonly bigint[] | readonly boolean[],\n dims?: readonly number[],\n ): Tensor;\n\n /**\n * Construct a new tensor object from the given data and dims.\n *\n * @param data - Specify the CPU tensor data.\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n */\n new (data: Tensor.DataType, dims?: readonly number[]): Tensor;\n // #endregion\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const Tensor = TensorImpl as TensorConstructor;\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { env } from './env-impl.js';\n\n/**\n * @ignore\n */\nexport const TRACE = (deviceType: string, label: string) => {\n if (typeof env.trace === 'undefined' ? !env.wasm.trace : !env.trace) {\n return;\n }\n // eslint-disable-next-line no-console\n console.timeStamp(`${deviceType}::ORT::${label}`);\n};\n\nconst TRACE_FUNC = (msg: string, extraMsg?: string) => {\n const stack = new Error().stack?.split(/\\r\\n|\\r|\\n/g) || [];\n let hasTraceFunc = false;\n for (let i = 0; i < stack.length; i++) {\n if (hasTraceFunc && !stack[i].includes('TRACE_FUNC')) {\n let label = `FUNC_${msg}::${stack[i].trim().split(' ')[1]}`;\n if (extraMsg) {\n label += `::${extraMsg}`;\n }\n TRACE('CPU', label);\n return;\n }\n if (stack[i].includes('TRACE_FUNC')) {\n hasTraceFunc = true;\n }\n }\n};\n\n/**\n * @ignore\n */\nexport const TRACE_FUNC_BEGIN = (extraMsg?: string) => {\n if (typeof env.trace === 'undefined' ? !env.wasm.trace : !env.trace) {\n return;\n }\n TRACE_FUNC('BEGIN', extraMsg);\n};\n\n/**\n * @ignore\n */\nexport const TRACE_FUNC_END = (extraMsg?: string) => {\n if (typeof env.trace === 'undefined' ? !env.wasm.trace : !env.trace) {\n return;\n }\n TRACE_FUNC('END', extraMsg);\n};\n\n/**\n * @ignore\n */\nexport const TRACE_EVENT_BEGIN = (extraMsg?: string) => {\n if (typeof env.trace === 'undefined' ? !env.wasm.trace : !env.trace) {\n return;\n }\n // eslint-disable-next-line no-console\n console.time(`ORT::${extraMsg}`);\n};\n\n/**\n * @ignore\n */\nexport const TRACE_EVENT_END = (extraMsg?: string) => {\n if (typeof env.trace === 'undefined' ? !env.wasm.trace : !env.trace) {\n return;\n }\n // eslint-disable-next-line no-console\n console.timeEnd(`ORT::${extraMsg}`);\n};\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { resolveBackendAndExecutionProviders } from './backend-impl.js';\nimport { InferenceSessionHandler } from './backend.js';\nimport { InferenceSession as InferenceSessionInterface } from './inference-session.js';\nimport { OnnxValue } from './onnx-value.js';\nimport { Tensor } from './tensor.js';\nimport { TRACE_FUNC_BEGIN, TRACE_FUNC_END, TRACE_EVENT_BEGIN, TRACE_EVENT_END } from './trace.js';\n\ntype SessionOptions = InferenceSessionInterface.SessionOptions;\ntype RunOptions = InferenceSessionInterface.RunOptions;\ntype FeedsType = InferenceSessionInterface.FeedsType;\ntype FetchesType = InferenceSessionInterface.FetchesType;\ntype ReturnType = InferenceSessionInterface.ReturnType;\n\nexport class InferenceSession implements InferenceSessionInterface {\n private constructor(handler: InferenceSessionHandler) {\n this.handler = handler;\n }\n run(feeds: FeedsType, options?: RunOptions): Promise<ReturnType>;\n run(feeds: FeedsType, fetches: FetchesType, options?: RunOptions): Promise<ReturnType>;\n async run(feeds: FeedsType, arg1?: FetchesType | RunOptions, arg2?: RunOptions): Promise<ReturnType> {\n TRACE_FUNC_BEGIN();\n TRACE_EVENT_BEGIN('InferenceSession.run');\n const fetches: { [name: string]: OnnxValue | null } = {};\n let options: RunOptions = {};\n // check inputs\n if (typeof feeds !== 'object' || feeds === null || feeds instanceof Tensor || Array.isArray(feeds)) {\n throw new TypeError(\n \"'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.\",\n );\n }\n\n let isFetchesEmpty = true;\n // determine which override is being used\n if (typeof arg1 === 'object') {\n if (arg1 === null) {\n throw new TypeError('Unexpected argument[1]: cannot be null.');\n }\n if (arg1 instanceof Tensor) {\n throw new TypeError(\"'fetches' cannot be a Tensor\");\n }\n\n if (Array.isArray(arg1)) {\n if (arg1.length === 0) {\n throw new TypeError(\"'fetches' cannot be an empty array.\");\n }\n isFetchesEmpty = false;\n // output names\n for (const name of arg1) {\n if (typeof name !== 'string') {\n throw new TypeError(\"'fetches' must be a string array or an object.\");\n }\n if (this.outputNames.indexOf(name) === -1) {\n throw new RangeError(`'fetches' contains invalid output name: ${name}.`);\n }\n fetches[name] = null;\n }\n\n if (typeof arg2 === 'object' && arg2 !== null) {\n options = arg2;\n } else if (typeof arg2 !== 'undefined') {\n throw new TypeError(\"'options' must be an object.\");\n }\n } else {\n // decide whether arg1 is fetches or options\n // if any output name is present and its value is valid OnnxValue, we consider it fetches\n let isFetches = false;\n const arg1Keys = Object.getOwnPropertyNames(arg1);\n for (const name of this.outputNames) {\n if (arg1Keys.indexOf(name) !== -1) {\n const v = (arg1 as InferenceSessionInterface.NullableOnnxValueMapType)[name];\n if (v === null || v instanceof Tensor) {\n isFetches = true;\n isFetchesEmpty = false;\n fetches[name] = v;\n }\n }\n }\n\n if (isFetches) {\n if (typeof arg2 === 'object' && arg2 !== null) {\n options = arg2;\n } else if (typeof arg2 !== 'undefined') {\n throw new TypeError(\"'options' must be an object.\");\n }\n } else {\n options = arg1 as RunOptions;\n }\n }\n } else if (typeof arg1 !== 'undefined') {\n throw new TypeError(\"Unexpected argument[1]: must be 'fetches' or 'options'.\");\n }\n\n // check if all inputs are in feed\n for (const name of this.inputNames) {\n if (typeof feeds[name] === 'undefined') {\n throw new Error(`input '${name}' is missing in 'feeds'.`);\n }\n }\n\n // if no fetches is specified, we use the full output names list\n if (isFetchesEmpty) {\n for (const name of this.outputNames) {\n fetches[name] = null;\n }\n }\n\n // feeds, fetches and options are prepared\n\n const results = await this.handler.run(feeds, fetches, options);\n const returnValue: { [name: string]: OnnxValue } = {};\n for (const key in results) {\n if (Object.hasOwnProperty.call(results, key)) {\n const result = results[key];\n if (result instanceof Tensor) {\n returnValue[key] = result;\n } else {\n returnValue[key] = new Tensor(result.type, result.data, result.dims);\n }\n }\n }\n TRACE_EVENT_END('InferenceSession.run');\n TRACE_FUNC_END();\n return returnValue;\n }\n\n async release(): Promise<void> {\n return this.handler.dispose();\n }\n\n static create(path: string, options?: SessionOptions): Promise<InferenceSessionInterface>;\n static create(buffer: ArrayBufferLike, options?: SessionOptions): Promise<InferenceSessionInterface>;\n static create(\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength?: number,\n options?: SessionOptions,\n ): Promise<InferenceSessionInterface>;\n static create(buffer: Uint8Array, options?: SessionOptions): Promise<InferenceSessionInterface>;\n static async create(\n arg0: string | ArrayBufferLike | Uint8Array,\n arg1?: SessionOptions | number,\n arg2?: number,\n arg3?: SessionOptions,\n ): Promise<InferenceSessionInterface> {\n TRACE_FUNC_BEGIN();\n TRACE_EVENT_BEGIN('InferenceSession.create');\n // either load from a file or buffer\n let filePathOrUint8Array: string | Uint8Array;\n let options: SessionOptions = {};\n\n if (typeof arg0 === 'string') {\n filePathOrUint8Array = arg0;\n if (typeof arg1 === 'object' && arg1 !== null) {\n options = arg1;\n } else if (typeof arg1 !== 'undefined') {\n throw new TypeError(\"'options' must be an object.\");\n }\n } else if (arg0 instanceof Uint8Array) {\n filePathOrUint8Array = arg0;\n if (typeof arg1 === 'object' && arg1 !== null) {\n options = arg1;\n } else if (typeof arg1 !== 'undefined') {\n throw new TypeError(\"'options' must be an object.\");\n }\n } else if (\n arg0 instanceof ArrayBuffer ||\n (typeof SharedArrayBuffer !== 'undefined' && arg0 instanceof SharedArrayBuffer)\n ) {\n const buffer = arg0;\n let byteOffset = 0;\n let byteLength = arg0.byteLength;\n if (typeof arg1 === 'object' && arg1 !== null) {\n options = arg1;\n } else if (typeof arg1 === 'number') {\n byteOffset = arg1;\n if (!Number.isSafeInteger(byteOffset)) {\n throw new RangeError(\"'byteOffset' must be an integer.\");\n }\n if (byteOffset < 0 || byteOffset >= buffer.byteLength) {\n throw new RangeError(`'byteOffset' is out of range [0, ${buffer.byteLength}).`);\n }\n byteLength = arg0.byteLength - byteOffset;\n if (typeof arg2 === 'number') {\n byteLength = arg2;\n if (!Number.isSafeInteger(byteLength)) {\n throw new RangeError(\"'byteLength' must be an integer.\");\n }\n if (byteLength <= 0 || byteOffset + byteLength > buffer.byteLength) {\n throw new RangeError(`'byteLength' is out of range (0, ${buffer.byteLength - byteOffset}].`);\n }\n if (typeof arg3 === 'object' && arg3 !== null) {\n options = arg3;\n } else if (typeof arg3 !== 'undefined') {\n throw new TypeError(\"'options' must be an object.\");\n }\n } else if (typeof arg2 !== 'undefined') {\n throw new TypeError(\"'byteLength' must be a number.\");\n }\n } else if (typeof arg1 !== 'undefined') {\n throw new TypeError(\"'options' must be an object.\");\n }\n filePathOrUint8Array = new Uint8Array(buffer, byteOffset, byteLength);\n } else {\n throw new TypeError(\"Unexpected argument[0]: must be 'path' or 'buffer'.\");\n }\n\n // resolve backend, update session options with validated EPs, and create session handler\n const [backend, optionsWithValidatedEPs] = await resolveBackendAndExecutionProviders(options);\n const handler = await backend.createInferenceSessionHandler(filePathOrUint8Array, optionsWithValidatedEPs);\n TRACE_EVENT_END('InferenceSession.create');\n TRACE_FUNC_END();\n return new InferenceSession(handler);\n }\n\n startProfiling(): void {\n this.handler.startProfiling();\n }\n endProfiling(): void {\n this.handler.endProfiling();\n }\n\n get inputNames(): readonly string[] {\n return this.handler.inputNames;\n }\n get outputNames(): readonly string[] {\n return this.handler.outputNames;\n }\n\n get inputMetadata(): readonly InferenceSessionInterface.ValueMetadata[] {\n return this.handler.inputMetadata;\n }\n\n get outputMetadata(): readonly InferenceSessionInterface.ValueMetadata[] {\n return this.handler.outputMetadata;\n }\n\n private handler: InferenceSessionHandler;\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { InferenceSession as InferenceSessionImpl } from './inference-session-impl.js';\nimport { OnnxModelOptions } from './onnx-model.js';\nimport { OnnxValue, OnnxValueDataLocation } from './onnx-value.js';\nimport type { Tensor } from './tensor.js';\nimport { TryGetGlobalType } from './type-helper.js';\n\n/* eslint-disable @typescript-eslint/no-redeclare */\n\nexport declare namespace InferenceSession {\n // #region input/output types\n\n type OnnxValueMapType = { readonly [name: string]: OnnxValue };\n type NullableOnnxValueMapType = { readonly [name: string]: OnnxValue | null };\n\n /**\n * A feeds (model inputs) is an object that uses input names as keys and OnnxValue as corresponding values.\n */\n type FeedsType = OnnxValueMapType;\n\n /**\n * A fetches (model outputs) could be one of the following:\n *\n * - Omitted. Use model's output names definition.\n * - An array of string indicating the output names.\n * - An object that use output names as keys and OnnxValue or null as corresponding values.\n *\n * @remark\n * different from input argument, in output, OnnxValue is optional. If an OnnxValue is present it will be\n * used as a pre-allocated value by the inference engine; if omitted, inference engine will allocate buffer\n * internally.\n */\n type FetchesType = readonly string[] | NullableOnnxValueMapType;\n\n /**\n * A inferencing return type is an object that uses output names as keys and OnnxValue as corresponding values.\n */\n type ReturnType = OnnxValueMapType;\n\n // #endregion\n\n // #region session options\n\n /**\n * A set of configurations for session behavior.\n */\n export interface SessionOptions extends OnnxModelOptions {\n /**\n * An array of execution provider options.\n *\n * An execution provider option can be a string indicating the name of the execution provider,\n * or an object of corresponding type.\n */\n executionProviders?: readonly ExecutionProviderConfig[];\n\n /**\n * The intra OP threads number.\n *\n * This setting is available only in ONNXRuntime (Node.js binding and react-native).\n */\n intraOpNumThreads?: number;\n\n /**\n * The inter OP threads number.\n *\n * This setting is available only in ONNXRuntime (Node.js binding and react-native).\n */\n interOpNumThreads?: number;\n\n /**\n * The free dimension override.\n *\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n */\n freeDimensionOverrides?: { readonly [dimensionName: string]: number };\n\n /**\n * The optimization level.\n *\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n */\n graphOptimizationLevel?: 'disabled' | 'basic' | 'extended' | 'layout' | 'all';\n\n /**\n * Whether enable CPU memory arena.\n *\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n */\n enableCpuMemArena?: boolean;\n\n /**\n * Whether enable memory pattern.\n *\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n */\n enableMemPattern?: boolean;\n\n /**\n * Execution mode.\n *\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n */\n executionMode?: 'sequential' | 'parallel';\n\n /**\n * Optimized model file path.\n *\n * If this setting is specified, the optimized model will be dumped. In browser, a blob will be created\n * with a pop-up window.\n */\n optimizedModelFilePath?: string;\n\n /**\n * Whether enable profiling.\n *\n * This setting is a placeholder for a future use.\n */\n enableProfiling?: boolean;\n\n /**\n * File prefix for profiling.\n *\n * This setting is a placeholder for a future use.\n */\n profileFilePrefix?: string;\n\n /**\n * Log ID.\n *\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n */\n logId?: string;\n\n /**\n * Log severity level. See\n * https://github.com/microsoft/onnxruntime/blob/main/include/onnxruntime/core/common/logging/severity.h\n *\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n */\n logSeverityLevel?: 0 | 1 | 2 | 3 | 4;\n\n /**\n * Log verbosity level.\n *\n * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\n */\n logVerbosityLevel?: number;\n\n /**\n * Specify string as a preferred data location for all outputs, or an object that use output names as keys and a\n * preferred data location as corresponding values.\n *\n * This setting is available only in ONNXRuntime Web for WebGL and WebGPU EP.\n */\n preferredOutputLocation?: OnnxValueDataLocation | { readonly [outputName: string]: OnnxValueDataLocation };\n\n /**\n * Whether enable graph capture.\n * This setting is available only in ONNXRuntime Web for WebGPU EP.\n */\n enableGraphCapture?: boolean;\n\n /**\n * Store configurations for a session. See\n * https://github.com/microsoft/onnxruntime/blob/main/include/onnxruntime/core/session/\n * onnxruntime_session_options_config_keys.h\n *\n * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\n *\n * @example\n * ```js\n * extra: {\n * session: {\n * set_denormal_as_zero: \"1\",\n * disable_prepacking: \"1\"\n * },\n * optimization: {\n * enable_gelu_approximation: \"1\"\n * }\n * }\n * ```\n */\n extra?: Record<string, unknown>;\n }\n\n // #region execution providers\n\n // Currently, we have the following backends to support execution providers:\n // Backend Node.js binding: supports 'cpu', 'dml' (win32), 'coreml' (macOS) and 'cuda' (linux).\n // Backend WebAssembly: supports 'cpu', 'wasm', 'webgpu' and 'webnn'.\n // Backend ONNX.js: supports 'webgl'.\n // Backend React Native: supports 'cpu', 'xnnpack', 'coreml' (iOS), 'nnapi' (Android).\n interface ExecutionProviderOptionMap {\n coreml: CoreMLExecutionProviderOption;\n cpu: CpuExecutionProviderOption;\n cuda: CudaExecutionProviderOption;\n dml: DmlExecutionProviderOption;\n nnapi: NnapiExecutionProviderOption;\n tensorrt: TensorRtExecutionProviderOption;\n wasm: WebAssemblyExecutionProviderOption;\n webgl: WebGLExecutionProviderOption;\n webgpu: WebGpuExecutionProviderOption;\n webnn: WebNNExecutionProviderOption;\n qnn: QnnExecutionProviderOption;\n xnnpack: XnnpackExecutionProviderOption;\n }\n\n type ExecutionProviderName = keyof ExecutionProviderOptionMap;\n type ExecutionProviderConfig =\n | ExecutionProviderOptionMap[ExecutionProviderName]\n | ExecutionProviderOption\n | ExecutionProviderName\n | string;\n\n export interface ExecutionProviderOption {\n readonly name: string;\n }\n export interface CpuExecutionProviderOption extends ExecutionProviderOption {\n readonly name: 'cpu';\n useArena?: boolean;\n }\n export interface CudaExecutionProviderOption extends ExecutionProviderOption {\n readonly name: 'cuda';\n deviceId?: number;\n }\n export interface DmlExecutionProviderOption extends ExecutionProviderOption {\n readonly name: 'dml';\n deviceId?: number;\n }\n export interface TensorRtExecutionProviderOption extends ExecutionProviderOption {\n readonly name: 'tensorrt';\n deviceId?: number;\n }\n export interface WebAssemblyExecutionProviderOption extends ExecutionProviderOption {\n readonly name: 'wasm';\n }\n export interface WebGLExecutionProviderOption extends ExecutionProviderOption {\n readonly name: 'webgl';\n // TODO: add flags\n }\n export interface XnnpackExecutionProviderOption extends ExecutionProviderOption {\n readonly name: 'xnnpack';\n }\n export interface WebGpuExecutionProviderOption extends ExecutionProviderOption {\n readonly name: 'webgpu';\n\n /**\n * Specify the preferred layout when running layout sensitive operators.\n *\n * @default 'NCHW'\n */\n preferredLayout?: 'NCHW' | 'NHWC';\n\n /**\n * Specify a list of node names that should be executed on CPU even when WebGPU EP is used.\n */\n forceCpuNodeNames?: readonly string[];\n\n /**\n * Specify the validation mode for WebGPU execution provider.\n * - 'disabled': Disable all validation.\n * When used in Node.js, disable validation may cause process crash if WebGPU errors occur. Be cautious when using\n * this mode.\n * When used in web, this mode is equivalent to 'wgpuOnly'.\n * - 'wgpuOnly': Perform WebGPU internal validation only.\n * - 'basic': Perform basic validation including WebGPU internal validation. This is the default mode.\n * - 'full': Perform full validation. This mode may have performance impact. Use it for debugging purpose.\n *\n * @default 'basic'\n */\n validationMode?: 'disabled' | 'wgpuOnly' | 'basic' | 'full';\n\n /**\n * Specify an optional WebGPU device to be used by the WebGPU execution provider.\n */\n device?: TryGetGlobalType<'GPUDevice'>;\n }\n\n // #region WebNN options\n\n interface WebNNExecutionProviderName extends ExecutionProviderOption {\n readonly name: 'webnn';\n }\n\n /**\n * Represents a set of options for creating a WebNN MLContext.\n *\n * @see https://www.w3.org/TR/webnn/#dictdef-mlcontextoptions\n */\n export interface WebNNContextOptions {\n deviceType?: 'cpu' | 'gpu' | 'npu';\n numThreads?: number;\n powerPreference?: 'default' | 'low-power' | 'high-performance';\n }\n\n /**\n * Represents a set of options for WebNN execution provider without MLContext.\n */\n export interface WebNNOptionsWithoutMLContext extends WebNNExecutionProviderName, WebNNContextOptions {\n context?: never;\n }\n\n /**\n * Represents a set of options for WebNN execution provider with MLContext.\n *\n * When MLContext is provided, the deviceType is also required so that the WebNN EP can determine the preferred\n * channel layout.\n *\n * @see https://www.w3.org/TR/webnn/#dom-ml-createcontext\n */\n export interface WebNNOptionsWithMLContext\n extends WebNNExecutionProviderName,\n Omit<WebNNContextOptions, 'deviceType'>,\n Required<Pick<WebNNContextOptions, 'deviceType'>> {\n context: TryGetGlobalType<'MLContext'>;\n }\n\n /**\n * Represents a set of options for WebNN execution provider with MLContext which is created from GPUDevice.\n *\n * @see https://www.w3.org/TR/webnn/#dom-ml-createcontext-gpudevice\n */\n export interface WebNNOptionsWebGpu extends WebNNExecutionProviderName {\n context: TryGetGlobalType<'MLContext'>;\n gpuDevice: TryGetGlobalType<'GPUDevice'>;\n }\n\n /**\n * Options for WebNN execution provider.\n */\n export type WebNNExecutionProviderOption =\n | WebNNOptionsWithoutMLContext\n | WebNNOptionsWithMLContext\n | WebNNOptionsWebGpu;\n\n // #endregion\n\n export interface QnnExecutionProviderOption extends ExecutionProviderOption {\n readonly name: 'qnn';\n /**\n * Specify the QNN backend type. E.g., 'cpu' or 'htp'.\n * Mutually exclusive with `backendPath`.\n *\n * @default 'htp'\n */\n backendType?: string;\n /**\n * Specify a path to the QNN backend library.\n * Mutually exclusive with `backendType`.\n */\n backendPath?: string;\n /**\n * Specify whether to enable HTP FP16 precision.\n *\n * @default true\n */\n enableFp16Precision?: boolean;\n }\n export interface CoreMLExecutionProviderOption extends ExecutionProviderOption {\n readonly name: 'coreml';\n /**\n * The bit flags for CoreML execution provider.\n *\n * ```\n * COREML_FLAG_USE_CPU_ONLY = 0x001\n * COREML_FLAG_ENABLE_ON_SUBGRAPH = 0x002\n * COREML_FLAG_ONLY_ENABLE_DEVICE_WITH_ANE = 0x004\n * COREML_FLAG_ONLY_ALLOW_STATIC_INPUT_SHAPES = 0x008\n * COREML_FLAG_CREATE_MLPROGRAM = 0x010\n * COREML_FLAG_USE_CPU_AND_GPU = 0x020\n * ```\n *\n * See include/onnxruntime/core/providers/coreml/coreml_provider_factory.h for more details.\n *\n * This flag is available only in ONNXRuntime (Node.js binding).\n */\n coreMlFlags?: number;\n /**\n * Specify whether to use CPU only in CoreML EP.\n *\n * This setting is available only in ONNXRuntime (react-native).\n */\n useCPUOnly?: boolean;\n useCPUAndGPU?: boolean;\n /**\n * Specify whether to enable CoreML EP on subgraph.\n *\n * This setting is available only in ONNXRuntime (react-native).\n */\n enableOnSubgraph?: boolean;\n /**\n * Specify whether to only enable CoreML EP for Apple devices with ANE (Apple Neural Engine).\n *\n * This setting is available only in ONNXRuntime (react-native).\n */\n onlyEnableDeviceWithANE?: boolean;\n }\n export interface NnapiExecutionProviderOption extends ExecutionProviderOption {\n readonly name: 'nnapi';\n useFP16?: boolean;\n useNCHW?: boolean;\n cpuDisabled?: boolean;\n cpuOnly?: boolean;\n }\n // #endregion\n\n // #endregion\n\n // #region run options\n\n /**\n * A set of configurations for inference run behavior\n */\n export interface RunOptions {\n /**\n * Log severity level. See\n * https://github.com/microsoft/onnxruntime/blob/main/include/onnxruntime/core/common/logging/severity.h\n *\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n */\n logSeverityLevel?: 0 | 1 | 2 | 3 | 4;\n\n /**\n * Log verbosity level.\n *\n * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\n */\n logVerbosityLevel?: number;\n\n /**\n * Terminate all incomplete OrtRun calls as soon as possible if true\n *\n * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\n */\n terminate?: boolean;\n\n /**\n * A tag for the Run() calls using this\n *\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n */\n tag?: string;\n\n /**\n * Set a single run configuration entry. See\n * https://github.com/microsoft/onnxruntime/blob/main/include/onnxruntime/core/session/\n * onnxruntime_run_options_config_keys.h\n *\n * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\n *\n * @example\n *\n * ```js\n * extra: {\n * memory: {\n * enable_memory_arena_shrinkage: \"1\",\n * }\n * }\n * ```\n */\n extra?: Record<string, unknown>;\n }\n\n // #endregion\n\n // #region value metadata\n\n /**\n * The common part of the value metadata type for both tensor and non-tensor values.\n */\n export interface ValueMetadataBase {\n /**\n * The name of the specified input or output.\n */\n readonly name: string;\n }\n\n /**\n * Represents the metadata of a non-tensor value.\n */\n export interface NonTensorValueMetadata extends ValueMetadataBase {\n /**\n * Get a value indicating whether the value is a tensor.\n */\n readonly isTensor: false;\n }\n\n /**\n * Represents the metadata of a tensor value.\n */\n export interface TensorValueMetadata extends ValueMetadataBase {\n /**\n * Get a value indicating whether the value is a tensor.\n */\n readonly isTensor: true;\n /**\n * Get the data type of the tensor.\n */\n readonly type: Tensor.Type;\n /**\n * Get the shape of the tensor.\n *\n * If the shape is not defined, the value will an empty array. Otherwise, it will be an array representing the shape\n * of the tensor. Each element in the array can be a number or a string. If the element is a number, it represents\n * the corresponding dimension size. If the element is a string, it represents a symbolic dimension.\n */\n readonly shape: ReadonlyArray<number | string>;\n }\n\n /**\n * Represents the metadata of a value.\n */\n export type ValueMetadata = NonTensorValueMetadata | TensorValueMetadata;\n\n // #endregion\n}\n\n/**\n * Represent a runtime instance of an ONNX model.\n */\nexport interface InferenceSession {\n // #region run()\n\n /**\n * Execute the model asynchronously with the given feeds and options.\n *\n * @param feeds - Representation of the model input. See type description of `InferenceSession.InputType` for detail.\n * @param options - Optional. A set of options that controls the behavior of model inference.\n * @returns A promise that resolves to a map, which uses output names as keys and OnnxValue as corresponding values.\n */\n run(feeds: InferenceSession.FeedsType, options?: InferenceSession.RunOptions): Promise<InferenceSession.ReturnType>;\n\n /**\n * Execute the model asynchronously with the given feeds, fetches and options.\n *\n * @param feeds - Representation of the model input. See type description of `InferenceSession.InputType` for detail.\n * @param fetches - Representation of the model output. See type description of `InferenceSession.OutputType` for\n * detail.\n * @param options - Optional. A set of options that controls the behavior of model inference.\n * @returns A promise that resolves to a map, which uses output names as keys and OnnxValue as corresponding values.\n */\n run(\n feeds: InferenceSession.FeedsType,\n fetches: InferenceSession.FetchesType,\n options?: InferenceSession.RunOptions,\n ): Promise<InferenceSession.ReturnType>;\n\n // #endregion\n\n // #region release()\n\n /**\n * Release the inference session and the underlying resources.\n */\n release(): Promise<void>;\n\n // #endregion\n\n // #region profiling\n\n /**\n * Start profiling.\n */\n startProfiling(): void;\n\n /**\n * End profiling.\n */\n endProfiling(): void;\n\n // #endregion\n\n // #region metadata\n\n /**\n * Get input names of the loaded model.\n */\n readonly inputNames: readonly string[];\n\n /**\n * Get output names of the loaded model.\n */\n readonly outputNames: readonly string[];\n\n /**\n * Get input metadata of the loaded model.\n */\n readonly inputMetadata: readonly InferenceSession.ValueMetadata[];\n\n /**\n * Get output metadata of the loaded model.\n */\n readonly outputMetadata: readonly InferenceSession.ValueMetadata[];\n\n // #endregion\n}\n\nexport interface InferenceSessionFactory {\n // #region create()\n\n /**\n * Create a new inference session and load model asynchronously from an ONNX model file.\n *\n * @param uri - The URI or file path of the model to load.\n * @param options - specify configuration for creating a new inference session.\n * @returns A promise that resolves to an InferenceSession object.\n */\n create(uri: string, options?: InferenceSession.SessionOptions): Promise<InferenceSession>;\n\n /**\n * Create a new inference session and load model asynchronously from an array bufer.\n *\n * @param buffer - An ArrayBuffer representation of an ONNX model.\n * @param options - specify configuration for creating a new inference session.\n * @returns A promise that resolves to an InferenceSession object.\n */\n create(buffer: ArrayBufferLike, options?: InferenceSession.SessionOptions): Promise<InferenceSession>;\n\n /**\n * Create a new inference session and load model asynchronously from segment of an array bufer.\n *\n * @param buffer - An ArrayBuffer representation of an ONNX model.\n * @param byteOffset - The beginning of the specified portion of the array buffer.\n * @param byteLength - The length in bytes of the array buffer.\n * @param options - specify configuration for creating a new inference session.\n * @returns A promise that resolves to an InferenceSession object.\n */\n create(\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength?: number,\n options?: InferenceSession.SessionOptions,\n ): Promise<InferenceSession>;\n\n /**\n * Create a new inference session and load model asynchronously from a Uint8Array.\n *\n * @param buffer - A Uint8Array representation of an ONNX model.\n * @param options - specify configuration for creating a new inference session.\n * @returns A promise that resolves to an InferenceSession object.\n */\n create(buffer: Uint8Array, options?: InferenceSession.SessionOptions): Promise<InferenceSession>;\n\n // #endregion\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const InferenceSession: InferenceSessionFactory = InferenceSessionImpl;\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\n/**\n * # ONNX Runtime JavaScript API\n *\n * ONNX Runtime JavaScript API is a unified API for all JavaScript usages, including the following NPM packages:\n *\n * - [onnxruntime-node](https://www.npmjs.com/package/onnxruntime-node)\n * - [onnxruntime-web](https://www.npmjs.com/package/onnxruntime-web)\n * - [onnxruntime-react-native](https://www.npmjs.com/package/onnxruntime-react-native)\n *\n * See also:\n * - [Get Started](https://onnxruntime.ai/docs/get-started/with-javascript/)\n * - [Inference examples](https://github.com/microsoft/onnxruntime-inference-examples/tree/main/js)\n *\n * @packageDocumentation\n */\n\nexport * from './backend.js';\nexport * from './env.js';\nexport * from './inference-session.js';\nexport * from './tensor.js';\nexport * from './tensor-conversion.js';\nexport * from './tensor-factory.js';\nexport * from './trace.js';\nexport * from './onnx-model.js';\nexport * from './onnx-value.js';\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { InferenceSession, OnnxValue, Tensor, TensorConstructor, env } from 'onnxruntime-common';\n\ntype SessionOptions = InferenceSession.SessionOptions;\ntype FeedsType = {\n [name: string]: OnnxValue;\n};\ntype FetchesType = {\n [name: string]: OnnxValue | null;\n};\ntype ReturnType = {\n [name: string]: OnnxValue;\n};\ntype RunOptions = InferenceSession.RunOptions;\n\n/**\n * Binding exports a simple synchronized inference session object wrap.\n */\nexport declare namespace Binding {\n export interface ValueMetadata {\n name: string;\n isTensor: boolean;\n symbolicDimensions: string[];\n shape: number[];\n type: number;\n }\n export interface InferenceSession {\n loadModel(modelPath: string, options: SessionOptions): void;\n loadModel(buffer: ArrayBuffer, byteOffset: number, byteLength: number, options: SessionOptions): void;\n\n readonly inputMetadata: ValueMetadata[];\n readonly outputMetadata: ValueMetadata[];\n\n run(feeds: FeedsType, fetches: FetchesType, options: RunOptions): ReturnType;\n\n endProfiling(): void;\n\n dispose(): void;\n }\n\n export interface InferenceSessionConstructor {\n new (): InferenceSession;\n }\n\n export interface SupportedBackend {\n name: string;\n bundled: boolean;\n }\n}\n\n// export native binding\nexport const binding =\n // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires\n require(`../bin/napi-v6/${process.platform}/${process.arch}/onnxruntime_binding.node`) as {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n InferenceSession: Binding.InferenceSessionConstructor;\n listSupportedBackends: () => Binding.SupportedBackend[];\n initOrtOnce: (logLevel: number, tensorConstructor: TensorConstructor) => void;\n };\n\nlet ortInitialized = false;\nexport const initOrt = (): void => {\n if (!ortInitialized) {\n ortInitialized = true;\n let logLevel = 2;\n if (env.logLevel) {\n switch (env.logLevel) {\n case 'verbose':\n logLevel = 0;\n break;\n case 'info':\n logLevel = 1;\n break;\n case 'warning':\n logLevel = 2;\n break;\n case 'error':\n logLevel = 3;\n break;\n case 'fatal':\n logLevel = 4;\n break;\n default:\n throw new Error(`Unsupported log level: ${env.logLevel}`);\n }\n }\n binding.initOrtOnce(logLevel, Tensor);\n }\n};\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { Backend, InferenceSession, InferenceSessionHandler, SessionHandler } from 'onnxruntime-common';\n\nimport { Binding, binding, initOrt } from './binding';\n\nconst dataTypeStrings = [\n undefined, // 0\n 'float32',\n 'uint8',\n 'int8',\n 'uint16',\n 'int16',\n 'int32',\n 'int64',\n 'string',\n 'bool',\n 'float16',\n 'float64',\n 'uint32',\n 'uint64',\n undefined, // 14\n undefined, // 15\n undefined, // 16\n undefined, // 17\n undefined, // 18\n undefined, // 19\n undefined, // 20\n 'uint4',\n 'int4',\n] as const;\n\nclass OnnxruntimeSessionHandler implements InferenceSessionHandler {\n #inferenceSession: Binding.InferenceSession;\n\n constructor(pathOrBuffer: string | Uint8Array, options: InferenceSession.SessionOptions) {\n initOrt();\n\n this.#inferenceSession = new binding.InferenceSession();\n if (typeof pathOrBuffer === 'string') {\n this.#inferenceSession.loadModel(pathOrBuffer, options);\n } else {\n this.#inferenceSession.loadModel(pathOrBuffer.buffer, pathOrBuffer.byteOffset, pathOrBuffer.byteLength, options);\n }\n\n // prepare input/output names and metadata\n this.inputNames = [];\n this.outputNames = [];\n this.inputMetadata = [];\n this.outputMetadata = [];\n\n // this function takes raw metadata from binding and returns a tuple of the following 2 items:\n // - an array of string representing names\n // - an array of converted InferenceSession.ValueMetadata\n const fillNamesAndMetadata = (\n rawMetadata: readonly Binding.ValueMetadata[],\n ): [names: string[], metadata: InferenceSession.ValueMetadata[]] => {\n const names: string[] = [];\n const metadata: InferenceSession.ValueMetadata[] = [];\n\n for (const m of rawMetadata) {\n names.push(m.name);\n if (!m.isTensor) {\n metadata.push({ name: m.name, isTensor: false });\n } else {\n const type = dataTypeStrings[m.type];\n if (type === undefined) {\n throw new Error(`Unsupported data type: ${m.type}`);\n }\n const shape: Array<number | string> = [];\n for (let i = 0; i < m.shape.length; ++i) {\n const dim = m.shape[i];\n if (dim === -1) {\n shape.push(m.symbolicDimensions[i]);\n } else if (dim >= 0) {\n shape.push(dim);\n } else {\n throw new Error(`Invalid dimension: ${dim}`);\n }\n }\n metadata.push({\n name: m.name,\n isTensor: m.isTensor,\n type,\n shape,\n });\n }\n }\n\n return [names, metadata];\n };\n\n [this.inputNames, this.inputMetadata] = fillNamesAndMetadata(this.#inferenceSession.inputMetadata);\n [this.outputNames, this.outputMetadata] = fillNamesAndMetadata(this.#inferenceSession.outputMetadata);\n }\n\n async dispose(): Promise<void> {\n this.#inferenceSession.dispose();\n }\n\n readonly inputNames: string[];\n readonly outputNames: string[];\n\n readonly inputMetadata: InferenceSession.ValueMetadata[];\n readonly outputMetadata: InferenceSession.ValueMetadata[];\n\n startProfiling(): void {\n // startProfiling is a no-op.\n //\n // if sessionOptions.enableProfiling is true, profiling will be enabled when the model is loaded.\n }\n endProfiling(): void {\n this.#inferenceSession.endProfiling();\n }\n\n async run(\n feeds: SessionHandler.FeedsType,\n fetches: SessionHandler.FetchesType,\n options: InferenceSession.RunOptions,\n ): Promise<SessionHandler.ReturnType> {\n return new Promise((resolve, reject) => {\n setImmediate(() => {\n try {\n resolve(this.#inferenceSession.run(feeds, fetches, options));\n } catch (e) {\n // reject if any error is thrown\n reject(e);\n }\n });\n });\n }\n}\n\nclass OnnxruntimeBackend implements Backend {\n async init(): Promise<void> {\n return Promise.resolve();\n }\n\n async createInferenceSessionHandler(\n pathOrBuffer: string | Uint8Array,\n options?: InferenceSession.SessionOptions,\n ): Promise<InferenceSessionHandler> {\n return new Promise((resolve, reject) => {\n setImmediate(() => {\n try {\n resolve(new OnnxruntimeSessionHandler(pathOrBuffer, options || {}));\n } catch (e) {\n // reject if any error is thrown\n reject(e);\n }\n });\n });\n }\n}\n\nexport const onnxruntimeBackend = new OnnxruntimeBackend();\nexport const listSupportedBackends = binding.listSupportedBackends;\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\n// This file is generated by /js/scripts/update-version.ts\n// Do not modify file content manually.\n\nexport const version = '1.24.3';\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nexport * from 'onnxruntime-common';\nexport { listSupportedBackends } from './backend';\nimport { registerBackend, env } from 'onnxruntime-common';\nimport { version } from './version';\nimport { onnxruntimeBackend, listSupportedBackends } from './backend';\n\nconst backends = listSupportedBackends();\nfor (const backend of backends) {\n registerBackend(backend.name, onnxruntimeBackend, 100);\n}\n\nObject.defineProperty(env.versions, 'node', { value: version, enumerable: true });\n","import * as os from 'node:os'\nimport { execFileSync } from 'node:child_process'\nimport type { HardwareInfo, GpuInfo, NpuInfo, PlatformScore, PlatformCapabilities } from '@camstack/types'\n\n/**\n * Get reliable \"available\" RAM in MB, cross-platform.\n * os.freemem() is unreliable on macOS (reports ~200MB on a 36GB system).\n * Uses systeminformation when available, falls back to native commands.\n */\nasync function getAvailableRAM_MB(): Promise<number> {\n try {\n const si = await import('systeminformation')\n const mem = await si.mem()\n return Math.round(mem.available / 1024 / 1024)\n } catch {\n // Fallback: platform-specific\n const platform = os.platform()\n try {\n if (platform === 'darwin') {\n // Parse vm_stat: (free + inactive + purgeable) * pageSize\n const output = execFileSync('vm_stat', { encoding: 'utf8', timeout: 3000 })\n const pageSize = parseInt(output.match(/page size of (\\d+)/)?.[1] ?? '16384')\n const free = parseInt(output.match(/Pages free:\\s+(\\d+)/)?.[1] ?? '0')\n const inactive = parseInt(output.match(/Pages inactive:\\s+(\\d+)/)?.[1] ?? '0')\n const purgeable = parseInt(output.match(/Pages purgeable:\\s+(\\d+)/)?.[1] ?? '0')\n return Math.round((free + inactive + purgeable) * pageSize / 1024 / 1024)\n } else if (platform === 'linux') {\n // Parse /proc/meminfo: MemAvailable\n const { readFileSync } = await import('node:fs')\n const meminfo = readFileSync('/proc/meminfo', 'utf8')\n const match = meminfo.match(/MemAvailable:\\s+(\\d+)\\s+kB/)\n if (match) return Math.round(parseInt(match[1]!) / 1024)\n }\n } catch { /* ignore */ }\n // Ultimate fallback: total RAM (conservative but safe)\n return Math.round(os.totalmem() / 1024 / 1024)\n }\n}\n\nexport class PlatformScorer {\n private cached: PlatformCapabilities | null = null\n\n /** Probe hardware + runtimes and score all backend combos. Cached after first call. */\n async probe(): Promise<PlatformCapabilities> {\n if (this.cached) return this.cached\n\n const start = Date.now()\n console.log('[PlatformScorer] Probing hardware...')\n const hardware = await this.probeHardware()\n console.log(`[PlatformScorer] Hardware: ${hardware.platform}/${hardware.arch}, ${hardware.cpuModel} (${hardware.cpuCores} cores), RAM ${Math.round(hardware.totalRAM_MB / 1024)}GB`)\n if (hardware.gpu) console.log(`[PlatformScorer] GPU: ${hardware.gpu.name}`)\n if (hardware.npu) console.log(`[PlatformScorer] NPU: ${hardware.npu.type}`)\n\n console.log('[PlatformScorer] Probing Node.js backends...')\n const nodeBackends = this.probeNodeBackends()\n console.log(`[PlatformScorer] Node backends: ${nodeBackends.map(b => b.id).join(', ')}`)\n\n console.log('[PlatformScorer] Probing Python backends...')\n const pythonInfo = this.probePythonBackends()\n if (pythonInfo.pythonPath) {\n console.log(`[PlatformScorer] Python: ${pythonInfo.pythonPath} → ${pythonInfo.backends.filter(b => b.available).map(b => b.id).join(', ') || 'no backends'}`)\n } else {\n console.log('[PlatformScorer] Python: not found')\n }\n\n const scores = this.scoreBackends(hardware, nodeBackends, pythonInfo.backends)\n const bestScore = scores.find(s => s.available) ?? scores[scores.length - 1]!\n\n const elapsed = Date.now() - start\n console.log(`[PlatformScorer] Scoring complete in ${elapsed}ms — ${scores.length} combos`)\n console.log(`[PlatformScorer] Best: ${bestScore.runtime}/${bestScore.backend} (${bestScore.format}) — ${bestScore.reason} [score: ${bestScore.score}]`)\n for (const s of scores) {\n console.log(`[PlatformScorer] ${s.available ? '✓' : '✗'} ${s.runtime}/${s.backend} (${s.format}) — score ${s.score} — ${s.reason}`)\n }\n\n this.cached = {\n hardware,\n scores,\n bestScore,\n pythonPath: pythonInfo.pythonPath,\n }\n return this.cached\n }\n\n async probeHardware(): Promise<HardwareInfo> {\n const platform = os.platform() as HardwareInfo['platform']\n const arch = os.arch() as HardwareInfo['arch']\n const cpus = os.cpus()\n const cpuModel = cpus[0]?.model ?? 'unknown'\n const cpuCores = cpus.length\n const totalRAM_MB = Math.round(os.totalmem() / 1024 / 1024)\n const availableRAM_MB = await getAvailableRAM_MB()\n console.log(`[PlatformScorer] RAM: total=${totalRAM_MB}MB, available=${availableRAM_MB}MB (via systeminformation)`)\n\n let gpu: GpuInfo | null = null\n let npu: NpuInfo | null = null\n\n // macOS Apple Silicon\n if (platform === 'darwin' && arch === 'arm64') {\n gpu = { type: 'apple', name: 'Apple Silicon GPU' }\n npu = { type: 'apple-ane' }\n }\n\n // Linux NVIDIA\n if (platform === 'linux') {\n try {\n const output = execFileSync('nvidia-smi', ['--query-gpu=name,memory.total', '--format=csv,noheader'], {\n encoding: 'utf8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'],\n }).trim()\n if (output) {\n const [name, mem] = output.split(',').map(s => s.trim())\n gpu = {\n type: 'nvidia',\n name: name ?? 'NVIDIA GPU',\n memoryMB: parseInt(mem ?? '0'),\n }\n }\n } catch { /* no NVIDIA GPU */ }\n }\n\n return { platform, arch, cpuModel, cpuCores, totalRAM_MB, availableRAM_MB, gpu, npu }\n }\n\n private probeNodeBackends(): Array<{ id: string; available: boolean }> {\n const backends: Array<{ id: string; available: boolean }> = [\n { id: 'cpu', available: true },\n ]\n\n try {\n const ort = require('onnxruntime-node')\n const providers: string[] = ort.InferenceSession?.getAvailableProviders?.() ?? []\n for (const p of providers) {\n const n = p.toLowerCase().replace('executionprovider', '')\n if (n === 'coreml') backends.push({ id: 'coreml', available: true })\n else if (n === 'cuda') backends.push({ id: 'cuda', available: true })\n else if (n === 'tensorrt') backends.push({ id: 'tensorrt', available: true })\n }\n } catch { /* onnxruntime not available */ }\n\n // macOS always has CoreML potential\n if (os.platform() === 'darwin' && !backends.some(b => b.id === 'coreml')) {\n backends.push({ id: 'coreml', available: true })\n }\n\n return backends\n }\n\n private probePythonBackends(): { pythonPath: string | null; backends: Array<{ id: string; format: string; available: boolean }> } {\n let pythonPath: string | null = null\n for (const cmd of ['python3', 'python']) {\n try {\n execFileSync(cmd, ['--version'], { timeout: 5000, stdio: 'pipe' })\n pythonPath = cmd\n break\n } catch { /* not found */ }\n }\n\n if (!pythonPath) return { pythonPath: null, backends: [] }\n\n const checks: Array<[string, string, string]> = [\n // [pythonModule, backendId, modelFormat]\n ['coremltools', 'coreml', 'coreml'],\n ['openvino.runtime', 'openvino', 'openvino'],\n ['torch', 'pytorch', 'onnx'],\n ['onnxruntime', 'onnx-py', 'onnx'],\n ]\n\n const backends: Array<{ id: string; format: string; available: boolean }> = []\n for (const [mod, id, format] of checks) {\n let available = false\n const probeStart = Date.now()\n try {\n execFileSync(pythonPath, ['-c', `import ${mod}`], { timeout: 30000, stdio: 'ignore' })\n available = true\n } catch { /* module not installed */ }\n const probeMs = Date.now() - probeStart\n console.log(`[PlatformScorer] Python ${mod}: ${available ? '✓' : '✗'} (${probeMs}ms)`)\n\n // Always show CoreML on macOS even if not installed\n if (id === 'coreml' && os.platform() === 'darwin') {\n backends.push({ id, format, available })\n } else if (available) {\n backends.push({ id, format, available })\n }\n }\n\n return { pythonPath, backends }\n }\n\n private scoreBackends(\n hardware: HardwareInfo,\n nodeBackends: Array<{ id: string; available: boolean }>,\n pythonBackends: Array<{ id: string; format: string; available: boolean }>,\n ): PlatformScore[] {\n const scores: PlatformScore[] = []\n\n // macOS Apple Silicon\n if (hardware.platform === 'darwin' && hardware.arch === 'arm64') {\n const pyCoreMl = pythonBackends.find(b => b.id === 'coreml')\n if (pyCoreMl) {\n scores.push({ runtime: 'python', backend: 'coreml', format: 'coreml', score: 95, reason: 'Apple Neural Engine (Python CoreML)', available: pyCoreMl.available })\n }\n const nodeCoreMl = nodeBackends.find(b => b.id === 'coreml')\n if (nodeCoreMl) {\n scores.push({ runtime: 'node', backend: 'coreml', format: 'onnx', score: 90, reason: 'CoreML via ONNX Runtime', available: nodeCoreMl.available })\n }\n }\n\n // NVIDIA\n if (hardware.gpu?.type === 'nvidia') {\n const tensorrt = nodeBackends.find(b => b.id === 'tensorrt')\n if (tensorrt) scores.push({ runtime: 'node', backend: 'tensorrt', format: 'onnx', score: 95, reason: 'NVIDIA TensorRT', available: true })\n const cuda = nodeBackends.find(b => b.id === 'cuda')\n if (cuda) scores.push({ runtime: 'node', backend: 'cuda', format: 'onnx', score: 85, reason: 'NVIDIA CUDA', available: true })\n }\n\n // Intel OpenVINO\n const openvino = pythonBackends.find(b => b.id === 'openvino')\n if (openvino) {\n const score = hardware.npu?.type === 'intel-npu' ? 90 : 80\n scores.push({ runtime: 'python', backend: 'openvino', format: 'openvino', score, reason: 'Intel OpenVINO', available: openvino.available })\n }\n\n // CPU fallbacks\n scores.push({ runtime: 'node', backend: 'cpu', format: 'onnx', score: 50, reason: 'CPU (ONNX Runtime Node)', available: true })\n const pyOnnx = pythonBackends.find(b => b.id === 'onnx-py')\n if (pyOnnx) {\n scores.push({ runtime: 'python', backend: 'cpu', format: 'onnx', score: 45, reason: 'CPU (Python ONNX)', available: pyOnnx.available })\n }\n\n return scores.sort((a, b) => b.score - a.score)\n }\n}\n","import type { PlatformScore, HardwareInfo, ModelRequirement, ResolvedInferenceConfig } from '@camstack/types'\n\nexport class InferenceConfigResolver {\n constructor(\n private readonly scores: readonly PlatformScore[],\n private readonly hardware: HardwareInfo,\n ) {}\n\n /**\n * Compute accuracy/backend weights based on available system RAM.\n * availableRAM_MB is now sourced from systeminformation (reliable cross-platform),\n * not os.freemem() which is broken on macOS.\n *\n * - > 16 GB available: prefer larger, more accurate models (accuracy 0.6, backend 0.4)\n * - > 8 GB available: balanced (accuracy 0.5, backend 0.5)\n * - <= 8 GB available: prefer speed (accuracy 0.4, backend 0.6)\n */\n private getWeights(): { accuracyWeight: number; backendWeight: number } {\n const ramMB = this.hardware.availableRAM_MB\n if (ramMB > 16_384) return { accuracyWeight: 0.6, backendWeight: 0.4 }\n if (ramMB > 8_192) return { accuracyWeight: 0.5, backendWeight: 0.5 }\n return { accuracyWeight: 0.4, backendWeight: 0.6 }\n }\n\n /**\n * Given an addon's model requirements, pick the best model + runtime + backend.\n *\n * Algorithm:\n * 1. Filter models by available RAM (minRAM_MB < 25% of available RAM)\n * 2. For each remaining model, find the best platform score whose format\n * is available in the model's formats\n * 3. Pick the model with the highest combined score using RAM-adaptive weights:\n * - High RAM (>16 GB): accuracy × 0.6 + backend × 0.4 (prefer accuracy)\n * - Mid RAM (>8 GB): accuracy × 0.5 + backend × 0.5 (balanced)\n * - Low RAM (<=8 GB): accuracy × 0.4 + backend × 0.6 (prefer speed)\n */\n resolve(requirements: readonly ModelRequirement[]): ResolvedInferenceConfig {\n if (requirements.length === 0) {\n return { modelId: '', runtime: 'node', backend: 'cpu', format: 'onnx', reason: 'No models declared' }\n }\n\n // Budget: 25% of available RAM (now reliable via systeminformation)\n const ramBudget = this.hardware.availableRAM_MB * 0.25\n const { accuracyWeight, backendWeight } = this.getWeights()\n\n console.log(`[InferenceConfigResolver] availableRAM: ${this.hardware.availableRAM_MB}MB, budget: ${Math.round(ramBudget)}MB, weights: accuracy=${accuracyWeight}, backend=${backendWeight}`)\n\n // Filter models that fit in memory\n const fits = requirements.filter(m => m.minRAM_MB < ramBudget)\n const candidates = fits.length > 0 ? fits : [requirements[0]!] // fallback to first/smallest\n\n console.log(`[InferenceConfigResolver] ${candidates.length}/${requirements.length} models fit RAM budget`)\n\n // For each model, find best compatible platform score\n let bestCombo: { model: ModelRequirement; score: PlatformScore; combined: number } | null = null\n\n for (const model of candidates) {\n for (const score of this.scores) {\n if (!score.available) continue\n if (!model.formats.includes(score.format)) continue\n\n const combined = model.accuracyScore * accuracyWeight + score.score * backendWeight\n\n if (!bestCombo || combined > bestCombo.combined) {\n console.log(`[InferenceConfigResolver] New best: ${model.modelId} (accuracy=${model.accuracyScore}) + ${score.backend}/${score.format} (score=${score.score}) → combined=${Math.round(combined)}`)\n bestCombo = { model, score, combined }\n }\n }\n }\n\n if (!bestCombo) {\n return {\n modelId: candidates[0]!.modelId,\n runtime: 'node',\n backend: 'cpu',\n format: 'onnx',\n reason: 'No compatible backend — CPU fallback',\n }\n }\n\n return {\n modelId: bestCombo.model.modelId,\n runtime: bestCombo.score.runtime,\n backend: bestCombo.score.backend,\n format: bestCombo.score.format,\n reason: `${bestCombo.model.name} on ${bestCombo.score.reason} (score: ${Math.round(bestCombo.combined)})`,\n }\n }\n}\n","import { randomUUID } from 'node:crypto'\nimport type { IScopedLogger, IEventBus, LoggerFactory, ProviderListItem } from '@camstack/types'\nimport { LifecycleStateMachine, type ElementStatus } from '../lifecycle/lifecycle-state-machine.js'\n\n/** Minimal device registry interface for provider management */\nexport type ProviderDeviceRegistry = {\n registerProviderDevices(providerId: string, devices: readonly IRegistrableDevice[]): void\n unregisterProviderDevices(providerId: string): void\n}\n\nexport interface IRegistrableDevice {\n readonly id: string\n readonly name: string\n readonly providerId: string\n readonly capabilities: readonly string[]\n}\n\nexport interface ProviderStatus {\n connected: boolean\n error?: string\n deviceCount: number\n}\n\nexport interface LiveEvent {\n type: string\n camera: string\n timestamp: number\n data: Record<string, unknown>\n}\n\nexport interface IManagedProvider {\n readonly id: string\n readonly type: string\n readonly name: string\n start(): Promise<void>\n stop(): Promise<void>\n getStatus(): ProviderStatus\n getDevices(): readonly IRegistrableDevice[]\n subscribeLiveEvents(callback: (event: LiveEvent) => void): () => void\n}\n\ninterface ProviderEntry<P extends IManagedProvider> {\n readonly provider: P\n readonly lifecycle: LifecycleStateMachine\n started: boolean\n unsubscribe?: () => void\n}\n\nexport type { ProviderListItem }\n\nexport class ProviderManager<P extends IManagedProvider = IManagedProvider> {\n private readonly providers = new Map<string, ProviderEntry<P>>()\n private readonly logger: IScopedLogger\n\n constructor(\n private readonly deviceRegistry: ProviderDeviceRegistry,\n private readonly eventBus: IEventBus,\n private readonly loggingService: LoggerFactory,\n ) {\n this.logger = loggingService.createLogger('provider-manager')\n }\n\n registerProvider(provider: P): void {\n const providerLogger = this.loggingService.createLogger(`provider:${provider.id}`)\n const lifecycle = new LifecycleStateMachine(\n provider.id,\n 'provider',\n this.eventBus,\n providerLogger,\n )\n this.providers.set(provider.id, { provider, lifecycle, started: false })\n this.logger.info(`Provider registered: ${provider.id} (${provider.name})`)\n }\n\n async startProvider(id: string): Promise<void> {\n const entry = this.providers.get(id)\n if (!entry) {\n throw new Error(`Provider \"${id}\" is not registered`)\n }\n\n if (entry.lifecycle.state === 'disabled') {\n throw new Error(`Provider \"${id}\" is disabled`)\n }\n\n entry.lifecycle.transition('starting')\n\n try {\n await entry.provider.start()\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err)\n entry.lifecycle.transition('error', message)\n throw err\n }\n\n entry.lifecycle.transition('running')\n\n const devices = entry.provider.getDevices()\n this.deviceRegistry.registerProviderDevices(id, devices)\n\n const unsubscribe = entry.provider.subscribeLiveEvents((event: LiveEvent) => {\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'provider', id },\n category: `provider.${event.type}`,\n data: event.data,\n })\n })\n\n entry.started = true\n entry.unsubscribe = unsubscribe\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'core', id: 'provider-manager' },\n category: 'provider.started',\n data: { providerId: id },\n })\n\n this.logger.info(`Provider started: ${id}`)\n }\n\n async stopProvider(id: string): Promise<void> {\n const entry = this.providers.get(id)\n if (!entry) {\n throw new Error(`Provider \"${id}\" is not registered`)\n }\n\n entry.lifecycle.transition('stopping')\n\n if (entry.unsubscribe) {\n entry.unsubscribe()\n entry.unsubscribe = undefined\n }\n\n this.deviceRegistry.unregisterProviderDevices(id)\n\n await entry.provider.stop()\n entry.started = false\n\n entry.lifecycle.transition('stopped')\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'core', id: 'provider-manager' },\n category: 'provider.stopped',\n data: { providerId: id },\n })\n\n this.logger.info(`Provider stopped: ${id}`)\n }\n\n async disableProvider(id: string): Promise<void> {\n const entry = this.providers.get(id)\n if (!entry) {\n throw new Error(`Provider \"${id}\" is not registered`)\n }\n\n if (entry.lifecycle.state === 'running' || entry.started) {\n await this.stopProvider(id)\n }\n\n entry.lifecycle.transition('disabled')\n this.logger.info(`Provider disabled: ${id}`)\n }\n\n async enableProvider(id: string): Promise<void> {\n const entry = this.providers.get(id)\n if (!entry) {\n throw new Error(`Provider \"${id}\" is not registered`)\n }\n\n if (entry.lifecycle.state !== 'disabled') {\n throw new Error(`Provider \"${id}\" is not disabled`)\n }\n\n entry.lifecycle.transition('stopped')\n this.logger.info(`Provider enabled: ${id}`)\n }\n\n async restartProvider(id: string): Promise<void> {\n await this.stopProvider(id)\n await this.startProvider(id)\n }\n\n getProvider(id: string): P | null {\n const entry = this.providers.get(id)\n return entry?.provider ?? null\n }\n\n getProviderStatus(id: string): ElementStatus | null {\n const entry = this.providers.get(id)\n return entry?.lifecycle.getStatus() ?? null\n }\n\n listProviders(): readonly ProviderListItem[] {\n return Array.from(this.providers.values()).map((entry) => ({\n id: entry.provider.id,\n type: entry.provider.type,\n name: entry.provider.name,\n status: entry.provider.getStatus(),\n started: entry.started,\n lifecycle: entry.lifecycle.getStatus(),\n }))\n }\n\n async shutdownAll(): Promise<void> {\n const startedIds = Array.from(this.providers.entries())\n .filter(([, entry]) => entry.started)\n .map(([id]) => id)\n\n for (const id of startedIds) {\n await this.stopProvider(id)\n }\n\n this.logger.info(`All providers shut down (${startedIds.length} stopped)`)\n }\n}\n","export {\n ensureBinary,\n downloadBinary,\n findInPath,\n getPlatformInfo,\n buildBinaryPath,\n} from './deps/binary-downloader.js'\nexport { ensureFfmpeg, getFfmpegDownloadUrl } from './deps/ffmpeg-downloader.js'\nexport {\n ensurePython,\n installPythonPackages,\n getPythonDownloadUrl,\n PYTHON_VERSION,\n} from './deps/python-downloader.js'\nexport { EventBus } from './events/event-bus.js'\nexport { downloadModel, downloadFile, fetchJson } from './download/model-downloader.js'\nexport { ModelDownloadService } from './download/model-download-service.js'\nexport { PythonEnvManager } from './python/python-env-manager.js'\nexport type { ValidationIssue, ValidationResult } from './pipeline/pipeline-validator.js'\nexport { PipelineValidator } from './pipeline/pipeline-validator.js'\nexport { PipelineRunner } from './pipeline/pipeline-runner.js'\n\n// Process management\nexport { ProcessManager } from './process/process-manager.js'\nexport { ManagedProcess } from './process/managed-process.js'\nexport type {\n ProcessConfig,\n ProcessStats,\n ManagedProcessStatus,\n ProcessState,\n ProcessEventEmitter,\n ProcessLoggerFactory,\n} from './process/interfaces.js'\n\n// Network quality tracking\nexport { NetworkQualityTracker } from './network/network-quality.js'\nexport type {\n StreamNetworkStats,\n ClientNetworkStats,\n DeviceNetworkStats,\n INetworkQualityTracker,\n} from './network/network-quality.js'\n\n// REPL engine\nexport { ReplEngine } from './repl/repl-engine.js'\nexport type {\n ReplScope,\n ReplSessionContext,\n ReplResult,\n IReplEngine,\n IReplContextProvider,\n} from './repl/interfaces.js'\n\n// Agent registry and task dispatcher\nexport { AgentRegistry } from './agent/agent-registry.js'\nexport { TaskDispatcher } from './agent/task-dispatcher.js'\nexport { AgentClient } from './agent/agent-client.js'\nexport type { AgentClientConfig, MessageHandler, BinaryHandler, ConnectionHandler } from './agent/agent-client.js'\nexport { AgentTaskRunner } from './agent/agent-task-runner.js'\nexport { DecodeTaskHandler, DetectTaskHandler, RecordTaskHandler } from './agent/pipeline-task-handlers.js'\nexport type {\n AgentInfo,\n AgentResources,\n AgentStatus,\n AgentTask,\n AgentTaskResult,\n TaskDispatchOptions,\n AgentEntry,\n AgentEventEmitter,\n} from './agent/interfaces.js'\n\n// Builtin providers — default implementations that register through CapabilityRegistry\n// and CAN be replaced by external addons.\nexport { SqliteStorageAddon } from './builtins/sqlite-storage/index.js'\nexport { SettingsStore } from './builtins/sqlite-storage/index.js'\nexport { CORE_TABLE_DDL, addonTableToDdl } from './builtins/sqlite-storage/index.js'\nexport type { AddonTableSchema } from './builtins/sqlite-storage/index.js'\nexport { SqliteStorageProvider, FileSystemStorage } from './builtins/sqlite-storage/index.js'\nexport { WinstonLoggingAddon } from './builtins/winston-logging/index.js'\nexport { WinstonDestination } from './builtins/winston-logging/index.js'\nexport { LocalBackupAddon } from './builtins/local-backup/index.js'\nexport { LocalBackupService } from './builtins/local-backup/index.js'\nexport type { BackupManifest, BackupConfig } from './builtins/local-backup/index.js'\n// Lifecycle\nexport { LifecycleStateMachine } from './lifecycle/lifecycle-state-machine.js'\nexport type {\n ElementState,\n ElementStatus,\n} from './lifecycle/lifecycle-state-machine.js'\n\n// Feature\nexport { FeatureManager } from './feature/feature-manager.js'\nexport type {\n FeatureManifest,\n FeatureFlag,\n FeatureConfigReader,\n} from './feature/feature-manager.js'\n\n// Events (system-level event bus with ring buffer)\nexport { SystemEventBus } from './events/system-event-bus.js'\nexport type {\n SystemEvent,\n EventSource,\n EventFilter,\n} from './events/system-event-bus.js'\n\n// Logging\nexport { LogManager } from './logging/log-manager.js'\nexport type { ILogDestination } from './logging/log-manager.js'\nexport { LogRingBuffer } from './logging/log-ring-buffer.js'\nexport type { LogEntry, LogFilter, LogLevel } from './logging/log-ring-buffer.js'\nexport { ScopedLogger } from './logging/scoped-logger.js'\nexport type { IScopedLogger } from './logging/scoped-logger.js'\n\n// Storage\nexport { StorageManager } from './storage/storage-manager.js'\nexport type {\n IStorageProvider as ICoreStorageProvider,\n IStorageLocation,\n IStructuredStorage,\n IFileStorage,\n QueryFilter,\n StorageRecord,\n} from './storage/storage-manager.js'\nexport { StorageLocationManager } from './storage/storage-location-manager.js'\nexport type { StorageLocationName } from './storage/storage-location-manager.js'\nexport { FsStorageBackend } from './storage/fs-storage-backend.js'\nexport type { IStorageBackend } from './storage/fs-storage-backend.js'\n\n// Auth\nexport { AuthManager } from './auth/auth-manager.js'\nexport type { UserRole, TokenPayload, AuthConfigReader } from './auth/auth-manager.js'\nexport { ApiKeyManager } from './auth/api-key-manager.js'\nexport type { ApiKeyRecord, ApiKeyStorageAccess } from './auth/api-key-manager.js'\nexport { UserManager } from './auth/user-manager.js'\nexport type { UserRecord, UserStorageAccess, UserConfigReader } from './auth/user-manager.js'\nexport { ScopedTokenManager } from './auth/scoped-token-manager.js'\n\n// Notification\nexport { NotificationService } from './notification/notification-service.js'\nexport { ToastService } from './notification/toast-service.js'\nexport type { Unsubscribe } from './notification/toast-service.js'\n\n// Addon routes\nexport { AddonRouteRegistry } from './addon-routes/addon-route-registry.js'\n\n// Device\nexport { DeviceRegistry } from './device/device-registry.js'\nexport type {\n IRegisteredDevice,\n} from './device/device-registry.js'\nexport { CapabilityResolver } from './device/capability-resolver.js'\nexport type {\n IDeviceCapability,\n CapabilityBinding,\n IResolvableDevice,\n IAddonRegistryAccess,\n} from './device/capability-resolver.js'\n\n// TLS\nexport * from './tls/index.js'\n\n// Addon API Factory\nexport { AddonApiFactory } from './addon/addon-api-factory.js'\nexport type { DirectCallerOptions, WssClientOptions } from './addon/addon-api-factory.js'\n\n// Platform\nexport { PlatformScorer } from './platform/platform-scorer.js'\nexport { InferenceConfigResolver } from './platform/inference-config-resolver.js'\n\n// Provider\nexport { ProviderManager } from './provider/provider-manager.js'\nexport type {\n ProviderDeviceRegistry,\n IManagedProvider,\n ProviderListItem,\n} from './provider/provider-manager.js'\n"],"mappings":"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","names":["exports","getPlatformInfo","buildBinaryPath","findInPath","downloadBinary","ensureBinary","exports","getFfmpegDownloadUrl","ensureFfmpeg","exports","getPythonDownloadUrl","ensurePython","installPythonPackages","EventBus","exports","exports","downloadFile","fetchJson","downloadModel","fs","path","resolve","fs","path","ModelDownloadService","format","exports","fs","path","PythonEnvManager","exports","PipelineValidator","exports","PipelineRunner","promises","exports","ManagedProcess","resolve","exports","ProcessManager","exports","NetworkQualityTracker","exports","ReplEngine","exports","AgentRegistry","exports","TaskDispatcher","resolve","exports","exports","module","exports","module","exports","module","exports","module","data","exports","module","exports","module","exports","module","exports","module","exports","module","format","exports","module","URL","format","WebSocket","key","exports","module","WebSocket","err","exports","module","protocol","exports","module","WebSocket","exports","module","WebSocket","AgentClient","resolve","WebSocket","exports","AgentTaskRunner","exports","DecodeTaskHandler","exports","DetectTaskHandler","RecordTaskHandler","resolve","fs","Database","import_better_sqlite3","fs","path","import_node_crypto","Database","exports","addonTableToDdl","import_better_sqlite3","Database","CORE_TABLE_DDL","exports","path","DailyRotateFile","resolve","exports","import_node_crypto","path","exports","LifecycleStateMachine","exports","FeatureManager","exports","SystemEventBus","exports","LogRingBuffer","exports","ScopedLogger","exports","LogManager","exports","FsStorageBackend","exports","StorageLocationManager","path","exports","StorageManager","StorageLocationManager","location","fs","path","exports","AuthManager","exports","ApiKeyManager","exports","UserManager","exports","ScopedTokenManager","exports","NotificationService","exports","ToastService","exports","AddonRouteRegistry","path","exports","DeviceRegistry","exports","CapabilityResolver","exports","exports","exports","exports","exports","__create","__defProp","__getOwnPropDesc","__getOwnPropNames","__getProtoOf","__hasOwnProp","__commonJS","__copyProps","__toESM","path","module","exports","resolve","path","exports","module","TRPCBuilder","exports","exports","__create","__defProp","__getOwnPropDesc","__getOwnPropNames","__getProtoOf","__hasOwnProp","__commonJS","__copyProps","__toESM","exports","resolve","exports","require_observable","exports","require_observable","exports","exports","module","exports","path","exports","require_observable","path","Unpromise","resolve","promises","module","cleanup","exports","exports","path","exports","require_unstable_core_do_not_import","exports","TRPCClientError","exports","exports","exports","path","exports","resolve","path","exports","path","exports","TRPCWebSocketClosedError","resolve","WsConnection","path","exports","require_dist","exports","path","promises","module","AddonApiFactory","exports","i","exports","exports","exports","exports","exports","exports","exports","resolve","exports","exports","exports","exports","exports","exports","exports","exports","exports","resolve","exports","exports","exports","PlatformScorer","format","exports","InferenceConfigResolver","exports","ProviderManager","exports","import_sqlite_storage","import_winston_logging","import_local_backup"]}
|
|
1
|
+
{"version":3,"sources":["../src/storage/fs-storage-backend.ts","../src/storage/storage-location-manager.ts","../../../node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js","../../../node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js","../../../node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js","../../../node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js","../../../node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js","../../../node_modules/@trpc/client/src/links/internals/createChain.ts","../../../node_modules/@trpc/client/src/links/splitLink.ts","../../../node_modules/@trpc/client/src/TRPCClientError.ts","../../../node_modules/@trpc/client/src/internals/transformer.ts","../../../node_modules/@trpc/client/src/getFetch.ts","../../../node_modules/@trpc/client/src/links/internals/httpUtils.ts","../../../node_modules/@trpc/client/src/links/internals/contentTypes.ts","../../../node_modules/@trpc/client/src/links/httpLink.ts","../../../node_modules/@trpc/client/src/internals/dataLoader.ts","../../../node_modules/@trpc/client/src/internals/signals.ts","../../../node_modules/@trpc/client/src/links/httpBatchLink.ts","../../../node_modules/@trpc/client/src/links/loggerLink.ts","../../../node_modules/@trpc/client/src/links/wsLink/wsClient/encoder.ts","../../../node_modules/@trpc/client/src/links/wsLink/wsClient/options.ts","../../../node_modules/@trpc/client/src/links/internals/urlWithConnectionParams.ts","../../../node_modules/@trpc/client/src/links/wsLink/wsClient/utils.ts","../../../node_modules/@trpc/client/src/links/wsLink/wsClient/requestManager.ts","../../../node_modules/@trpc/client/src/links/wsLink/wsClient/wsConnection.ts","../../../node_modules/@trpc/client/src/links/wsLink/wsClient/wsClient.ts","../../../node_modules/@trpc/client/src/links/wsLink/createWsClient.ts","../../../node_modules/@trpc/client/src/links/wsLink/wsLink.ts","../../../node_modules/@trpc/client/src/internals/TRPCUntypedClient.ts","../../../node_modules/@trpc/client/src/createTRPCUntypedClient.ts","../../../node_modules/@trpc/client/src/createTRPCClient.ts","../../../node_modules/@trpc/client/src/links/httpBatchStreamLink.ts","../../../node_modules/@trpc/client/src/internals/inputWithTrackedEventId.ts","../../../node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncIterator.js","../../../node_modules/@trpc/client/src/links/httpSubscriptionLink.ts","../../../node_modules/@trpc/client/src/links/retryLink.ts","../../../node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/usingCtx.js","../../../node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/OverloadYield.js","../../../node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/awaitAsyncGenerator.js","../../../node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/wrapAsyncGenerator.js","../../../node_modules/@trpc/client/src/links/localLink.ts","../src/index.ts","../src/deps/binary-downloader.ts","../src/deps/ffmpeg-downloader.ts","../src/deps/python-downloader.ts","../src/events/event-bus.ts","../src/download/model-downloader.ts","../src/download/model-download-service.ts","../src/python/python-env-manager.ts","../src/pipeline/pipeline-validator.ts","../src/pipeline/pipeline-runner.ts","../src/process/managed-process.ts","../src/process/process-manager.ts","../src/network/network-quality.ts","../src/repl/repl-engine.ts","../src/agent/agent-registry.ts","../src/agent/task-dispatcher.ts","../src/agent/agent-client.ts","../src/agent/agent-task-runner.ts","../src/agent/pipeline-task-handlers.ts","../src/builtins/sqlite-storage/filesystem-storage-provider.ts","../src/builtins/sqlite-storage/sqlite-settings-backend.ts","../src/builtins/sqlite-storage/sqlite-storage.provider.ts","../src/builtins/sqlite-storage/sqlite-storage.addon.ts","../src/builtins/sqlite-storage/settings-store.ts","../src/builtins/sqlite-storage/sql-schema.ts","../src/builtins/winston-logging/winston-destination.ts","../src/builtins/winston-logging/winston-logging.addon.ts","../src/builtins/local-backup/local-backup.ts","../src/builtins/local-backup/local-backup.addon.ts","../src/lifecycle/lifecycle-state-machine.ts","../src/feature/feature-manager.ts","../src/events/system-event-bus.ts","../src/logging/log-ring-buffer.ts","../src/logging/scoped-logger.ts","../src/logging/log-manager.ts","../src/storage/storage-manager.ts","../src/auth/auth-manager.ts","../src/auth/api-key-manager.ts","../src/auth/user-manager.ts","../src/auth/scoped-token-manager.ts","../src/notification/notification-service.ts","../src/notification/toast-service.ts","../src/addon-routes/addon-route-registry.ts","../src/device/device-registry.ts","../src/device/capability-resolver.ts","../src/tls/cert-manager.ts","../src/addon/addon-api-factory.ts","../src/platform/platform-scorer.ts","../src/platform/inference-config-resolver.ts","../src/provider/provider-manager.ts"],"sourcesContent":["import { existsSync, mkdirSync, accessSync, constants } from 'node:fs'\nimport { join, resolve, isAbsolute } from 'node:path'\n\nexport interface IStorageBackend {\n /** Backend type identifier */\n readonly type: string\n /** Base path of this backend */\n readonly basePath: string\n /** Resolve a subpath to an absolute path */\n resolve(subpath: string): string\n /** Check if the backend path exists and is writable */\n isAvailable(): boolean\n /** Ensure base directory exists (mkdir -p equivalent) */\n initialize(): Promise<void>\n}\n\nexport class FsStorageBackend implements IStorageBackend {\n readonly type = 'local'\n readonly basePath: string\n\n constructor(basePath: string) {\n this.basePath = resolve(basePath)\n }\n\n resolve(subpath: string): string {\n if (isAbsolute(subpath)) return subpath\n return join(this.basePath, subpath)\n }\n\n isAvailable(): boolean {\n try {\n if (!existsSync(this.basePath)) return false\n accessSync(this.basePath, constants.W_OK)\n return true\n } catch {\n return false\n }\n }\n\n async initialize(): Promise<void> {\n mkdirSync(this.basePath, { recursive: true })\n }\n}\n","import { join, isAbsolute } from 'node:path'\nimport { FsStorageBackend, type IStorageBackend } from './fs-storage-backend.js'\n\nexport type StorageLocationName = 'data' | 'media' | 'recordings' | 'models' | 'cache' | 'logs'\n\nexport class StorageLocationManager {\n private readonly backends: Map<StorageLocationName, IStorageBackend> = new Map()\n private readonly dataPath: string\n\n constructor(dataPath: string) {\n this.dataPath = dataPath\n }\n\n /** Initialize all locations with default paths */\n async initializeDefaults(): Promise<void> {\n const defaults: Record<StorageLocationName, string> = {\n data: join(this.dataPath, 'db'),\n media: join(this.dataPath, 'media'),\n recordings: join(this.dataPath, 'recordings'),\n models: join(this.dataPath, 'models'),\n cache: '/tmp/camstack-cache',\n logs: join(this.dataPath, 'logs'),\n }\n\n for (const [name, path] of Object.entries(defaults)) {\n const backend = new FsStorageBackend(path)\n await backend.initialize()\n this.backends.set(name as StorageLocationName, backend)\n }\n }\n\n /** Override a specific location's backend path */\n async setLocationPath(name: StorageLocationName, basePath: string): Promise<void> {\n const resolved = isAbsolute(basePath) ? basePath : join(this.dataPath, basePath)\n const backend = new FsStorageBackend(resolved)\n await backend.initialize()\n this.backends.set(name, backend)\n }\n\n /** Get the backend for a location */\n getBackend(name: StorageLocationName): IStorageBackend {\n const backend = this.backends.get(name)\n if (!backend) throw new Error(`Storage location \"${name}\" not initialized`)\n return backend\n }\n\n /** Resolve a path within a location */\n resolve(location: StorageLocationName, subpath: string): string {\n return this.getBackend(location).resolve(subpath)\n }\n\n /** Check if all locations are available */\n getStatus(): Array<{ name: StorageLocationName; available: boolean; path: string }> {\n return Array.from(this.backends.entries()).map(([name, backend]) => ({\n name,\n available: backend.isAvailable(),\n path: backend.basePath,\n }))\n }\n\n /** All location names */\n getLocationNames(): StorageLocationName[] {\n return Array.from(this.backends.keys())\n }\n}\n","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var defineProperty = require(\"./defineProperty.js\");\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nmodule.exports = _objectSpread2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { observable } from '@trpc/server/observable';\nimport type { AnyRouter } from '@trpc/server/unstable-core-do-not-import';\nimport type {\n Operation,\n OperationLink,\n OperationResultObservable,\n} from '../types';\n\n/** @internal */\nexport function createChain<\n TRouter extends AnyRouter,\n TInput = unknown,\n TOutput = unknown,\n>(opts: {\n links: OperationLink<TRouter, TInput, TOutput>[];\n op: Operation<TInput>;\n}): OperationResultObservable<TRouter, TOutput> {\n return observable((observer) => {\n function execute(index = 0, op = opts.op) {\n const next = opts.links[index];\n if (!next) {\n throw new Error(\n 'No more links to execute - did you forget to add an ending link?',\n );\n }\n const subscription = next({\n op,\n next(nextOp) {\n const nextObserver = execute(index + 1, nextOp);\n\n return nextObserver;\n },\n });\n return subscription;\n }\n\n const obs$ = execute();\n return obs$.subscribe(observer);\n });\n}\n","import { observable } from '@trpc/server/observable';\nimport type { AnyRouter } from '@trpc/server/unstable-core-do-not-import';\nimport { createChain } from './internals/createChain';\nimport type { Operation, TRPCLink } from './types';\n\nfunction asArray<TType>(value: TType | TType[]) {\n return Array.isArray(value) ? value : [value];\n}\nexport function splitLink<TRouter extends AnyRouter = AnyRouter>(opts: {\n condition: (op: Operation) => boolean;\n /**\n * The link to execute next if the test function returns `true`.\n */\n true: TRPCLink<TRouter> | TRPCLink<TRouter>[];\n /**\n * The link to execute next if the test function returns `false`.\n */\n false: TRPCLink<TRouter> | TRPCLink<TRouter>[];\n}): TRPCLink<TRouter> {\n return (runtime) => {\n const yes = asArray(opts.true).map((link) => link(runtime));\n const no = asArray(opts.false).map((link) => link(runtime));\n return (props) => {\n return observable((observer) => {\n const links = opts.condition(props.op) ? yes : no;\n return createChain({ op: props.op, links }).subscribe(observer);\n });\n };\n };\n}\n","import type {\n inferClientTypes,\n InferrableClientTypes,\n Maybe,\n TRPCErrorResponse,\n} from '@trpc/server/unstable-core-do-not-import';\nimport {\n isObject,\n type DefaultErrorShape,\n} from '@trpc/server/unstable-core-do-not-import';\n\ntype inferErrorShape<TInferrable extends InferrableClientTypes> =\n inferClientTypes<TInferrable>['errorShape'];\nexport interface TRPCClientErrorBase<TShape extends DefaultErrorShape> {\n readonly message: string;\n readonly shape: Maybe<TShape>;\n readonly data: Maybe<TShape['data']>;\n}\nexport type TRPCClientErrorLike<TInferrable extends InferrableClientTypes> =\n TRPCClientErrorBase<inferErrorShape<TInferrable>>;\n\nexport function isTRPCClientError<TInferrable extends InferrableClientTypes>(\n cause: unknown,\n): cause is TRPCClientError<TInferrable> {\n return cause instanceof TRPCClientError;\n}\n\nfunction isTRPCErrorResponse(obj: unknown): obj is TRPCErrorResponse<any> {\n return (\n isObject(obj) &&\n isObject(obj['error']) &&\n typeof obj['error']['code'] === 'number' &&\n typeof obj['error']['message'] === 'string'\n );\n}\n\nfunction getMessageFromUnknownError(err: unknown, fallback: string): string {\n if (typeof err === 'string') {\n return err;\n }\n if (isObject(err) && typeof err['message'] === 'string') {\n return err['message'];\n }\n return fallback;\n}\n\nexport class TRPCClientError<TRouterOrProcedure extends InferrableClientTypes>\n extends Error\n implements TRPCClientErrorBase<inferErrorShape<TRouterOrProcedure>>\n{\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore override doesn't work in all environments due to \"This member cannot have an 'override' modifier because it is not declared in the base class 'Error'\"\n public override readonly cause;\n public readonly shape: Maybe<inferErrorShape<TRouterOrProcedure>>;\n public readonly data: Maybe<inferErrorShape<TRouterOrProcedure>['data']>;\n\n /**\n * Additional meta data about the error\n * In the case of HTTP-errors, we'll have `response` and potentially `responseJSON` here\n */\n public meta;\n\n constructor(\n message: string,\n opts?: {\n result?: Maybe<TRPCErrorResponse<inferErrorShape<TRouterOrProcedure>>>;\n cause?: Error;\n meta?: Record<string, unknown>;\n },\n ) {\n const cause = opts?.cause;\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore https://github.com/tc39/proposal-error-cause\n super(message, { cause });\n\n this.meta = opts?.meta;\n\n this.cause = cause;\n this.shape = opts?.result?.error;\n this.data = opts?.result?.error.data;\n this.name = 'TRPCClientError';\n\n Object.setPrototypeOf(this, TRPCClientError.prototype);\n }\n\n public static from<TRouterOrProcedure extends InferrableClientTypes>(\n _cause: Error | TRPCErrorResponse<any> | object,\n opts: { meta?: Record<string, unknown>; cause?: Error } = {},\n ): TRPCClientError<TRouterOrProcedure> {\n const cause = _cause as unknown;\n\n if (isTRPCClientError(cause)) {\n if (opts.meta) {\n // Decorate with meta error data\n cause.meta = {\n ...cause.meta,\n ...opts.meta,\n };\n }\n return cause;\n }\n if (isTRPCErrorResponse(cause)) {\n return new TRPCClientError(cause.error.message, {\n ...opts,\n result: cause,\n cause: opts.cause,\n });\n }\n return new TRPCClientError(\n getMessageFromUnknownError(cause, 'Unknown error'),\n {\n ...opts,\n cause: cause as any,\n },\n );\n }\n}\n","import type {\n AnyClientTypes,\n CombinedDataTransformer,\n DataTransformerOptions,\n TypeError,\n} from '@trpc/server/unstable-core-do-not-import';\n\n/**\n * @internal\n */\nexport type CoercedTransformerParameters = {\n transformer?: DataTransformerOptions;\n};\n\ntype TransformerOptionYes = {\n /**\n * Data transformer\n *\n * You must use the same transformer on the backend and frontend\n * @see https://trpc.io/docs/v11/data-transformers\n **/\n transformer: DataTransformerOptions;\n};\ntype TransformerOptionNo = {\n /**\n * Data transformer\n *\n * You must use the same transformer on the backend and frontend\n * @see https://trpc.io/docs/v11/data-transformers\n **/\n transformer?: TypeError<'You must define a transformer on your your `initTRPC`-object first'>;\n};\n\n/**\n * @internal\n */\nexport type TransformerOptions<\n TRoot extends Pick<AnyClientTypes, 'transformer'>,\n> = TRoot['transformer'] extends true\n ? TransformerOptionYes\n : TransformerOptionNo;\n/**\n * @internal\n */\n\n/**\n * @internal\n */\nexport function getTransformer(\n transformer:\n | TransformerOptions<{ transformer: false }>['transformer']\n | TransformerOptions<{ transformer: true }>['transformer']\n | undefined,\n): CombinedDataTransformer {\n const _transformer =\n transformer as CoercedTransformerParameters['transformer'];\n if (!_transformer) {\n return {\n input: {\n serialize: (data) => data,\n deserialize: (data) => data,\n },\n output: {\n serialize: (data) => data,\n deserialize: (data) => data,\n },\n };\n }\n if ('input' in _transformer) {\n return _transformer;\n }\n return {\n input: _transformer,\n output: _transformer,\n };\n}\n","import type { FetchEsque, NativeFetchEsque } from './internals/types';\n\ntype AnyFn = (...args: any[]) => unknown;\n\nconst isFunction = (fn: unknown): fn is AnyFn => typeof fn === 'function';\n\nexport function getFetch(\n customFetchImpl?: FetchEsque | NativeFetchEsque,\n): FetchEsque {\n if (customFetchImpl) {\n return customFetchImpl as FetchEsque;\n }\n\n if (typeof window !== 'undefined' && isFunction(window.fetch)) {\n return window.fetch as FetchEsque;\n }\n\n if (typeof globalThis !== 'undefined' && isFunction(globalThis.fetch)) {\n return globalThis.fetch as FetchEsque;\n }\n\n throw new Error('No fetch implementation found');\n}\n","import type {\n AnyClientTypes,\n CombinedDataTransformer,\n Maybe,\n ProcedureType,\n TRPCAcceptHeader,\n TRPCResponse,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { getFetch } from '../../getFetch';\nimport type {\n FetchEsque,\n RequestInitEsque,\n ResponseEsque,\n} from '../../internals/types';\nimport type { TransformerOptions } from '../../unstable-internals';\nimport { getTransformer } from '../../unstable-internals';\nimport type { HTTPHeaders } from '../types';\n\n/**\n * @internal\n */\nexport type HTTPLinkBaseOptions<\n TRoot extends Pick<AnyClientTypes, 'transformer'>,\n> = {\n url: string | URL;\n /**\n * Add ponyfill for fetch\n */\n fetch?: FetchEsque;\n /**\n * Send all requests `as POST`s requests regardless of the procedure type\n * The HTTP handler must separately allow overriding the method. See:\n * @see https://trpc.io/docs/rpc\n */\n methodOverride?: 'POST';\n} & TransformerOptions<TRoot>;\n\nexport interface ResolvedHTTPLinkOptions {\n url: string;\n fetch?: FetchEsque;\n transformer: CombinedDataTransformer;\n methodOverride?: 'POST';\n}\n\nexport function resolveHTTPLinkOptions(\n opts: HTTPLinkBaseOptions<AnyClientTypes>,\n): ResolvedHTTPLinkOptions {\n return {\n url: opts.url.toString(),\n fetch: opts.fetch,\n transformer: getTransformer(opts.transformer),\n methodOverride: opts.methodOverride,\n };\n}\n\n// https://github.com/trpc/trpc/pull/669\nfunction arrayToDict(array: unknown[]) {\n const dict: Record<number, unknown> = {};\n for (let index = 0; index < array.length; index++) {\n const element = array[index];\n dict[index] = element;\n }\n return dict;\n}\n\nconst METHOD = {\n query: 'GET',\n mutation: 'POST',\n subscription: 'PATCH',\n} as const;\n\nexport interface HTTPResult {\n json: TRPCResponse;\n meta: {\n response: ResponseEsque;\n responseJSON?: unknown;\n };\n}\n\ntype GetInputOptions = {\n transformer: CombinedDataTransformer;\n} & ({ input: unknown } | { inputs: unknown[] });\n\nexport function getInput(opts: GetInputOptions) {\n return 'input' in opts\n ? opts.transformer.input.serialize(opts.input)\n : arrayToDict(\n opts.inputs.map((_input) => opts.transformer.input.serialize(_input)),\n );\n}\n\nexport type HTTPBaseRequestOptions = GetInputOptions &\n ResolvedHTTPLinkOptions & {\n type: ProcedureType;\n path: string;\n signal: Maybe<AbortSignal>;\n };\n\ntype GetUrl = (opts: HTTPBaseRequestOptions) => string;\ntype GetBody = (opts: HTTPBaseRequestOptions) => RequestInitEsque['body'];\n\nexport type ContentOptions = {\n trpcAcceptHeader?: TRPCAcceptHeader;\n trpcAcceptHeaderKey?: 'trpc-accept' | 'accept';\n contentTypeHeader?: string;\n getUrl: GetUrl;\n getBody: GetBody;\n};\n\nexport const getUrl: GetUrl = (opts) => {\n const parts = opts.url.split('?') as [string, string?];\n const base = parts[0].replace(/\\/$/, ''); // Remove any trailing slashes\n\n let url = base + '/' + opts.path;\n const queryParts: string[] = [];\n\n if (parts[1]) {\n queryParts.push(parts[1]);\n }\n if ('inputs' in opts) {\n queryParts.push('batch=1');\n }\n if (opts.type === 'query' || opts.type === 'subscription') {\n const input = getInput(opts);\n if (input !== undefined && opts.methodOverride !== 'POST') {\n queryParts.push(`input=${encodeURIComponent(JSON.stringify(input))}`);\n }\n }\n if (queryParts.length) {\n url += '?' + queryParts.join('&');\n }\n return url;\n};\n\nexport const getBody: GetBody = (opts) => {\n if (opts.type === 'query' && opts.methodOverride !== 'POST') {\n return undefined;\n }\n const input = getInput(opts);\n return input !== undefined ? JSON.stringify(input) : undefined;\n};\n\nexport type Requester = (\n opts: HTTPBaseRequestOptions & {\n headers: () => HTTPHeaders | Promise<HTTPHeaders>;\n },\n) => Promise<HTTPResult>;\n\nexport const jsonHttpRequester: Requester = (opts) => {\n return httpRequest({\n ...opts,\n contentTypeHeader: 'application/json',\n getUrl,\n getBody,\n });\n};\n\n/**\n * Polyfill for DOMException with AbortError name\n */\nclass AbortError extends Error {\n constructor() {\n const name = 'AbortError';\n super(name);\n this.name = name;\n this.message = name;\n }\n}\n\nexport type HTTPRequestOptions = ContentOptions &\n HTTPBaseRequestOptions & {\n headers: () => HTTPHeaders | Promise<HTTPHeaders>;\n };\n\n/**\n * Polyfill for `signal.throwIfAborted()`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/throwIfAborted\n */\nconst throwIfAborted = (signal: Maybe<AbortSignal>) => {\n if (!signal?.aborted) {\n return;\n }\n // If available, use the native implementation\n signal.throwIfAborted?.();\n\n // If we have `DOMException`, use it\n if (typeof DOMException !== 'undefined') {\n throw new DOMException('AbortError', 'AbortError');\n }\n\n // Otherwise, use our own implementation\n throw new AbortError();\n};\n\nexport async function fetchHTTPResponse(opts: HTTPRequestOptions) {\n throwIfAborted(opts.signal);\n\n const url = opts.getUrl(opts);\n const body = opts.getBody(opts);\n const method = opts.methodOverride ?? METHOD[opts.type];\n const resolvedHeaders = await (async () => {\n const heads = await opts.headers();\n if (Symbol.iterator in heads) {\n return Object.fromEntries(heads);\n }\n return heads;\n })();\n const headers = {\n ...(opts.contentTypeHeader && method !== 'GET'\n ? { 'content-type': opts.contentTypeHeader }\n : {}),\n ...(opts.trpcAcceptHeader\n ? { [opts.trpcAcceptHeaderKey ?? 'trpc-accept']: opts.trpcAcceptHeader }\n : undefined),\n ...resolvedHeaders,\n };\n\n return getFetch(opts.fetch)(url, {\n method,\n signal: opts.signal,\n body,\n headers,\n });\n}\n\nexport async function httpRequest(\n opts: HTTPRequestOptions,\n): Promise<HTTPResult> {\n const meta = {} as HTTPResult['meta'];\n\n const res = await fetchHTTPResponse(opts);\n meta.response = res;\n\n const json = await res.json();\n\n meta.responseJSON = json;\n\n return {\n json: json as TRPCResponse,\n meta,\n };\n}\n","export function isOctetType(\n input: unknown,\n): input is Uint8Array<ArrayBuffer> | Blob {\n return (\n input instanceof Uint8Array ||\n // File extends from Blob but is only available in nodejs from v20\n input instanceof Blob\n );\n}\n\nexport function isFormData(input: unknown) {\n return input instanceof FormData;\n}\n\nexport function isNonJsonSerializable(input: unknown) {\n return isOctetType(input) || isFormData(input);\n}\n","import { observable } from '@trpc/server/observable';\nimport type {\n AnyClientTypes,\n AnyRouter,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { transformResult } from '@trpc/server/unstable-core-do-not-import';\nimport { TRPCClientError } from '../TRPCClientError';\nimport type {\n HTTPLinkBaseOptions,\n HTTPResult,\n Requester,\n} from './internals/httpUtils';\nimport {\n getUrl,\n httpRequest,\n jsonHttpRequester,\n resolveHTTPLinkOptions,\n} from './internals/httpUtils';\nimport {\n isFormData,\n isOctetType,\n type HTTPHeaders,\n type Operation,\n type TRPCLink,\n} from './types';\n\nexport type HTTPLinkOptions<TRoot extends AnyClientTypes> =\n HTTPLinkBaseOptions<TRoot> & {\n /**\n * Headers to be set on outgoing requests or a callback that of said headers\n * @see http://trpc.io/docs/client/headers\n */\n headers?:\n | HTTPHeaders\n | ((opts: { op: Operation }) => HTTPHeaders | Promise<HTTPHeaders>);\n };\n\nconst universalRequester: Requester = (opts) => {\n if ('input' in opts) {\n const { input } = opts;\n if (isFormData(input)) {\n if (opts.type !== 'mutation' && opts.methodOverride !== 'POST') {\n throw new Error('FormData is only supported for mutations');\n }\n\n return httpRequest({\n ...opts,\n // The browser will set this automatically and include the boundary= in it\n contentTypeHeader: undefined,\n getUrl,\n getBody: () => input,\n });\n }\n\n if (isOctetType(input)) {\n if (opts.type !== 'mutation' && opts.methodOverride !== 'POST') {\n throw new Error('Octet type input is only supported for mutations');\n }\n\n return httpRequest({\n ...opts,\n contentTypeHeader: 'application/octet-stream',\n getUrl,\n getBody: () => input,\n });\n }\n }\n\n return jsonHttpRequester(opts);\n};\n\n/**\n * @see https://trpc.io/docs/client/links/httpLink\n */\nexport function httpLink<TRouter extends AnyRouter = AnyRouter>(\n opts: HTTPLinkOptions<TRouter['_def']['_config']['$types']>,\n): TRPCLink<TRouter> {\n const resolvedOpts = resolveHTTPLinkOptions(opts);\n return () => {\n return (operationOpts) => {\n const { op } = operationOpts;\n return observable((observer) => {\n const { path, input, type } = op;\n /* istanbul ignore if -- @preserve */\n if (type === 'subscription') {\n throw new Error(\n 'Subscriptions are unsupported by `httpLink` - use `httpSubscriptionLink` or `wsLink`',\n );\n }\n\n const request = universalRequester({\n ...resolvedOpts,\n type,\n path,\n input,\n signal: op.signal,\n headers() {\n if (!opts.headers) {\n return {};\n }\n if (typeof opts.headers === 'function') {\n return opts.headers({\n op,\n });\n }\n return opts.headers;\n },\n });\n let meta: HTTPResult['meta'] | undefined = undefined;\n request\n .then((res) => {\n meta = res.meta;\n const transformed = transformResult(\n res.json,\n resolvedOpts.transformer.output,\n );\n\n if (!transformed.ok) {\n observer.error(\n TRPCClientError.from(transformed.error, {\n meta,\n }),\n );\n return;\n }\n observer.next({\n context: res.meta,\n result: transformed.result,\n });\n observer.complete();\n })\n .catch((cause) => {\n observer.error(TRPCClientError.from(cause, { meta }));\n });\n\n return () => {\n // noop\n };\n });\n };\n };\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\ntype BatchItem<TKey, TValue> = {\n aborted: boolean;\n key: TKey;\n resolve: ((value: TValue) => void) | null;\n reject: ((error: Error) => void) | null;\n batch: Batch<TKey, TValue> | null;\n};\ntype Batch<TKey, TValue> = {\n items: BatchItem<TKey, TValue>[];\n};\nexport type BatchLoader<TKey, TValue> = {\n validate: (keys: TKey[]) => boolean;\n fetch: (keys: TKey[]) => Promise<TValue[] | Promise<TValue>[]>;\n};\n\n/**\n * A function that should never be called unless we messed something up.\n */\nconst throwFatalError = () => {\n throw new Error(\n 'Something went wrong. Please submit an issue at https://github.com/trpc/trpc/issues/new',\n );\n};\n\n/**\n * Dataloader that's very inspired by https://github.com/graphql/dataloader\n * Less configuration, no caching, and allows you to cancel requests\n * When cancelling a single fetch the whole batch will be cancelled only when _all_ items are cancelled\n */\nexport function dataLoader<TKey, TValue>(\n batchLoader: BatchLoader<TKey, TValue>,\n) {\n let pendingItems: BatchItem<TKey, TValue>[] | null = null;\n let dispatchTimer: ReturnType<typeof setTimeout> | null = null;\n\n const destroyTimerAndPendingItems = () => {\n clearTimeout(dispatchTimer as any);\n dispatchTimer = null;\n pendingItems = null;\n };\n\n /**\n * Iterate through the items and split them into groups based on the `batchLoader`'s validate function\n */\n function groupItems(items: BatchItem<TKey, TValue>[]) {\n const groupedItems: BatchItem<TKey, TValue>[][] = [[]];\n let index = 0;\n while (true) {\n const item = items[index];\n if (!item) {\n // we're done\n break;\n }\n const lastGroup = groupedItems[groupedItems.length - 1]!;\n\n if (item.aborted) {\n // Item was aborted before it was dispatched\n item.reject?.(new Error('Aborted'));\n index++;\n continue;\n }\n\n const isValid = batchLoader.validate(\n lastGroup.concat(item).map((it) => it.key),\n );\n\n if (isValid) {\n lastGroup.push(item);\n index++;\n continue;\n }\n\n if (lastGroup.length === 0) {\n item.reject?.(new Error('Input is too big for a single dispatch'));\n index++;\n continue;\n }\n // Create new group, next iteration will try to add the item to that\n groupedItems.push([]);\n }\n return groupedItems;\n }\n\n function dispatch() {\n const groupedItems = groupItems(pendingItems!);\n destroyTimerAndPendingItems();\n\n // Create batches for each group of items\n for (const items of groupedItems) {\n if (!items.length) {\n continue;\n }\n const batch: Batch<TKey, TValue> = {\n items,\n };\n for (const item of items) {\n item.batch = batch;\n }\n const promise = batchLoader.fetch(batch.items.map((_item) => _item.key));\n\n promise\n .then(async (result) => {\n await Promise.all(\n result.map(async (valueOrPromise, index) => {\n const item = batch.items[index]!;\n try {\n const value = await Promise.resolve(valueOrPromise);\n\n item.resolve?.(value);\n } catch (cause) {\n item.reject?.(cause as Error);\n }\n\n item.batch = null;\n item.reject = null;\n item.resolve = null;\n }),\n );\n\n for (const item of batch.items) {\n item.reject?.(new Error('Missing result'));\n item.batch = null;\n }\n })\n .catch((cause) => {\n for (const item of batch.items) {\n item.reject?.(cause);\n item.batch = null;\n }\n });\n }\n }\n function load(key: TKey): Promise<TValue> {\n const item: BatchItem<TKey, TValue> = {\n aborted: false,\n key,\n batch: null,\n resolve: throwFatalError,\n reject: throwFatalError,\n };\n\n const promise = new Promise<TValue>((resolve, reject) => {\n item.reject = reject;\n item.resolve = resolve;\n\n pendingItems ??= [];\n pendingItems.push(item);\n });\n\n dispatchTimer ??= setTimeout(dispatch);\n\n return promise;\n }\n\n return {\n load,\n };\n}\n","import type { Maybe } from '@trpc/server/unstable-core-do-not-import';\n\n/**\n * Like `Promise.all()` but for abort signals\n * - When all signals have been aborted, the merged signal will be aborted\n * - If one signal is `null`, no signal will be aborted\n */\nexport function allAbortSignals(...signals: Maybe<AbortSignal>[]): AbortSignal {\n const ac = new AbortController();\n\n const count = signals.length;\n\n let abortedCount = 0;\n\n const onAbort = () => {\n if (++abortedCount === count) {\n ac.abort();\n }\n };\n\n for (const signal of signals) {\n if (signal?.aborted) {\n onAbort();\n } else {\n signal?.addEventListener('abort', onAbort, {\n once: true,\n });\n }\n }\n\n return ac.signal;\n}\n\n/**\n * Like `Promise.race` but for abort signals\n *\n * Basically, a ponyfill for\n * [`AbortSignal.any`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any_static).\n */\nexport function raceAbortSignals(\n ...signals: Maybe<AbortSignal>[]\n): AbortSignal {\n const ac = new AbortController();\n\n for (const signal of signals) {\n if (signal?.aborted) {\n ac.abort();\n } else {\n signal?.addEventListener('abort', () => ac.abort(), { once: true });\n }\n }\n\n return ac.signal;\n}\n\nexport function abortSignalToPromise(signal: AbortSignal): Promise<never> {\n return new Promise((_, reject) => {\n if (signal.aborted) {\n reject(signal.reason);\n return;\n }\n signal.addEventListener(\n 'abort',\n () => {\n reject(signal.reason);\n },\n { once: true },\n );\n });\n}\n","import type { AnyRouter, ProcedureType } from '@trpc/server';\nimport { observable } from '@trpc/server/observable';\nimport { transformResult } from '@trpc/server/unstable-core-do-not-import';\nimport type { BatchLoader } from '../internals/dataLoader';\nimport { dataLoader } from '../internals/dataLoader';\nimport { allAbortSignals } from '../internals/signals';\nimport type { NonEmptyArray } from '../internals/types';\nimport { TRPCClientError } from '../TRPCClientError';\nimport type { HTTPBatchLinkOptions } from './HTTPBatchLinkOptions';\nimport type { HTTPResult } from './internals/httpUtils';\nimport {\n getUrl,\n jsonHttpRequester,\n resolveHTTPLinkOptions,\n} from './internals/httpUtils';\nimport type { Operation, TRPCLink } from './types';\n\n/**\n * @see https://trpc.io/docs/client/links/httpBatchLink\n */\nexport function httpBatchLink<TRouter extends AnyRouter>(\n opts: HTTPBatchLinkOptions<TRouter['_def']['_config']['$types']>,\n): TRPCLink<TRouter> {\n const resolvedOpts = resolveHTTPLinkOptions(opts);\n const maxURLLength = opts.maxURLLength ?? Infinity;\n const maxItems = opts.maxItems ?? Infinity;\n\n return () => {\n const batchLoader = (\n type: ProcedureType,\n ): BatchLoader<Operation, HTTPResult> => {\n return {\n validate(batchOps) {\n if (maxURLLength === Infinity && maxItems === Infinity) {\n // escape hatch for quick calcs\n return true;\n }\n if (batchOps.length > maxItems) {\n return false;\n }\n const path = batchOps.map((op) => op.path).join(',');\n const inputs = batchOps.map((op) => op.input);\n\n const url = getUrl({\n ...resolvedOpts,\n type,\n path,\n inputs,\n signal: null,\n });\n\n return url.length <= maxURLLength;\n },\n async fetch(batchOps) {\n const path = batchOps.map((op) => op.path).join(',');\n const inputs = batchOps.map((op) => op.input);\n const signal = allAbortSignals(...batchOps.map((op) => op.signal));\n\n const res = await jsonHttpRequester({\n ...resolvedOpts,\n path,\n inputs,\n type,\n headers() {\n if (!opts.headers) {\n return {};\n }\n if (typeof opts.headers === 'function') {\n return opts.headers({\n opList: batchOps as NonEmptyArray<Operation>,\n });\n }\n return opts.headers;\n },\n signal,\n });\n const resJSON = Array.isArray(res.json)\n ? res.json\n : batchOps.map(() => res.json);\n const result = resJSON.map((item) => ({\n meta: res.meta,\n json: item,\n }));\n return result;\n },\n };\n };\n\n const query = dataLoader(batchLoader('query'));\n const mutation = dataLoader(batchLoader('mutation'));\n\n const loaders = { query, mutation };\n return ({ op }) => {\n return observable((observer) => {\n /* istanbul ignore if -- @preserve */\n if (op.type === 'subscription') {\n throw new Error(\n 'Subscriptions are unsupported by `httpLink` - use `httpSubscriptionLink` or `wsLink`',\n );\n }\n const loader = loaders[op.type];\n const promise = loader.load(op);\n\n let _res = undefined as HTTPResult | undefined;\n promise\n .then((res) => {\n _res = res;\n const transformed = transformResult(\n res.json,\n resolvedOpts.transformer.output,\n );\n\n if (!transformed.ok) {\n observer.error(\n TRPCClientError.from(transformed.error, {\n meta: res.meta,\n }),\n );\n return;\n }\n observer.next({\n context: res.meta,\n result: transformed.result,\n });\n observer.complete();\n })\n .catch((err) => {\n observer.error(\n TRPCClientError.from(err, {\n meta: _res?.meta,\n }),\n );\n });\n\n return () => {\n // noop\n };\n });\n };\n };\n}\n","/// <reference lib=\"dom.iterable\" />\n\n// `dom.iterable` types are explicitly required for extracting `FormData` values,\n// as all implementations of `Symbol.iterable` are separated from the main `dom` types.\n// Using triple-slash directive makes sure that it will be available,\n// even if end-user `tsconfig.json` omits it in the `lib` array.\n\nimport { observable, tap } from '@trpc/server/observable';\nimport type {\n AnyRouter,\n InferrableClientTypes,\n} from '@trpc/server/unstable-core-do-not-import';\nimport type { TRPCClientError } from '../TRPCClientError';\nimport type { Operation, OperationResultEnvelope, TRPCLink } from './types';\n\ntype ConsoleEsque = {\n log: (...args: any[]) => void;\n error: (...args: any[]) => void;\n};\n\ntype EnableFnOptions<TRouter extends InferrableClientTypes> =\n | {\n direction: 'down';\n result:\n | OperationResultEnvelope<unknown, TRPCClientError<TRouter>>\n | TRPCClientError<TRouter>;\n }\n | (Operation & {\n direction: 'up';\n });\ntype EnabledFn<TRouter extends AnyRouter> = (\n opts: EnableFnOptions<TRouter>,\n) => boolean;\n\ntype LoggerLinkFnOptions<TRouter extends AnyRouter> = Operation &\n (\n | {\n /**\n * Request result\n */\n direction: 'down';\n result:\n | OperationResultEnvelope<unknown, TRPCClientError<TRouter>>\n | TRPCClientError<TRouter>;\n elapsedMs: number;\n }\n | {\n /**\n * Request was just initialized\n */\n direction: 'up';\n }\n );\n\ntype LoggerLinkFn<TRouter extends AnyRouter> = (\n opts: LoggerLinkFnOptions<TRouter>,\n) => void;\n\ntype ColorMode = 'ansi' | 'css' | 'none';\n\nexport interface LoggerLinkOptions<TRouter extends AnyRouter> {\n logger?: LoggerLinkFn<TRouter>;\n enabled?: EnabledFn<TRouter>;\n /**\n * Used in the built-in defaultLogger\n */\n console?: ConsoleEsque;\n /**\n * Color mode\n * @default typeof window === 'undefined' ? 'ansi' : 'css'\n */\n colorMode?: ColorMode;\n\n /**\n * Include context in the log - defaults to false unless `colorMode` is 'css'\n */\n withContext?: boolean;\n}\n\nfunction isFormData(value: unknown): value is FormData {\n if (typeof FormData === 'undefined') {\n // FormData is not supported\n return false;\n }\n return value instanceof FormData;\n}\n\nconst palettes = {\n css: {\n query: ['72e3ff', '3fb0d8'],\n mutation: ['c5a3fc', '904dfc'],\n subscription: ['ff49e1', 'd83fbe'],\n },\n ansi: {\n regular: {\n // Cyan background, black and white text respectively\n query: ['\\x1b[30;46m', '\\x1b[97;46m'],\n // Magenta background, black and white text respectively\n mutation: ['\\x1b[30;45m', '\\x1b[97;45m'],\n // Green background, black and white text respectively\n subscription: ['\\x1b[30;42m', '\\x1b[97;42m'],\n },\n bold: {\n query: ['\\x1b[1;30;46m', '\\x1b[1;97;46m'],\n mutation: ['\\x1b[1;30;45m', '\\x1b[1;97;45m'],\n subscription: ['\\x1b[1;30;42m', '\\x1b[1;97;42m'],\n },\n },\n} as const;\n\nfunction constructPartsAndArgs(\n opts: LoggerLinkFnOptions<any> & {\n colorMode: ColorMode;\n withContext?: boolean;\n },\n) {\n const { direction, type, withContext, path, id, input } = opts;\n\n const parts: string[] = [];\n const args: any[] = [];\n\n if (opts.colorMode === 'none') {\n parts.push(direction === 'up' ? '>>' : '<<', type, `#${id}`, path);\n } else if (opts.colorMode === 'ansi') {\n const [lightRegular, darkRegular] = palettes.ansi.regular[type];\n const [lightBold, darkBold] = palettes.ansi.bold[type];\n const reset = '\\x1b[0m';\n\n parts.push(\n direction === 'up' ? lightRegular : darkRegular,\n direction === 'up' ? '>>' : '<<',\n type,\n direction === 'up' ? lightBold : darkBold,\n `#${id}`,\n path,\n reset,\n );\n } else {\n // css color mode\n const [light, dark] = palettes.css[type];\n const css = `\n background-color: #${direction === 'up' ? light : dark};\n color: ${direction === 'up' ? 'black' : 'white'};\n padding: 2px;\n `;\n\n parts.push(\n '%c',\n direction === 'up' ? '>>' : '<<',\n type,\n `#${id}`,\n `%c${path}%c`,\n '%O',\n );\n args.push(\n css,\n `${css}; font-weight: bold;`,\n `${css}; font-weight: normal;`,\n );\n }\n\n if (direction === 'up') {\n args.push(withContext ? { input, context: opts.context } : { input });\n } else {\n args.push({\n input,\n result: opts.result,\n elapsedMs: opts.elapsedMs,\n ...(withContext && { context: opts.context }),\n });\n }\n\n return { parts, args };\n}\n\n// maybe this should be moved to it's own package\nconst defaultLogger =\n <TRouter extends AnyRouter>({\n c = console,\n colorMode = 'css',\n withContext,\n }: {\n c?: ConsoleEsque;\n colorMode?: ColorMode;\n withContext?: boolean;\n }): LoggerLinkFn<TRouter> =>\n (props) => {\n const rawInput = props.input;\n const input = isFormData(rawInput)\n ? Object.fromEntries(rawInput)\n : rawInput;\n\n const { parts, args } = constructPartsAndArgs({\n ...props,\n colorMode,\n input,\n withContext,\n });\n\n const fn: 'error' | 'log' =\n props.direction === 'down' &&\n props.result &&\n (props.result instanceof Error ||\n ('error' in props.result.result && props.result.result.error))\n ? 'error'\n : 'log';\n\n c[fn].apply(null, [parts.join(' ')].concat(args));\n };\n\n/**\n * @see https://trpc.io/docs/v11/client/links/loggerLink\n */\nexport function loggerLink<TRouter extends AnyRouter = AnyRouter>(\n opts: LoggerLinkOptions<TRouter> = {},\n): TRPCLink<TRouter> {\n const { enabled = () => true } = opts;\n\n const colorMode =\n opts.colorMode ?? (typeof window === 'undefined' ? 'ansi' : 'css');\n const withContext = opts.withContext ?? colorMode === 'css';\n const {\n logger = defaultLogger({ c: opts.console, colorMode, withContext }),\n } = opts;\n\n return () => {\n return ({ op, next }) => {\n return observable((observer) => {\n // ->\n if (enabled({ ...op, direction: 'up' })) {\n logger({\n ...op,\n direction: 'up',\n });\n }\n const requestStartTime = Date.now();\n function logResult(\n result:\n | OperationResultEnvelope<unknown, TRPCClientError<TRouter>>\n | TRPCClientError<TRouter>,\n ) {\n const elapsedMs = Date.now() - requestStartTime;\n\n if (enabled({ ...op, direction: 'down', result })) {\n logger({\n ...op,\n direction: 'down',\n elapsedMs,\n result,\n });\n }\n }\n return next(op)\n .pipe(\n tap({\n next(result) {\n logResult(result);\n },\n error(result) {\n logResult(result);\n },\n }),\n )\n .subscribe(observer);\n });\n };\n };\n}\n","import type { Encoder } from '@trpc/server/adapters/ws';\n\nexport type { Encoder };\n\nexport const jsonEncoder: Encoder = {\n encode: (data) => JSON.stringify(data),\n decode: (data) => {\n if (typeof data !== 'string') {\n throw new Error(\n 'jsonEncoder received binary data. JSON uses text frames. ' +\n 'Use a binary encoder for binary data.',\n );\n }\n return JSON.parse(data);\n },\n};\n","import type { UrlOptionsWithConnectionParams } from '../../internals/urlWithConnectionParams';\nimport type { Encoder } from './encoder';\n\nexport interface WebSocketClientOptions extends UrlOptionsWithConnectionParams {\n /**\n * Ponyfill which WebSocket implementation to use\n */\n WebSocket?: typeof WebSocket;\n /**\n * The number of milliseconds before a reconnect is attempted.\n * @default {@link exponentialBackoff}\n */\n retryDelayMs?: (attemptIndex: number) => number;\n /**\n * Triggered when a WebSocket connection is established\n */\n onOpen?: () => void;\n /**\n * Triggered when a WebSocket connection encounters an error\n */\n onError?: (evt?: Event) => void;\n /**\n * Triggered when a WebSocket connection is closed\n */\n onClose?: (cause?: { code?: number }) => void;\n /**\n * Lazy mode will close the WebSocket automatically after a period of inactivity (no messages sent or received and no pending requests)\n */\n lazy?: {\n /**\n * Enable lazy mode\n * @default false\n */\n enabled: boolean;\n /**\n * Close the WebSocket after this many milliseconds\n * @default 0\n */\n closeMs: number;\n };\n /**\n * Send ping messages to the server and kill the connection if no pong message is returned\n */\n keepAlive?: {\n /**\n * @default false\n */\n enabled: boolean;\n /**\n * Send a ping message every this many milliseconds\n * @default 5_000\n */\n intervalMs?: number;\n /**\n * Close the WebSocket after this many milliseconds if the server does not respond\n * @default 1_000\n */\n pongTimeoutMs?: number;\n };\n /**\n * Custom encoder for wire encoding (e.g. custom binary formats)\n * @default jsonEncoder\n */\n experimental_encoder?: Encoder;\n}\n\n/**\n * Default options for lazy WebSocket connections.\n * Determines whether the connection should be established lazily and defines the delay before closure.\n */\nexport type LazyOptions = Required<NonNullable<WebSocketClientOptions['lazy']>>;\nexport const lazyDefaults: LazyOptions = {\n enabled: false,\n closeMs: 0,\n};\n\n/**\n * Default options for the WebSocket keep-alive mechanism.\n * Configures whether keep-alive is enabled and specifies the timeout and interval for ping-pong messages.\n */\nexport type KeepAliveOptions = Required<\n NonNullable<WebSocketClientOptions['keepAlive']>\n>;\nexport const keepAliveDefaults: KeepAliveOptions = {\n enabled: false,\n pongTimeoutMs: 1_000,\n intervalMs: 5_000,\n};\n\n/**\n * Calculates a delay for exponential backoff based on the retry attempt index.\n * The delay starts at 0 for the first attempt and doubles for each subsequent attempt,\n * capped at 30 seconds.\n */\nexport const exponentialBackoff = (attemptIndex: number) => {\n return attemptIndex === 0 ? 0 : Math.min(1000 * 2 ** attemptIndex, 30000);\n};\n","import { type TRPCRequestInfo } from '@trpc/server/http';\n\n/**\n * Get the result of a value or function that returns a value\n * It also optionally accepts typesafe arguments for the function\n */\nexport const resultOf = <T, TArgs extends any[]>(\n value: T | ((...args: TArgs) => T),\n ...args: TArgs\n): T => {\n return typeof value === 'function'\n ? (value as (...args: TArgs) => T)(...args)\n : value;\n};\n\n/**\n * A value that can be wrapped in callback\n */\nexport type CallbackOrValue<T> = T | (() => T | Promise<T>);\n\nexport interface UrlOptionsWithConnectionParams {\n /**\n * The URL to connect to (can be a function that returns a URL)\n */\n url: CallbackOrValue<string>;\n\n /**\n * Connection params that are available in `createContext()`\n * - For `wsLink`/`wsClient`, these are sent as the first message\n * - For `httpSubscriptionLink`, these are serialized as part of the URL under the `connectionParams` query\n */\n connectionParams?: CallbackOrValue<TRPCRequestInfo['connectionParams']>;\n}\n","import type {\n TRPCConnectionParamsMessage,\n TRPCRequestInfo,\n} from '@trpc/server/unstable-core-do-not-import';\nimport type {\n CallbackOrValue,\n UrlOptionsWithConnectionParams,\n} from '../../internals/urlWithConnectionParams';\nimport { resultOf } from '../../internals/urlWithConnectionParams';\nimport type { Encoder } from './encoder';\n\nexport class TRPCWebSocketClosedError extends Error {\n constructor(opts: { message: string; cause?: unknown }) {\n super(opts.message, {\n cause: opts.cause,\n });\n this.name = 'TRPCWebSocketClosedError';\n Object.setPrototypeOf(this, TRPCWebSocketClosedError.prototype);\n }\n}\n\n/**\n * Utility class for managing a timeout that can be started, stopped, and reset.\n * Useful for scenarios where the timeout duration is reset dynamically based on events.\n */\nexport class ResettableTimeout {\n private timeout: ReturnType<typeof setTimeout> | undefined;\n\n constructor(\n private readonly onTimeout: () => void,\n private readonly timeoutMs: number,\n ) {}\n\n /**\n * Resets the current timeout, restarting it with the same duration.\n * Does nothing if no timeout is active.\n */\n public reset() {\n if (!this.timeout) return;\n\n clearTimeout(this.timeout);\n this.timeout = setTimeout(this.onTimeout, this.timeoutMs);\n }\n\n public start() {\n clearTimeout(this.timeout);\n this.timeout = setTimeout(this.onTimeout, this.timeoutMs);\n }\n\n public stop() {\n clearTimeout(this.timeout);\n this.timeout = undefined;\n }\n}\n\n// Ponyfill for Promise.withResolvers https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers\nexport function withResolvers<T>() {\n let resolve: (value: T | PromiseLike<T>) => void;\n let reject: (reason?: any) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return { promise, resolve: resolve!, reject: reject! };\n}\n\n/**\n * Resolves a WebSocket URL and optionally appends connection parameters.\n *\n * If connectionParams are provided, appends 'connectionParams=1' query parameter.\n */\nexport async function prepareUrl(urlOptions: UrlOptionsWithConnectionParams) {\n const url = await resultOf(urlOptions.url);\n\n if (!urlOptions.connectionParams) return url;\n\n // append `?connectionParams=1` when connection params are used\n const prefix = url.includes('?') ? '&' : '?';\n const connectionParams = `${prefix}connectionParams=1`;\n\n return url + connectionParams;\n}\n\nexport async function buildConnectionMessage(\n connectionParams: CallbackOrValue<TRPCRequestInfo['connectionParams']>,\n encoder: Encoder,\n) {\n const message: TRPCConnectionParamsMessage = {\n method: 'connectionParams',\n data: await resultOf(connectionParams),\n };\n\n return encoder.encode(message);\n}\n","import type { AnyTRPCRouter, inferRouterError } from '@trpc/server';\nimport type { Observer } from '@trpc/server/observable';\nimport type {\n TRPCClientOutgoingMessage,\n TRPCResponseMessage,\n} from '@trpc/server/unstable-core-do-not-import';\nimport type { TRPCClientError } from '../../../TRPCClientError';\nimport { withResolvers } from './utils';\n\nexport type TCallbacks = Observer<\n TRPCResponseMessage<unknown, inferRouterError<AnyTRPCRouter>>,\n TRPCClientError<AnyTRPCRouter>\n>;\n\ntype MessageId = string;\ntype MessageIdLike = string | number | null;\n\n/**\n * Represents a WebSocket request managed by the RequestManager.\n * Combines the network message, a utility promise (`end`) that mirrors the lifecycle\n * handled by `callbacks`, and a set of state monitoring callbacks.\n */\ninterface Request {\n message: TRPCClientOutgoingMessage;\n end: Promise<void>;\n callbacks: TCallbacks;\n}\n\n/**\n * Manages WebSocket requests, tracking their lifecycle and providing utility methods\n * for handling outgoing and pending requests.\n *\n * - **Outgoing requests**: Requests that are queued and waiting to be sent.\n * - **Pending requests**: Requests that have been sent and are in flight awaiting a response.\n * For subscriptions, multiple responses may be received until the subscription is closed.\n */\nexport class RequestManager {\n /**\n * Stores requests that are outgoing, meaning they are registered but not yet sent over the WebSocket.\n */\n private outgoingRequests = new Array<Request & { id: MessageId }>();\n\n /**\n * Stores requests that are pending (in flight), meaning they have been sent over the WebSocket\n * and are awaiting responses. For subscriptions, this includes requests\n * that may receive multiple responses.\n */\n private pendingRequests: Record<MessageId, Request> = {};\n\n /**\n * Registers a new request by adding it to the outgoing queue and setting up\n * callbacks for lifecycle events such as completion or error.\n *\n * @param message - The outgoing message to be sent.\n * @param callbacks - Callback functions to observe the request's state.\n * @returns A cleanup function to manually remove the request.\n */\n public register(message: TRPCClientOutgoingMessage, callbacks: TCallbacks) {\n const { promise: end, resolve } = withResolvers<void>();\n\n this.outgoingRequests.push({\n id: String(message.id),\n message,\n end,\n callbacks: {\n next: callbacks.next,\n complete: () => {\n callbacks.complete();\n resolve();\n },\n error: (e) => {\n callbacks.error(e);\n resolve();\n },\n },\n });\n\n return () => {\n this.delete(message.id);\n callbacks.complete();\n resolve();\n };\n }\n\n /**\n * Deletes a request from both the outgoing and pending collections, if it exists.\n */\n public delete(messageId: MessageIdLike) {\n if (messageId === null) return;\n\n this.outgoingRequests = this.outgoingRequests.filter(\n ({ id }) => id !== String(messageId),\n );\n delete this.pendingRequests[String(messageId)];\n }\n\n /**\n * Moves all outgoing requests to the pending state and clears the outgoing queue.\n *\n * The caller is expected to handle the actual sending of the requests\n * (e.g., sending them over the network) after this method is called.\n *\n * @returns The list of requests that were transitioned to the pending state.\n */\n public flush() {\n const requests = this.outgoingRequests;\n this.outgoingRequests = [];\n\n for (const request of requests) {\n this.pendingRequests[request.id] = request;\n }\n return requests;\n }\n\n /**\n * Retrieves all currently pending requests, which are in flight awaiting responses\n * or handling ongoing subscriptions.\n */\n public getPendingRequests() {\n return Object.values(this.pendingRequests);\n }\n\n /**\n * Retrieves a specific pending request by its message ID.\n */\n public getPendingRequest(messageId: MessageIdLike) {\n if (messageId === null) return null;\n\n return this.pendingRequests[String(messageId)];\n }\n\n /**\n * Retrieves all outgoing requests, which are waiting to be sent.\n */\n public getOutgoingRequests() {\n return this.outgoingRequests;\n }\n\n /**\n * Retrieves all requests, both outgoing and pending, with their respective states.\n *\n * @returns An array of all requests with their state (\"outgoing\" or \"pending\").\n */\n public getRequests() {\n return [\n ...this.getOutgoingRequests().map((request) => ({\n state: 'outgoing' as const,\n message: request.message,\n end: request.end,\n callbacks: request.callbacks,\n })),\n ...this.getPendingRequests().map((request) => ({\n state: 'pending' as const,\n message: request.message,\n end: request.end,\n callbacks: request.callbacks,\n })),\n ];\n }\n\n /**\n * Checks if there are any pending requests, including ongoing subscriptions.\n */\n public hasPendingRequests() {\n return this.getPendingRequests().length > 0;\n }\n\n /**\n * Checks if there are any pending subscriptions\n */\n public hasPendingSubscriptions() {\n return this.getPendingRequests().some(\n (request) => request.message.method === 'subscription',\n );\n }\n\n /**\n * Checks if there are any outgoing requests waiting to be sent.\n */\n public hasOutgoingRequests() {\n return this.outgoingRequests.length > 0;\n }\n}\n","import { behaviorSubject } from '@trpc/server/observable';\nimport type { UrlOptionsWithConnectionParams } from '../../internals/urlWithConnectionParams';\nimport type { Encoder } from './encoder';\nimport { buildConnectionMessage, prepareUrl, withResolvers } from './utils';\n\n/**\n * Opens a WebSocket connection asynchronously and returns a promise\n * that resolves when the connection is successfully established.\n * The promise rejects if an error occurs during the connection attempt.\n */\nfunction asyncWsOpen(ws: WebSocket) {\n const { promise, resolve, reject } = withResolvers<void>();\n\n ws.addEventListener('open', () => {\n ws.removeEventListener('error', reject);\n resolve();\n });\n ws.addEventListener('error', reject);\n\n return promise;\n}\n\ninterface PingPongOptions {\n /**\n * The interval (in milliseconds) between \"PING\" messages.\n */\n intervalMs: number;\n\n /**\n * The timeout (in milliseconds) to wait for a \"PONG\" response before closing the connection.\n */\n pongTimeoutMs: number;\n}\n\n/**\n * Sets up a periodic ping-pong mechanism to keep the WebSocket connection alive.\n *\n * - Sends \"PING\" messages at regular intervals defined by `intervalMs`.\n * - If a \"PONG\" response is not received within the `pongTimeoutMs`, the WebSocket is closed.\n * - The ping timer resets upon receiving any message to maintain activity.\n * - Automatically starts the ping process when the WebSocket connection is opened.\n * - Cleans up timers when the WebSocket is closed.\n *\n * @param ws - The WebSocket instance to manage.\n * @param options - Configuration options for ping-pong intervals and timeouts.\n */\nfunction setupPingInterval(\n ws: WebSocket,\n { intervalMs, pongTimeoutMs }: PingPongOptions,\n) {\n let pingTimeout: ReturnType<typeof setTimeout> | undefined;\n let pongTimeout: ReturnType<typeof setTimeout> | undefined;\n\n function start() {\n pingTimeout = setTimeout(() => {\n ws.send('PING');\n pongTimeout = setTimeout(() => {\n ws.close();\n }, pongTimeoutMs);\n }, intervalMs);\n }\n\n function reset() {\n clearTimeout(pingTimeout);\n start();\n }\n\n function pong() {\n clearTimeout(pongTimeout);\n reset();\n }\n\n ws.addEventListener('open', start);\n ws.addEventListener('message', ({ data }) => {\n clearTimeout(pingTimeout);\n start();\n\n if (data === 'PONG') {\n pong();\n }\n });\n ws.addEventListener('close', () => {\n clearTimeout(pingTimeout);\n clearTimeout(pongTimeout);\n });\n}\n\nexport interface WebSocketConnectionOptions {\n WebSocketPonyfill?: typeof WebSocket;\n urlOptions: UrlOptionsWithConnectionParams;\n keepAlive: PingPongOptions & {\n enabled: boolean;\n };\n encoder: Encoder;\n}\n\n/**\n * Manages a WebSocket connection with support for reconnection, keep-alive mechanisms,\n * and observable state tracking.\n */\nexport class WsConnection {\n static connectCount = 0;\n public id = ++WsConnection.connectCount;\n\n private readonly WebSocketPonyfill: typeof WebSocket;\n private readonly urlOptions: UrlOptionsWithConnectionParams;\n private readonly keepAliveOpts: WebSocketConnectionOptions['keepAlive'];\n private readonly encoder: Encoder;\n public readonly wsObservable = behaviorSubject<WebSocket | null>(null);\n\n constructor(opts: WebSocketConnectionOptions) {\n this.WebSocketPonyfill = opts.WebSocketPonyfill ?? WebSocket;\n if (!this.WebSocketPonyfill) {\n throw new Error(\n \"No WebSocket implementation found - you probably don't want to use this on the server, but if you do you need to pass a `WebSocket`-ponyfill\",\n );\n }\n\n this.urlOptions = opts.urlOptions;\n this.keepAliveOpts = opts.keepAlive;\n this.encoder = opts.encoder;\n }\n\n public get ws() {\n return this.wsObservable.get();\n }\n\n private set ws(ws) {\n this.wsObservable.next(ws);\n }\n\n /**\n * Checks if the WebSocket connection is open and ready to communicate.\n */\n public isOpen(): this is { ws: WebSocket } {\n return (\n !!this.ws &&\n this.ws.readyState === this.WebSocketPonyfill.OPEN &&\n !this.openPromise\n );\n }\n\n /**\n * Checks if the WebSocket connection is closed or in the process of closing.\n */\n public isClosed(): this is { ws: WebSocket } {\n return (\n !!this.ws &&\n (this.ws.readyState === this.WebSocketPonyfill.CLOSING ||\n this.ws.readyState === this.WebSocketPonyfill.CLOSED)\n );\n }\n\n /**\n * Manages the WebSocket opening process, ensuring that only one open operation\n * occurs at a time. Tracks the ongoing operation with `openPromise` to avoid\n * redundant calls and ensure proper synchronization.\n *\n * Sets up the keep-alive mechanism and necessary event listeners for the connection.\n *\n * @returns A promise that resolves once the WebSocket connection is successfully opened.\n */\n private openPromise: Promise<void> | null = null;\n public async open() {\n if (this.openPromise) return this.openPromise;\n\n this.id = ++WsConnection.connectCount;\n const wsPromise = prepareUrl(this.urlOptions).then(\n (url) => new this.WebSocketPonyfill(url),\n );\n this.openPromise = wsPromise.then(async (ws) => {\n this.ws = ws;\n\n // Set binaryType to handle both text and binary messages consistently\n ws.binaryType = 'arraybuffer';\n\n // Setup ping listener\n ws.addEventListener('message', function ({ data }) {\n if (data === 'PING') {\n this.send('PONG');\n }\n });\n\n if (this.keepAliveOpts.enabled) {\n setupPingInterval(ws, this.keepAliveOpts);\n }\n\n ws.addEventListener('close', () => {\n if (this.ws === ws) {\n this.ws = null;\n }\n });\n\n await asyncWsOpen(ws);\n\n if (this.urlOptions.connectionParams) {\n ws.send(\n await buildConnectionMessage(\n this.urlOptions.connectionParams,\n this.encoder,\n ),\n );\n }\n });\n\n try {\n await this.openPromise;\n } finally {\n this.openPromise = null;\n }\n }\n\n /**\n * Closes the WebSocket connection gracefully.\n * Waits for any ongoing open operation to complete before closing.\n */\n public async close() {\n try {\n await this.openPromise;\n } finally {\n this.ws?.close();\n }\n }\n}\n\n/**\n * Provides a backward-compatible representation of the connection state.\n */\nexport function backwardCompatibility(connection: WsConnection) {\n if (connection.isOpen()) {\n return {\n id: connection.id,\n state: 'open',\n ws: connection.ws,\n } as const;\n }\n\n if (connection.isClosed()) {\n return {\n id: connection.id,\n state: 'closed',\n ws: connection.ws,\n } as const;\n }\n\n if (!connection.ws) {\n return null;\n }\n\n return {\n id: connection.id,\n state: 'connecting',\n ws: connection.ws,\n } as const;\n}\n","import type { AnyTRPCRouter } from '@trpc/server';\nimport type { BehaviorSubject } from '@trpc/server/observable';\nimport { behaviorSubject, observable } from '@trpc/server/observable';\nimport type {\n CombinedDataTransformer,\n TRPCClientIncomingMessage,\n TRPCClientIncomingRequest,\n TRPCClientOutgoingMessage,\n TRPCResponseMessage,\n} from '@trpc/server/unstable-core-do-not-import';\nimport {\n run,\n sleep,\n transformResult,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { TRPCClientError } from '../../../TRPCClientError';\nimport type { TRPCConnectionState } from '../../internals/subscriptions';\nimport type { Operation, OperationResultEnvelope } from '../../types';\nimport type { Encoder } from './encoder';\nimport { jsonEncoder } from './encoder';\nimport type { WebSocketClientOptions } from './options';\nimport { exponentialBackoff, keepAliveDefaults, lazyDefaults } from './options';\nimport type { TCallbacks } from './requestManager';\nimport { RequestManager } from './requestManager';\nimport { ResettableTimeout, TRPCWebSocketClosedError } from './utils';\nimport { backwardCompatibility, WsConnection } from './wsConnection';\n\n/**\n * A WebSocket client for managing TRPC operations, supporting lazy initialization,\n * reconnection, keep-alive, and request management.\n */\nexport class WsClient {\n /**\n * Observable tracking the current connection state, including errors.\n */\n public readonly connectionState: BehaviorSubject<\n TRPCConnectionState<TRPCClientError<AnyTRPCRouter>>\n >;\n\n private allowReconnect = false;\n private requestManager = new RequestManager();\n private readonly activeConnection: WsConnection;\n private readonly reconnectRetryDelay: (attemptIndex: number) => number;\n private inactivityTimeout: ResettableTimeout;\n private readonly callbacks: Pick<\n WebSocketClientOptions,\n 'onOpen' | 'onClose' | 'onError'\n >;\n private readonly lazyMode: boolean;\n private readonly encoder: Encoder;\n\n constructor(opts: WebSocketClientOptions) {\n this.encoder = opts.experimental_encoder ?? jsonEncoder;\n // Initialize callbacks, connection parameters, and options.\n this.callbacks = {\n onOpen: opts.onOpen,\n onClose: opts.onClose,\n onError: opts.onError,\n };\n\n const lazyOptions = {\n ...lazyDefaults,\n ...opts.lazy,\n };\n\n // Set up inactivity timeout for lazy connections.\n this.inactivityTimeout = new ResettableTimeout(() => {\n if (\n this.requestManager.hasOutgoingRequests() ||\n this.requestManager.hasPendingRequests()\n ) {\n this.inactivityTimeout.reset();\n return;\n }\n\n this.close().catch(() => null);\n }, lazyOptions.closeMs);\n\n // Initialize the WebSocket connection.\n this.activeConnection = new WsConnection({\n WebSocketPonyfill: opts.WebSocket,\n urlOptions: opts,\n keepAlive: {\n ...keepAliveDefaults,\n ...opts.keepAlive,\n },\n encoder: this.encoder,\n });\n this.activeConnection.wsObservable.subscribe({\n next: (ws) => {\n if (!ws) return;\n this.setupWebSocketListeners(ws);\n },\n });\n this.reconnectRetryDelay = opts.retryDelayMs ?? exponentialBackoff;\n\n this.lazyMode = lazyOptions.enabled;\n\n this.connectionState = behaviorSubject<\n TRPCConnectionState<TRPCClientError<AnyTRPCRouter>>\n >({\n type: 'state',\n state: lazyOptions.enabled ? 'idle' : 'connecting',\n error: null,\n });\n\n // Automatically open the connection if lazy mode is disabled.\n if (!this.lazyMode) {\n this.open().catch(() => null);\n }\n }\n\n /**\n * Opens the WebSocket connection. Handles reconnection attempts and updates\n * the connection state accordingly.\n */\n private async open() {\n this.allowReconnect = true;\n if (this.connectionState.get().state === 'idle') {\n this.connectionState.next({\n type: 'state',\n state: 'connecting',\n error: null,\n });\n }\n\n try {\n await this.activeConnection.open();\n } catch (error) {\n this.reconnect(\n new TRPCWebSocketClosedError({\n message: 'Initialization error',\n cause: error,\n }),\n );\n return this.reconnecting;\n }\n }\n\n /**\n * Closes the WebSocket connection and stops managing requests.\n * Ensures all outgoing and pending requests are properly finalized.\n */\n public async close() {\n this.allowReconnect = false;\n this.inactivityTimeout.stop();\n\n const requestsToAwait: Promise<void>[] = [];\n for (const request of this.requestManager.getRequests()) {\n if (request.message.method === 'subscription') {\n request.callbacks.complete();\n } else if (request.state === 'outgoing') {\n request.callbacks.error(\n TRPCClientError.from(\n new TRPCWebSocketClosedError({\n message: 'Closed before connection was established',\n }),\n ),\n );\n } else {\n requestsToAwait.push(request.end);\n }\n }\n\n await Promise.all(requestsToAwait).catch(() => null);\n await this.activeConnection.close().catch(() => null);\n\n this.connectionState.next({\n type: 'state',\n state: 'idle',\n error: null,\n });\n }\n\n /**\n * Method to request the server.\n * Handles data transformation, batching of requests, and subscription lifecycle.\n *\n * @param op - The operation details including id, type, path, input and signal\n * @param transformer - Data transformer for serializing requests and deserializing responses\n * @param lastEventId - Optional ID of the last received event for subscriptions\n *\n * @returns An observable that emits operation results and handles cleanup\n */\n public request({\n op: { id, type, path, input, signal },\n transformer,\n lastEventId,\n }: {\n op: Pick<Operation, 'id' | 'type' | 'path' | 'input' | 'signal'>;\n transformer: CombinedDataTransformer;\n lastEventId?: string;\n }) {\n return observable<\n OperationResultEnvelope<unknown, TRPCClientError<AnyTRPCRouter>>,\n TRPCClientError<AnyTRPCRouter>\n >((observer) => {\n const abort = this.batchSend(\n {\n id,\n method: type,\n params: {\n input: transformer.input.serialize(input),\n path,\n lastEventId,\n },\n },\n {\n ...observer,\n next(event) {\n const transformed = transformResult(event, transformer.output);\n\n if (!transformed.ok) {\n observer.error(TRPCClientError.from(transformed.error));\n return;\n }\n\n observer.next({\n result: transformed.result,\n });\n },\n },\n );\n\n return () => {\n abort();\n\n if (type === 'subscription' && this.activeConnection.isOpen()) {\n this.send({\n id,\n method: 'subscription.stop',\n });\n }\n\n signal?.removeEventListener('abort', abort);\n };\n });\n }\n\n public get connection() {\n return backwardCompatibility(this.activeConnection);\n }\n\n /**\n * Manages the reconnection process for the WebSocket using retry logic.\n * Ensures that only one reconnection attempt is active at a time by tracking the current\n * reconnection state in the `reconnecting` promise.\n */\n private reconnecting: Promise<void> | null = null;\n private reconnect(closedError: TRPCWebSocketClosedError) {\n this.connectionState.next({\n type: 'state',\n state: 'connecting',\n error: TRPCClientError.from(closedError),\n });\n if (this.reconnecting) return;\n\n const tryReconnect = async (attemptIndex: number) => {\n try {\n await sleep(this.reconnectRetryDelay(attemptIndex));\n if (this.allowReconnect) {\n await this.activeConnection.close();\n await this.activeConnection.open();\n\n if (this.requestManager.hasPendingRequests()) {\n this.send(\n this.requestManager\n .getPendingRequests()\n .map(({ message }) => message),\n );\n }\n }\n this.reconnecting = null;\n } catch {\n await tryReconnect(attemptIndex + 1);\n }\n };\n\n this.reconnecting = tryReconnect(0);\n }\n\n private setupWebSocketListeners(ws: WebSocket) {\n const handleCloseOrError = (cause: unknown) => {\n const reqs = this.requestManager.getPendingRequests();\n for (const { message, callbacks } of reqs) {\n if (message.method === 'subscription') continue;\n\n callbacks.error(\n TRPCClientError.from(\n cause ??\n new TRPCWebSocketClosedError({\n message: 'WebSocket closed',\n cause,\n }),\n ),\n );\n this.requestManager.delete(message.id);\n }\n };\n\n ws.addEventListener('open', () => {\n run(async () => {\n if (this.lazyMode) {\n this.inactivityTimeout.start();\n }\n\n this.callbacks.onOpen?.();\n\n this.connectionState.next({\n type: 'state',\n state: 'pending',\n error: null,\n });\n }).catch((error) => {\n ws.close(3000);\n handleCloseOrError(error);\n });\n });\n\n ws.addEventListener('message', ({ data }) => {\n this.inactivityTimeout.reset();\n\n // Handle PING/PONG as text regardless of encoder\n if (['PING', 'PONG'].includes(data)) return;\n\n const incomingMessage = this.encoder.decode(\n data,\n ) as TRPCClientIncomingMessage;\n if ('method' in incomingMessage) {\n this.handleIncomingRequest(incomingMessage);\n return;\n }\n\n this.handleResponseMessage(incomingMessage);\n });\n\n ws.addEventListener('close', (event) => {\n handleCloseOrError(event);\n this.callbacks.onClose?.(event);\n\n if (!this.lazyMode || this.requestManager.hasPendingSubscriptions()) {\n this.reconnect(\n new TRPCWebSocketClosedError({\n message: 'WebSocket closed',\n cause: event,\n }),\n );\n }\n });\n\n ws.addEventListener('error', (event) => {\n handleCloseOrError(event);\n this.callbacks.onError?.(event);\n\n this.reconnect(\n new TRPCWebSocketClosedError({\n message: 'WebSocket closed',\n cause: event,\n }),\n );\n });\n }\n\n private handleResponseMessage(message: TRPCResponseMessage) {\n const request = this.requestManager.getPendingRequest(message.id);\n if (!request) return;\n\n request.callbacks.next(message);\n\n let completed = true;\n if ('result' in message && request.message.method === 'subscription') {\n if (message.result.type === 'data') {\n request.message.params.lastEventId = message.result.id;\n }\n\n if (message.result.type !== 'stopped') {\n completed = false;\n }\n }\n\n if (completed) {\n request.callbacks.complete();\n this.requestManager.delete(message.id);\n }\n }\n\n private handleIncomingRequest(message: TRPCClientIncomingRequest) {\n if (message.method === 'reconnect') {\n this.reconnect(\n new TRPCWebSocketClosedError({\n message: 'Server requested reconnect',\n }),\n );\n }\n }\n\n /**\n * Sends a message or batch of messages directly to the server.\n */\n private send(\n messageOrMessages: TRPCClientOutgoingMessage | TRPCClientOutgoingMessage[],\n ) {\n if (!this.activeConnection.isOpen()) {\n throw new Error('Active connection is not open');\n }\n\n const messages =\n messageOrMessages instanceof Array\n ? messageOrMessages\n : [messageOrMessages];\n this.activeConnection.ws.send(\n this.encoder.encode(messages.length === 1 ? messages[0] : messages),\n );\n }\n\n /**\n * Groups requests for batch sending.\n *\n * @returns A function to abort the batched request.\n */\n private batchSend(message: TRPCClientOutgoingMessage, callbacks: TCallbacks) {\n this.inactivityTimeout.reset();\n\n run(async () => {\n if (!this.activeConnection.isOpen()) {\n await this.open();\n }\n await sleep(0);\n\n if (!this.requestManager.hasOutgoingRequests()) return;\n\n this.send(this.requestManager.flush().map(({ message }) => message));\n }).catch((err) => {\n this.requestManager.delete(message.id);\n callbacks.error(TRPCClientError.from(err));\n });\n\n return this.requestManager.register(message, callbacks);\n }\n}\n","import type { Encoder } from './wsClient/encoder';\nimport { jsonEncoder } from './wsClient/encoder';\nimport type { WebSocketClientOptions } from './wsClient/options';\nimport { WsClient } from './wsClient/wsClient';\n\nexport function createWSClient(opts: WebSocketClientOptions) {\n return new WsClient(opts);\n}\n\nexport type TRPCWebSocketClient = ReturnType<typeof createWSClient>;\n\nexport { jsonEncoder, type Encoder, type WebSocketClientOptions };\n","import { observable } from '@trpc/server/observable';\nimport type {\n AnyRouter,\n inferClientTypes,\n} from '@trpc/server/unstable-core-do-not-import';\nimport type { TransformerOptions } from '../../unstable-internals';\nimport { getTransformer } from '../../unstable-internals';\nimport type { TRPCLink } from '../types';\nimport type {\n Encoder,\n TRPCWebSocketClient,\n WebSocketClientOptions,\n} from './createWsClient';\nimport { createWSClient, jsonEncoder } from './createWsClient';\n\nexport type WebSocketLinkOptions<TRouter extends AnyRouter> = {\n client: TRPCWebSocketClient;\n} & TransformerOptions<inferClientTypes<TRouter>>;\n\nexport function wsLink<TRouter extends AnyRouter>(\n opts: WebSocketLinkOptions<TRouter>,\n): TRPCLink<TRouter> {\n const { client } = opts;\n const transformer = getTransformer(opts.transformer);\n return () => {\n return ({ op }) => {\n return observable((observer) => {\n const connStateSubscription =\n op.type === 'subscription'\n ? client.connectionState.subscribe({\n next(result) {\n observer.next({\n result,\n context: op.context,\n });\n },\n })\n : null;\n\n const requestSubscription = client\n .request({\n op,\n transformer,\n })\n .subscribe(observer);\n\n return () => {\n requestSubscription.unsubscribe();\n connStateSubscription?.unsubscribe();\n };\n });\n };\n };\n}\n\nexport {\n createWSClient,\n jsonEncoder,\n type Encoder,\n type TRPCWebSocketClient,\n type WebSocketClientOptions,\n};\n","import type {\n inferObservableValue,\n Unsubscribable,\n} from '@trpc/server/observable';\nimport { observableToPromise, share } from '@trpc/server/observable';\nimport type {\n AnyRouter,\n inferAsyncIterableYield,\n InferrableClientTypes,\n Maybe,\n TypeError,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { createChain } from '../links/internals/createChain';\nimport type { TRPCConnectionState } from '../links/internals/subscriptions';\nimport type {\n OperationContext,\n OperationLink,\n TRPCClientRuntime,\n TRPCLink,\n} from '../links/types';\nimport { TRPCClientError } from '../TRPCClientError';\n\ntype TRPCType = 'mutation' | 'query' | 'subscription';\nexport interface TRPCRequestOptions {\n /**\n * Pass additional context to links\n */\n context?: OperationContext;\n signal?: AbortSignal;\n}\n\nexport interface TRPCSubscriptionObserver<TValue, TError> {\n onStarted: (opts: { context: OperationContext | undefined }) => void;\n onData: (value: inferAsyncIterableYield<TValue>) => void;\n onError: (err: TError) => void;\n onStopped: () => void;\n onComplete: () => void;\n onConnectionStateChange: (state: TRPCConnectionState<TError>) => void;\n}\n\n/** @internal */\nexport type CreateTRPCClientOptions<TRouter extends InferrableClientTypes> = {\n links: TRPCLink<TRouter>[];\n transformer?: TypeError<'The transformer property has moved to httpLink/httpBatchLink/wsLink'>;\n};\n\nexport class TRPCUntypedClient<TInferrable extends InferrableClientTypes> {\n private readonly links: OperationLink<TInferrable>[];\n public readonly runtime: TRPCClientRuntime;\n private requestId: number;\n\n constructor(opts: CreateTRPCClientOptions<TInferrable>) {\n this.requestId = 0;\n\n this.runtime = {};\n\n // Initialize the links\n this.links = opts.links.map((link) => link(this.runtime));\n }\n\n private $request<TInput = unknown, TOutput = unknown>(opts: {\n type: TRPCType;\n input: TInput;\n path: string;\n context?: OperationContext;\n signal: Maybe<AbortSignal>;\n }) {\n const chain$ = createChain<AnyRouter, TInput, TOutput>({\n links: this.links as OperationLink<any, any, any>[],\n op: {\n ...opts,\n context: opts.context ?? {},\n id: ++this.requestId,\n },\n });\n return chain$.pipe(share());\n }\n\n private async requestAsPromise<TInput = unknown, TOutput = unknown>(opts: {\n type: TRPCType;\n input: TInput;\n path: string;\n context?: OperationContext;\n signal: Maybe<AbortSignal>;\n }): Promise<TOutput> {\n try {\n const req$ = this.$request<TInput, TOutput>(opts);\n type TValue = inferObservableValue<typeof req$>;\n\n const envelope = await observableToPromise<TValue>(req$);\n const data = (envelope.result as any).data;\n return data;\n } catch (err) {\n throw TRPCClientError.from(err as Error);\n }\n }\n public query(path: string, input?: unknown, opts?: TRPCRequestOptions) {\n return this.requestAsPromise<unknown, unknown>({\n type: 'query',\n path,\n input,\n context: opts?.context,\n signal: opts?.signal,\n });\n }\n public mutation(path: string, input?: unknown, opts?: TRPCRequestOptions) {\n return this.requestAsPromise<unknown, unknown>({\n type: 'mutation',\n path,\n input,\n context: opts?.context,\n signal: opts?.signal,\n });\n }\n public subscription(\n path: string,\n input: unknown,\n opts: Partial<\n TRPCSubscriptionObserver<unknown, TRPCClientError<AnyRouter>>\n > &\n TRPCRequestOptions,\n ): Unsubscribable {\n const observable$ = this.$request({\n type: 'subscription',\n path,\n input,\n context: opts.context,\n signal: opts.signal,\n });\n return observable$.subscribe({\n next(envelope) {\n switch (envelope.result.type) {\n case 'state': {\n opts.onConnectionStateChange?.(envelope.result);\n break;\n }\n case 'started': {\n opts.onStarted?.({\n context: envelope.context,\n });\n break;\n }\n case 'stopped': {\n opts.onStopped?.();\n break;\n }\n case 'data':\n case undefined: {\n opts.onData?.(envelope.result.data);\n break;\n }\n }\n },\n error(err) {\n opts.onError?.(err);\n },\n complete() {\n opts.onComplete?.();\n },\n });\n }\n}\n","import type { AnyRouter } from '@trpc/server/unstable-core-do-not-import';\nimport type { CreateTRPCClientOptions } from './internals/TRPCUntypedClient';\nimport { TRPCUntypedClient } from './internals/TRPCUntypedClient';\n\nexport function createTRPCUntypedClient<TRouter extends AnyRouter>(\n opts: CreateTRPCClientOptions<TRouter>,\n): TRPCUntypedClient<TRouter> {\n return new TRPCUntypedClient(opts);\n}\n\nexport type {\n CreateTRPCClientOptions,\n TRPCRequestOptions,\n} from './internals/TRPCUntypedClient';\nexport { TRPCUntypedClient } from './internals/TRPCUntypedClient';\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport type { Unsubscribable } from '@trpc/server/observable';\nimport type {\n AnyProcedure,\n AnyRouter,\n inferClientTypes,\n inferProcedureInput,\n InferrableClientTypes,\n inferTransformedProcedureOutput,\n ProcedureType,\n RouterRecord,\n} from '@trpc/server/unstable-core-do-not-import';\nimport {\n createFlatProxy,\n createRecursiveProxy,\n} from '@trpc/server/unstable-core-do-not-import';\nimport type { CreateTRPCClientOptions } from './createTRPCUntypedClient';\nimport type { TRPCSubscriptionObserver } from './internals/TRPCUntypedClient';\nimport { TRPCUntypedClient } from './internals/TRPCUntypedClient';\nimport type { TRPCProcedureOptions } from './internals/types';\nimport type { TRPCClientError } from './TRPCClientError';\n\n/**\n * @public\n * @deprecated use {@link TRPCClient} instead, will be removed in v12\n **/\nexport type inferRouterClient<TRouter extends AnyRouter> = TRPCClient<TRouter>;\n\n/**\n * @public\n * @deprecated use {@link TRPCClient} instead, will be removed in v12\n **/\nexport type CreateTRPCClient<TRouter extends AnyRouter> = TRPCClient<TRouter>;\n\nconst untypedClientSymbol = Symbol.for('trpc_untypedClient');\n\n/**\n * @public\n **/\nexport type TRPCClient<TRouter extends AnyRouter> = DecoratedProcedureRecord<\n {\n transformer: TRouter['_def']['_config']['$types']['transformer'];\n errorShape: TRouter['_def']['_config']['$types']['errorShape'];\n },\n TRouter['_def']['record']\n> & {\n [untypedClientSymbol]: TRPCUntypedClient<TRouter>;\n};\n\n/** @internal */\nexport type TRPCResolverDef = {\n input: any;\n output: any;\n transformer: boolean;\n errorShape: any;\n};\n\ntype coerceAsyncGeneratorToIterable<T> =\n T extends AsyncGenerator<infer $T, infer $Return, infer $Next>\n ? AsyncIterable<$T, $Return, $Next>\n : T;\n\n/** @internal */\nexport type Resolver<TDef extends TRPCResolverDef> = (\n input: TDef['input'],\n opts?: TRPCProcedureOptions,\n) => Promise<coerceAsyncGeneratorToIterable<TDef['output']>>;\n\n/** @internal */\nexport type SubscriptionResolver<TDef extends TRPCResolverDef> = (\n input: TDef['input'],\n opts: Partial<\n TRPCSubscriptionObserver<TDef['output'], TRPCClientError<TDef>>\n > &\n TRPCProcedureOptions,\n) => Unsubscribable;\n\ntype DecorateProcedure<\n TType extends ProcedureType,\n TDef extends TRPCResolverDef,\n> = TType extends 'query'\n ? {\n query: Resolver<TDef>;\n }\n : TType extends 'mutation'\n ? {\n mutate: Resolver<TDef>;\n }\n : TType extends 'subscription'\n ? {\n subscribe: SubscriptionResolver<TDef>;\n }\n : never;\n\n/**\n * @internal\n */\ntype DecoratedProcedureRecord<\n TRoot extends InferrableClientTypes,\n TRecord extends RouterRecord,\n> = {\n [TKey in keyof TRecord]: TRecord[TKey] extends infer $Value\n ? $Value extends AnyProcedure\n ? DecorateProcedure<\n $Value['_def']['type'],\n {\n input: inferProcedureInput<$Value>;\n output: inferTransformedProcedureOutput<\n inferClientTypes<TRoot>,\n $Value\n >;\n errorShape: inferClientTypes<TRoot>['errorShape'];\n transformer: inferClientTypes<TRoot>['transformer'];\n }\n >\n : $Value extends RouterRecord\n ? DecoratedProcedureRecord<TRoot, $Value>\n : never\n : never;\n};\n\nconst clientCallTypeMap: Record<\n keyof DecorateProcedure<any, any>,\n ProcedureType\n> = {\n query: 'query',\n mutate: 'mutation',\n subscribe: 'subscription',\n};\n\n/** @internal */\nexport const clientCallTypeToProcedureType = (\n clientCallType: string,\n): ProcedureType => {\n return clientCallTypeMap[clientCallType as keyof typeof clientCallTypeMap];\n};\n\n/**\n * @internal\n */\nexport function createTRPCClientProxy<TRouter extends AnyRouter>(\n client: TRPCUntypedClient<TRouter>,\n): TRPCClient<TRouter> {\n const proxy = createRecursiveProxy<TRPCClient<TRouter>>(({ path, args }) => {\n const pathCopy = [...path];\n const procedureType = clientCallTypeToProcedureType(pathCopy.pop()!);\n\n const fullPath = pathCopy.join('.');\n\n return (client[procedureType] as any)(fullPath, ...(args as any));\n });\n return createFlatProxy<TRPCClient<TRouter>>((key) => {\n if (key === untypedClientSymbol) {\n return client;\n }\n return proxy[key];\n });\n}\n\nexport function createTRPCClient<TRouter extends AnyRouter>(\n opts: CreateTRPCClientOptions<TRouter>,\n): TRPCClient<TRouter> {\n const client = new TRPCUntypedClient(opts);\n const proxy = createTRPCClientProxy<TRouter>(client);\n return proxy;\n}\n\n/**\n * Get an untyped client from a proxy client\n * @internal\n */\nexport function getUntypedClient<TRouter extends AnyRouter>(\n client: TRPCClient<TRouter>,\n): TRPCUntypedClient<TRouter> {\n return client[untypedClientSymbol];\n}\n","import type { AnyRouter, ProcedureType } from '@trpc/server';\nimport { observable } from '@trpc/server/observable';\nimport type { TRPCErrorShape, TRPCResponse } from '@trpc/server/rpc';\nimport type { AnyClientTypes } from '@trpc/server/unstable-core-do-not-import';\nimport { jsonlStreamConsumer } from '@trpc/server/unstable-core-do-not-import';\nimport type { BatchLoader } from '../internals/dataLoader';\nimport { dataLoader } from '../internals/dataLoader';\nimport { allAbortSignals, raceAbortSignals } from '../internals/signals';\nimport type { NonEmptyArray } from '../internals/types';\nimport { TRPCClientError } from '../TRPCClientError';\nimport type { HTTPBatchLinkOptions } from './HTTPBatchLinkOptions';\nimport type { HTTPResult } from './internals/httpUtils';\nimport {\n fetchHTTPResponse,\n getBody,\n getUrl,\n resolveHTTPLinkOptions,\n} from './internals/httpUtils';\nimport type { Operation, TRPCLink } from './types';\n\nexport type HTTPBatchStreamLinkOptions<TRoot extends AnyClientTypes> =\n HTTPBatchLinkOptions<TRoot> & {\n /**\n * Which header to use to signal the server that the client wants a streaming response.\n * - `'trpc-accept'` (default): sends `trpc-accept: application/jsonl` header\n * - `'accept'`: sends `Accept: application/jsonl` header, which can avoid CORS preflight for cross-origin streaming queries. Be aware that `application/jsonl` is not an official MIME type and so this is not completely spec-compliant - you should test that your infrastructure supports this value.\n * @default 'trpc-accept'\n */\n streamHeader?: 'trpc-accept' | 'accept';\n };\n\n/**\n * @see https://trpc.io/docs/client/links/httpBatchStreamLink\n */\nexport function httpBatchStreamLink<TRouter extends AnyRouter>(\n opts: HTTPBatchStreamLinkOptions<TRouter['_def']['_config']['$types']>,\n): TRPCLink<TRouter> {\n const resolvedOpts = resolveHTTPLinkOptions(opts);\n const maxURLLength = opts.maxURLLength ?? Infinity;\n const maxItems = opts.maxItems ?? Infinity;\n\n return () => {\n const batchLoader = (\n type: ProcedureType,\n ): BatchLoader<Operation, HTTPResult> => {\n return {\n validate(batchOps) {\n if (maxURLLength === Infinity && maxItems === Infinity) {\n // escape hatch for quick calcs\n return true;\n }\n if (batchOps.length > maxItems) {\n return false;\n }\n const path = batchOps.map((op) => op.path).join(',');\n const inputs = batchOps.map((op) => op.input);\n\n const url = getUrl({\n ...resolvedOpts,\n type,\n path,\n inputs,\n signal: null,\n });\n\n return url.length <= maxURLLength;\n },\n async fetch(batchOps) {\n const path = batchOps.map((op) => op.path).join(',');\n const inputs = batchOps.map((op) => op.input);\n\n const batchSignals = allAbortSignals(\n ...batchOps.map((op) => op.signal),\n );\n const abortController = new AbortController();\n\n const responsePromise = fetchHTTPResponse({\n ...resolvedOpts,\n signal: raceAbortSignals(batchSignals, abortController.signal),\n type,\n contentTypeHeader: 'application/json',\n trpcAcceptHeader: 'application/jsonl',\n trpcAcceptHeaderKey: opts.streamHeader ?? 'trpc-accept',\n getUrl,\n getBody,\n inputs,\n path,\n headers() {\n if (!opts.headers) {\n return {};\n }\n if (typeof opts.headers === 'function') {\n return opts.headers({\n opList: batchOps as NonEmptyArray<Operation>,\n });\n }\n return opts.headers;\n },\n });\n\n const res = await responsePromise;\n const [head] = await jsonlStreamConsumer<\n Record<string, Promise<any>>\n >({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n from: res.body!,\n deserialize: (data) =>\n resolvedOpts.transformer.output.deserialize(data),\n // onError: console.error,\n formatError(opts) {\n const error = opts.error as TRPCErrorShape;\n return TRPCClientError.from({\n error,\n });\n },\n abortController,\n });\n const promises = Object.keys(batchOps).map(\n async (key): Promise<HTTPResult> => {\n let json: TRPCResponse = await Promise.resolve(head[key]);\n\n if ('result' in json) {\n /**\n * Not very pretty, but we need to unwrap nested data as promises\n * Our stream producer will only resolve top-level async values or async values that are directly nested in another async value\n */\n const result = await Promise.resolve(json.result);\n json = {\n result: {\n data: await Promise.resolve(result.data),\n },\n };\n }\n\n return {\n json,\n meta: {\n response: res,\n },\n };\n },\n );\n return promises;\n },\n };\n };\n\n const query = dataLoader(batchLoader('query'));\n const mutation = dataLoader(batchLoader('mutation'));\n\n const loaders = { query, mutation };\n return ({ op }) => {\n return observable((observer) => {\n /* istanbul ignore if -- @preserve */\n if (op.type === 'subscription') {\n throw new Error(\n 'Subscriptions are unsupported by `httpBatchStreamLink` - use `httpSubscriptionLink` or `wsLink`',\n );\n }\n const loader = loaders[op.type];\n const promise = loader.load(op);\n\n let _res = undefined as HTTPResult | undefined;\n promise\n .then((res) => {\n _res = res;\n if ('error' in res.json) {\n observer.error(\n TRPCClientError.from(res.json, {\n meta: res.meta,\n }),\n );\n return;\n } else if ('result' in res.json) {\n observer.next({\n context: res.meta,\n result: res.json.result,\n });\n observer.complete();\n return;\n }\n\n observer.complete();\n })\n .catch((err) => {\n observer.error(\n TRPCClientError.from(err, {\n meta: _res?.meta,\n }),\n );\n });\n\n return () => {\n // noop\n };\n });\n };\n };\n}\n\n/**\n * @deprecated use {@link httpBatchStreamLink} instead\n */\nexport const unstable_httpBatchStreamLink = httpBatchStreamLink;\n","export function inputWithTrackedEventId(\n input: unknown,\n lastEventId: string | undefined,\n) {\n if (!lastEventId) {\n return input;\n }\n if (input != null && typeof input !== 'object') {\n return input;\n }\n return {\n ...(input ?? {}),\n lastEventId,\n };\n}\n","function _asyncIterator(r) {\n var n,\n t,\n o,\n e = 2;\n for (\"undefined\" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) {\n if (t && null != (n = r[t])) return n.call(r);\n if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r));\n t = \"@@asyncIterator\", o = \"@@iterator\";\n }\n throw new TypeError(\"Object is not async iterable\");\n}\nfunction AsyncFromSyncIterator(r) {\n function AsyncFromSyncIteratorContinuation(r) {\n if (Object(r) !== r) return Promise.reject(new TypeError(r + \" is not an object.\"));\n var n = r.done;\n return Promise.resolve(r.value).then(function (r) {\n return {\n value: r,\n done: n\n };\n });\n }\n return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) {\n this.s = r, this.n = r.next;\n }, AsyncFromSyncIterator.prototype = {\n s: null,\n n: null,\n next: function next() {\n return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));\n },\n \"return\": function _return(r) {\n var n = this.s[\"return\"];\n return void 0 === n ? Promise.resolve({\n value: r,\n done: !0\n }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));\n },\n \"throw\": function _throw(r) {\n var n = this.s[\"return\"];\n return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));\n }\n }, new AsyncFromSyncIterator(r);\n}\nmodule.exports = _asyncIterator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { behaviorSubject, observable } from '@trpc/server/observable';\nimport type { TRPCErrorShape, TRPCResult } from '@trpc/server/rpc';\nimport type {\n AnyClientTypes,\n EventSourceLike,\n inferClientTypes,\n InferrableClientTypes,\n} from '@trpc/server/unstable-core-do-not-import';\nimport {\n retryableRpcCodes,\n run,\n sseStreamConsumer,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { inputWithTrackedEventId } from '../internals/inputWithTrackedEventId';\nimport { raceAbortSignals } from '../internals/signals';\nimport { TRPCClientError } from '../TRPCClientError';\nimport type { TRPCConnectionState } from '../unstable-internals';\nimport { getTransformer, type TransformerOptions } from '../unstable-internals';\nimport { getUrl } from './internals/httpUtils';\nimport {\n resultOf,\n type UrlOptionsWithConnectionParams,\n} from './internals/urlWithConnectionParams';\nimport type { Operation, TRPCLink } from './types';\n\nasync function urlWithConnectionParams(\n opts: UrlOptionsWithConnectionParams,\n): Promise<string> {\n let url = await resultOf(opts.url);\n if (opts.connectionParams) {\n const params = await resultOf(opts.connectionParams);\n\n const prefix = url.includes('?') ? '&' : '?';\n url +=\n prefix + 'connectionParams=' + encodeURIComponent(JSON.stringify(params));\n }\n\n return url;\n}\n\ntype HTTPSubscriptionLinkOptions<\n TRoot extends AnyClientTypes,\n TEventSource extends EventSourceLike.AnyConstructor = typeof EventSource,\n> = {\n /**\n * EventSource ponyfill\n */\n EventSource?: TEventSource;\n /**\n * EventSource options or a callback that returns them\n */\n eventSourceOptions?:\n | EventSourceLike.InitDictOf<TEventSource>\n | ((opts: {\n op: Operation;\n }) =>\n | EventSourceLike.InitDictOf<TEventSource>\n | Promise<EventSourceLike.InitDictOf<TEventSource>>);\n} & TransformerOptions<TRoot> &\n UrlOptionsWithConnectionParams;\n\n/**\n * @see https://trpc.io/docs/client/links/httpSubscriptionLink\n */\nexport function httpSubscriptionLink<\n TInferrable extends InferrableClientTypes,\n TEventSource extends EventSourceLike.AnyConstructor,\n>(\n opts: HTTPSubscriptionLinkOptions<\n inferClientTypes<TInferrable>,\n TEventSource\n >,\n): TRPCLink<TInferrable> {\n const transformer = getTransformer(opts.transformer);\n\n return () => {\n return ({ op }) => {\n return observable((observer) => {\n const { type, path, input } = op;\n\n /* istanbul ignore if -- @preserve */\n if (type !== 'subscription') {\n throw new Error('httpSubscriptionLink only supports subscriptions');\n }\n\n let lastEventId: string | undefined = undefined;\n const ac = new AbortController();\n const signal = raceAbortSignals(op.signal, ac.signal);\n const eventSourceStream = sseStreamConsumer<{\n EventSource: TEventSource;\n data: Partial<{\n id?: string;\n data: unknown;\n }>;\n error: TRPCErrorShape;\n }>({\n url: async () =>\n getUrl({\n transformer,\n url: await urlWithConnectionParams(opts),\n input: inputWithTrackedEventId(input, lastEventId),\n path,\n type,\n signal: null,\n }),\n init: () => resultOf(opts.eventSourceOptions, { op }),\n signal,\n deserialize: (data) => transformer.output.deserialize(data),\n EventSource:\n opts.EventSource ??\n (globalThis.EventSource as never as TEventSource),\n });\n\n const connectionState = behaviorSubject<\n TRPCConnectionState<TRPCClientError<any>>\n >({\n type: 'state',\n state: 'connecting',\n error: null,\n });\n\n const connectionSub = connectionState.subscribe({\n next(state) {\n observer.next({\n result: state,\n });\n },\n });\n run(async () => {\n for await (const chunk of eventSourceStream) {\n switch (chunk.type) {\n case 'ping':\n // do nothing\n break;\n case 'data':\n const chunkData = chunk.data;\n\n let result: TRPCResult<unknown>;\n if (chunkData.id) {\n // if the `tracked()`-helper is used, we always have an `id` field\n lastEventId = chunkData.id;\n result = {\n id: chunkData.id,\n data: chunkData,\n };\n } else {\n result = {\n data: chunkData.data,\n };\n }\n\n observer.next({\n result,\n context: {\n eventSource: chunk.eventSource,\n },\n });\n break;\n case 'connected': {\n observer.next({\n result: {\n type: 'started',\n },\n context: {\n eventSource: chunk.eventSource,\n },\n });\n connectionState.next({\n type: 'state',\n state: 'pending',\n error: null,\n });\n break;\n }\n case 'serialized-error': {\n const error = TRPCClientError.from({ error: chunk.error });\n\n if (retryableRpcCodes.includes(chunk.error.code)) {\n //\n connectionState.next({\n type: 'state',\n state: 'connecting',\n error,\n });\n break;\n }\n //\n // non-retryable error, cancel the subscription\n throw error;\n }\n case 'connecting': {\n const lastState = connectionState.get();\n\n const error = chunk.event && TRPCClientError.from(chunk.event);\n if (!error && lastState.state === 'connecting') {\n break;\n }\n\n connectionState.next({\n type: 'state',\n state: 'connecting',\n error,\n });\n break;\n }\n case 'timeout': {\n connectionState.next({\n type: 'state',\n state: 'connecting',\n error: new TRPCClientError(\n `Timeout of ${chunk.ms}ms reached while waiting for a response`,\n ),\n });\n }\n }\n }\n observer.next({\n result: {\n type: 'stopped',\n },\n });\n connectionState.next({\n type: 'state',\n state: 'idle',\n error: null,\n });\n observer.complete();\n }).catch((error) => {\n observer.error(TRPCClientError.from(error));\n });\n\n return () => {\n observer.complete();\n ac.abort();\n connectionSub.unsubscribe();\n };\n });\n };\n };\n}\n\n/**\n * @deprecated use {@link httpSubscriptionLink} instead\n */\nexport const unstable_httpSubscriptionLink = httpSubscriptionLink;\n","/* istanbul ignore file -- @preserve */\n// We're not actually exporting this link\nimport type { Unsubscribable } from '@trpc/server/observable';\nimport { observable } from '@trpc/server/observable';\nimport type { InferrableClientTypes } from '@trpc/server/unstable-core-do-not-import';\nimport { inputWithTrackedEventId } from '../internals/inputWithTrackedEventId';\nimport type { TRPCClientError } from '../TRPCClientError';\nimport type { Operation, TRPCLink } from './types';\n\ninterface RetryLinkOptions<TInferrable extends InferrableClientTypes> {\n /**\n * The retry function\n */\n retry: (opts: RetryFnOptions<TInferrable>) => boolean;\n /**\n * The delay between retries in ms (defaults to 0)\n */\n retryDelayMs?: (attempt: number) => number;\n}\n\ninterface RetryFnOptions<TInferrable extends InferrableClientTypes> {\n /**\n * The operation that failed\n */\n op: Operation;\n /**\n * The error that occurred\n */\n error: TRPCClientError<TInferrable>;\n /**\n * The number of attempts that have been made (including the first call)\n */\n attempts: number;\n}\n\n/**\n * @see https://trpc.io/docs/v11/client/links/retryLink\n */\nexport function retryLink<TInferrable extends InferrableClientTypes>(\n opts: RetryLinkOptions<TInferrable>,\n): TRPCLink<TInferrable> {\n // initialized config\n return () => {\n // initialized in app\n return (callOpts) => {\n // initialized for request\n return observable((observer) => {\n let next$: Unsubscribable;\n let callNextTimeout: ReturnType<typeof setTimeout> | undefined =\n undefined;\n\n let lastEventId: string | undefined = undefined;\n\n attempt(1);\n\n function opWithLastEventId() {\n const op = callOpts.op;\n if (!lastEventId) {\n return op;\n }\n\n return {\n ...op,\n input: inputWithTrackedEventId(op.input, lastEventId),\n };\n }\n\n function attempt(attempts: number) {\n const op = opWithLastEventId();\n\n next$ = callOpts.next(op).subscribe({\n error(error) {\n const shouldRetry = opts.retry({\n op,\n attempts,\n error,\n });\n if (!shouldRetry) {\n observer.error(error);\n return;\n }\n const delayMs = opts.retryDelayMs?.(attempts) ?? 0;\n\n if (delayMs <= 0) {\n attempt(attempts + 1);\n return;\n }\n callNextTimeout = setTimeout(\n () => attempt(attempts + 1),\n delayMs,\n );\n },\n next(envelope) {\n //\n if (\n (!envelope.result.type || envelope.result.type === 'data') &&\n envelope.result.id\n ) {\n //\n lastEventId = envelope.result.id;\n }\n\n observer.next(envelope);\n },\n complete() {\n observer.complete();\n },\n });\n }\n return () => {\n next$.unsubscribe();\n clearTimeout(callNextTimeout);\n };\n });\n };\n };\n}\n","function _usingCtx() {\n var r = \"function\" == typeof SuppressedError ? SuppressedError : function (r, e) {\n var n = Error();\n return n.name = \"SuppressedError\", n.error = r, n.suppressed = e, n;\n },\n e = {},\n n = [];\n function using(r, e) {\n if (null != e) {\n if (Object(e) !== e) throw new TypeError(\"using declarations can only be used with objects, functions, null, or undefined.\");\n if (r) var o = e[Symbol.asyncDispose || Symbol[\"for\"](\"Symbol.asyncDispose\")];\n if (void 0 === o && (o = e[Symbol.dispose || Symbol[\"for\"](\"Symbol.dispose\")], r)) var t = o;\n if (\"function\" != typeof o) throw new TypeError(\"Object is not disposable.\");\n t && (o = function o() {\n try {\n t.call(e);\n } catch (r) {\n return Promise.reject(r);\n }\n }), n.push({\n v: e,\n d: o,\n a: r\n });\n } else r && n.push({\n d: e,\n a: r\n });\n return e;\n }\n return {\n e: e,\n u: using.bind(null, !1),\n a: using.bind(null, !0),\n d: function d() {\n var o,\n t = this.e,\n s = 0;\n function next() {\n for (; o = n.pop();) try {\n if (!o.a && 1 === s) return s = 0, n.push(o), Promise.resolve().then(next);\n if (o.d) {\n var r = o.d.call(o.v);\n if (o.a) return s |= 2, Promise.resolve(r).then(next, err);\n } else s |= 1;\n } catch (r) {\n return err(r);\n }\n if (1 === s) return t !== e ? Promise.reject(t) : Promise.resolve();\n if (t !== e) throw t;\n }\n function err(n) {\n return t = t !== e ? new r(n, t) : n, next();\n }\n return next();\n }\n };\n}\nmodule.exports = _usingCtx, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _OverloadYield(e, d) {\n this.v = e, this.k = d;\n}\nmodule.exports = _OverloadYield, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var OverloadYield = require(\"./OverloadYield.js\");\nfunction _awaitAsyncGenerator(e) {\n return new OverloadYield(e, 0);\n}\nmodule.exports = _awaitAsyncGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var OverloadYield = require(\"./OverloadYield.js\");\nfunction _wrapAsyncGenerator(e) {\n return function () {\n return new AsyncGenerator(e.apply(this, arguments));\n };\n}\nfunction AsyncGenerator(e) {\n var r, t;\n function resume(r, t) {\n try {\n var n = e[r](t),\n o = n.value,\n u = o instanceof OverloadYield;\n Promise.resolve(u ? o.v : o).then(function (t) {\n if (u) {\n var i = \"return\" === r ? \"return\" : \"next\";\n if (!o.k || t.done) return resume(i, t);\n t = e[i](t).value;\n }\n settle(n.done ? \"return\" : \"normal\", t);\n }, function (e) {\n resume(\"throw\", e);\n });\n } catch (e) {\n settle(\"throw\", e);\n }\n }\n function settle(e, n) {\n switch (e) {\n case \"return\":\n r.resolve({\n value: n,\n done: !0\n });\n break;\n case \"throw\":\n r.reject(n);\n break;\n default:\n r.resolve({\n value: n,\n done: !1\n });\n }\n (r = r.next) ? resume(r.key, r.arg) : t = null;\n }\n this._invoke = function (e, n) {\n return new Promise(function (o, u) {\n var i = {\n key: e,\n arg: n,\n resolve: o,\n reject: u,\n next: null\n };\n t ? t = t.next = i : (r = t = i, resume(e, n));\n });\n }, \"function\" != typeof e[\"return\"] && (this[\"return\"] = void 0);\n}\nAsyncGenerator.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function () {\n return this;\n}, AsyncGenerator.prototype.next = function (e) {\n return this._invoke(\"next\", e);\n}, AsyncGenerator.prototype[\"throw\"] = function (e) {\n return this._invoke(\"throw\", e);\n}, AsyncGenerator.prototype[\"return\"] = function (e) {\n return this._invoke(\"return\", e);\n};\nmodule.exports = _wrapAsyncGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import {\n getTRPCErrorFromUnknown,\n getTRPCErrorShape,\n isTrackedEnvelope,\n} from '@trpc/server';\nimport { behaviorSubject, observable } from '@trpc/server/observable';\nimport { TRPC_ERROR_CODES_BY_KEY, type TRPCResult } from '@trpc/server/rpc';\nimport {\n callProcedure,\n isAbortError,\n isAsyncIterable,\n iteratorResource,\n makeResource,\n retryableRpcCodes,\n run,\n type AnyRouter,\n type ErrorHandlerOptions,\n type inferClientTypes,\n type inferRouterContext,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { inputWithTrackedEventId } from '../internals/inputWithTrackedEventId';\nimport { abortSignalToPromise, raceAbortSignals } from '../internals/signals';\nimport { getTransformer } from '../internals/transformer';\nimport type { TransformerOptions } from '../internals/transformer';\nimport { isTRPCClientError, TRPCClientError } from '../TRPCClientError';\nimport type { TRPCConnectionState } from './internals/subscriptions';\nimport type { TRPCLink } from './types';\n\nexport type LocalLinkOptions<TRouter extends AnyRouter> = {\n router: TRouter;\n createContext: () => Promise<inferRouterContext<TRouter>>;\n onError?: (opts: ErrorHandlerOptions<inferRouterContext<TRouter>>) => void;\n} & TransformerOptions<inferClientTypes<TRouter>>;\n\n/**\n * localLink is a terminating link that allows you to make tRPC procedure calls directly in your application without going through HTTP.\n *\n * @see https://trpc.io/docs/links/localLink\n */\nexport function unstable_localLink<TRouter extends AnyRouter>(\n opts: LocalLinkOptions<TRouter>,\n): TRPCLink<TRouter> {\n const transformer = getTransformer(opts.transformer);\n\n const transformChunk = (chunk: unknown) => {\n if (opts.transformer) {\n // assume transformer will do the right thing\n return chunk;\n }\n // Special case for undefined, because `JSON.stringify(undefined)` throws\n if (chunk === undefined) {\n return chunk;\n }\n const serialized = JSON.stringify(transformer.input.serialize(chunk));\n const deserialized = JSON.parse(transformer.output.deserialize(serialized));\n return deserialized;\n };\n\n return () =>\n ({ op }) =>\n observable((observer) => {\n let ctx: inferRouterContext<TRouter> | undefined = undefined;\n const ac = new AbortController();\n\n const signal = raceAbortSignals(op.signal, ac.signal);\n const signalPromise = abortSignalToPromise(signal);\n\n signalPromise.catch(() => {\n // prevent unhandled rejection\n });\n\n let input = op.input;\n async function runProcedure(newInput: unknown): Promise<unknown> {\n input = newInput;\n\n ctx = await opts.createContext();\n\n return callProcedure({\n router: opts.router,\n path: op.path,\n getRawInput: async () => newInput,\n ctx,\n type: op.type,\n signal,\n batchIndex: 0,\n });\n }\n\n function onErrorCallback(cause: unknown) {\n if (isAbortError(cause)) {\n return;\n }\n opts.onError?.({\n error: getTRPCErrorFromUnknown(cause),\n type: op.type,\n path: op.path,\n input,\n ctx,\n });\n }\n\n function coerceToTRPCClientError(cause: unknown) {\n if (isTRPCClientError<TRouter>(cause)) {\n return cause;\n }\n const error = getTRPCErrorFromUnknown(cause);\n\n const shape = getTRPCErrorShape({\n config: opts.router._def._config,\n ctx,\n error,\n input,\n path: op.path,\n type: op.type,\n });\n return TRPCClientError.from(\n { error: transformChunk(shape) },\n { cause: cause instanceof Error ? cause : undefined },\n );\n }\n\n run(async () => {\n switch (op.type) {\n case 'query':\n case 'mutation': {\n const result = await runProcedure(op.input);\n if (!isAsyncIterable(result)) {\n observer.next({\n result: { data: transformChunk(result) },\n });\n observer.complete();\n break;\n }\n\n observer.next({\n result: {\n data: (async function* () {\n await using iterator = iteratorResource(result);\n using _finally = makeResource({}, () => {\n observer.complete();\n });\n try {\n while (true) {\n const res = await Promise.race([\n iterator.next(),\n signalPromise,\n ]);\n if (res.done) {\n return transformChunk(res.value);\n }\n yield transformChunk(res.value);\n }\n } catch (cause) {\n onErrorCallback(cause);\n throw coerceToTRPCClientError(cause);\n }\n })(),\n },\n });\n break;\n }\n case 'subscription': {\n const connectionState = behaviorSubject<\n TRPCConnectionState<TRPCClientError<any>>\n >({\n type: 'state',\n state: 'connecting',\n error: null,\n });\n\n const connectionSub = connectionState.subscribe({\n next(state) {\n observer.next({\n result: state,\n });\n },\n });\n let lastEventId: string | undefined = undefined;\n\n using _finally = makeResource({}, async () => {\n observer.complete();\n\n connectionState.next({\n type: 'state',\n state: 'idle',\n error: null,\n });\n connectionSub.unsubscribe();\n });\n while (true) {\n const result = await runProcedure(\n inputWithTrackedEventId(op.input, lastEventId),\n );\n if (!isAsyncIterable(result)) {\n throw new Error('Expected an async iterable');\n }\n await using iterator = iteratorResource(result);\n\n observer.next({\n result: {\n type: 'started',\n },\n });\n connectionState.next({\n type: 'state',\n state: 'pending',\n error: null,\n });\n\n // Use a while loop to handle errors and reconnects\n while (true) {\n let res;\n try {\n res = await Promise.race([iterator.next(), signalPromise]);\n } catch (cause) {\n if (isAbortError(cause)) {\n return;\n }\n const error = getTRPCErrorFromUnknown(cause);\n\n if (\n !retryableRpcCodes.includes(\n TRPC_ERROR_CODES_BY_KEY[error.code],\n )\n ) {\n throw coerceToTRPCClientError(error);\n }\n\n onErrorCallback(error);\n connectionState.next({\n type: 'state',\n state: 'connecting',\n error: coerceToTRPCClientError(error),\n });\n\n break;\n }\n\n if (res.done) {\n return;\n }\n let chunk: TRPCResult<unknown>;\n if (isTrackedEnvelope(res.value)) {\n lastEventId = res.value[0];\n\n chunk = {\n id: res.value[0],\n data: {\n id: res.value[0],\n data: res.value[1],\n },\n };\n } else {\n chunk = {\n data: res.value,\n };\n }\n\n observer.next({\n result: {\n ...chunk,\n data: transformChunk(chunk.data),\n },\n });\n }\n }\n break;\n }\n }\n }).catch((cause) => {\n onErrorCallback(cause);\n observer.error(coerceToTRPCClientError(cause));\n });\n\n return () => {\n ac.abort();\n };\n });\n}\n/**\n * @deprecated Renamed to `unstable_localLink`. This alias will be removed in a future major release.\n */\nexport const experimental_localLink: typeof unstable_localLink =\n unstable_localLink;\n","export {\n ensureBinary,\n downloadBinary,\n findInPath,\n getPlatformInfo,\n buildBinaryPath,\n} from './deps/binary-downloader.js'\nexport { ensureFfmpeg, getFfmpegDownloadUrl } from './deps/ffmpeg-downloader.js'\nexport {\n ensurePython,\n installPythonPackages,\n getPythonDownloadUrl,\n PYTHON_VERSION,\n} from './deps/python-downloader.js'\nexport { EventBus } from './events/event-bus.js'\nexport { downloadModel, downloadFile, fetchJson } from './download/model-downloader.js'\nexport { ModelDownloadService } from './download/model-download-service.js'\nexport { PythonEnvManager } from './python/python-env-manager.js'\nexport type { ValidationIssue, ValidationResult } from './pipeline/pipeline-validator.js'\nexport { PipelineValidator } from './pipeline/pipeline-validator.js'\nexport { PipelineRunner } from './pipeline/pipeline-runner.js'\n\n// Process management\nexport { ProcessManager } from './process/process-manager.js'\nexport { ManagedProcess } from './process/managed-process.js'\nexport type {\n ProcessConfig,\n ProcessStats,\n ManagedProcessStatus,\n ProcessState,\n ProcessEventEmitter,\n ProcessLoggerFactory,\n} from './process/interfaces.js'\n\n// Network quality tracking\nexport { NetworkQualityTracker } from './network/network-quality.js'\nexport type {\n StreamNetworkStats,\n ClientNetworkStats,\n DeviceNetworkStats,\n INetworkQualityTracker,\n} from './network/network-quality.js'\n\n// REPL engine\nexport { ReplEngine } from './repl/repl-engine.js'\nexport type {\n ReplScope,\n ReplSessionContext,\n ReplResult,\n IReplEngine,\n IReplContextProvider,\n} from './repl/interfaces.js'\n\n// Agent registry and task dispatcher\nexport { AgentRegistry } from './agent/agent-registry.js'\nexport { TaskDispatcher } from './agent/task-dispatcher.js'\nexport { AgentClient } from './agent/agent-client.js'\nexport type { AgentClientConfig, MessageHandler, BinaryHandler, ConnectionHandler } from './agent/agent-client.js'\nexport { AgentTaskRunner } from './agent/agent-task-runner.js'\nexport { DecodeTaskHandler, DetectTaskHandler, RecordTaskHandler } from './agent/pipeline-task-handlers.js'\nexport type {\n AgentInfo,\n AgentResources,\n AgentStatus,\n AgentTask,\n AgentTaskResult,\n TaskDispatchOptions,\n AgentEntry,\n AgentEventEmitter,\n} from './agent/interfaces.js'\n\n// Builtin providers — default implementations that register through CapabilityRegistry\n// and CAN be replaced by external addons.\nexport { SqliteStorageAddon } from './builtins/sqlite-storage/index.js'\nexport { SettingsStore } from './builtins/sqlite-storage/index.js'\nexport { CORE_TABLE_DDL, addonTableToDdl } from './builtins/sqlite-storage/index.js'\nexport type { AddonTableSchema } from './builtins/sqlite-storage/index.js'\nexport { SqliteStorageProvider, FileSystemStorage } from './builtins/sqlite-storage/index.js'\nexport { WinstonLoggingAddon } from './builtins/winston-logging/index.js'\nexport { WinstonDestination } from './builtins/winston-logging/index.js'\nexport { LocalBackupAddon } from './builtins/local-backup/index.js'\nexport { LocalBackupService } from './builtins/local-backup/index.js'\nexport type { BackupManifest, BackupConfig } from './builtins/local-backup/index.js'\n// Lifecycle\nexport { LifecycleStateMachine } from './lifecycle/lifecycle-state-machine.js'\nexport type {\n ElementState,\n ElementStatus,\n} from './lifecycle/lifecycle-state-machine.js'\n\n// Feature\nexport { FeatureManager } from './feature/feature-manager.js'\nexport type {\n FeatureManifest,\n FeatureFlag,\n FeatureConfigReader,\n} from './feature/feature-manager.js'\n\n// Events (system-level event bus with ring buffer)\nexport { SystemEventBus } from './events/system-event-bus.js'\nexport type {\n SystemEvent,\n EventSource,\n EventFilter,\n} from './events/system-event-bus.js'\n\n// Logging\nexport { LogManager } from './logging/log-manager.js'\nexport type { ILogDestination } from './logging/log-manager.js'\nexport { LogRingBuffer } from './logging/log-ring-buffer.js'\nexport type { LogEntry, LogFilter, LogLevel } from './logging/log-ring-buffer.js'\nexport { ScopedLogger } from './logging/scoped-logger.js'\nexport type { IScopedLogger } from './logging/scoped-logger.js'\n\n// Storage\nexport { StorageManager } from './storage/storage-manager.js'\nexport type {\n IStorageProvider as ICoreStorageProvider,\n IStorageLocation,\n IStructuredStorage,\n IFileStorage,\n QueryFilter,\n StorageRecord,\n} from './storage/storage-manager.js'\nexport { StorageLocationManager } from './storage/storage-location-manager.js'\nexport type { StorageLocationName } from './storage/storage-location-manager.js'\nexport { FsStorageBackend } from './storage/fs-storage-backend.js'\nexport type { IStorageBackend } from './storage/fs-storage-backend.js'\n\n// Auth\nexport { AuthManager } from './auth/auth-manager.js'\nexport type { UserRole, TokenPayload, AuthConfigReader } from './auth/auth-manager.js'\nexport { ApiKeyManager } from './auth/api-key-manager.js'\nexport type { ApiKeyRecord, ApiKeyStorageAccess } from './auth/api-key-manager.js'\nexport { UserManager } from './auth/user-manager.js'\nexport type { UserRecord, UserStorageAccess, UserConfigReader } from './auth/user-manager.js'\nexport { ScopedTokenManager } from './auth/scoped-token-manager.js'\n\n// Notification\nexport { NotificationService } from './notification/notification-service.js'\nexport { ToastService } from './notification/toast-service.js'\nexport type { Unsubscribe } from './notification/toast-service.js'\n\n// Addon routes\nexport { AddonRouteRegistry } from './addon-routes/addon-route-registry.js'\n\n// Device\nexport { DeviceRegistry } from './device/device-registry.js'\nexport type {\n IRegisteredDevice,\n} from './device/device-registry.js'\nexport { CapabilityResolver } from './device/capability-resolver.js'\nexport type {\n IDeviceCapability,\n CapabilityBinding,\n IResolvableDevice,\n IAddonRegistryAccess,\n} from './device/capability-resolver.js'\n\n// TLS\nexport * from './tls/index.js'\n\n// Addon API Factory\nexport { AddonApiFactory } from './addon/addon-api-factory.js'\nexport type { DirectCallerOptions, WssClientOptions } from './addon/addon-api-factory.js'\n\n// Platform\nexport { PlatformScorer } from './platform/platform-scorer.js'\nexport { InferenceConfigResolver } from './platform/inference-config-resolver.js'\n\n// Provider\nexport { ProviderManager } from './provider/provider-manager.js'\nexport type {\n ProviderDeviceRegistry,\n IManagedProvider,\n ProviderListItem,\n} from './provider/provider-manager.js'\n","import { existsSync, mkdirSync, chmodSync, createWriteStream, unlinkSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { pipeline } from 'node:stream/promises'\nimport { Readable } from 'node:stream'\nimport { execFileSync } from 'node:child_process'\nimport type { IScopedLogger } from '@camstack/types'\n\nexport interface PlatformInfo {\n readonly platform: NodeJS.Platform\n readonly arch: NodeJS.Architecture\n}\n\nexport function getPlatformInfo(): PlatformInfo {\n return {\n platform: process.platform,\n arch: process.arch,\n }\n}\n\nexport function buildBinaryPath(dataDir: string, name: string, platform?: string): string {\n const ext = (platform ?? process.platform) === 'win32' ? '.exe' : ''\n return join(dataDir, 'deps', `${name}${ext}`)\n}\n\n/** Check if a binary exists in PATH */\nexport function findInPath(name: string): string | null {\n try {\n execFileSync(name, ['--version'], { stdio: 'pipe', timeout: 5000 })\n return name\n } catch {\n return null\n }\n}\n\nexport interface DownloadOptions {\n readonly name: string\n readonly url: string\n readonly targetDir: string\n readonly targetName: string\n readonly logger: IScopedLogger\n readonly isArchive?: boolean\n readonly archiveFormat?: 'zip' | 'tar.gz' | 'tar.xz'\n /** Relative path within archive to the binary (e.g., 'ffmpeg-6.1/bin/ffmpeg') */\n readonly archiveInnerPath?: string\n}\n\n/**\n * Download a binary to the target directory.\n * Handles archives (zip, tar.gz, tar.xz) and raw binaries.\n */\nexport async function downloadBinary(opts: DownloadOptions): Promise<string> {\n const { name, url, targetDir, targetName, logger, isArchive, archiveFormat, archiveInnerPath } = opts\n const targetPath = join(targetDir, targetName)\n\n if (existsSync(targetPath)) {\n logger.debug(`${name} binary already exists at ${targetPath}`)\n return targetPath\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n logger.info(`Downloading ${name} from ${url}`)\n const response = await fetch(url, { redirect: 'follow' })\n if (!response.ok || !response.body) {\n throw new Error(`Failed to download ${name}: ${response.status} ${response.statusText}`)\n }\n\n if (isArchive) {\n const ext = archiveFormat ?? 'tar.gz'\n const tmpArchive = join(targetDir, `${name}-download.${ext}`)\n const nodeStream = Readable.fromWeb(response.body as any)\n await pipeline(nodeStream, createWriteStream(tmpArchive))\n\n // Extract\n const tmpExtractDir = join(targetDir, `${name}-extract`)\n mkdirSync(tmpExtractDir, { recursive: true })\n\n if (ext === 'zip') {\n try {\n execFileSync('unzip', ['-o', '-q', tmpArchive, '-d', tmpExtractDir], { stdio: 'pipe' })\n } catch {\n execFileSync('tar', ['-xf', tmpArchive, '-C', tmpExtractDir], { stdio: 'pipe' })\n }\n } else if (ext === 'tar.xz') {\n execFileSync('tar', ['-xJf', tmpArchive, '-C', tmpExtractDir], { stdio: 'pipe' })\n } else {\n execFileSync('tar', ['-xzf', tmpArchive, '-C', tmpExtractDir], { stdio: 'pipe' })\n }\n\n // Copy binary from archive\n if (archiveInnerPath) {\n const { copyFileSync } = await import('node:fs')\n const sourcePath = join(tmpExtractDir, archiveInnerPath)\n if (!existsSync(sourcePath)) {\n throw new Error(`Binary not found in archive at ${archiveInnerPath}`)\n }\n copyFileSync(sourcePath, targetPath)\n }\n\n // Cleanup\n unlinkSync(tmpArchive)\n const { rmSync } = await import('node:fs')\n rmSync(tmpExtractDir, { recursive: true, force: true })\n } else {\n // Direct binary download\n const nodeStream = Readable.fromWeb(response.body as any)\n await pipeline(nodeStream, createWriteStream(targetPath))\n }\n\n chmodSync(targetPath, 0o755)\n logger.info(`${name} downloaded to ${targetPath}`)\n return targetPath\n}\n\n/**\n * Ensure a binary is available. Checks:\n * 1. Target path (already downloaded)\n * 2. System PATH\n * 3. Download from URL\n */\nexport async function ensureBinary(opts: {\n readonly name: string\n readonly targetDir: string\n readonly downloadUrl: string\n readonly logger: IScopedLogger\n readonly isArchive?: boolean\n readonly archiveFormat?: 'zip' | 'tar.gz' | 'tar.xz'\n readonly archiveInnerPath?: string\n}): Promise<string> {\n const ext = process.platform === 'win32' ? '.exe' : ''\n const targetName = `${opts.name}${ext}`\n const targetPath = join(opts.targetDir, targetName)\n\n // 1. Already downloaded\n if (existsSync(targetPath)) {\n opts.logger.debug(`${opts.name} found at ${targetPath}`)\n return targetPath\n }\n\n // 2. System PATH\n const inPath = findInPath(opts.name)\n if (inPath) {\n opts.logger.info(`${opts.name} found in system PATH`)\n return inPath\n }\n\n // 3. Download\n return downloadBinary({\n name: opts.name,\n url: opts.downloadUrl,\n targetDir: opts.targetDir,\n targetName,\n logger: opts.logger,\n isArchive: opts.isArchive,\n archiveFormat: opts.archiveFormat,\n archiveInnerPath: opts.archiveInnerPath,\n })\n}\n","/**\n * Download ffmpeg static build for the current platform.\n *\n * Sources:\n * - Linux: https://johnvansickle.com/ffmpeg/ (static builds)\n * - macOS: https://evermeet.cx/ffmpeg/ or homebrew\n *\n * Using BtbN's GitHub releases as they cover both platforms:\n * https://github.com/BtbN/FFmpeg-Builds/releases\n */\nimport { join } from 'node:path'\nimport type { IScopedLogger } from '@camstack/types'\nimport { ensureBinary } from './binary-downloader.js'\n\nconst FFMPEG_VERSION = '7.1'\n\nexport function getFfmpegDownloadUrl(platform: string, arch: string): string {\n switch (platform) {\n case 'linux': {\n const archMap: Record<string, string> = { x64: 'amd64', arm64: 'arm64' }\n const a = archMap[arch]\n if (!a) throw new Error(`Unsupported Linux architecture: ${arch}`)\n // John Van Sickle static builds — well-tested, widely used\n return `https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-${a}-static.tar.xz`\n }\n case 'darwin': {\n const archMap: Record<string, string> = { arm64: 'arm64', x64: 'amd64' }\n const a = archMap[arch]\n if (!a) throw new Error(`Unsupported macOS architecture: ${arch}`)\n // macOS static builds from osxexperts (maintained, universal builds)\n return `https://www.osxexperts.net/ffmpeg${FFMPEG_VERSION.replace('.', '')}arm.zip`\n }\n default:\n throw new Error(`Unsupported platform: ${platform}`)\n }\n}\n\nexport function getFfmpegArchiveInfo(platform: string): {\n isArchive: boolean\n archiveFormat: 'zip' | 'tar.gz' | 'tar.xz'\n archiveInnerPath: string\n} {\n switch (platform) {\n case 'linux':\n return {\n isArchive: true,\n archiveFormat: 'tar.xz',\n archiveInnerPath: `ffmpeg-${FFMPEG_VERSION}-amd64-static/ffmpeg`,\n }\n case 'darwin':\n return {\n isArchive: true,\n archiveFormat: 'zip',\n archiveInnerPath: 'ffmpeg',\n }\n default:\n throw new Error(`Unsupported platform: ${platform}`)\n }\n}\n\n/**\n * Ensure ffmpeg binary is available.\n * Checks: deps dir → system PATH → download.\n */\nexport async function ensureFfmpeg(dataDir: string, logger: IScopedLogger): Promise<string> {\n const depsDir = join(dataDir, 'deps')\n const platform = process.platform\n const arch = process.arch\n\n const archiveInfo = getFfmpegArchiveInfo(platform)\n\n return ensureBinary({\n name: 'ffmpeg',\n targetDir: depsDir,\n downloadUrl: getFfmpegDownloadUrl(platform, arch),\n logger,\n ...archiveInfo,\n })\n}\n","/**\n * Download portable Python (headless) from bjia56/portable-python.\n *\n * Source: https://github.com/bjia56/portable-python\n *\n * Advantages over python-build-standalone:\n * - macOS universal2 binary (arm64+x86_64 in one)\n * - Lighter (~24-28MB headless zip)\n * - glibc 2.17 minimum (better compat)\n * - Headless variant excludes tkinter/UI (ideal for ML inference)\n *\n * After extraction, the binary is at: python/bin/python3\n */\nimport { join } from 'node:path'\nimport { existsSync, mkdirSync, chmodSync } from 'node:fs'\nimport { execFileSync } from 'node:child_process'\nimport { pipeline } from 'node:stream/promises'\nimport { Readable } from 'node:stream'\nimport { createWriteStream } from 'node:fs'\nimport type { IScopedLogger } from '@camstack/types'\nimport { findInPath } from './binary-downloader.js'\n\nexport const PYTHON_VERSION = '3.12.12'\nconst PP_BASE = `https://github.com/bjia56/portable-python/releases/download/cpython-v${PYTHON_VERSION}-build.0`\n\nexport function getPythonDownloadUrl(platform: string, arch: string): string {\n switch (platform) {\n case 'linux': {\n const archMap: Record<string, string> = { x64: 'x86_64', arm64: 'aarch64' }\n const a = archMap[arch]\n if (!a) throw new Error(`Unsupported Linux architecture for Python: ${arch}`)\n return `${PP_BASE}/python-headless-${PYTHON_VERSION}-linux-${a}.zip`\n }\n case 'darwin': {\n // universal2 covers both arm64 and x86_64\n return `${PP_BASE}/python-headless-${PYTHON_VERSION}-darwin-universal2.zip`\n }\n default:\n throw new Error(`Unsupported platform for portable Python: ${platform}`)\n }\n}\n\n/**\n * Ensure a portable Python is available.\n * Checks: embedded python → system PATH → download portable.\n *\n * Returns the path to the python3 binary.\n */\nexport async function ensurePython(dataDir: string, logger: IScopedLogger): Promise<string | null> {\n const pythonDir = join(dataDir, 'deps', 'python')\n const pythonBin = join(pythonDir, 'bin', 'python3')\n\n // 1. Already downloaded\n if (existsSync(pythonBin)) {\n logger.debug(`Portable Python found at ${pythonBin}`)\n return pythonBin\n }\n\n // 2. System PATH\n for (const name of ['python3', 'python']) {\n const inPath = findInPath(name)\n if (inPath) {\n logger.info(`Python found in system PATH: ${name}`)\n return inPath\n }\n }\n\n // 3. Download portable python\n logger.info(`Downloading portable Python ${PYTHON_VERSION} (headless)...`)\n\n const depsDir = join(dataDir, 'deps')\n mkdirSync(depsDir, { recursive: true })\n\n const url = getPythonDownloadUrl(process.platform, process.arch)\n const tmpArchive = join(depsDir, 'python-download.zip')\n\n logger.info(` Source: ${url}`)\n\n const response = await fetch(url, { redirect: 'follow' })\n if (!response.ok || !response.body) {\n logger.warn(`Failed to download Python: ${response.status} — ML detection will not be available`)\n return null\n }\n\n const nodeStream = Readable.fromWeb(response.body as any)\n await pipeline(nodeStream, createWriteStream(tmpArchive))\n\n // Extract — zip contains a 'python/' directory\n try {\n execFileSync('unzip', ['-o', '-q', tmpArchive, '-d', depsDir], { stdio: 'pipe' })\n } catch {\n // Fallback: some minimal Linux installs don't have unzip\n execFileSync('python3', ['-m', 'zipfile', '-e', tmpArchive, depsDir], { stdio: 'pipe' })\n }\n\n // Cleanup\n const { unlinkSync } = await import('node:fs')\n unlinkSync(tmpArchive)\n\n if (!existsSync(pythonBin)) {\n logger.warn('Python extraction succeeded but binary not found at expected path')\n return null\n }\n\n chmodSync(pythonBin, 0o755)\n logger.info(`Portable Python ${PYTHON_VERSION} installed at ${pythonBin}`)\n return pythonBin\n}\n\n/**\n * Install Python packages into the portable Python environment.\n */\nexport async function installPythonPackages(\n pythonPath: string,\n packages: readonly string[],\n logger: IScopedLogger,\n): Promise<void> {\n if (packages.length === 0) return\n\n logger.info(`Installing Python packages: ${packages.join(', ')}`)\n try {\n execFileSync(pythonPath, ['-m', 'pip', 'install', '--quiet', ...packages], {\n stdio: 'pipe',\n timeout: 300_000, // 5 minutes for large packages like torch\n })\n logger.info('Python packages installed successfully')\n } catch (err) {\n logger.error(`Failed to install Python packages: ${err instanceof Error ? err.message : err}`)\n throw err\n }\n}\n","type EventCallback<T = unknown> = (data: T) => void\n\nexport class EventBus {\n private listeners = new Map<string, Set<EventCallback>>()\n\n on<T = unknown>(event: string, callback: EventCallback<T>): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set())\n const set = this.listeners.get(event)!\n set.add(callback as EventCallback)\n return () => set.delete(callback as EventCallback)\n }\n\n emit<T = unknown>(event: string, data: T): void {\n const set = this.listeners.get(event)\n if (!set) return\n for (const cb of set) {\n try { cb(data) } catch { /* don't let one listener break others */ }\n }\n }\n\n once<T = unknown>(event: string, callback: EventCallback<T>): () => void {\n const unsub = this.on<T>(event, (data) => {\n unsub()\n callback(data)\n })\n return unsub\n }\n\n removeAllListeners(event?: string): void {\n if (event) this.listeners.delete(event)\n else this.listeners.clear()\n }\n\n listenerCount(event: string): number {\n return this.listeners.get(event)?.size ?? 0\n }\n}\n","import type { ModelDownloadOptions, ModelDownloadResult } from '@camstack/types'\nimport * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport { createHash } from 'node:crypto'\n\n/** Build fetch headers, including HF auth token for huggingface.co URLs */\nfunction buildHeaders(url: string): Record<string, string> {\n const headers: Record<string, string> = { 'User-Agent': 'CamStack/1.0' }\n const hfToken = process.env['HF_TOKEN'] ?? process.env['HUGGING_FACE_HUB_TOKEN']\n if (hfToken && url.includes('huggingface.co')) {\n headers['Authorization'] = `Bearer ${hfToken}`\n }\n return headers\n}\n\n/**\n * Download a single file from a URL to a destination path.\n * Uses native fetch() (Node 22+) which handles redirects natively.\n * Streams to disk with optional progress callback.\n * Returns the destination path. Skips download if file already exists.\n */\nexport async function downloadFile(\n url: string,\n destPath: string,\n onProgress?: (downloaded: number, total: number) => void,\n): Promise<string> {\n if (fs.existsSync(destPath)) return destPath\n\n fs.mkdirSync(path.dirname(destPath), { recursive: true })\n\n // Atomic download: write to .downloading tmp, rename on success\n const tmpPath = destPath + '.downloading'\n\n try {\n const response = await fetch(url, {\n redirect: 'follow',\n headers: buildHeaders(url),\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status} downloading ${url}`)\n }\n if (!response.body) {\n throw new Error(`No response body from ${url}`)\n }\n\n const total = parseInt(response.headers.get('content-length') ?? '0', 10)\n let downloaded = 0\n\n const fileStream = fs.createWriteStream(tmpPath)\n const reader = response.body.getReader()\n\n try {\n for (;;) {\n const { done, value } = await reader.read()\n if (done) break\n fileStream.write(value)\n downloaded += value.length\n onProgress?.(downloaded, total)\n }\n } finally {\n fileStream.end()\n await new Promise<void>((resolve, reject) => {\n fileStream.on('finish', resolve)\n fileStream.on('error', reject)\n })\n }\n\n fs.renameSync(tmpPath, destPath)\n return destPath\n } catch (err) {\n // Clean up partial download\n try { fs.unlinkSync(tmpPath) } catch { /* ignore */ }\n throw err\n }\n}\n\n/**\n * Fetch JSON from a URL using native fetch().\n */\nexport async function fetchJson(url: string): Promise<unknown> {\n const response = await fetch(url, {\n redirect: 'follow',\n headers: buildHeaders(url),\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status} fetching ${url}`)\n }\n return response.json()\n}\n\n/**\n * Download a model with fallback URLs and optional SHA256 verification.\n * Legacy API preserved for backward compatibility -- delegates to downloadFile().\n */\nexport async function downloadModel(options: ModelDownloadOptions): Promise<ModelDownloadResult> {\n const { url, fallbackUrls = [], destDir, filename, expectedSha256, onProgress } = options\n\n const fname = filename ?? url.split('/').pop() ?? 'model.bin'\n const destPath = path.join(destDir, fname)\n\n // Check cache\n if (fs.existsSync(destPath)) {\n return { filePath: destPath, downloadedBytes: 0, fromCache: true }\n }\n\n fs.mkdirSync(destDir, { recursive: true })\n\n const urls = [url, ...fallbackUrls]\n let lastError: Error | null = null\n\n for (const tryUrl of urls) {\n try {\n await downloadFile(tryUrl, destPath, onProgress)\n\n // Verify SHA256 if provided\n if (expectedSha256) {\n const hash = await computeSha256(destPath)\n if (hash !== expectedSha256) {\n fs.unlinkSync(destPath)\n throw new Error(`SHA256 mismatch: expected ${expectedSha256}, got ${hash}`)\n }\n }\n\n const stat = fs.statSync(destPath)\n return { filePath: destPath, downloadedBytes: stat.size, fromCache: false }\n } catch (e) {\n lastError = e as Error\n if (fs.existsSync(destPath)) fs.unlinkSync(destPath)\n }\n }\n\n throw lastError ?? new Error(`Failed to download model from ${url}`)\n}\n\nasync function computeSha256(filePath: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const hash = createHash('sha256')\n const stream = fs.createReadStream(filePath)\n stream.on('data', (chunk) => hash.update(chunk))\n stream.on('end', () => resolve(hash.digest('hex')))\n stream.on('error', reject)\n })\n}\n","import type { ModelCatalogEntry, ModelFormat, IAddonModelManager, ModelExtraFile } from '@camstack/types'\nimport * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport { downloadFile, fetchJson } from './model-downloader.js'\n\n/**\n * Unified model download service.\n *\n * Handles downloading model files and extra files (labels, dicts) from a\n * catalog of ModelCatalogEntry items. Supports single-file models and\n * directory bundles (e.g., .mlpackage for CoreML).\n *\n * Addons use this via `context.models.ensure(modelId, format)`.\n */\nexport class ModelDownloadService implements IAddonModelManager {\n private readonly catalog: ReadonlyMap<string, ModelCatalogEntry>\n\n constructor(\n private readonly modelsDir: string,\n catalog: readonly ModelCatalogEntry[],\n private readonly onProgress?: (modelId: string, downloaded: number, total: number) => void,\n ) {\n const map = new Map<string, ModelCatalogEntry>()\n for (const entry of catalog) {\n map.set(entry.id, entry)\n }\n this.catalog = map\n }\n\n /**\n * Ensure a model (and its extra files) is downloaded.\n * Returns the local filesystem path to the model file/directory.\n */\n async ensure(modelId: string, format?: ModelFormat): Promise<string> {\n const entry = this.catalog.get(modelId)\n if (!entry) {\n throw new Error(`ModelDownloadService: unknown model \"${modelId}\"`)\n }\n\n // Resolve format: use provided or pick first available\n const selectedFormat = format ?? this.pickDefaultFormat(entry)\n const formatEntry = entry.formats[selectedFormat]\n if (!formatEntry) {\n throw new Error(\n `ModelDownloadService: model \"${modelId}\" has no ${selectedFormat} format`,\n )\n }\n\n // Download extra files first (labels JSON, dict.txt, etc.)\n await this.ensureExtraFiles(modelId)\n\n // Derive local path from URL\n const modelPath = this.modelFilePath(entry, selectedFormat)\n\n if (fs.existsSync(modelPath)) {\n // Validate directory bundles have required Manifest.json\n if (formatEntry.isDirectory) {\n if (!fs.existsSync(path.join(modelPath, 'Manifest.json'))) {\n fs.rmSync(modelPath, { recursive: true, force: true })\n } else {\n return modelPath\n }\n } else {\n return modelPath\n }\n }\n\n fs.mkdirSync(this.modelsDir, { recursive: true })\n\n if (formatEntry.isDirectory) {\n await this.downloadDirectory(\n formatEntry.url,\n modelPath,\n formatEntry.files,\n modelId,\n )\n } else {\n await downloadFile(\n formatEntry.url,\n modelPath,\n this.onProgress\n ? (downloaded, total) => this.onProgress!(modelId, downloaded, total)\n : undefined,\n )\n }\n\n return modelPath\n }\n\n /**\n * Ensure extra files for a model are downloaded.\n * Returns the local paths of all extra files.\n */\n async ensureExtraFiles(modelId: string): Promise<readonly string[]> {\n const entry = this.catalog.get(modelId)\n if (!entry) {\n throw new Error(`ModelDownloadService: unknown model \"${modelId}\"`)\n }\n\n const extras = entry.extraFiles\n if (!extras || extras.length === 0) return []\n\n const paths: string[] = []\n for (const extra of extras) {\n const destPath = path.join(this.modelsDir, extra.filename)\n await downloadFile(extra.url, destPath)\n paths.push(destPath)\n }\n return paths\n }\n\n /** Absolute path to the shared models directory. */\n getModelsDir(): string {\n return this.modelsDir\n }\n\n /** Check if a model file is already present on disk. */\n isDownloaded(modelId: string, format?: ModelFormat): boolean {\n const entry = this.catalog.get(modelId)\n if (!entry) return false\n\n const selectedFormat = format ?? this.pickDefaultFormat(entry)\n const formatEntry = entry.formats[selectedFormat]\n if (!formatEntry) return false\n\n const modelPath = this.modelFilePath(entry, selectedFormat)\n if (!fs.existsSync(modelPath)) return false\n\n // Validate directory bundles\n if (formatEntry.isDirectory) {\n return fs.existsSync(path.join(modelPath, 'Manifest.json'))\n }\n\n return fs.statSync(modelPath).size > 0\n }\n\n /**\n * Legacy API: download a model by ID (delegates to ensure with default format).\n * Required by IAddonModelManager interface.\n */\n async downloadModel(id: string): Promise<string> {\n return this.ensure(id)\n }\n\n /** Get the catalog entry for a model by ID. */\n getEntry(modelId: string): ModelCatalogEntry | undefined {\n return this.catalog.get(modelId)\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private pickDefaultFormat(entry: ModelCatalogEntry): ModelFormat {\n // Prefer onnx, then others in order\n const priority: ModelFormat[] = ['onnx', 'coreml', 'openvino', 'tflite', 'pt']\n for (const fmt of priority) {\n if (entry.formats[fmt]) return fmt\n }\n // Fallback: first available format\n const first = Object.keys(entry.formats)[0] as ModelFormat | undefined\n if (first) return first\n throw new Error(`ModelDownloadService: model \"${entry.id}\" has no formats`)\n }\n\n private modelFilePath(entry: ModelCatalogEntry, format: ModelFormat): string {\n const formatEntry = entry.formats[format]\n if (!formatEntry) {\n throw new Error(`Model ${entry.id} has no ${format} format`)\n }\n const urlParts = formatEntry.url.split('/')\n const filename = urlParts[urlParts.length - 1] ?? `${entry.id}.${format}`\n return path.join(this.modelsDir, filename)\n }\n\n /**\n * Download a directory bundle (e.g., .mlpackage) from HuggingFace.\n * ATOMIC: downloads to temp dir, renames only on complete success.\n */\n private async downloadDirectory(\n url: string,\n destDir: string,\n knownFiles?: readonly string[],\n modelId?: string,\n ): Promise<void> {\n const match = url.match(/huggingface\\.co\\/([^/]+\\/[^/]+)\\/resolve\\/main\\/(.+)/)\n if (!match) throw new Error(`Cannot parse HuggingFace URL: ${url}`)\n\n const [, repo, dirPath] = match\n\n let filesToDownload: Array<{ relativePath: string; fileUrl: string }>\n\n if (knownFiles && knownFiles.length > 0) {\n filesToDownload = knownFiles.map(f => ({\n relativePath: f,\n fileUrl: `https://huggingface.co/${repo}/resolve/main/${dirPath}/${f}`,\n }))\n } else {\n const hfFiles = await this.listHfFiles(repo!, dirPath!)\n if (hfFiles.length === 0) {\n throw new Error(`No files found in HuggingFace directory: ${dirPath}`)\n }\n filesToDownload = hfFiles.map(f => ({\n relativePath: f.path.substring(dirPath!.length + 1),\n fileUrl: `https://huggingface.co/${repo}/resolve/main/${f.path}`,\n }))\n }\n\n const tmpDir = destDir + '.downloading'\n fs.rmSync(tmpDir, { recursive: true, force: true })\n fs.mkdirSync(tmpDir, { recursive: true })\n\n try {\n for (const file of filesToDownload) {\n const destPath = path.join(tmpDir, file.relativePath)\n fs.mkdirSync(path.dirname(destPath), { recursive: true })\n await downloadFile(file.fileUrl, destPath)\n }\n\n fs.rmSync(destDir, { recursive: true, force: true })\n fs.renameSync(tmpDir, destDir)\n } catch (err) {\n fs.rmSync(tmpDir, { recursive: true, force: true })\n throw err\n }\n }\n\n /** Recursively list all files in a HuggingFace directory via API. */\n private async listHfFiles(\n repo: string,\n dirPath: string,\n ): Promise<Array<{ path: string; size: number }>> {\n const apiUrl = `https://huggingface.co/api/models/${repo}/tree/main/${dirPath}`\n const entries = (await fetchJson(apiUrl)) as any[]\n const files: Array<{ path: string; size: number }> = []\n\n for (const entry of entries) {\n if (entry.type === 'file') {\n files.push({ path: entry.path, size: entry.size ?? entry.lfs?.size ?? 0 })\n } else if (entry.type === 'directory') {\n const subFiles = await this.listHfFiles(repo, entry.path)\n files.push(...subFiles)\n }\n }\n\n return files\n }\n}\n","import type { IPythonEnvironment, PythonProbeResult, PythonEnvReady } from '@camstack/types'\nimport { execFile, spawn } from 'node:child_process'\nimport type { ChildProcess } from 'node:child_process'\nimport { promisify } from 'node:util'\nimport * as fs from 'node:fs'\nimport * as path from 'node:path'\n\nconst execFileAsync = promisify(execFile)\n\nexport class PythonEnvManager implements IPythonEnvironment {\n private venvPath: string\n private cachedProbe: PythonProbeResult | null = null\n\n constructor(private readonly dataDir: string) {\n this.venvPath = path.join(dataDir, '.venv')\n }\n\n async probe(): Promise<PythonProbeResult> {\n if (this.cachedProbe) return this.cachedProbe\n\n // Try python3, then python\n for (const cmd of ['python3', 'python']) {\n try {\n const { stdout } = await execFileAsync(cmd, ['--version'])\n const version = stdout.trim().replace('Python ', '')\n const major = parseInt(version.split('.')[0] ?? '0', 10)\n const minor = parseInt(version.split('.')[1] ?? '0', 10)\n\n if (major < 3 || (major === 3 && minor < 10)) continue\n\n // Get path\n const { stdout: pathOut } = await execFileAsync(cmd, ['-c', 'import sys; print(sys.executable)'])\n\n this.cachedProbe = {\n available: true,\n version,\n path: pathOut.trim(),\n }\n return this.cachedProbe\n } catch { continue }\n }\n\n this.cachedProbe = { available: false }\n return this.cachedProbe\n }\n\n async ensure(options: { packages: readonly string[] }): Promise<PythonEnvReady> {\n const probe = await this.probe()\n if (!probe.available || !probe.path) {\n throw new Error('Python 3.10+ is required but not found on this system')\n }\n\n // Create venv if needed\n if (!fs.existsSync(path.join(this.venvPath, 'bin', 'python'))) {\n await execFileAsync(probe.path, ['-m', 'venv', this.venvPath])\n }\n\n const venvPython = path.join(this.venvPath, 'bin', 'python')\n\n // Install packages\n if (options.packages.length > 0) {\n await execFileAsync(venvPython, ['-m', 'pip', 'install', '-q', ...options.packages])\n }\n\n return {\n pythonPath: venvPython,\n venvPath: this.venvPath,\n spawn: (script: string, args: readonly string[]) => {\n return spawn(venvPython, [script, ...args])\n },\n }\n }\n\n spawn(script: string, args: readonly string[]): ChildProcess {\n const venvPython = path.join(this.venvPath, 'bin', 'python')\n if (!fs.existsSync(venvPython)) {\n throw new Error('Python venv not initialized. Call ensure() first.')\n }\n return spawn(venvPython, [script, ...args])\n }\n}\n","import type { PipelineConfig, PipelineNode, ValidationIssue, ValidationResult } from '@camstack/types'\nimport { AddonLoader } from '@camstack/kernel'\n\nexport type { ValidationIssue, ValidationResult }\n\nexport class PipelineValidator {\n constructor(private readonly loader: AddonLoader) {}\n\n validate(config: PipelineConfig): ValidationResult {\n const errors: ValidationIssue[] = []\n const warnings: ValidationIssue[] = []\n\n // Validate video pipeline\n for (const node of config.video) {\n this.validateNode(node, errors, warnings, [])\n }\n\n // Validate audio\n if (config.audio) {\n this.validateNode(config.audio, errors, warnings, [])\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n }\n }\n\n private validateNode(\n node: PipelineNode,\n errors: ValidationIssue[],\n warnings: ValidationIssue[],\n ancestors: PipelineNode[],\n ): void {\n // Check addon exists\n if (!this.loader.hasAddon(node.addon)) {\n errors.push({\n step: node.step,\n addon: node.addon,\n message: `Addon \"${node.addon}\" is not registered`,\n severity: 'error',\n })\n return\n }\n\n // Check requiredSteps (from addon manifest)\n const registered = this.loader.getAddon(node.addon)\n if (registered) {\n const manifest = registered.declaration\n // Warn if a node appears at root but its addon has inputClasses\n // (This is a simplified check — full implementation would read manifest.requiredSteps)\n void manifest // reserved for future manifest-driven checks\n }\n\n // Validate children recursively\n if (node.children) {\n for (const child of node.children) {\n this.validateNode(child, errors, warnings, [...ancestors, node])\n }\n }\n }\n}\n","import type {\n FrameInput,\n AudioChunkInput,\n CropInput,\n PipelineConfig,\n PipelineNode,\n PipelineResult,\n StepResult,\n DetectorOutput,\n CropperOutput,\n ClassifierOutput,\n SpatialDetection,\n PipelineSlot,\n ICamstackAddon,\n} from '@camstack/types'\nimport { AddonEngineManager } from '@camstack/kernel'\nimport { randomUUID } from 'node:crypto'\n\nexport class PipelineRunner {\n constructor(\n private readonly engineManager: AddonEngineManager,\n private readonly addonConfigs: Map<string, Record<string, unknown>>, // addonId → global config\n ) {}\n\n async run(frame: FrameInput, config: PipelineConfig): Promise<PipelineResult> {\n const startTime = performance.now()\n const results: StepResult[] = []\n const timings: Record<string, number> = {}\n\n // Execute video pipeline root nodes\n for (const rootNode of config.video) {\n await this.executeNode(rootNode, frame, null, results, timings)\n }\n\n // Execute audio node if present (independent)\n if (config.audio) {\n await this.executeNode(config.audio, frame, null, results, timings)\n }\n\n return {\n results,\n totalMs: performance.now() - startTime,\n timings,\n frameTimestamp: frame.timestamp,\n }\n }\n\n /**\n * Run only the audio classification node on an audio chunk.\n * Used by the audio path in DetectionWiringService (separate from video pipeline).\n */\n async runAudioNode(chunk: AudioChunkInput, audioNode: PipelineNode): Promise<PipelineResult> {\n const startTime = performance.now()\n const results: StepResult[] = []\n const timings: Record<string, number> = {}\n const resultId = randomUUID()\n const stepStart = performance.now()\n\n try {\n const globalConfig = this.addonConfigs.get(audioNode.addon) ?? {}\n const engine = await this.engineManager.getOrCreateEngine(\n audioNode.addon, globalConfig, audioNode.configOverride,\n )\n\n if (!('classifyAudio' in engine) || typeof (engine as unknown as Record<string, unknown>)['classifyAudio'] !== 'function') {\n throw new Error(`Addon \"${audioNode.addon}\" has no classifyAudio method`)\n }\n\n const output = await (engine as unknown as { classifyAudio: (input: AudioChunkInput) => Promise<ClassifierOutput> }).classifyAudio(chunk)\n const stepMs = performance.now() - stepStart\n\n const stepResult: StepResult = {\n addon: audioNode.addon,\n slot: 'classifier',\n output,\n resultId,\n inferenceMs: output.inferenceMs,\n preprocessMs: 0,\n totalMs: stepMs,\n }\n results.push(stepResult)\n timings[audioNode.step] = stepMs\n } catch (error: unknown) {\n const stepMs = performance.now() - stepStart\n const message = error instanceof Error ? error.message : String(error)\n results.push({\n addon: audioNode.addon,\n slot: 'classifier',\n output: { classifications: [], inferenceMs: 0, modelId: '' } as unknown as ClassifierOutput,\n resultId,\n inferenceMs: 0,\n preprocessMs: 0,\n totalMs: stepMs,\n error: {\n code: 'ADDON_ERROR',\n message,\n childrenSkipped: true,\n },\n })\n }\n\n return {\n results,\n totalMs: performance.now() - startTime,\n timings,\n frameTimestamp: chunk.timestamp,\n }\n }\n\n private async executeNode(\n node: PipelineNode,\n frame: FrameInput,\n parentDetection: { det: SpatialDetection; resultId: string } | null,\n results: StepResult[],\n timings: Record<string, number>,\n ): Promise<void> {\n const resultId = randomUUID()\n const stepStart = performance.now()\n\n try {\n // Get or create engine for this addon\n const globalConfig = this.addonConfigs.get(node.addon) ?? {}\n const engine = await this.engineManager.getOrCreateEngine(\n node.addon, globalConfig, node.configOverride,\n )\n\n // Determine slot type and execute\n let output: DetectorOutput | CropperOutput | ClassifierOutput\n\n if (parentDetection) {\n // This is a child node — needs crop input\n const cropInput: CropInput = {\n frame,\n roi: parentDetection.det.bbox,\n parentDetection: parentDetection.det,\n }\n\n // Try cropper first, then classifier, then detector\n if ('crop' in engine && typeof (engine as unknown as Record<string, unknown>)['crop'] === 'function') {\n output = await (engine as unknown as { crop: (input: CropInput) => Promise<CropperOutput> }).crop(cropInput)\n } else if ('classify' in engine && typeof (engine as unknown as Record<string, unknown>)['classify'] === 'function') {\n output = await (engine as unknown as { classify: (input: CropInput) => Promise<ClassifierOutput> }).classify(cropInput)\n } else if ('detect' in engine && typeof (engine as unknown as Record<string, unknown>)['detect'] === 'function') {\n // Detector child (e.g., object-detection triggered by motion)\n output = await (engine as unknown as { detect: (input: FrameInput) => Promise<DetectorOutput> }).detect(frame)\n } else {\n throw new Error(`Addon \"${node.addon}\" has no detect/crop/classify method`)\n }\n } else {\n // Root node — full frame\n if ('detect' in engine && typeof (engine as unknown as Record<string, unknown>)['detect'] === 'function') {\n output = await (engine as unknown as { detect: (input: FrameInput) => Promise<DetectorOutput> }).detect(frame)\n } else if ('classify' in engine && typeof (engine as unknown as Record<string, unknown>)['classify'] === 'function') {\n // Audio classifier at root\n const rootCropInput: CropInput = {\n frame,\n roi: { x: 0, y: 0, w: frame.width, h: frame.height },\n parentDetection: { class: '', originalClass: '', score: 1, bbox: { x: 0, y: 0, w: frame.width, h: frame.height } },\n }\n output = await (engine as unknown as { classify: (input: CropInput) => Promise<ClassifierOutput> }).classify(rootCropInput)\n } else {\n throw new Error(`Addon \"${node.addon}\" has no detect/classify method`)\n }\n }\n\n const stepMs = performance.now() - stepStart\n\n // Determine slot type from output shape\n const slot: PipelineSlot =\n 'detections' in output ? 'detector' :\n 'crops' in output ? 'cropper' :\n 'classifier'\n\n const stepResult: StepResult = {\n addon: node.addon,\n slot,\n output,\n parentResultId: parentDetection?.resultId,\n resultId,\n inferenceMs: output.inferenceMs,\n preprocessMs: 0,\n totalMs: stepMs,\n }\n results.push(stepResult)\n timings[node.step] = stepMs\n\n // Process children\n if (node.children?.length) {\n const detections: readonly SpatialDetection[] =\n 'detections' in output ? output.detections :\n 'crops' in output ? output.crops :\n []\n\n // For each detection, find children with matching inputClasses and execute\n await this.executeChildren(node.children, frame, detections, resultId, results, timings)\n }\n } catch (error: unknown) {\n const stepMs = performance.now() - stepStart\n const message = error instanceof Error ? error.message : String(error)\n results.push({\n addon: node.addon,\n slot: 'detector',\n output: { detections: [], inferenceMs: 0, modelId: '' },\n parentResultId: parentDetection?.resultId,\n resultId,\n inferenceMs: 0,\n preprocessMs: 0,\n totalMs: stepMs,\n error: {\n code: 'ADDON_ERROR',\n message,\n childrenSkipped: true,\n },\n })\n }\n }\n\n private async executeChildren(\n children: readonly PipelineNode[],\n frame: FrameInput,\n parentDetections: readonly SpatialDetection[],\n parentResultId: string,\n results: StepResult[],\n timings: Record<string, number>,\n ): Promise<void> {\n // For each parent detection, run all matching children in parallel\n const promises: Promise<void>[] = []\n\n for (const detection of parentDetections) {\n for (const child of children) {\n // TODO: Check inputClasses matching from addon manifest\n // For now, run all children on all detections (caller configures tree correctly)\n promises.push(\n this.executeNode(child, frame, { det: detection, resultId: parentResultId }, results, timings),\n )\n }\n }\n\n await Promise.allSettled(promises)\n }\n}\n","import { fork, spawn, type ChildProcess } from 'node:child_process'\nimport type { IScopedLogger } from '@camstack/types'\nimport type {\n ProcessConfig,\n ProcessStats,\n ManagedProcessStatus,\n ProcessState,\n ProcessEventEmitter,\n} from './interfaces.js'\n\nconst DEFAULT_MAX_RESTARTS = 10\nconst MAX_BACKOFF_MS = 60_000\nconst GRACEFUL_SHUTDOWN_MS = 5_000\n\nexport class ManagedProcess {\n private childProcess: ChildProcess | null = null\n private _state: ProcessState = 'stopped'\n private _startedAt?: number\n private restartTimer?: ReturnType<typeof setTimeout>\n private _restartCount = 0\n private _lastCrashAt?: number\n private _lastCrashError?: string\n\n constructor(\n private readonly config: ProcessConfig,\n private readonly events: ProcessEventEmitter,\n private readonly logger: IScopedLogger,\n ) {}\n\n get state(): ProcessState {\n return this._state\n }\n\n async start(): Promise<void> {\n this._state = 'starting'\n\n try {\n if (this.config.modulePath) {\n this.childProcess = fork(this.config.modulePath, this.config.args ?? [], {\n env: { ...process.env, ...this.config.env },\n stdio: ['pipe', 'pipe', 'pipe', 'ipc'],\n })\n } else if (this.config.command) {\n this.childProcess = spawn(this.config.command, this.config.args ?? [], {\n env: { ...process.env, ...this.config.env },\n stdio: ['pipe', 'pipe', 'pipe'],\n })\n } else {\n throw new Error('No command or modulePath specified')\n }\n\n this.childProcess.stdout?.on('data', (data: Buffer) => {\n this.logger.debug(data.toString().trim())\n })\n\n this.childProcess.stderr?.on('data', (data: Buffer) => {\n this.logger.warn(data.toString().trim())\n })\n\n this.childProcess.on('exit', (code, signal) => {\n const msg = `Process exited: code=${code}, signal=${signal}`\n\n if (code === 0) {\n this.logger.info(msg)\n this._state = 'stopped'\n } else {\n this._lastCrashAt = Date.now()\n this._lastCrashError = msg\n this.logger.error(msg)\n this._state = 'error'\n\n this.events.emitProcessCrashed(\n this.config.id,\n code,\n signal,\n this._restartCount,\n )\n\n const maxRestarts = this.config.maxRestarts ?? DEFAULT_MAX_RESTARTS\n if (this.config.autoRestart && this._restartCount < maxRestarts) {\n this.scheduleRestart()\n }\n }\n\n this.childProcess = null\n })\n\n this.childProcess.on('error', (err: Error) => {\n this.logger.error(`Process error: ${err.message}`)\n this._lastCrashError = err.message\n this._state = 'error'\n })\n\n this._state = 'running'\n this._startedAt = Date.now()\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n this._state = 'error'\n this._lastCrashError = msg\n throw err\n }\n }\n\n async stop(): Promise<void> {\n if (this.restartTimer) {\n clearTimeout(this.restartTimer)\n this.restartTimer = undefined\n }\n\n if (this._state === 'stopped') {\n return\n }\n\n this._state = 'stopping'\n\n if (this.childProcess && !this.childProcess.killed) {\n this.childProcess.kill('SIGTERM')\n\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n if (this.childProcess && !this.childProcess.killed) {\n this.childProcess.kill('SIGKILL')\n }\n resolve()\n }, GRACEFUL_SHUTDOWN_MS)\n\n this.childProcess?.on('exit', () => {\n clearTimeout(timeout)\n resolve()\n })\n })\n }\n\n // The exit handler may have already set state to 'stopped' asynchronously\n const currentState = this._state as string\n if (currentState !== 'stopped') {\n this._state = 'stopped'\n }\n }\n\n getStatus(): ManagedProcessStatus {\n return {\n id: this.config.id,\n label: this.config.label,\n state: this._state,\n pid: this.childProcess?.pid,\n stats: this.childProcess?.pid ? this.getStats() : undefined,\n lastCrashAt: this._lastCrashAt,\n lastCrashError: this._lastCrashError,\n restartCount: this._restartCount,\n nextRestartAt: this.restartTimer ? this.getNextRestartTime() : undefined,\n }\n }\n\n private scheduleRestart(): void {\n this._restartCount++\n const delayMs = Math.min(1000 * Math.pow(2, this._restartCount - 1), MAX_BACKOFF_MS)\n\n this.logger.info(`Scheduling restart #${this._restartCount} in ${delayMs}ms`)\n\n this.events.emitProcessRestartScheduled(\n this.config.id,\n this._restartCount,\n delayMs,\n )\n\n this.restartTimer = setTimeout(async () => {\n this.restartTimer = undefined\n try {\n await this.start()\n this.events.emitProcessRestarted(this.config.id, this._restartCount)\n } catch (err) {\n this.logger.error(`Restart failed: ${err}`)\n }\n }, delayMs)\n }\n\n private getStats(): ProcessStats | undefined {\n if (!this.childProcess?.pid) return undefined\n const uptime = this._startedAt ? Date.now() - this._startedAt : 0\n return {\n pid: this.childProcess.pid,\n cpu: 0,\n memory: 0,\n uptime,\n restartCount: this._restartCount,\n }\n }\n\n private getNextRestartTime(): number | undefined {\n if (!this._lastCrashAt) return undefined\n const delayMs = Math.min(1000 * Math.pow(2, this._restartCount - 1), MAX_BACKOFF_MS)\n return this._lastCrashAt + delayMs\n }\n}\n","import { ManagedProcess } from './managed-process.js'\nimport type {\n ProcessConfig,\n ManagedProcessStatus,\n ProcessEventEmitter,\n ProcessLoggerFactory,\n} from './interfaces.js'\n\nexport class ProcessManager {\n private readonly processes: Map<string, ManagedProcess> = new Map()\n\n constructor(\n private readonly events: ProcessEventEmitter,\n private readonly loggerFactory: ProcessLoggerFactory,\n ) {}\n\n register(config: ProcessConfig): ManagedProcess {\n if (this.processes.has(config.id)) {\n throw new Error(`Process already registered: ${config.id}`)\n }\n\n const logger = this.loggerFactory.createLogger(`process:${config.id}`)\n const managed = new ManagedProcess(config, this.events, logger)\n this.processes.set(config.id, managed)\n return managed\n }\n\n async start(id: string): Promise<void> {\n const p = this.get(id)\n await p.start()\n }\n\n async stop(id: string): Promise<void> {\n const p = this.get(id)\n await p.stop()\n }\n\n async restart(id: string): Promise<void> {\n const p = this.get(id)\n await p.stop()\n await p.start()\n }\n\n get(id: string): ManagedProcess {\n const p = this.processes.get(id)\n if (!p) throw new Error(`Process not found: ${id}`)\n return p\n }\n\n listAll(): readonly ManagedProcessStatus[] {\n return [...this.processes.values()].map((p) => p.getStatus())\n }\n\n async shutdownAll(): Promise<void> {\n const running = [...this.processes.values()].filter(\n (p) => p.getStatus().state === 'running',\n )\n\n await Promise.all(running.map((p) => p.stop()))\n }\n}\n","import type {\n StreamNetworkStats,\n ClientNetworkStats,\n DeviceNetworkStats,\n INetworkQualityTracker,\n} from '@camstack/types'\n\nexport type {\n StreamNetworkStats,\n ClientNetworkStats,\n DeviceNetworkStats,\n INetworkQualityTracker,\n}\n\ninterface MutableStreamStats {\n nominalBitrateKbps: number\n samples: number[]\n peakBitrateKbps: number\n packetLossSamples: number[]\n lastUpdated: number\n}\n\nexport class NetworkQualityTracker implements INetworkQualityTracker {\n private readonly devices = new Map<string, {\n streams: Map<string, MutableStreamStats>\n client: (ClientNetworkStats & { lastUpdated: number }) | null\n }>()\n\n private static readonly MAX_SAMPLES = 30 // ~5 min at 10s reporting interval\n\n reportStreamStats(deviceId: string, streamId: string, bitrateKbps: number, packetLoss?: number): void {\n const device = this.getOrCreateDevice(deviceId)\n let stream = device.streams.get(streamId)\n if (!stream) {\n stream = { nominalBitrateKbps: bitrateKbps, samples: [], peakBitrateKbps: 0, packetLossSamples: [], lastUpdated: 0 }\n device.streams.set(streamId, stream)\n }\n\n stream.samples.push(bitrateKbps)\n if (stream.samples.length > NetworkQualityTracker.MAX_SAMPLES) stream.samples.shift()\n\n stream.peakBitrateKbps = Math.max(stream.peakBitrateKbps, bitrateKbps)\n\n if (packetLoss !== undefined) {\n stream.packetLossSamples.push(packetLoss)\n if (stream.packetLossSamples.length > NetworkQualityTracker.MAX_SAMPLES) stream.packetLossSamples.shift()\n }\n\n stream.lastUpdated = Date.now()\n }\n\n reportClientStats(deviceId: string, stats: Omit<ClientNetworkStats, 'lastUpdated'>): void {\n const device = this.getOrCreateDevice(deviceId)\n device.client = { ...stats, lastUpdated: Date.now() }\n }\n\n getDeviceStats(deviceId: string): DeviceNetworkStats | null {\n const device = this.devices.get(deviceId)\n if (!device) return null\n\n const streams: Record<string, StreamNetworkStats> = {}\n for (const [streamId, s] of device.streams) {\n const avg = (arr: number[]) => arr.length === 0 ? 0 : arr.reduce((a, b) => a + b, 0) / arr.length\n streams[streamId] = {\n nominalBitrateKbps: s.nominalBitrateKbps,\n observedBitrateKbps: Math.round(avg(s.samples)),\n peakBitrateKbps: s.peakBitrateKbps,\n packetLossPercent: Math.round(avg(s.packetLossSamples) * 10) / 10,\n lastUpdated: s.lastUpdated,\n }\n }\n\n return { deviceId, streams, client: device.client ?? undefined }\n }\n\n getAllStats(): readonly DeviceNetworkStats[] {\n const results: DeviceNetworkStats[] = []\n for (const deviceId of this.devices.keys()) {\n const stats = this.getDeviceStats(deviceId)\n if (stats) results.push(stats)\n }\n return results\n }\n\n private getOrCreateDevice(deviceId: string) {\n let device = this.devices.get(deviceId)\n if (!device) {\n device = { streams: new Map(), client: null }\n this.devices.set(deviceId, device)\n }\n return device\n }\n}\n","import * as vm from 'node:vm'\nimport * as util from 'node:util'\nimport type {\n IReplEngine,\n IReplContextProvider,\n ReplSessionContext,\n ReplResult,\n} from './interfaces.js'\n\nconst EXECUTION_TIMEOUT_MS = 5000\nconst COMPLETION_TIMEOUT_MS = 1000\n\nexport class ReplEngine implements IReplEngine {\n constructor(\n private readonly contextProvider: IReplContextProvider,\n ) {}\n\n async execute(code: string, context: ReplSessionContext): Promise<ReplResult> {\n const start = Date.now()\n const sandbox = this.buildSandbox(context)\n\n try {\n const vmContext = vm.createContext(sandbox)\n const script = new vm.Script(code)\n let result = script.runInContext(vmContext, { timeout: EXECUTION_TIMEOUT_MS })\n\n // If result is a Promise, await it with timeout\n if (result && typeof result.then === 'function') {\n result = await Promise.race([\n result,\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error('Async timeout (5s)')), EXECUTION_TIMEOUT_MS),\n ),\n ])\n }\n\n const duration = Date.now() - start\n\n if (result === undefined) {\n return { output: 'undefined', type: 'void', duration }\n }\n\n return {\n output: util.inspect(result, {\n depth: 4,\n colors: false,\n maxArrayLength: 50,\n maxStringLength: 1000,\n }),\n type: 'value',\n duration,\n }\n } catch (err: unknown) {\n // Errors thrown inside vm contexts may not be instanceof Error\n // because they use a different Error constructor from the sandbox\n const message =\n err instanceof Error\n ? err.message\n : typeof err === 'object' && err !== null && 'message' in err\n ? String((err as { message: unknown }).message)\n : String(err)\n return {\n output: message,\n type: 'error',\n duration: Date.now() - start,\n }\n }\n }\n\n async getCompletions(partial: string, context: ReplSessionContext): Promise<string[]> {\n const sandbox = this.buildSandbox(context)\n const keys = Object.keys(sandbox)\n\n if (!partial) return keys\n\n const lastDot = partial.lastIndexOf('.')\n if (lastDot === -1) {\n return keys.filter(k => k.startsWith(partial))\n }\n\n // Object property completion: \"device.get\" -> look up device, return matching keys\n const objPath = partial.substring(0, lastDot)\n const propPrefix = partial.substring(lastDot + 1)\n\n try {\n const vmContext = vm.createContext(sandbox)\n const obj = vm.runInContext(objPath, vmContext, { timeout: COMPLETION_TIMEOUT_MS })\n if (obj && typeof obj === 'object') {\n const proto = Object.getPrototypeOf(obj)\n const objKeys = Object.getOwnPropertyNames(obj)\n .concat(Object.getOwnPropertyNames(proto ?? {}))\n .filter(k => k.startsWith(propPrefix))\n return [...new Set(objKeys)].map(k => `${objPath}.${k}`)\n }\n } catch {\n // Ignore errors during completion\n }\n\n return []\n }\n\n private buildSandbox(context: ReplSessionContext): Record<string, unknown> {\n const base: Record<string, unknown> = {\n console: {\n log: (...args: unknown[]) => util.inspect(args),\n warn: (...args: unknown[]) => util.inspect(args),\n },\n JSON,\n Math,\n Date,\n Array,\n Object,\n String,\n Number,\n Boolean,\n Map,\n Set,\n Promise,\n Buffer,\n // Blocked globals\n setTimeout: undefined,\n setInterval: undefined,\n fetch: undefined,\n require: undefined,\n process: undefined,\n // Merge user-provided variables\n ...context.variables,\n }\n\n switch (context.scope.type) {\n case 'system':\n return { ...base, ...this.contextProvider.getSystemSandbox() }\n\n case 'device':\n return { ...base, ...this.contextProvider.getDeviceSandbox(context.scope.deviceId!) }\n\n case 'provider':\n return { ...base, ...this.contextProvider.getProviderSandbox(context.scope.providerId!) }\n\n case 'addon':\n return { ...base, ...this.contextProvider.getAddonSandbox(context.scope.addonId!) }\n\n default:\n return base\n }\n }\n}\n","import type {\n AgentInfo,\n AgentStatus,\n AgentEntry,\n AgentEventEmitter,\n} from './interfaces.js'\n\nexport class AgentRegistry {\n private readonly agents: Map<string, AgentEntry> = new Map()\n private readonly heartbeatIntervals: Map<string, NodeJS.Timeout> = new Map()\n\n constructor(\n private readonly events: AgentEventEmitter,\n private readonly heartbeatTimeoutMs: number = 30000,\n private readonly heartbeatCheckIntervalMs: number = 10000,\n ) {}\n\n /** Register a new agent */\n registerAgent(info: AgentInfo): void {\n const entry: AgentEntry = {\n info,\n state: 'online',\n connectedSince: Date.now(),\n lastHeartbeat: Date.now(),\n activeTaskCount: 0,\n completedTaskCount: 0,\n failedTaskCount: 0,\n }\n\n this.agents.set(info.id, entry)\n this.startHeartbeatCheck(info.id)\n\n this.events.emitAgentRegistered(info.id, [...info.capabilities])\n }\n\n /** Remove agent */\n unregisterAgent(id: string): void {\n const interval = this.heartbeatIntervals.get(id)\n if (interval) {\n clearInterval(interval)\n this.heartbeatIntervals.delete(id)\n }\n\n this.agents.delete(id)\n this.events.emitAgentUnregistered(id)\n }\n\n /** Update heartbeat timestamp */\n heartbeat(id: string): void {\n const entry = this.agents.get(id)\n if (!entry) return\n\n entry.lastHeartbeat = Date.now()\n\n if (entry.state === 'offline') {\n entry.state = 'online'\n this.events.emitAgentOnline(id)\n }\n }\n\n /** Find agents with a specific capability */\n getAgentsWithCapability(capability: string): readonly AgentEntry[] {\n return [...this.agents.values()].filter(\n (a) => a.state === 'online' && a.info.capabilities.includes(capability),\n )\n }\n\n /** Get best agent for a task (least loaded) */\n selectAgent(capability: string, preferredId?: string): AgentEntry | null {\n const capable = this.getAgentsWithCapability(capability)\n if (capable.length === 0) return null\n\n if (preferredId) {\n const preferred = capable.find((a) => a.info.id === preferredId)\n if (preferred) return preferred\n }\n\n // Least loaded: sort by activeTaskCount ascending\n const sorted = [...capable].sort((a, b) => a.activeTaskCount - b.activeTaskCount)\n return sorted[0] ?? null\n }\n\n /** List all agents with status */\n listAgents(): readonly AgentStatus[] {\n return [...this.agents.values()].map((entry) => ({\n id: entry.info.id,\n name: entry.info.name,\n state: entry.state,\n capabilities: [...entry.info.capabilities],\n lastHeartbeat: entry.lastHeartbeat,\n connectedSince: entry.connectedSince,\n resources: entry.info.resources,\n activeTaskCount: entry.activeTaskCount,\n completedTaskCount: entry.completedTaskCount,\n failedTaskCount: entry.failedTaskCount,\n }))\n }\n\n /** Get single agent */\n getAgent(id: string): AgentEntry | null {\n return this.agents.get(id) ?? null\n }\n\n /** Destroy all heartbeat intervals */\n destroy(): void {\n for (const interval of this.heartbeatIntervals.values()) {\n clearInterval(interval)\n }\n this.heartbeatIntervals.clear()\n }\n\n private startHeartbeatCheck(id: string): void {\n const interval = setInterval(() => {\n const entry = this.agents.get(id)\n if (!entry) return\n\n const elapsed = Date.now() - entry.lastHeartbeat\n if (elapsed > this.heartbeatTimeoutMs && entry.state === 'online') {\n entry.state = 'offline'\n this.events.emitAgentOffline(id)\n }\n }, this.heartbeatCheckIntervalMs)\n\n this.heartbeatIntervals.set(id, interval)\n }\n}\n","import type { AgentRegistry } from './agent-registry.js'\nimport type {\n AgentTask,\n AgentTaskResult,\n AgentEntry,\n TaskDispatchOptions,\n AgentEventEmitter,\n} from './interfaces.js'\n\ninterface PendingTask {\n readonly resolve: (result: AgentTaskResult) => void\n readonly reject: (error: Error) => void\n readonly timeout: NodeJS.Timeout\n}\n\nexport class TaskDispatcher {\n private readonly pendingTasks: Map<string, PendingTask> = new Map()\n private readonly localExecutors: Map<\n string,\n (input: Record<string, unknown>) => Promise<Record<string, unknown>>\n > = new Map()\n\n constructor(\n private readonly agentRegistry: AgentRegistry,\n private readonly events: AgentEventEmitter,\n ) {}\n\n /** Dispatch a task to the best available agent */\n async dispatch(task: AgentTask, options?: TaskDispatchOptions): Promise<AgentTaskResult> {\n const capability = options?.capability ?? task.capability\n const agent = this.agentRegistry.selectAgent(capability, options?.preferredAgent)\n\n if (!agent && !options?.remoteOnly) {\n return this.executeLocally(task)\n }\n\n if (!agent) {\n return {\n taskId: task.id,\n agentId: 'none',\n status: 'error',\n error: 'No agent available',\n durationMs: 0,\n }\n }\n\n return this.sendToAgent(task, agent)\n }\n\n /** Register a local executor for a capability (in-process fallback) */\n registerLocalExecutor(\n capability: string,\n executor: (input: Record<string, unknown>) => Promise<Record<string, unknown>>,\n ): void {\n this.localExecutors.set(capability, executor)\n }\n\n /** Called when an agent returns a result */\n handleTaskResult(result: AgentTaskResult): void {\n const pending = this.pendingTasks.get(result.taskId)\n if (pending) {\n clearTimeout(pending.timeout)\n this.pendingTasks.delete(result.taskId)\n pending.resolve(result)\n }\n\n // Update agent stats\n const agent = this.agentRegistry.getAgent(result.agentId)\n if (agent) {\n agent.activeTaskCount--\n if (result.status === 'success') {\n agent.completedTaskCount++\n } else {\n agent.failedTaskCount++\n }\n }\n }\n\n private async executeLocally(task: AgentTask): Promise<AgentTaskResult> {\n const executor = this.localExecutors.get(task.capability)\n if (!executor) {\n return {\n taskId: task.id,\n agentId: 'local',\n status: 'error',\n error: `No local executor for ${task.capability}`,\n durationMs: 0,\n }\n }\n\n const start = Date.now()\n try {\n const output = await executor(task.input)\n return {\n taskId: task.id,\n agentId: 'local',\n status: 'success',\n output,\n durationMs: Date.now() - start,\n }\n } catch (err) {\n return {\n taskId: task.id,\n agentId: 'local',\n status: 'error',\n error: String(err),\n durationMs: Date.now() - start,\n }\n }\n }\n\n private sendToAgent(task: AgentTask, agent: AgentEntry): Promise<AgentTaskResult> {\n agent.activeTaskCount++\n\n return new Promise((resolve) => {\n const timeout = setTimeout(() => {\n this.pendingTasks.delete(task.id)\n agent.activeTaskCount--\n agent.failedTaskCount++\n resolve({\n taskId: task.id,\n agentId: agent.info.id,\n status: 'timeout',\n durationMs: task.timeout,\n error: 'Task timed out',\n })\n }, task.timeout)\n\n this.pendingTasks.set(task.id, { resolve, reject: () => {}, timeout })\n\n this.events.emitTaskDispatched(task.id, agent.info.id, task.capability)\n })\n }\n}\n","import type {\n AgentToHubMessage,\n HubToAgentMessage,\n AgentRegistrationInfo,\n AgentRuntimeStatus,\n} from '@camstack/types'\nimport type { IScopedLogger } from '../logging/scoped-logger.js'\n\nconst RECONNECT_BASE_MS = 1000\nconst RECONNECT_MAX_MS = 30000\nconst HEARTBEAT_INTERVAL_MS = 10_000\n\nexport interface AgentClientConfig {\n readonly hubUrl: string\n readonly token?: string\n readonly logger: IScopedLogger\n readonly registrationInfo: AgentRegistrationInfo\n}\n\nexport type MessageHandler = (msg: HubToAgentMessage) => void\nexport type BinaryHandler = (data: Buffer) => void\nexport type ConnectionHandler = () => void\n\n/**\n * WebSocket client for agent mode. Framework-agnostic (no NestJS).\n * Connects to the hub, sends registration, handles messages,\n * reconnects with exponential backoff.\n */\nexport class AgentClient {\n private ws: import('ws').WebSocket | null = null\n private reconnectAttempt = 0\n private reconnectTimer: NodeJS.Timeout | null = null\n private heartbeatTimer: NodeJS.Timeout | null = null\n private destroyed = false\n\n private readonly messageHandlers: MessageHandler[] = []\n private readonly binaryHandlers: BinaryHandler[] = []\n private readonly connectHandlers: ConnectionHandler[] = []\n private readonly disconnectHandlers: ConnectionHandler[] = []\n\n private readonly logger: IScopedLogger\n private readonly hubUrl: string\n private readonly token?: string\n private readonly registrationInfo: AgentRegistrationInfo\n\n private runtimeStatus: AgentRuntimeStatus = {\n activeCameras: 0,\n cpuPercent: 0,\n memoryPercent: 0,\n fps: {},\n errors: [],\n }\n\n constructor(config: AgentClientConfig) {\n this.hubUrl = config.hubUrl\n this.token = config.token\n this.logger = config.logger\n this.registrationInfo = config.registrationInfo\n }\n\n /** Connect to the hub WebSocket */\n async connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.destroyed = false\n this.doConnect(resolve, reject)\n })\n }\n\n /** Disconnect and stop reconnecting */\n disconnect(): void {\n this.destroyed = true\n this.clearTimers()\n if (this.ws) {\n this.ws.close()\n this.ws = null\n }\n }\n\n /** Send a JSON control message to the hub */\n send(msg: AgentToHubMessage): void {\n if (!this.ws || this.ws.readyState !== 1 /* WebSocket.OPEN */) {\n this.logger.warn('send() called while not connected')\n return\n }\n this.ws.send(JSON.stringify(msg))\n }\n\n /** Send a binary frame to the hub */\n sendBinary(data: Buffer): void {\n if (!this.ws || this.ws.readyState !== 1) {\n return\n }\n this.ws.send(data)\n }\n\n /** Register a handler for JSON messages from hub */\n onMessage(handler: MessageHandler): void {\n this.messageHandlers.push(handler)\n }\n\n /** Register a handler for binary frames from hub */\n onBinaryFrame(handler: BinaryHandler): void {\n this.binaryHandlers.push(handler)\n }\n\n /** Register a handler for successful connection */\n onConnect(handler: ConnectionHandler): void {\n this.connectHandlers.push(handler)\n }\n\n /** Register a handler for disconnection */\n onDisconnect(handler: ConnectionHandler): void {\n this.disconnectHandlers.push(handler)\n }\n\n /** Update the runtime status (used in heartbeat) */\n updateStatus(status: AgentRuntimeStatus): void {\n this.runtimeStatus = status\n }\n\n /** Whether currently connected */\n get connected(): boolean {\n return this.ws?.readyState === 1\n }\n\n private doConnect(\n onConnect?: (value: void) => void,\n onError?: (err: Error) => void,\n ): void {\n if (this.destroyed) return\n\n // Dynamic import ws to keep this file framework-agnostic at the type level\n import('ws').then(({ default: WebSocket }) => {\n if (this.destroyed) return\n\n const url = this.token\n ? `${this.hubUrl}?token=${encodeURIComponent(this.token)}`\n : this.hubUrl\n\n // Accept self-signed certs when connecting over WSS (safe for local LAN)\n const wsOptions = this.hubUrl.startsWith('wss://')\n ? { rejectUnauthorized: false }\n : {}\n\n try {\n this.ws = new WebSocket(url, wsOptions)\n } catch (err) {\n this.scheduleReconnect()\n if (onError) {\n onError(err instanceof Error ? err : new Error(String(err)))\n onError = undefined\n }\n return\n }\n\n this.ws.once('open', () => {\n this.reconnectAttempt = 0\n this.logger.info(`Connected to hub: ${this.hubUrl}`)\n\n // Send registration\n this.send({ type: 'register', info: this.registrationInfo })\n\n // Start heartbeat\n this.startHeartbeat()\n\n for (const h of this.connectHandlers) h()\n\n if (onConnect) {\n onConnect()\n onConnect = undefined\n }\n })\n\n this.ws.on('message', (data: Buffer | string, isBinary: boolean) => {\n const buf = Buffer.isBuffer(data) ? data : Buffer.from(data as unknown as ArrayBuffer)\n if (isBinary) {\n for (const h of this.binaryHandlers) h(buf)\n } else {\n try {\n const msg = JSON.parse(buf.toString()) as HubToAgentMessage\n this.handleBuiltinMessage(msg)\n for (const h of this.messageHandlers) h(msg)\n } catch {\n this.logger.warn('Failed to parse message from hub')\n }\n }\n })\n\n this.ws.once('close', () => {\n this.stopHeartbeat()\n for (const h of this.disconnectHandlers) h()\n if (!this.destroyed) {\n this.logger.warn('Disconnected from hub, scheduling reconnect')\n this.scheduleReconnect()\n }\n })\n\n this.ws.once('error', (err) => {\n this.logger.error('WebSocket error', { message: err.message })\n if (onError) {\n onError(err)\n onError = undefined\n }\n })\n }).catch((err) => {\n this.logger.error('Failed to import ws module', { message: String(err) })\n if (onError) {\n onError(err instanceof Error ? err : new Error(String(err)))\n }\n })\n }\n\n private handleBuiltinMessage(msg: HubToAgentMessage): void {\n if (msg.type === 'ping') {\n this.send({ type: 'pong' })\n }\n }\n\n private scheduleReconnect(): void {\n if (this.destroyed) return\n const delay = Math.min(\n RECONNECT_BASE_MS * Math.pow(2, this.reconnectAttempt),\n RECONNECT_MAX_MS,\n )\n this.reconnectAttempt++\n this.logger.info(`Reconnecting in ${delay}ms (attempt ${this.reconnectAttempt})`)\n this.reconnectTimer = setTimeout(() => {\n this.doConnect()\n }, delay)\n }\n\n private startHeartbeat(): void {\n this.stopHeartbeat()\n this.heartbeatTimer = setInterval(() => {\n this.send({ type: 'heartbeat', status: this.runtimeStatus })\n }, HEARTBEAT_INTERVAL_MS)\n }\n\n private stopHeartbeat(): void {\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer)\n this.heartbeatTimer = null\n }\n }\n\n private clearTimers(): void {\n this.stopHeartbeat()\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer)\n this.reconnectTimer = null\n }\n }\n}\n","import type { ITaskHandler, TaskContext, TaskProgress } from '@camstack/types'\nimport type { IScopedLogger } from '../logging/scoped-logger.js'\nimport type { AgentClient } from './agent-client.js'\n\ninterface RunningTask {\n readonly taskId: string\n readonly taskType: string\n cancelled: boolean\n}\n\n/**\n * Receives task assignments from hub, routes to registered ITaskHandler instances.\n * Maintains handler registry, manages task lifecycle.\n * Framework-agnostic (no NestJS).\n */\nexport class AgentTaskRunner {\n private readonly handlers = new Map<string, ITaskHandler>()\n private readonly runningTasks = new Map<string, RunningTask>()\n private readonly logger: IScopedLogger\n\n constructor(\n private readonly agentId: string,\n private readonly client: AgentClient,\n logger: IScopedLogger,\n ) {\n this.logger = logger.child('TaskRunner')\n }\n\n /** Register a task handler for a given task type */\n registerHandler(handler: ITaskHandler): void {\n if (this.handlers.has(handler.taskType)) {\n this.logger.warn(`Overwriting handler for task type: ${handler.taskType}`)\n }\n this.handlers.set(handler.taskType, handler)\n this.logger.debug(`Registered handler: ${handler.taskType}`)\n }\n\n /** Unregister a task handler */\n unregisterHandler(taskType: string): void {\n this.handlers.delete(taskType)\n }\n\n /** Get all registered task types */\n getTaskTypes(): readonly string[] {\n return [...this.handlers.keys()]\n }\n\n /** Get a handler by task type */\n getHandler(taskType: string): ITaskHandler | undefined {\n return this.handlers.get(taskType)\n }\n\n /**\n * Execute a task dispatched from the hub.\n * Sends result or error back to hub via the AgentClient.\n */\n async executeTask(taskId: string, taskType: string, payload: unknown): Promise<void> {\n const handler = this.handlers.get(taskType)\n if (!handler) {\n this.client.send({\n type: 'task.result',\n taskId,\n success: false,\n error: `No handler registered for task type: ${taskType}`,\n })\n return\n }\n\n const runningTask: RunningTask = { taskId, taskType, cancelled: false }\n this.runningTasks.set(taskId, runningTask)\n\n const context: TaskContext = {\n taskId,\n agentId: this.agentId,\n logger: this.logger.child(taskType),\n reportProgress: (progress: TaskProgress) => {\n this.client.send({ type: 'task.progress', taskId, progress })\n },\n isCancelled: () => runningTask.cancelled,\n }\n\n try {\n const result = await handler.handle(payload, context)\n this.runningTasks.delete(taskId)\n\n if (!runningTask.cancelled) {\n this.client.send({\n type: 'task.result',\n taskId,\n success: true,\n result,\n })\n }\n } catch (err) {\n this.runningTasks.delete(taskId)\n\n this.logger.error(`Task ${taskType} (${taskId}) failed`, {\n message: err instanceof Error ? err.message : String(err),\n })\n\n this.client.send({\n type: 'task.result',\n taskId,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n })\n }\n }\n\n /** Cancel a running task */\n async cancelTask(taskId: string): Promise<void> {\n const running = this.runningTasks.get(taskId)\n if (!running) return\n\n running.cancelled = true\n\n const handler = this.handlers.get(running.taskType)\n if (handler?.cancel) {\n try {\n await handler.cancel()\n } catch (err) {\n this.logger.error(`Error cancelling task ${taskId}`, {\n message: err instanceof Error ? err.message : String(err),\n })\n }\n }\n\n this.runningTasks.delete(taskId)\n }\n\n /** Number of currently running tasks */\n get activeTaskCount(): number {\n return this.runningTasks.size\n }\n\n /** Destroy: cancel all running tasks */\n async destroy(): Promise<void> {\n const taskIds = [...this.runningTasks.keys()]\n for (const taskId of taskIds) {\n await this.cancelTask(taskId)\n }\n this.handlers.clear()\n }\n}\n","import type { ITaskHandler, TaskContext } from '@camstack/types'\n\n/**\n * Stub task handler for pipeline.decode.\n * In the full implementation, this would start a StreamBroker for a camera\n * and send decoded frames to the hub via the AgentClient.\n */\nexport class DecodeTaskHandler implements ITaskHandler {\n readonly taskType = 'pipeline.decode'\n readonly description = 'Decode an RTSP stream and produce JPEG frames'\n\n async handle(payload: unknown, context: TaskContext): Promise<unknown> {\n const { logger } = context\n const config = payload as { cameraId?: string; rtspUrl?: string; fps?: number }\n\n if (!config.cameraId || !config.rtspUrl) {\n throw new Error('pipeline.decode requires cameraId and rtspUrl in payload')\n }\n\n logger.info(`Decode task started: camera=${config.cameraId} url=${config.rtspUrl} fps=${config.fps ?? 1}`)\n\n // Stub: actual implementation would start ffmpeg, produce frames,\n // and send them via the AgentClient's sendBinary method.\n return { status: 'started', cameraId: config.cameraId }\n }\n\n async cancel(): Promise<void> {\n // Stub: stop ffmpeg process\n }\n}\n\n/**\n * Stub task handler for pipeline.detect.\n * In the full implementation, this would receive frames (via binary WS),\n * run them through the detection engine, and send results back.\n */\nexport class DetectTaskHandler implements ITaskHandler {\n readonly taskType = 'pipeline.detect'\n readonly description = 'Run object detection on received frames'\n\n async handle(payload: unknown, context: TaskContext): Promise<unknown> {\n const { logger } = context\n const config = payload as {\n cameraId?: string\n modelId?: string\n runtime?: string\n confidence?: number\n }\n\n if (!config.cameraId) {\n throw new Error('pipeline.detect requires cameraId in payload')\n }\n\n logger.info(`Detect task started: camera=${config.cameraId} model=${config.modelId ?? 'default'} runtime=${config.runtime ?? 'auto'}`)\n\n // Stub: actual implementation would subscribe to binary frame stream,\n // run inference, and send detection results back to hub.\n return { status: 'started', cameraId: config.cameraId }\n }\n\n async cancel(): Promise<void> {\n // Stub: stop detection loop\n }\n}\n\n/**\n * Stub task handler for pipeline.record.\n * In the full implementation, this would start recording an RTSP stream\n * to disk in segments and report segment metadata back to the hub.\n */\nexport class RecordTaskHandler implements ITaskHandler {\n readonly taskType = 'pipeline.record'\n readonly description = 'Record an RTSP stream to disk segments'\n\n async handle(payload: unknown, context: TaskContext): Promise<unknown> {\n const { logger } = context\n const config = payload as { cameraId?: string; rtspUrl?: string; storagePath?: string }\n\n if (!config.cameraId || !config.rtspUrl) {\n throw new Error('pipeline.record requires cameraId and rtspUrl in payload')\n }\n\n logger.info(`Record task started: camera=${config.cameraId} url=${config.rtspUrl}`)\n\n // Stub: actual implementation would start ffmpeg copy-mode recording.\n return { status: 'started', cameraId: config.cameraId }\n }\n\n async cancel(): Promise<void> {\n // Stub: stop recording process\n }\n}\n","import * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport type {\n IStorageProvider as INewStorageProvider,\n StorageLocationType,\n} from '@camstack/types'\n\n// Inline constants to avoid runtime dependency on @camstack/types\n// (types is external in tsup bundle, may not be resolvable from data/addons/)\nconst STORAGE_LOCATION_TYPES: readonly StorageLocationType[] = [\n 'recordings-high', 'recordings-low', 'recordings-clips', 'event-images',\n 'models', 'addons-data', 'cache', 'logs',\n]\n\nconst DEFAULT_LOCATION_SUBDIRS: Readonly<Record<StorageLocationType, string>> = {\n 'recordings-high': 'recordings-high',\n 'recordings-low': 'recordings-low',\n 'recordings-clips': 'recordings-clips',\n 'event-images': 'event-images',\n 'models': 'models',\n 'addons-data': 'addons-data',\n 'cache': '/tmp/camstack-cache',\n 'logs': 'logs',\n}\n\n/**\n * Filesystem storage provider — serves all location types from a local directory tree.\n *\n * Default layout:\n * {rootPath}/recordings-high/\n * {rootPath}/recordings-low/\n * {rootPath}/recordings-clips/\n * {rootPath}/event-images/\n * {rootPath}/models/\n * {rootPath}/addons-data/\n * {rootPath}/logs/\n * /tmp/camstack-cache/ (cache is always local)\n *\n * Individual location paths can be overridden.\n */\nexport class FilesystemStorageProvider implements INewStorageProvider {\n readonly id = 'local'\n readonly name = 'Local Filesystem'\n readonly supportedLocations: readonly StorageLocationType[] = [...STORAGE_LOCATION_TYPES]\n\n private readonly rootPath: string\n private readonly locationPaths: Map<StorageLocationType, string>\n\n constructor(rootPath: string, overrides?: Partial<Record<StorageLocationType, string>>) {\n this.rootPath = path.resolve(rootPath)\n this.locationPaths = new Map()\n\n for (const loc of STORAGE_LOCATION_TYPES) {\n const override = overrides?.[loc]\n if (override) {\n this.locationPaths.set(loc, path.resolve(override))\n } else {\n const subdir = DEFAULT_LOCATION_SUBDIRS[loc]\n // Absolute paths (like /tmp/camstack-cache) are used as-is\n this.locationPaths.set(\n loc,\n path.isAbsolute(subdir) ? subdir : path.join(this.rootPath, subdir),\n )\n }\n }\n }\n\n resolve(location: StorageLocationType, relativePath: string): string {\n const base = this.locationPaths.get(location)\n if (!base) throw new Error(`Unknown storage location: ${location}`)\n return path.join(base, relativePath)\n }\n\n async write(location: StorageLocationType, relativePath: string, data: Buffer | NodeJS.ReadableStream): Promise<void> {\n const filePath = this.resolve(location, relativePath)\n await fs.promises.mkdir(path.dirname(filePath), { recursive: true })\n\n if (Buffer.isBuffer(data)) {\n await fs.promises.writeFile(filePath, data)\n } else {\n // Stream\n const writeStream = fs.createWriteStream(filePath)\n await new Promise<void>((resolve, reject) => {\n (data as NodeJS.ReadableStream).pipe(writeStream)\n writeStream.on('finish', resolve)\n writeStream.on('error', reject)\n })\n }\n }\n\n async read(location: StorageLocationType, relativePath: string): Promise<Buffer> {\n return fs.promises.readFile(this.resolve(location, relativePath))\n }\n\n async exists(location: StorageLocationType, relativePath: string): Promise<boolean> {\n try {\n await fs.promises.access(this.resolve(location, relativePath))\n return true\n } catch {\n return false\n }\n }\n\n async list(location: StorageLocationType, prefix?: string): Promise<readonly string[]> {\n const base = this.locationPaths.get(location)\n if (!base) return []\n const dir = prefix ? path.join(base, prefix) : base\n try {\n const entries = await fs.promises.readdir(dir, { withFileTypes: true })\n return entries.map(e => (prefix ? `${prefix}/${e.name}` : e.name))\n } catch {\n return []\n }\n }\n\n async delete(location: StorageLocationType, relativePath: string): Promise<void> {\n const filePath = this.resolve(location, relativePath)\n await fs.promises.rm(filePath, { force: true })\n }\n\n async getAvailableSpace(location: StorageLocationType): Promise<number | null> {\n const base = this.locationPaths.get(location)\n if (!base) return null\n try {\n const stats = await fs.promises.statfs(base)\n return stats.bavail * stats.bsize\n } catch {\n return null\n }\n }\n\n async initialize(): Promise<void> {\n for (const [, dirPath] of this.locationPaths) {\n await fs.promises.mkdir(dirPath, { recursive: true })\n }\n }\n\n async shutdown(): Promise<void> {\n // Nothing to clean up for filesystem\n }\n\n /** Get the resolved path for a location type */\n getLocationPath(location: StorageLocationType): string {\n const p = this.locationPaths.get(location)\n if (!p) throw new Error(`Unknown storage location: ${location}`)\n return p\n }\n\n /** Get the root path */\n getRootPath(): string {\n return this.rootPath\n }\n}\n\nexport default FilesystemStorageProvider\n","import Database from 'better-sqlite3'\nimport { randomUUID } from 'node:crypto'\nimport type {\n ISettingsBackend,\n SettingsCollection,\n SettingsRecord,\n QueryFilter,\n} from '@camstack/types'\n\n/**\n * SQLite implementation of ISettingsBackend.\n *\n * One table per collection, auto-created on first access.\n * All data stored as JSON in a TEXT column.\n * WAL mode for concurrent reads.\n */\nexport class SqliteSettingsBackend implements ISettingsBackend {\n private db: Database.Database | null = null\n private readonly ensuredTables = new Set<string>()\n private readonly runtimeDefaults: Record<string, unknown>\n\n constructor(private readonly dbPath: string, runtimeDefaults?: Record<string, unknown>) {\n this.runtimeDefaults = runtimeDefaults ?? {}\n }\n\n async initialize(): Promise<void> {\n // Ensure parent directory exists\n const dir = this.dbPath.substring(0, this.dbPath.lastIndexOf('/'))\n if (dir) {\n const fs = await import('node:fs')\n fs.mkdirSync(dir, { recursive: true })\n }\n this.db = new Database(this.dbPath)\n this.db.pragma('journal_mode = WAL')\n this.db.pragma('foreign_keys = ON')\n\n // Seed system-settings on first boot\n const isEmpty = await this.isEmpty('system-settings')\n if (isEmpty) {\n await this.seedDefaults()\n }\n }\n\n async shutdown(): Promise<void> {\n this.db?.close()\n this.db = null\n }\n\n // ---------------------------------------------------------------------------\n // ISettingsBackend implementation\n // ---------------------------------------------------------------------------\n\n async get(collection: SettingsCollection, key: string): Promise<unknown> {\n this.ensureTable(collection)\n const row = this.getDb()\n .prepare<[string], { data: string }>(`SELECT data FROM \"${collection}\" WHERE id = ?`)\n .get(key)\n if (!row) return undefined\n return JSON.parse(row.data)\n }\n\n async set(collection: SettingsCollection, key: string, value: unknown): Promise<void> {\n this.ensureTable(collection)\n this.getDb()\n .prepare(`INSERT INTO \"${collection}\" (id, data) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data`)\n .run(key, JSON.stringify(value))\n }\n\n async query(collection: SettingsCollection, filter?: QueryFilter): Promise<readonly SettingsRecord[]> {\n this.ensureTable(collection)\n let sql = `SELECT id, data FROM \"${collection}\"`\n const params: unknown[] = []\n\n const whereClauses: string[] = []\n\n if (filter?.where) {\n for (const [field, value] of Object.entries(filter.where)) {\n if (field === 'id') {\n whereClauses.push('id = ?')\n params.push(value)\n } else {\n whereClauses.push(`json_extract(data, '$.${field}') = ?`)\n params.push(typeof value === 'object' ? JSON.stringify(value) : value)\n }\n }\n }\n\n if (filter?.whereIn) {\n for (const [field, values] of Object.entries(filter.whereIn)) {\n const placeholders = values.map(() => '?').join(', ')\n if (field === 'id') {\n whereClauses.push(`id IN (${placeholders})`)\n } else {\n whereClauses.push(`json_extract(data, '$.${field}') IN (${placeholders})`)\n }\n params.push(...values)\n }\n }\n\n if (filter?.whereBetween) {\n for (const [field, [low, high]] of Object.entries(filter.whereBetween)) {\n if (field === 'id') {\n whereClauses.push('id BETWEEN ? AND ?')\n } else {\n whereClauses.push(`json_extract(data, '$.${field}') BETWEEN ? AND ?`)\n }\n params.push(low, high)\n }\n }\n\n if (whereClauses.length > 0) {\n sql += ` WHERE ${whereClauses.join(' AND ')}`\n }\n\n if (filter?.orderBy) {\n const dir = filter.orderBy.direction === 'desc' ? 'DESC' : 'ASC'\n if (filter.orderBy.field === 'id') {\n sql += ` ORDER BY id ${dir}`\n } else {\n sql += ` ORDER BY json_extract(data, '$.${filter.orderBy.field}') ${dir}`\n }\n }\n\n if (filter?.limit) {\n sql += ` LIMIT ?`\n params.push(filter.limit)\n }\n\n if (filter?.offset) {\n sql += ` OFFSET ?`\n params.push(filter.offset)\n }\n\n const rows = this.getDb()\n .prepare<unknown[], { id: string; data: string }>(sql)\n .all(...params)\n\n return rows.map(row => ({\n id: row.id,\n data: JSON.parse(row.data),\n }))\n }\n\n async insert(collection: SettingsCollection, record: SettingsRecord): Promise<void> {\n this.ensureTable(collection)\n const id = record.id || randomUUID()\n this.getDb()\n .prepare(`INSERT INTO \"${collection}\" (id, data) VALUES (?, ?)`)\n .run(id, JSON.stringify(record.data))\n }\n\n async update(collection: SettingsCollection, id: string, data: Record<string, unknown>): Promise<void> {\n this.ensureTable(collection)\n this.getDb()\n .prepare(`UPDATE \"${collection}\" SET data = ? WHERE id = ?`)\n .run(JSON.stringify(data), id)\n }\n\n async delete(collection: SettingsCollection, key: string): Promise<void> {\n this.ensureTable(collection)\n this.getDb()\n .prepare(`DELETE FROM \"${collection}\" WHERE id = ?`)\n .run(key)\n }\n\n async count(collection: SettingsCollection, filter?: QueryFilter): Promise<number> {\n this.ensureTable(collection)\n if (!filter) {\n const row = this.getDb()\n .prepare<[], { cnt: number }>(`SELECT COUNT(*) AS cnt FROM \"${collection}\"`)\n .get()\n return row?.cnt ?? 0\n }\n const rows = await this.query(collection, { ...filter, limit: undefined, offset: undefined })\n return rows.length\n }\n\n async isEmpty(collection: SettingsCollection): Promise<boolean> {\n this.ensureTable(collection)\n const row = this.getDb()\n .prepare<[], { cnt: number }>(`SELECT COUNT(*) AS cnt FROM \"${collection}\"`)\n .get()\n return (row?.cnt ?? 0) === 0\n }\n\n // ---------------------------------------------------------------------------\n // Legacy SettingsStore compatibility (used by ConfigManager.setSettingsStore)\n // ---------------------------------------------------------------------------\n\n /** Get a system setting by dot-notation key */\n getSystem(key: string): unknown {\n this.ensureTable('system-settings')\n const row = this.getDb()\n .prepare<[string], { data: string }>('SELECT data FROM \"system-settings\" WHERE id = ?')\n .get(key)\n if (!row) return undefined\n return JSON.parse(row.data)\n }\n\n /** Set a system setting */\n setSystem(key: string, value: unknown): void {\n this.ensureTable('system-settings')\n this.getDb()\n .prepare('INSERT INTO \"system-settings\" (id, data) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data')\n .run(key, JSON.stringify(value))\n }\n\n /** Get all system settings as flat key-value */\n getAllSystem(): Record<string, unknown> {\n this.ensureTable('system-settings')\n const rows = this.getDb()\n .prepare<[], { id: string; data: string }>('SELECT id, data FROM \"system-settings\"')\n .all()\n return Object.fromEntries(rows.map(r => [r.id, JSON.parse(r.data)]))\n }\n\n /** Get all settings for an addon */\n getAllAddon(addonId: string): Record<string, unknown> {\n this.ensureTable('addon-settings')\n const rows = this.getDb()\n .prepare<[string], { id: string; data: string }>('SELECT id, data FROM \"addon-settings\" WHERE json_extract(data, \\'$.addonId\\') = ?')\n .all(addonId)\n if (rows.length === 0) return {}\n // addon-settings stores all keys for an addon as separate rows with id = \"addonId.key\"\n const result: Record<string, unknown> = {}\n for (const row of rows) {\n const parsed = JSON.parse(row.data)\n const key = row.id.startsWith(`${addonId}.`) ? row.id.slice(addonId.length + 1) : row.id\n result[key] = parsed.value ?? parsed\n }\n return result\n }\n\n /** Bulk-set all settings for an addon */\n setAllAddon(addonId: string, config: Record<string, unknown>): void {\n this.ensureTable('addon-settings')\n const db = this.getDb()\n const deleteStmt = db.prepare('DELETE FROM \"addon-settings\" WHERE id LIKE ? || \\'%\\'')\n const insertStmt = db.prepare('INSERT INTO \"addon-settings\" (id, data) VALUES (?, ?)')\n db.transaction(() => {\n deleteStmt.run(`${addonId}.`)\n for (const [key, value] of Object.entries(config)) {\n insertStmt.run(`${addonId}.${key}`, JSON.stringify({ addonId, key, value }))\n }\n })()\n }\n\n /** Get all settings for a provider */\n getAllProvider(providerId: string): Record<string, unknown> {\n return this.getAllScoped('provider-settings', providerId)\n }\n\n /** Set a provider setting */\n setProvider(providerId: string, key: string, value: unknown): void {\n this.setScopedKey('provider-settings', providerId, key, value)\n }\n\n /** Get all settings for a device */\n getAllDevice(deviceId: string): Record<string, unknown> {\n return this.getAllScoped('device-settings', deviceId)\n }\n\n /** Set a device setting */\n setDevice(deviceId: string, key: string, value: unknown): void {\n this.setScopedKey('device-settings', deviceId, key, value)\n }\n\n /** Seed system-settings with runtime defaults (first boot) */\n private async seedDefaults(): Promise<void> {\n this.ensureTable('system-settings')\n const insert = this.getDb().prepare(\n 'INSERT OR IGNORE INTO \"system-settings\" (id, data) VALUES (?, ?)',\n )\n this.getDb().transaction(() => {\n for (const [key, value] of Object.entries(this.runtimeDefaults)) {\n insert.run(key, JSON.stringify(value))\n }\n })()\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private getDb(): Database.Database {\n if (!this.db) throw new Error('SqliteSettingsBackend not initialized — call initialize() first')\n return this.db\n }\n\n private ensureTable(collection: string): void {\n if (this.ensuredTables.has(collection)) return\n this.getDb().exec(\n `CREATE TABLE IF NOT EXISTS \"${collection}\" (id TEXT PRIMARY KEY, data TEXT NOT NULL)`,\n )\n this.ensuredTables.add(collection)\n }\n\n private getAllScoped(collection: string, scopeId: string): Record<string, unknown> {\n this.ensureTable(collection)\n const rows = this.getDb()\n .prepare<[string], { id: string; data: string }>(`SELECT id, data FROM \"${collection}\" WHERE id LIKE ? || '.%'`)\n .all(scopeId)\n const result: Record<string, unknown> = {}\n for (const row of rows) {\n const key = row.id.slice(scopeId.length + 1)\n const parsed = JSON.parse(row.data)\n result[key] = parsed.value ?? parsed\n }\n return result\n }\n\n private setScopedKey(collection: string, scopeId: string, key: string, value: unknown): void {\n this.ensureTable(collection)\n this.getDb()\n .prepare(`INSERT INTO \"${collection}\" (id, data) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data`)\n .run(`${scopeId}.${key}`, JSON.stringify({ scopeId, key, value }))\n }\n}\n\nexport default SqliteSettingsBackend\n","import Database from 'better-sqlite3'\nimport * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport type {\n IStorageProvider,\n IStorageLocation,\n IStructuredStorage,\n IFileStorage,\n StorageLocationName,\n StorageRecord,\n QueryFilter,\n} from '@camstack/types'\n\ntype LocationType = 'structured' | 'files' | 'both'\n\n/** Which locations need structured (SQL) storage, files storage, or both.\n * All structured locations share a SINGLE SQLite database (camstack.db).\n * File locations use the filesystem at their configured path. */\nconst LOCATION_TYPES: Record<string, LocationType> = {\n // New location names (from StorageLocationManager)\n data: 'structured', // settings, events, trails — SQL only\n media: 'files', // crops, snapshots, thumbnails — files only\n recordings: 'files', // video segments — files only\n models: 'files', // ONNX/TFLite models — files only\n cache: 'files', // temp files — files only\n logs: 'files', // Winston log files — files only\n // Legacy location names (backward compat)\n config: 'structured',\n events: 'structured',\n addon: 'both',\n}\n\nclass SqliteStructuredStorage implements IStructuredStorage {\n private readonly ensuredTables = new Set<string>()\n\n constructor(private readonly db: Database.Database) {}\n\n private ensureTable(collection: string): void {\n if (this.ensuredTables.has(collection)) return\n this.db.exec(\n `CREATE TABLE IF NOT EXISTS \"${collection}\" (id TEXT PRIMARY KEY, data TEXT)`,\n )\n this.ensuredTables.add(collection)\n }\n\n async insert(record: StorageRecord): Promise<StorageRecord> {\n this.ensureTable(record.collection)\n const id = record.id || randomUUID()\n const newRecord: StorageRecord = {\n collection: record.collection,\n id,\n data: record.data,\n }\n this.db\n .prepare(`INSERT INTO \"${record.collection}\" (id, data) VALUES (?, ?)`)\n .run(id, JSON.stringify(newRecord.data))\n return newRecord\n }\n\n async query(collection: string, filter?: QueryFilter): Promise<readonly StorageRecord[]> {\n this.ensureTable(collection)\n const { sql, params } = this.buildSelect(collection, filter)\n const rows = this.db.prepare(sql).all(...params) as Array<{ id: string; data: string }>\n return rows.map((row) => ({\n collection,\n id: row.id,\n data: JSON.parse(row.data) as Record<string, unknown>,\n }))\n }\n\n async update(\n collection: string,\n id: string,\n data: Record<string, unknown>,\n ): Promise<StorageRecord> {\n this.ensureTable(collection)\n this.db\n .prepare(`UPDATE \"${collection}\" SET data = ? WHERE id = ?`)\n .run(JSON.stringify(data), id)\n return { collection, id, data }\n }\n\n async delete(collection: string, id: string): Promise<void> {\n this.ensureTable(collection)\n this.db.prepare(`DELETE FROM \"${collection}\" WHERE id = ?`).run(id)\n }\n\n async count(collection: string, filter?: QueryFilter): Promise<number> {\n this.ensureTable(collection)\n const { sql, params } = this.buildCount(collection, filter)\n const row = this.db.prepare(sql).get(...params) as { cnt: number }\n return row.cnt\n }\n\n private buildWhereClause(filter?: QueryFilter): { clause: string; params: unknown[] } {\n if (!filter) return { clause: '', params: [] }\n\n const conditions: string[] = []\n const params: unknown[] = []\n\n if (filter.where) {\n for (const [field, value] of Object.entries(filter.where)) {\n if (field === 'id') {\n conditions.push('id = ?')\n params.push(value)\n } else {\n conditions.push(`json_extract(data, '$.${field}') = ?`)\n params.push(value)\n }\n }\n }\n\n if (filter.whereIn) {\n for (const [field, values] of Object.entries(filter.whereIn)) {\n const placeholders = values.map(() => '?').join(', ')\n if (field === 'id') {\n conditions.push(`id IN (${placeholders})`)\n } else {\n conditions.push(`json_extract(data, '$.${field}') IN (${placeholders})`)\n }\n params.push(...values)\n }\n }\n\n if (filter.whereBetween) {\n for (const [field, [low, high]] of Object.entries(filter.whereBetween)) {\n if (field === 'id') {\n conditions.push('id BETWEEN ? AND ?')\n } else {\n conditions.push(`json_extract(data, '$.${field}') BETWEEN ? AND ?`)\n }\n params.push(low, high)\n }\n }\n\n const clause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : ''\n return { clause, params }\n }\n\n private buildSelect(collection: string, filter?: QueryFilter): { sql: string; params: unknown[] } {\n const { clause, params } = this.buildWhereClause(filter)\n let sql = `SELECT id, data FROM \"${collection}\"${clause}`\n\n if (filter?.orderBy) {\n const dir = filter.orderBy.direction === 'desc' ? 'DESC' : 'ASC'\n if (filter.orderBy.field === 'id') {\n sql += ` ORDER BY id ${dir}`\n } else {\n sql += ` ORDER BY json_extract(data, '$.${filter.orderBy.field}') ${dir}`\n }\n }\n\n if (filter?.limit !== undefined) {\n sql += ` LIMIT ?`\n params.push(filter.limit)\n }\n\n if (filter?.offset !== undefined) {\n sql += ` OFFSET ?`\n params.push(filter.offset)\n }\n\n return { sql, params }\n }\n\n private buildCount(collection: string, filter?: QueryFilter): { sql: string; params: unknown[] } {\n const { clause, params } = this.buildWhereClause(filter)\n return { sql: `SELECT COUNT(*) as cnt FROM \"${collection}\"${clause}`, params }\n }\n}\n\nexport class FileSystemStorage implements IFileStorage {\n constructor(private readonly basePath: string) {}\n\n async readFile(filePath: string): Promise<Buffer> {\n const fullPath = path.join(this.basePath, filePath)\n return fs.promises.readFile(fullPath)\n }\n\n async writeFile(filePath: string, data: Buffer): Promise<void> {\n const fullPath = path.join(this.basePath, filePath)\n fs.mkdirSync(path.dirname(fullPath), { recursive: true })\n await fs.promises.writeFile(fullPath, data)\n }\n\n async deleteFile(filePath: string): Promise<void> {\n const fullPath = path.join(this.basePath, filePath)\n await fs.promises.unlink(fullPath)\n }\n\n async listFiles(prefix?: string): Promise<readonly string[]> {\n const searchDir = prefix ? path.join(this.basePath, prefix) : this.basePath\n try {\n const entries = await fs.promises.readdir(searchDir, { recursive: true })\n const files: string[] = []\n for (const entry of entries) {\n const entryStr = String(entry)\n const relative = prefix ? path.join(prefix, entryStr) : entryStr\n const fullPath = path.join(this.basePath, relative)\n try {\n const stat = await fs.promises.stat(fullPath)\n if (stat.isFile()) {\n files.push(relative)\n }\n } catch {\n // Skip entries that can't be stat'd\n }\n }\n return files\n } catch {\n return []\n }\n }\n\n async getFileUrl(_path: string): Promise<string> {\n return null as unknown as string\n }\n\n async exists(filePath: string): Promise<boolean> {\n const fullPath = path.join(this.basePath, filePath)\n try {\n await fs.promises.access(fullPath, fs.constants.F_OK)\n return true\n } catch {\n return false\n }\n }\n}\n\n/** @deprecated Use FilesystemStorageProvider + SqliteSettingsBackend instead */\nexport class SqliteStorageProvider {\n private mainDb: Database.Database | null = null\n private sharedStructured: SqliteStructuredStorage | null = null\n private readonly locations = new Map<StorageLocationName, IStorageLocation>()\n\n async initialize(): Promise<void> {\n // Called by interface contract; actual setup done via configure()\n }\n\n /**\n * Configure all storage locations.\n * ONE single SQLite database (camstack.db) is used for ALL structured storage.\n * File-based locations use the filesystem at their configured path.\n */\n async configure(config: { locations: Record<string, string> }): Promise<void> {\n // Find the 'data' location path for the single DB (fall back to first structured location)\n const dataPath = config.locations['data'] ?? config.locations['config'] ?? Object.values(config.locations)[0]\n if (!dataPath) throw new Error('No data path configured for SQLite storage')\n\n // Create single database\n fs.mkdirSync(dataPath, { recursive: true })\n const dbPath = path.join(dataPath, 'camstack.db')\n this.mainDb = new Database(dbPath)\n this.mainDb.pragma('journal_mode = WAL')\n this.sharedStructured = new SqliteStructuredStorage(this.mainDb)\n\n // Configure each location\n for (const [name, dirPath] of Object.entries(config.locations)) {\n const locationName = name as StorageLocationName\n const locationType = LOCATION_TYPES[name] ?? 'files'\n\n fs.mkdirSync(dirPath, { recursive: true })\n\n const location: IStorageLocation = {}\n\n // All structured storage shares the single DB\n if (locationType === 'structured' || locationType === 'both') {\n location.structured = this.sharedStructured\n }\n\n if (locationType === 'files' || locationType === 'both') {\n location.files = new FileSystemStorage(dirPath)\n }\n\n this.locations.set(locationName, location)\n }\n }\n\n getLocation(name: StorageLocationName): IStorageLocation {\n const location = this.locations.get(name)\n if (!location) {\n throw new Error(`Storage location \"${name}\" not found`)\n }\n return location\n }\n\n async shutdown(): Promise<void> {\n if (this.mainDb) {\n this.mainDb.close()\n this.mainDb = null\n this.sharedStructured = null\n }\n this.locations.clear()\n }\n\n async export(_locationName: StorageLocationName): Promise<Buffer> {\n throw new Error('Export not yet implemented')\n }\n\n async import(_locationName: StorageLocationName, _data: Buffer): Promise<void> {\n throw new Error('Import not yet implemented')\n }\n}\n","import type {\n ICamstackAddon,\n AddonManifest,\n AddonContext,\n IConfigurable,\n ConfigUISchema,\n CapabilityProviderMap,\n} from '@camstack/types'\nimport { SqliteStorageProvider } from './sqlite-storage.provider'\n\nexport class SqliteStorageAddon implements ICamstackAddon, IConfigurable {\n readonly manifest: AddonManifest = {\n id: 'sqlite-storage',\n name: 'SQLite Storage',\n version: '1.0.0',\n capabilities: ['storage'],\n }\n\n private provider: SqliteStorageProvider | null = null\n\n async initialize(context: AddonContext): Promise<void> {\n const storageConfig = {\n locations: { ...context.locationPaths } as Record<string, string>,\n }\n this.provider = new SqliteStorageProvider()\n await this.provider.configure(storageConfig)\n context.logger.info('SQLite storage initialized')\n }\n\n async shutdown(): Promise<void> {\n await this.provider?.shutdown()\n }\n\n getProvider(): SqliteStorageProvider {\n if (!this.provider) throw new Error('SQLite storage not initialized')\n return this.provider\n }\n\n getCapabilityProvider<K extends keyof CapabilityProviderMap>(\n name: K,\n ): CapabilityProviderMap[K] | null {\n if (name === 'storage' && this.provider) {\n return this.provider as unknown as CapabilityProviderMap[K]\n }\n return null\n }\n\n getConfigSchema(): ConfigUISchema {\n return {\n sections: [],\n }\n }\n\n getConfig(): Record<string, unknown> {\n return {}\n }\n\n async onConfigChange(_config: Record<string, unknown>): Promise<void> {\n // No configurable fields\n }\n}\n","import Database from 'better-sqlite3'\nimport { CORE_TABLE_DDL } from './sql-schema.js'\nimport { RUNTIME_DEFAULTS } from '@camstack/kernel'\n\n/**\n * Thin wrapper over better-sqlite3 that manages the four settings tables:\n * system_settings, addon_settings, provider_settings, device_settings.\n *\n * All values are stored as JSON text and deserialized on read.\n */\nexport class SettingsStore {\n private readonly db: Database.Database\n\n constructor(dbPath: string) {\n this.db = new Database(dbPath)\n this.db.pragma('journal_mode = WAL')\n this.db.pragma('foreign_keys = ON')\n this.initTables()\n }\n\n // ---------------------------------------------------------------------------\n // System settings\n // ---------------------------------------------------------------------------\n\n getSystem(key: string): unknown {\n const row = this.db\n .prepare<[string], { value: string }>('SELECT value FROM system_settings WHERE key = ?')\n .get(key)\n if (row === undefined) return undefined\n return JSON.parse(row.value)\n }\n\n setSystem(key: string, value: unknown): void {\n this.db\n .prepare(\n `INSERT INTO system_settings (key, value, updated_at) VALUES (?, json(?), unixepoch())\n ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`,\n )\n .run(key, JSON.stringify(value))\n }\n\n getAllSystem(): Record<string, unknown> {\n const rows = this.db\n .prepare<[], { key: string; value: string }>('SELECT key, value FROM system_settings')\n .all()\n return Object.fromEntries(rows.map(r => [r.key, JSON.parse(r.value)]))\n }\n\n // ---------------------------------------------------------------------------\n // Addon settings\n // ---------------------------------------------------------------------------\n\n getAddon(addonId: string, key: string): unknown {\n const row = this.db\n .prepare<[string, string], { value: string }>(\n 'SELECT value FROM addon_settings WHERE addon_id = ? AND key = ?',\n )\n .get(addonId, key)\n if (row === undefined) return undefined\n return JSON.parse(row.value)\n }\n\n setAddon(addonId: string, key: string, value: unknown): void {\n this.db\n .prepare(\n `INSERT INTO addon_settings (addon_id, key, value, updated_at) VALUES (?, ?, json(?), unixepoch())\n ON CONFLICT(addon_id, key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`,\n )\n .run(addonId, key, JSON.stringify(value))\n }\n\n getAllAddon(addonId: string): Record<string, unknown> {\n const rows = this.db\n .prepare<[string], { key: string; value: string }>(\n 'SELECT key, value FROM addon_settings WHERE addon_id = ?',\n )\n .all(addonId)\n return Object.fromEntries(rows.map(r => [r.key, JSON.parse(r.value)]))\n }\n\n /** Bulk-replace all keys for an addon (within a transaction). */\n setAllAddon(addonId: string, config: Record<string, unknown>): void {\n const deleteStmt = this.db.prepare('DELETE FROM addon_settings WHERE addon_id = ?')\n const insertStmt = this.db.prepare(\n `INSERT INTO addon_settings (addon_id, key, value, updated_at) VALUES (?, ?, json(?), unixepoch())`,\n )\n this.db.transaction(() => {\n deleteStmt.run(addonId)\n for (const [key, value] of Object.entries(config)) {\n insertStmt.run(addonId, key, JSON.stringify(value))\n }\n })()\n }\n\n // ---------------------------------------------------------------------------\n // Provider settings\n // ---------------------------------------------------------------------------\n\n getProvider(providerId: string, key: string): unknown {\n const row = this.db\n .prepare<[string, string], { value: string }>(\n 'SELECT value FROM provider_settings WHERE provider_id = ? AND key = ?',\n )\n .get(providerId, key)\n if (row === undefined) return undefined\n return JSON.parse(row.value)\n }\n\n setProvider(providerId: string, key: string, value: unknown): void {\n this.db\n .prepare(\n `INSERT INTO provider_settings (provider_id, key, value, updated_at) VALUES (?, ?, json(?), unixepoch())\n ON CONFLICT(provider_id, key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`,\n )\n .run(providerId, key, JSON.stringify(value))\n }\n\n getAllProvider(providerId: string): Record<string, unknown> {\n const rows = this.db\n .prepare<[string], { key: string; value: string }>(\n 'SELECT key, value FROM provider_settings WHERE provider_id = ?',\n )\n .all(providerId)\n return Object.fromEntries(rows.map(r => [r.key, JSON.parse(r.value)]))\n }\n\n // ---------------------------------------------------------------------------\n // Device settings\n // ---------------------------------------------------------------------------\n\n getDevice(deviceId: string, key: string): unknown {\n const row = this.db\n .prepare<[string, string], { value: string }>(\n 'SELECT value FROM device_settings WHERE device_id = ? AND key = ?',\n )\n .get(deviceId, key)\n if (row === undefined) return undefined\n return JSON.parse(row.value)\n }\n\n setDevice(deviceId: string, key: string, value: unknown): void {\n this.db\n .prepare(\n `INSERT INTO device_settings (device_id, key, value, updated_at) VALUES (?, ?, json(?), unixepoch())\n ON CONFLICT(device_id, key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`,\n )\n .run(deviceId, key, JSON.stringify(value))\n }\n\n getAllDevice(deviceId: string): Record<string, unknown> {\n const rows = this.db\n .prepare<[string], { key: string; value: string }>(\n 'SELECT key, value FROM device_settings WHERE device_id = ?',\n )\n .all(deviceId)\n return Object.fromEntries(rows.map(r => [r.key, JSON.parse(r.value)]))\n }\n\n // ---------------------------------------------------------------------------\n // Lifecycle\n // ---------------------------------------------------------------------------\n\n /** Close the SQLite connection (call on shutdown). */\n close(): void {\n this.db.close()\n }\n\n /** Check if system_settings is empty (used for first-boot seeding). */\n isSystemSettingsEmpty(): boolean {\n const row = this.db\n .prepare<[], { cnt: number }>('SELECT COUNT(*) AS cnt FROM system_settings')\n .get()\n return (row?.cnt ?? 0) === 0\n }\n\n /** Seed system_settings with RUNTIME_DEFAULTS (only on first boot). */\n seedDefaults(): void {\n const insert = this.db.prepare(\n `INSERT OR IGNORE INTO system_settings (key, value, updated_at) VALUES (?, json(?), unixepoch())`,\n )\n this.db.transaction(() => {\n for (const [key, value] of Object.entries(RUNTIME_DEFAULTS)) {\n insert.run(key, JSON.stringify(value))\n }\n })()\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private initTables(): void {\n this.db.transaction(() => {\n for (const stmt of CORE_TABLE_DDL) {\n this.db.prepare(stmt).run()\n }\n })()\n }\n}\n","/** Core table DDL statements -- executed on first boot */\nexport const CORE_TABLE_DDL: readonly string[] = [\n // Settings tables\n `CREATE TABLE IF NOT EXISTS system_settings (\n key TEXT PRIMARY KEY,\n value JSON NOT NULL,\n updated_at INTEGER NOT NULL DEFAULT (unixepoch())\n )`,\n `CREATE TABLE IF NOT EXISTS addon_settings (\n addon_id TEXT NOT NULL,\n key TEXT NOT NULL,\n value JSON NOT NULL,\n updated_at INTEGER NOT NULL DEFAULT (unixepoch()),\n PRIMARY KEY (addon_id, key)\n )`,\n `CREATE TABLE IF NOT EXISTS provider_settings (\n provider_id TEXT NOT NULL,\n key TEXT NOT NULL,\n value JSON NOT NULL,\n updated_at INTEGER NOT NULL DEFAULT (unixepoch()),\n PRIMARY KEY (provider_id, key)\n )`,\n `CREATE TABLE IF NOT EXISTS device_settings (\n device_id TEXT NOT NULL,\n key TEXT NOT NULL,\n value JSON NOT NULL,\n updated_at INTEGER NOT NULL DEFAULT (unixepoch()),\n PRIMARY KEY (device_id, key)\n )`,\n\n // Detection events\n `CREATE TABLE IF NOT EXISTS detection_events (\n id TEXT PRIMARY KEY,\n timestamp INTEGER NOT NULL,\n device_id TEXT NOT NULL,\n class_name TEXT NOT NULL,\n score REAL NOT NULL,\n severity TEXT NOT NULL,\n track_id TEXT,\n zones JSON,\n recognition JSON,\n media_files JSON,\n data JSON\n )`,\n `CREATE INDEX IF NOT EXISTS idx_det_device_ts ON detection_events(device_id, timestamp)`,\n `CREATE INDEX IF NOT EXISTS idx_det_class_ts ON detection_events(class_name, timestamp)`,\n\n // Audio levels\n `CREATE TABLE IF NOT EXISTS audio_levels (\n id TEXT PRIMARY KEY,\n timestamp INTEGER NOT NULL,\n device_id TEXT NOT NULL,\n dbfs REAL NOT NULL,\n rms REAL NOT NULL,\n state TEXT NOT NULL\n )`,\n `CREATE INDEX IF NOT EXISTS idx_audio_device_ts ON audio_levels(device_id, timestamp)`,\n\n // Track trails\n `CREATE TABLE IF NOT EXISTS track_trails (\n track_id TEXT PRIMARY KEY,\n device_id TEXT NOT NULL,\n class_name TEXT NOT NULL,\n first_seen INTEGER NOT NULL,\n last_seen INTEGER NOT NULL,\n positions JSON NOT NULL,\n snapshots JSON,\n total_distance REAL,\n zones_visited JSON\n )`,\n `CREATE INDEX IF NOT EXISTS idx_trails_device_ts ON track_trails(device_id, first_seen)`,\n]\n\n/** Addon table schema declaration */\nexport interface AddonTableSchema {\n readonly name: string\n readonly columns: ReadonlyArray<{\n readonly name: string\n readonly type: 'TEXT' | 'INTEGER' | 'REAL' | 'JSON'\n readonly primaryKey?: boolean\n readonly notNull?: boolean\n }>\n readonly indexes?: ReadonlyArray<{\n readonly name: string\n readonly columns: readonly string[]\n readonly unique?: boolean\n }>\n}\n\n/** Generate CREATE TABLE DDL from addon schema */\nexport function addonTableToDdl(schema: AddonTableSchema): string[] {\n const pks = schema.columns.filter(c => c.primaryKey).map(c => c.name)\n const colDefs = schema.columns.map(c => {\n const parts = [c.name, c.type]\n if (c.notNull) parts.push('NOT NULL')\n return parts.join(' ')\n })\n\n let ddl = `CREATE TABLE IF NOT EXISTS ${schema.name} (\\n ${colDefs.join(',\\n ')}`\n if (pks.length > 0) {\n ddl += `,\\n PRIMARY KEY (${pks.join(', ')})`\n }\n ddl += '\\n)'\n\n const stmts = [ddl]\n for (const idx of schema.indexes ?? []) {\n const unique = idx.unique ? 'UNIQUE ' : ''\n stmts.push(`CREATE ${unique}INDEX IF NOT EXISTS ${idx.name} ON ${schema.name}(${idx.columns.join(', ')})`)\n }\n return stmts\n}\n","import * as winston from 'winston'\nimport DailyRotateFile from 'winston-daily-rotate-file'\nimport * as path from 'node:path'\nimport type { ILogDestination, LogEntry, LogFilter } from '@camstack/types'\n\ninterface WinstonConfig {\n readonly level: string\n readonly retentionDays: number\n /** Resolved absolute path to the logs directory (replaces the old dataPath field). */\n readonly logsDir: string\n}\n\nfunction formatScope(scope: readonly string[]): string {\n if (scope.length === 0) return ''\n const [first, ...rest] = scope\n const restFormatted = rest.map((s) => `[${s}]`).join('')\n return `(${first})${restFormatted}`\n}\n\nexport class WinstonDestination implements ILogDestination {\n private logger: winston.Logger | null = null\n\n async initialize(config?: WinstonConfig): Promise<void> {\n const {\n level = 'info',\n retentionDays = 30,\n logsDir = path.join('camstack-data', 'logs'),\n } = config ?? {}\n\n const consoleFormat = winston.format.combine(\n winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),\n winston.format.colorize(),\n winston.format.printf(({ timestamp, level: lvl, message, scope }) => {\n const scopeStr = scope ? ` ${scope}` : ''\n return `${timestamp} [${lvl}]${scopeStr} - ${message}`\n }),\n )\n\n const fileFormat = winston.format.combine(\n winston.format.timestamp(),\n winston.format.json(),\n )\n\n this.logger = winston.createLogger({\n level,\n transports: [\n new winston.transports.Console({\n format: consoleFormat,\n }),\n new DailyRotateFile({\n dirname: logsDir,\n filename: 'camstack-%DATE%.log',\n datePattern: 'YYYY-MM-DD',\n maxFiles: `${retentionDays}d`,\n format: fileFormat,\n }),\n ],\n })\n }\n\n write(entry: LogEntry): void {\n if (!this.logger) return\n\n const scope = formatScope(entry.scope)\n const meta = entry.meta ?? {}\n\n this.logger.log({\n level: entry.level,\n message: entry.message,\n scope,\n timestamp: entry.timestamp.toISOString(),\n ...meta,\n })\n }\n\n async query(_filter: LogFilter): Promise<readonly LogEntry[]> {\n // File-based log querying is not implemented; use structured storage for log queries\n return []\n }\n\n async shutdown(): Promise<void> {\n if (!this.logger) return\n\n await new Promise<void>((resolve) => {\n this.logger!.on('finish', resolve)\n this.logger!.end()\n })\n this.logger = null\n }\n}\n","import type {\n ICamstackAddon,\n AddonManifest,\n AddonContext,\n IConfigurable,\n ConfigUISchema,\n CapabilityProviderMap,\n} from '@camstack/types'\nimport { WinstonDestination } from './winston-destination'\n\nexport class WinstonLoggingAddon implements ICamstackAddon, IConfigurable {\n readonly manifest: AddonManifest = {\n id: 'winston-logging',\n name: 'Winston Logging',\n version: '1.0.0',\n capabilities: ['log-destination'],\n }\n\n private destination: WinstonDestination | null = null\n private currentConfig = {\n level: 'info',\n retentionDays: 30,\n }\n\n async initialize(context: AddonContext): Promise<void> {\n this.currentConfig = {\n level: (context.addonConfig.level as string) ?? this.currentConfig.level,\n retentionDays: (context.addonConfig.retentionDays as number) ?? this.currentConfig.retentionDays,\n }\n const logsDir = context.locationPaths.logs\n this.destination = new WinstonDestination()\n await this.destination.initialize({ ...this.currentConfig, logsDir })\n context.logger.info('Winston logging initialized')\n }\n\n async shutdown(): Promise<void> {\n await this.destination?.shutdown()\n }\n\n getDestination(): WinstonDestination {\n if (!this.destination) throw new Error('Winston not initialized')\n return this.destination\n }\n\n getCapabilityProvider<K extends keyof CapabilityProviderMap>(\n name: K,\n ): CapabilityProviderMap[K] | null {\n if (name === 'log-destination' && this.destination) {\n return this.destination as unknown as CapabilityProviderMap[K]\n }\n return null\n }\n\n getConfigSchema(): ConfigUISchema {\n return {\n sections: [\n {\n id: 'winston-retention',\n title: 'Log Retention',\n description: 'How long Winston keeps rotated log files on disk.',\n columns: 1,\n fields: [\n {\n type: 'number',\n key: 'retentionDays',\n label: 'Retention (days)',\n description: 'Number of days to keep rotated log files before deletion',\n min: 1,\n max: 365,\n step: 1,\n unit: 'days',\n },\n ],\n },\n ],\n }\n }\n\n getConfig(): Record<string, unknown> {\n return { ...this.currentConfig }\n }\n\n async onConfigChange(config: Record<string, unknown>): Promise<void> {\n this.currentConfig = {\n level: (config.level as string) ?? this.currentConfig.level,\n retentionDays: (config.retentionDays as number) ?? this.currentConfig.retentionDays,\n }\n }\n}\n","import { randomUUID } from 'node:crypto'\nimport type { IScopedLogger, IEventBus, IStorageLocation, BackupManifest } from '@camstack/types'\n\nexport type { BackupManifest }\n\nexport interface BackupConfig {\n readonly backupDir: string\n readonly retentionCount: number\n}\n\nexport class LocalBackupService {\n private manifests: BackupManifest[] = []\n\n constructor(\n private readonly config: BackupConfig,\n private readonly logger: IScopedLogger,\n private readonly eventBus: IEventBus,\n private readonly storage: IStorageLocation,\n ) {}\n\n /** Create a backup of specified locations */\n async backup(options?: {\n locations?: string[]\n label?: string\n }): Promise<BackupManifest> {\n const id = randomUUID()\n const timestamp = Date.now()\n const locations = options?.locations ?? ['config', 'events', 'logs']\n\n this.logger.info(`Starting backup ${id} (${locations.join(', ')})`)\n\n const manifest: BackupManifest = {\n id,\n timestamp,\n label: options?.label,\n locations,\n sizeMB: 0,\n path: `${this.config.backupDir}/${id}`,\n }\n\n const updated = [...this.manifests, manifest]\n this.manifests = updated\n\n await this.pruneOldBackups()\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'addon', id: 'local-backup' },\n category: 'backup.completed',\n data: { backupId: id, locations: [...locations], sizeMB: manifest.sizeMB },\n })\n\n this.logger.info(`Backup ${id} completed`)\n return manifest\n }\n\n /** Restore from a backup */\n async restore(backupId: string): Promise<void> {\n const manifest = this.manifests.find((m) => m.id === backupId)\n if (!manifest) throw new Error(`Backup ${backupId} not found`)\n\n this.logger.info(`Restoring from backup ${backupId}`)\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'addon', id: 'local-backup' },\n category: 'backup.restored',\n data: { backupId },\n })\n }\n\n /** List all backups sorted by timestamp descending */\n list(): readonly BackupManifest[] {\n return [...this.manifests].sort((a, b) => b.timestamp - a.timestamp)\n }\n\n /** Delete a specific backup */\n async delete(backupId: string): Promise<void> {\n this.manifests = this.manifests.filter((m) => m.id !== backupId)\n }\n\n private async pruneOldBackups(): Promise<void> {\n const sorted = [...this.manifests].sort((a, b) => a.timestamp - b.timestamp)\n\n while (sorted.length > this.config.retentionCount) {\n const oldest = sorted.shift()\n if (oldest) {\n this.logger.info(`Pruning old backup ${oldest.id}`)\n this.manifests = this.manifests.filter((m) => m.id !== oldest.id)\n }\n }\n }\n}\n","import * as path from 'node:path'\nimport type {\n ICamstackAddon, AddonManifest, AddonContext,\n IConfigurable, ConfigUISchema, CapabilityProviderMap,\n} from '@camstack/types'\nimport { LocalBackupService } from './local-backup'\nimport type { BackupConfig } from './local-backup'\n\nexport class LocalBackupAddon implements ICamstackAddon, IConfigurable {\n readonly manifest: AddonManifest = {\n id: 'local-backup',\n name: 'Local Backup',\n version: '1.0.0',\n capabilities: ['backup'],\n }\n\n private service: LocalBackupService | null = null\n private currentConfig = {\n retentionCount: 7,\n }\n\n async initialize(context: AddonContext): Promise<void> {\n this.currentConfig = {\n retentionCount: (context.addonConfig.retentionCount as number) ?? this.currentConfig.retentionCount,\n }\n const backupConfig: BackupConfig = {\n backupDir: path.join(context.locationPaths.data, 'backups'),\n retentionCount: this.currentConfig.retentionCount,\n }\n this.service = new LocalBackupService(\n backupConfig,\n context.logger,\n context.eventBus,\n context.storage,\n )\n context.logger.info('Local Backup initialized')\n }\n\n async shutdown(): Promise<void> {\n this.service = null\n }\n\n getService(): LocalBackupService {\n if (!this.service) throw new Error('Local Backup not initialized')\n return this.service\n }\n\n getCapabilityProvider<K extends keyof CapabilityProviderMap>(\n name: K,\n ): CapabilityProviderMap[K] | null {\n if (name === 'backup' as string && this.service) {\n return this.service as unknown as CapabilityProviderMap[K]\n }\n return null\n }\n\n getConfigSchema(): ConfigUISchema {\n return {\n sections: [\n {\n id: 'backup-retention',\n title: 'Backup Retention',\n description: 'How many local backup snapshots to keep on disk.',\n columns: 1,\n fields: [\n {\n type: 'number',\n key: 'retentionCount',\n label: 'Retention Count',\n description: 'Number of backup snapshots to keep before deleting the oldest',\n min: 1,\n max: 100,\n step: 1,\n },\n ],\n },\n ],\n }\n }\n\n getConfig(): Record<string, unknown> {\n return { ...this.currentConfig }\n }\n\n async onConfigChange(config: Record<string, unknown>): Promise<void> {\n this.currentConfig = {\n retentionCount: (config.retentionCount as number) ?? this.currentConfig.retentionCount,\n }\n }\n}\n","import { randomUUID } from 'node:crypto'\nimport type { IScopedLogger, IEventBus } from '@camstack/types'\n\nexport type ElementState = 'stopped' | 'starting' | 'running' | 'stopping' | 'error' | 'disabled'\n\nexport interface ElementStatus {\n state: ElementState\n error?: string\n startedAt?: number\n stoppedAt?: number\n restartCount: number\n uptime: number\n}\n\nconst VALID_TRANSITIONS: Readonly<Record<ElementState, readonly ElementState[]>> = {\n stopped: ['starting', 'disabled'],\n starting: ['running', 'error', 'stopping'],\n running: ['stopping', 'error'],\n stopping: ['stopped', 'error'],\n error: ['starting', 'stopped', 'disabled'],\n disabled: ['stopped'],\n}\n\nexport class LifecycleStateMachine {\n private _state: ElementState = 'stopped'\n private _error?: string\n private _startedAt?: number\n private _stoppedAt?: number\n private _restartCount = 0\n private _hasStartedOnce = false\n\n constructor(\n private readonly elementId: string,\n private readonly elementType: 'provider' | 'device' | 'addon' | 'process',\n private readonly eventBus: IEventBus,\n private readonly logger: IScopedLogger,\n ) {}\n\n get state(): ElementState {\n return this._state\n }\n\n getStatus(): ElementStatus {\n return {\n state: this._state,\n error: this._error,\n startedAt: this._startedAt,\n stoppedAt: this._stoppedAt,\n restartCount: this._restartCount,\n uptime:\n this._state === 'running' && this._startedAt\n ? Date.now() - this._startedAt\n : 0,\n }\n }\n\n transition(to: ElementState, error?: string): boolean {\n const from = this._state\n\n if (!this.isValidTransition(from, to)) {\n this.logger.warn(`Invalid state transition: ${from} → ${to}`)\n return false\n }\n\n this._state = to\n this._error = error\n\n if (to === 'running') {\n if (this._hasStartedOnce) {\n this._restartCount++\n }\n this._hasStartedOnce = true\n this._startedAt = Date.now()\n this._stoppedAt = undefined\n }\n\n if (to === 'stopped' || to === 'error' || to === 'disabled') {\n this._stoppedAt = Date.now()\n }\n\n this.logger.info(`State: ${from} → ${to}${error ? ` (${error})` : ''}`)\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: this.elementType, id: this.elementId },\n category: `${this.elementType}.state.${to}`,\n data: { from, to, error, elementId: this.elementId },\n })\n\n return true\n }\n\n incrementRestartCount(): void {\n this._restartCount++\n }\n\n private isValidTransition(from: ElementState, to: ElementState): boolean {\n return VALID_TRANSITIONS[from]?.includes(to) ?? false\n }\n}\n","import type { FeatureManifest, FeatureFlag } from '@camstack/types'\n\nexport type { FeatureManifest, FeatureFlag }\n\nexport type FeatureConfigReader = {\n readonly features: FeatureManifest\n}\n\nexport class FeatureManager {\n constructor(private readonly configReader: FeatureConfigReader) {}\n\n isEnabled(flag: FeatureFlag): boolean {\n return this.configReader.features[flag]\n }\n\n getManifest(): FeatureManifest {\n return { ...this.configReader.features }\n }\n}\n","import type {\n EventSource,\n SystemEvent,\n EventFilter,\n IEventBus,\n} from '@camstack/types'\n\nexport type { EventSource, SystemEvent, EventFilter }\n\ninterface Subscriber {\n readonly filter: EventFilter\n readonly callback: (event: SystemEvent) => void\n}\n\nclass EventRingBuffer {\n private readonly buffer: Array<SystemEvent | undefined>\n private head = 0\n private count = 0\n\n constructor(private readonly capacity: number) {\n this.buffer = new Array(capacity)\n }\n\n push(event: SystemEvent): void {\n this.buffer[this.head] = event\n this.head = (this.head + 1) % this.capacity\n if (this.count < this.capacity) {\n this.count++\n }\n }\n\n getAll(): readonly SystemEvent[] {\n const result: SystemEvent[] = []\n for (let i = 0; i < this.count; i++) {\n const index = (this.head - 1 - i + this.capacity) % this.capacity\n result.push(this.buffer[index]!)\n }\n return result\n }\n\n query(filter?: EventFilter, limit?: number): readonly SystemEvent[] {\n let result = [...this.getAll()]\n\n if (filter) {\n result = result.filter((event) => matchesFilter(event, filter))\n }\n\n if (limit !== undefined && limit > 0) {\n return result.slice(0, limit)\n }\n\n return result\n }\n}\n\nfunction matchesCategory(eventCategory: string, filterCategory: string): boolean {\n if (filterCategory.endsWith('.*')) {\n const prefix = filterCategory.slice(0, -2)\n return eventCategory.startsWith(prefix + '.') || eventCategory === prefix\n }\n return eventCategory === filterCategory\n}\n\nfunction matchesFilter(event: SystemEvent, filter: EventFilter): boolean {\n if (filter.category && !matchesCategory(event.category, filter.category)) {\n return false\n }\n\n if (filter.source) {\n if (event.source.type !== filter.source.type || event.source.id !== filter.source.id) {\n return false\n }\n }\n\n if (filter.since && event.timestamp < filter.since) {\n return false\n }\n\n return true\n}\n\nexport class SystemEventBus implements IEventBus {\n private readonly ringBuffer: EventRingBuffer\n private readonly subscribers: Subscriber[] = []\n\n constructor(bufferSize: number = 10000) {\n this.ringBuffer = new EventRingBuffer(bufferSize)\n }\n\n emit(event: SystemEvent): void {\n this.ringBuffer.push(event)\n\n for (const subscriber of this.subscribers) {\n if (matchesFilter(event, subscriber.filter)) {\n subscriber.callback(event)\n }\n }\n }\n\n subscribe(filter: EventFilter, handler: (event: SystemEvent) => void): () => void {\n const subscriber: Subscriber = { filter, callback: handler }\n this.subscribers.push(subscriber)\n\n return () => {\n const index = this.subscribers.indexOf(subscriber)\n if (index !== -1) {\n this.subscribers.splice(index, 1)\n }\n }\n }\n\n getRecent(filter?: EventFilter, limit?: number): readonly SystemEvent[] {\n return this.ringBuffer.query(filter, limit)\n }\n}\n","import type { LogLevel, LogEntry, LogFilter } from '@camstack/types'\n\nexport type { LogLevel, LogEntry, LogFilter }\n\nexport class LogRingBuffer {\n private readonly buffer: Array<LogEntry | undefined>\n private head = 0\n private count = 0\n\n constructor(private readonly capacity: number = 10000) {\n this.buffer = new Array(capacity)\n }\n\n push(entry: LogEntry): void {\n this.buffer[this.head] = entry\n this.head = (this.head + 1) % this.capacity\n if (this.count < this.capacity) {\n this.count++\n }\n }\n\n getAll(): LogEntry[] {\n const result: LogEntry[] = []\n\n for (let i = 0; i < this.count; i++) {\n const index = (this.head - 1 - i + this.capacity) % this.capacity\n result.push(this.buffer[index]!)\n }\n\n return result\n }\n\n query(filter: LogFilter): LogEntry[] {\n const all = this.getAll()\n let result = all\n\n if (filter.scope && filter.scope.length > 0) {\n result = result.filter((entry) => {\n for (let i = 0; i < filter.scope!.length; i++) {\n if (entry.scope[i] !== filter.scope![i]) return false\n }\n return true\n })\n }\n\n if (filter.level) {\n result = result.filter((entry) => entry.level === filter.level)\n }\n\n if (filter.since) {\n result = result.filter((entry) => entry.timestamp >= filter.since!)\n }\n\n if (filter.until) {\n result = result.filter((entry) => entry.timestamp <= filter.until!)\n }\n\n if (filter.limit !== undefined && filter.limit > 0) {\n result = result.slice(0, filter.limit)\n }\n\n return result\n }\n}\n","import type { IScopedLogger } from '@camstack/types'\nimport type { LogEntry, LogLevel } from './log-ring-buffer.js'\n\nexport type { IScopedLogger }\n\nexport class ScopedLogger implements IScopedLogger {\n constructor(\n private readonly scope: string[],\n private readonly writeFn: (entry: LogEntry) => void,\n ) {}\n\n debug(message: string, meta?: Record<string, unknown>): void {\n this.write('debug', message, meta)\n }\n\n info(message: string, meta?: Record<string, unknown>): void {\n this.write('info', message, meta)\n }\n\n warn(message: string, meta?: Record<string, unknown>): void {\n this.write('warn', message, meta)\n }\n\n error(message: string, meta?: Record<string, unknown>): void {\n this.write('error', message, meta)\n }\n\n child(childScope: string): IScopedLogger {\n return new ScopedLogger([...this.scope, childScope], this.writeFn)\n }\n\n private write(level: LogLevel, message: string, meta?: Record<string, unknown>): void {\n const entry: LogEntry = {\n timestamp: new Date(),\n level,\n scope: this.scope,\n message,\n ...(meta !== undefined ? { meta } : {}),\n }\n this.writeFn(entry)\n }\n}\n","import { LogRingBuffer, type LogEntry, type LogFilter } from './log-ring-buffer.js'\nimport { ScopedLogger, type IScopedLogger } from './scoped-logger.js'\n\nexport interface ILogDestination {\n initialize(): Promise<void>\n shutdown(): Promise<void>\n write(entry: LogEntry): void\n query?(filter: LogFilter): Promise<readonly LogEntry[]>\n}\n\nexport class LogManager {\n private readonly ringBuffer: LogRingBuffer\n private readonly destinations: ILogDestination[] = []\n private readonly subscribers = new Map<string, { filter: Partial<LogFilter>; callback: (entry: LogEntry) => void }>()\n\n constructor(bufferSize: number = 10000) {\n this.ringBuffer = new LogRingBuffer(bufferSize)\n }\n\n createLogger(scope: string): IScopedLogger {\n return new ScopedLogger([scope], (entry: LogEntry) => {\n this.ringBuffer.push(entry)\n for (const dest of this.destinations) {\n dest.write(entry)\n }\n // Notify real-time subscribers\n for (const [, sub] of this.subscribers) {\n if (this.matchesFilter(entry, sub.filter)) {\n try { sub.callback(entry) } catch { /* subscriber error — ignore */ }\n }\n }\n })\n }\n\n /** Subscribe to live logs matching a filter. Returns an unsubscribe function. */\n subscribe(filter: Partial<LogFilter>, callback: (entry: LogEntry) => void): () => void {\n const id = Math.random().toString(36).slice(2)\n this.subscribers.set(id, { filter, callback })\n return () => { this.subscribers.delete(id) }\n }\n\n private matchesFilter(entry: LogEntry, filter: Partial<LogFilter>): boolean {\n if (filter.scope && filter.scope.length > 0) {\n const entryScope = entry.scope?.[0] ?? ''\n if (!filter.scope.some(s => entryScope === s || entryScope.startsWith(s))) return false\n }\n if (filter.level) {\n const levels: string[] = ['debug', 'info', 'warn', 'error']\n const minIdx = levels.indexOf(filter.level)\n const entryIdx = levels.indexOf(entry.level)\n if (entryIdx < minIdx) return false\n }\n return true\n }\n\n addDestination(dest: ILogDestination): void {\n this.destinations.push(dest)\n }\n\n removeDestination(dest: ILogDestination): void {\n const index = this.destinations.indexOf(dest)\n if (index !== -1) {\n this.destinations.splice(index, 1)\n }\n }\n\n query(filter: LogFilter): LogEntry[] {\n return this.ringBuffer.query(filter)\n }\n}\n","import * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport type { StorageLocationManager, StorageLocationName } from './storage-location-manager.js'\nimport type {\n IStorageProvider as INewStorageProvider,\n ISettingsBackend,\n} from '@camstack/types'\n\n// Legacy interfaces — still used by consumers during migration\nexport interface IStorageProvider {\n initialize(): Promise<void>\n shutdown(): Promise<void>\n getLocation(name: StorageLocationName): IStorageLocation\n export?(locationName: StorageLocationName): Promise<Buffer>\n import?(locationName: StorageLocationName, data: Buffer): Promise<void>\n}\n\nexport interface QueryFilter {\n where?: Record<string, unknown>\n whereIn?: Record<string, unknown[]>\n whereBetween?: Record<string, [unknown, unknown]>\n orderBy?: { field: string; direction: 'asc' | 'desc' }\n limit?: number\n offset?: number\n}\n\nexport interface StorageRecord {\n collection: string\n id: string\n data: Record<string, unknown>\n}\n\nexport interface IStructuredStorage {\n query(collection: string, filter?: QueryFilter): Promise<readonly StorageRecord[]>\n insert(record: StorageRecord): Promise<StorageRecord>\n update(collection: string, id: string, data: Record<string, unknown>): Promise<StorageRecord>\n delete(collection: string, id: string): Promise<void>\n count(collection: string, filter?: QueryFilter): Promise<number>\n}\n\nexport interface IFileStorage {\n readFile(path: string): Promise<Buffer>\n writeFile(path: string, data: Buffer): Promise<void>\n deleteFile(path: string): Promise<void>\n listFiles(prefix?: string): Promise<readonly string[]>\n getFileUrl(path: string): Promise<string>\n exists(path: string): Promise<boolean>\n}\n\nexport interface IStorageLocation {\n structured?: IStructuredStorage\n files?: IFileStorage\n}\n\n/**\n * StorageManager — bridge between legacy code (getLocation/getLocationPath)\n * and the new capability-based storage system.\n *\n * Legacy consumers call getLocation('addon', namespace) to get structured + file storage.\n * This manager builds the response from:\n * - SettingsBackend (for structured queries) — provided by sqlite-settings addon\n * - LocationManager (for file paths) — set during Phase 2 boot\n */\nexport class StorageManager {\n private legacyProvider: IStorageProvider | null = null\n private locationManager: StorageLocationManager | null = null\n private newStorageProvider: INewStorageProvider | null = null\n private settingsBackend: ISettingsBackend | null = null\n\n /** @deprecated Set by legacy capability consumer — use setNewStorageProvider instead */\n setProvider(provider: IStorageProvider | INewStorageProvider): void {\n // Check if it's the new provider (has 'supportedLocations') or legacy (has 'getLocation')\n if ('getLocation' in provider && typeof (provider as any).getLocation === 'function') {\n this.legacyProvider = provider as IStorageProvider\n } else {\n this.newStorageProvider = provider as INewStorageProvider\n }\n }\n\n setNewStorageProvider(provider: INewStorageProvider): void {\n this.newStorageProvider = provider\n }\n\n setSettingsBackend(backend: ISettingsBackend): void {\n this.settingsBackend = backend\n }\n\n getProvider(): IStorageProvider {\n if (this.legacyProvider) return this.legacyProvider\n if (!this.newStorageProvider && !this.settingsBackend && !this.locationManager) {\n throw new Error('No storage provider configured')\n }\n // Return a shim that wraps new providers\n return this.createLegacyShim()\n }\n\n setLocationManager(manager: StorageLocationManager): void {\n this.locationManager = manager\n }\n\n getLocationManager(): StorageLocationManager {\n if (!this.locationManager) {\n throw new Error('StorageLocationManager not initialized')\n }\n return this.locationManager\n }\n\n async initializeLocations(dataPath: string): Promise<void> {\n const { StorageLocationManager } = await import('./storage-location-manager.js')\n const manager = new StorageLocationManager(dataPath)\n await manager.initializeDefaults()\n this.locationManager = manager\n }\n\n getLocationPath(name: StorageLocationName): string {\n return this.getLocationManager().getBackend(name).basePath\n }\n\n /**\n * Get a storage location with optional namespace scoping.\n * Builds IStorageLocation from settingsBackend (structured) + locationManager (files).\n */\n getLocation(name: StorageLocationName | string, namespace?: string): IStorageLocation {\n if (!this.legacyProvider && !this.newStorageProvider && !this.settingsBackend && !this.locationManager) {\n throw new Error('No storage provider configured')\n }\n // Try legacy provider first\n if (this.legacyProvider) {\n try {\n const LEGACY_MAP: Record<string, string> = { config: 'data', events: 'data', addon: 'data' }\n const mappedName = (LEGACY_MAP[name] ?? name) as StorageLocationName\n const location = this.legacyProvider.getLocation(mappedName)\n return namespace ? this.createNamespacedLocation(location, namespace) : location\n } catch {\n // Fall through to new approach\n }\n }\n\n // Build from new providers\n const location: IStorageLocation = {}\n\n // Structured storage from settingsBackend\n if (this.settingsBackend) {\n const backend = this.settingsBackend\n location.structured = {\n async query(collection: string, filter?: QueryFilter) {\n const results = await backend.query(collection as any, filter)\n return results.map(r => ({ collection, id: r.id, data: r.data }))\n },\n async insert(record: StorageRecord) {\n const id = record.id || (await import('node:crypto')).randomUUID()\n await backend.insert(record.collection as any, { id, data: record.data })\n return { ...record, id }\n },\n async update(collection: string, id: string, data: Record<string, unknown>) {\n await backend.update(collection as any, id, data)\n return { collection, id, data }\n },\n async delete(collection: string, id: string) {\n await backend.delete(collection as any, id)\n },\n async count(collection: string, filter?: QueryFilter) {\n return backend.count(collection as any, filter)\n },\n }\n }\n\n // File storage from locationManager\n if (this.locationManager) {\n const LEGACY_MAP: Record<string, string> = { config: 'data', events: 'data', addon: 'data' }\n const mappedName = (LEGACY_MAP[name] ?? name) as StorageLocationName\n try {\n const basePath = this.locationManager.getBackend(mappedName).basePath\n location.files = {\n async readFile(p: string) { return fs.promises.readFile(path.join(basePath, p)) },\n async writeFile(p: string, data: Buffer) {\n const full = path.join(basePath, p)\n await fs.promises.mkdir(path.dirname(full), { recursive: true })\n await fs.promises.writeFile(full, data)\n },\n async deleteFile(p: string) { await fs.promises.rm(path.join(basePath, p), { force: true }) },\n async listFiles(prefix?: string) {\n const dir = prefix ? path.join(basePath, prefix) : basePath\n try { return (await fs.promises.readdir(dir)).map(f => prefix ? `${prefix}/${f}` : f) } catch { return [] }\n },\n async getFileUrl(p: string) { return path.join(basePath, p) },\n async exists(p: string) { try { await fs.promises.access(path.join(basePath, p)); return true } catch { return false } },\n }\n } catch {\n // Location not available\n }\n }\n\n return namespace ? this.createNamespacedLocation(location, namespace) : location\n }\n\n private createLegacyShim(): IStorageProvider {\n const self = this\n return {\n async initialize() {},\n async shutdown() {},\n getLocation(name: StorageLocationName) { return self.getLocation(name) },\n }\n }\n\n private createNamespacedLocation(location: IStorageLocation, namespace: string): IStorageLocation {\n const prefix = namespace.endsWith('/') ? namespace : `${namespace}/`\n\n return {\n structured: location.structured ? {\n async query(collection: string, filter?: QueryFilter) {\n return location.structured!.query(`${prefix}${collection}`, filter)\n },\n async insert(record: StorageRecord) {\n return location.structured!.insert({ ...record, collection: `${prefix}${record.collection}` })\n },\n async update(collection: string, id: string, data: Record<string, unknown>) {\n return location.structured!.update(`${prefix}${collection}`, id, data)\n },\n async delete(collection: string, id: string) {\n return location.structured!.delete(`${prefix}${collection}`, id)\n },\n async count(collection: string, filter?: QueryFilter) {\n return location.structured!.count(`${prefix}${collection}`, filter)\n },\n } : undefined,\n\n files: location.files ? {\n async readFile(p: string) { return location.files!.readFile(`${prefix}${p}`) },\n async writeFile(p: string, data: Buffer) { return location.files!.writeFile(`${prefix}${p}`, data) },\n async deleteFile(p: string) { return location.files!.deleteFile(`${prefix}${p}`) },\n async listFiles(filePrefix?: string) { return location.files!.listFiles(`${prefix}${filePrefix ?? ''}`) },\n async getFileUrl(p: string) { return location.files!.getFileUrl(`${prefix}${p}`) },\n async exists(p: string) { return location.files!.exists(`${prefix}${p}`) },\n } : undefined,\n }\n }\n}\n","import * as jwt from 'jsonwebtoken'\nimport * as bcrypt from 'bcryptjs'\nimport * as crypto from 'node:crypto'\nimport type { ScopedToken, UserRole, TokenPayload } from '@camstack/types'\nimport type { ScopedTokenManager } from './scoped-token-manager.js'\n\nexport type { UserRole, TokenPayload }\n\nexport type AuthConfigReader = {\n get<T>(path: string): T\n update(section: string, data: Record<string, unknown>): void\n}\n\nexport class AuthManager {\n private readonly jwtSecret: string\n private scopedTokenManager: ScopedTokenManager | null = null\n\n constructor(private readonly config: AuthConfigReader) {\n const configured = this.config.get<string>('auth.jwtSecret')\n if (configured) {\n this.jwtSecret = configured\n } else {\n const secret = crypto.randomBytes(32).toString('hex')\n // Persist directly into config.yaml so it survives restarts\n this.config.update('auth', { jwtSecret: secret })\n console.log('[AuthManager] Generated JWT secret and saved to config.yaml (auth.jwtSecret)')\n this.jwtSecret = secret\n }\n }\n\n signToken(payload: Omit<TokenPayload, 'iat' | 'exp'>): string {\n return jwt.sign({ ...payload }, this.jwtSecret, { expiresIn: '24h' })\n }\n\n verifyToken(token: string): TokenPayload {\n return jwt.verify(token, this.jwtSecret) as TokenPayload\n }\n\n async hashPassword(password: string): Promise<string> {\n return bcrypt.hash(password, 10)\n }\n\n async comparePassword(password: string, hash: string): Promise<boolean> {\n return bcrypt.compare(password, hash)\n }\n\n generateApiKey(): { token: string; hash: string; prefix: string } {\n const token = crypto.randomBytes(32).toString('hex')\n const hash = crypto.createHash('sha256').update(token).digest('hex')\n const prefix = token.slice(0, 8)\n return { token, hash, prefix }\n }\n\n validateApiKey(token: string, storedHash: string): boolean {\n const hash = crypto.createHash('sha256').update(token).digest('hex')\n return hash === storedHash\n }\n\n /**\n * Create a service token for agent/worker authentication.\n * Used when forking workers or when agents register.\n */\n createServiceToken(opts: {\n readonly agentId: string\n readonly role?: string\n readonly expiresIn?: string\n }): string {\n const payload: Record<string, unknown> = {\n userId: opts.agentId,\n username: opts.agentId,\n role: opts.role ?? 'agent',\n type: 'service',\n agentId: opts.agentId,\n allowedProviders: '*',\n allowedDevices: {},\n }\n const expiresIn = (opts.expiresIn ?? '24h') as jwt.SignOptions['expiresIn']\n return jwt.sign(payload as object, this.jwtSecret, { expiresIn })\n }\n\n /**\n * Set the scoped token manager for the auth chain.\n */\n setScopedTokenManager(manager: ScopedTokenManager): void {\n this.scopedTokenManager = manager\n }\n\n /**\n * Validate a scoped token string.\n * Returns the token record if valid, null otherwise.\n */\n async validateScopedToken(rawToken: string): Promise<ScopedToken | null> {\n if (!this.scopedTokenManager) {\n return null\n }\n return this.scopedTokenManager.validate(rawToken)\n }\n\n /**\n * Check whether a scoped token grants access to a given addon/route/capability.\n */\n matchesScopedTokenScope(\n token: ScopedToken,\n addonId?: string,\n routePath?: string,\n capability?: string,\n ): boolean {\n if (!this.scopedTokenManager) {\n return false\n }\n return this.scopedTokenManager.matchesScope(token, addonId, routePath, capability)\n }\n}\n","import * as crypto from 'node:crypto'\nimport type { AuthManager, UserRole } from './auth-manager.js'\nimport type { IStructuredStorage, StorageRecord, QueryFilter } from '../storage/storage-manager.js'\n\nexport interface ApiKeyRecord {\n id: string\n label: string\n role: UserRole\n allowedProviders: string[] | '*'\n allowedDevices: Record<string, string[] | '*'>\n tokenHash: string\n tokenPrefix: string\n createdAt: number\n lastUsedAt?: number\n}\n\ninterface CreateApiKeyInput {\n label: string\n role: UserRole\n allowedProviders?: string[] | '*'\n allowedDevices?: Record<string, string[] | '*'>\n}\n\nconst API_KEYS_COLLECTION = 'api_keys'\n\nexport type ApiKeyStorageAccess = {\n getStructuredStorage(): IStructuredStorage\n}\n\nexport class ApiKeyManager {\n constructor(\n private readonly storageAccess: ApiKeyStorageAccess,\n private readonly auth: AuthManager,\n ) {}\n\n private get structured(): IStructuredStorage {\n return this.storageAccess.getStructuredStorage()\n }\n\n async create(input: CreateApiKeyInput): Promise<{ record: ApiKeyRecord; token: string }> {\n const { token, hash, prefix } = this.auth.generateApiKey()\n const now = Date.now()\n\n const record: ApiKeyRecord = {\n id: crypto.randomUUID(),\n label: input.label,\n role: input.role,\n allowedProviders: input.allowedProviders ?? '*',\n allowedDevices: input.allowedDevices ?? {},\n tokenHash: hash,\n tokenPrefix: prefix,\n createdAt: now,\n }\n\n await this.structured.insert({\n collection: API_KEYS_COLLECTION,\n id: record.id,\n data: record as unknown as Record<string, unknown>,\n })\n\n return { record, token }\n }\n\n async validateToken(token: string): Promise<ApiKeyRecord | null> {\n const allKeys = await this.structured.query(API_KEYS_COLLECTION)\n\n for (const entry of allKeys) {\n const record = entry.data as unknown as ApiKeyRecord\n if (this.auth.validateApiKey(token, record.tokenHash)) {\n const updatedData: Record<string, unknown> = {\n ...record,\n lastUsedAt: Date.now(),\n }\n await this.structured.update(API_KEYS_COLLECTION, record.id, updatedData)\n return { ...record, lastUsedAt: updatedData.lastUsedAt as number }\n }\n }\n\n return null\n }\n\n async listAll(): Promise<Omit<ApiKeyRecord, 'tokenHash'>[]> {\n const results = await this.structured.query(API_KEYS_COLLECTION)\n return results.map((r) => {\n const { tokenHash, ...rest } = r.data as unknown as ApiKeyRecord\n return rest\n })\n }\n\n async revoke(id: string): Promise<void> {\n await this.structured.delete(API_KEYS_COLLECTION, id)\n }\n\n async findById(id: string): Promise<ApiKeyRecord | null> {\n const results = await this.structured.query(API_KEYS_COLLECTION, {\n where: { id },\n })\n\n if (results.length === 0) {\n return null\n }\n\n return results[0]!.data as unknown as ApiKeyRecord\n }\n}\n","import * as crypto from 'node:crypto'\nimport type { AuthManager, UserRole } from './auth-manager.js'\nimport type { IStructuredStorage } from '../storage/storage-manager.js'\nimport type { UserRecord } from '@camstack/types'\n\nexport type { UserRecord }\n\ninterface CreateUserInput {\n username: string\n password: string\n role: UserRole\n allowedProviders?: string[] | '*'\n allowedDevices?: Record<string, string[] | '*'>\n}\n\ntype UpdatableUserFields = Partial<Pick<UserRecord, 'role' | 'allowedProviders' | 'allowedDevices'>>\n\nconst USERS_COLLECTION = 'users'\n\nexport type UserStorageAccess = {\n getStructuredStorage(): IStructuredStorage\n}\n\nexport type UserConfigReader = {\n get<T>(path: string): T\n}\n\nexport class UserManager {\n constructor(\n private readonly storageAccess: UserStorageAccess,\n private readonly auth: AuthManager,\n private readonly config: UserConfigReader,\n ) {}\n\n private get structured(): IStructuredStorage {\n return this.storageAccess.getStructuredStorage()\n }\n\n async create(input: CreateUserInput): Promise<UserRecord> {\n const existing = await this.findByUsername(input.username)\n if (existing) {\n throw new Error(`User with username \"${input.username}\" already exists`)\n }\n\n const passwordHash = await this.auth.hashPassword(input.password)\n const now = Date.now()\n const record: UserRecord = {\n id: crypto.randomUUID(),\n username: input.username,\n passwordHash,\n role: input.role,\n allowedProviders: input.allowedProviders ?? '*',\n allowedDevices: input.allowedDevices ?? {},\n createdAt: now,\n updatedAt: now,\n }\n\n await this.structured.insert({\n collection: USERS_COLLECTION,\n id: record.id,\n data: record as unknown as Record<string, unknown>,\n })\n\n return record\n }\n\n async findByUsername(username: string): Promise<UserRecord | null> {\n const results = await this.structured.query(USERS_COLLECTION, {\n where: { username },\n })\n\n if (results.length === 0) {\n return null\n }\n\n return results[0]!.data as unknown as UserRecord\n }\n\n async findById(id: string): Promise<UserRecord | null> {\n const results = await this.structured.query(USERS_COLLECTION, {\n where: { id },\n })\n\n if (results.length === 0) {\n return null\n }\n\n return results[0]!.data as unknown as UserRecord\n }\n\n async validateCredentials(username: string, password: string): Promise<UserRecord | null> {\n const user = await this.findByUsername(username)\n if (!user) {\n return null\n }\n\n const valid = await this.auth.comparePassword(password, user.passwordHash)\n return valid ? user : null\n }\n\n async listAll(): Promise<Omit<UserRecord, 'passwordHash'>[]> {\n const results = await this.structured.query(USERS_COLLECTION)\n return results.map((r) => {\n const { passwordHash, ...rest } = r.data as unknown as UserRecord\n return rest\n })\n }\n\n async update(id: string, data: UpdatableUserFields): Promise<void> {\n const existing = await this.findById(id)\n if (!existing) {\n throw new Error(`User with id \"${id}\" not found`)\n }\n\n const updatedData: Record<string, unknown> = {\n ...existing,\n ...data,\n updatedAt: Date.now(),\n }\n\n await this.structured.update(USERS_COLLECTION, id, updatedData)\n }\n\n async delete(id: string): Promise<void> {\n await this.structured.delete(USERS_COLLECTION, id)\n }\n\n async resetPassword(id: string, newPassword: string): Promise<void> {\n const existing = await this.findById(id)\n if (!existing) {\n throw new Error(`User with id \"${id}\" not found`)\n }\n\n const passwordHash = await this.auth.hashPassword(newPassword)\n const updatedData: Record<string, unknown> = {\n ...existing,\n passwordHash,\n updatedAt: Date.now(),\n }\n\n await this.structured.update(USERS_COLLECTION, id, updatedData)\n }\n\n async ensureAdminExists(): Promise<void> {\n const adminUsername = this.config.get<string>('auth.adminUsername')\n const adminPassword = this.config.get<string>('auth.adminPassword')\n\n if (!adminUsername || !adminPassword) {\n return\n }\n\n const existing = await this.findByUsername(adminUsername)\n if (existing) {\n return\n }\n\n await this.create({\n username: adminUsername,\n password: adminPassword,\n role: 'super_admin',\n allowedProviders: '*',\n allowedDevices: {},\n })\n }\n}\n","import * as crypto from 'node:crypto'\nimport type { ScopedToken, TokenScope } from '@camstack/types'\nimport type { IStructuredStorage, StorageRecord } from '../storage/storage-manager.js'\n\nconst TOKENS_COLLECTION = 'scoped_tokens'\nconst TOKEN_PREFIX = 'cst_'\n\n/**\n * Manages scoped API tokens with restricted addon/route/capability access.\n * Framework-agnostic — dependencies injected via constructor.\n */\nexport class ScopedTokenManager {\n constructor(private readonly storage: IStructuredStorage) {}\n\n /**\n * Create a new scoped token. Returns the raw token string (shown once)\n * and the stored record (with hash, not the raw token).\n */\n async create(\n userId: string,\n name: string,\n scopes: TokenScope[],\n expiresAt?: number,\n ): Promise<{ token: string; record: ScopedToken }> {\n const rawHex = crypto.randomBytes(32).toString('hex')\n const rawToken = `${TOKEN_PREFIX}${rawHex}`\n const tokenHash = crypto.createHash('sha256').update(rawToken).digest('hex')\n const tokenPrefix = rawToken.slice(0, 12)\n\n const record: ScopedToken = {\n id: crypto.randomUUID(),\n userId,\n name,\n tokenHash,\n tokenPrefix,\n scopes: scopes.map((s) => ({ ...s })),\n expiresAt,\n lastUsedAt: undefined,\n createdAt: Date.now(),\n }\n\n await this.storage.insert({\n collection: TOKENS_COLLECTION,\n id: record.id,\n data: record as unknown as Record<string, unknown>,\n })\n\n return { token: rawToken, record }\n }\n\n /**\n * Validate a raw token string. Returns the token record if valid, null otherwise.\n */\n async validate(rawToken: string): Promise<ScopedToken | null> {\n if (!rawToken.startsWith(TOKEN_PREFIX)) {\n return null\n }\n\n const tokenHash = crypto.createHash('sha256').update(rawToken).digest('hex')\n const results = await this.storage.query(TOKENS_COLLECTION, {\n where: { tokenHash },\n })\n\n if (results.length === 0) {\n return null\n }\n\n const record = results[0]!.data as unknown as ScopedToken\n if (record.expiresAt !== undefined && record.expiresAt !== null && Date.now() > record.expiresAt) {\n return null\n }\n\n // Update last used timestamp (fire and forget)\n this.updateLastUsed(record.id).catch(() => {})\n\n return record\n }\n\n /**\n * Check whether a token's scopes grant access to the given addon, route, or capability.\n */\n matchesScope(\n token: ScopedToken,\n addonId?: string,\n routePath?: string,\n capability?: string,\n ): boolean {\n for (const scope of token.scopes) {\n switch (scope.type) {\n case 'addon':\n if (addonId && scope.target === addonId) return true\n break\n case 'route-prefix':\n if (routePath && routePath.startsWith(scope.target)) return true\n break\n case 'capability':\n if (capability && scope.target === capability) return true\n break\n }\n }\n return false\n }\n\n /**\n * Revoke a token by ID.\n */\n async revoke(tokenId: string): Promise<void> {\n await this.storage.delete(TOKENS_COLLECTION, tokenId)\n }\n\n /**\n * List all tokens for a user (without exposing the raw token).\n */\n async listForUser(userId: string): Promise<ScopedToken[]> {\n const results = await this.storage.query(TOKENS_COLLECTION, {\n where: { userId },\n })\n return results.map((r: StorageRecord) => r.data as unknown as ScopedToken)\n }\n\n /**\n * Update the lastUsedAt timestamp for a token.\n */\n async updateLastUsed(tokenId: string): Promise<void> {\n const results = await this.storage.query(TOKENS_COLLECTION, {\n where: { id: tokenId },\n })\n if (results.length === 0) return\n\n const existing = results[0]!.data as unknown as ScopedToken\n await this.storage.update(TOKENS_COLLECTION, tokenId, {\n ...existing,\n lastUsedAt: Date.now(),\n } as unknown as Record<string, unknown>)\n }\n}\n","import type { INotificationOutput, Notification } from '@camstack/types'\nimport type { IScopedLogger } from '../logging/scoped-logger.js'\nimport type { CapabilityRegistry } from '@camstack/kernel'\n\n/**\n * Central notification service that routes notifications to configured outputs.\n * Framework-agnostic — dependencies injected via constructor.\n *\n * Outputs are resolved from the CapabilityRegistry's 'notification-output'\n * collection on each call (proxy pattern). Falls back to a local map\n * when no registry is provided (backward compat).\n */\nexport class NotificationService {\n private readonly localOutputs = new Map<string, INotificationOutput>()\n private readonly routing = new Map<string, string[]>()\n private readonly rateLimits = new Map<string, number>()\n private readonly lastSent = new Map<string, number>()\n private registry: CapabilityRegistry | null = null\n\n constructor(private readonly logger: IScopedLogger) {}\n\n /** Set the registry for live output lookup. Called once during boot. */\n setRegistry(registry: CapabilityRegistry): void {\n this.registry = registry\n }\n\n /** Resolve all outputs — prefers registry, falls back to local map */\n private get outputs(): ReadonlyMap<string, INotificationOutput> {\n if (this.registry) {\n const collection = this.registry.getCollection<INotificationOutput>('notification-output')\n const map = new Map<string, INotificationOutput>()\n for (const output of collection) {\n map.set(output.id, output)\n }\n return map\n }\n return this.localOutputs\n }\n\n /** @deprecated Use registry-based resolution. Kept for backward compat only. */\n addOutput(output: INotificationOutput): void {\n this.localOutputs.set(output.id, output)\n this.logger.info(`Notification output added: ${output.name} (${output.id})`)\n }\n\n /** @deprecated Use registry-based resolution. Kept for backward compat only. */\n removeOutput(id: string): void {\n this.localOutputs.delete(id)\n this.logger.info(`Notification output removed: ${id}`)\n }\n\n setRouting(category: string, outputIds: string[]): void {\n this.routing.set(category, [...outputIds])\n }\n\n setRateLimit(category: string, minIntervalMs: number): void {\n this.rateLimits.set(category, minIntervalMs)\n }\n\n async notify(notification: Notification): Promise<void> {\n const { category, deviceId } = notification\n\n // Rate limit check\n const rateLimitKey = deviceId ? `${category}:${deviceId}` : category\n const minInterval = this.rateLimits.get(category) ?? 0\n if (minInterval > 0) {\n const last = this.lastSent.get(rateLimitKey) ?? 0\n if (notification.timestamp - last < minInterval) {\n this.logger.debug(`Rate limited: ${rateLimitKey}`)\n return\n }\n }\n\n // Determine target outputs\n const targetIds = this.routing.get(category) ?? this.routing.get('*') ?? []\n if (targetIds.length === 0) {\n this.logger.debug(`No routing configured for category \"${category}\"`)\n return\n }\n\n const currentOutputs = this.outputs\n\n // Update last-sent timestamp\n this.lastSent.set(rateLimitKey, notification.timestamp)\n\n // Send to all targets in parallel with error isolation\n await Promise.allSettled(\n targetIds\n .map((id) => currentOutputs.get(id))\n .filter((output): output is INotificationOutput => output !== undefined)\n .map(async (output) => {\n try {\n await output.send(notification)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n this.logger.error(`Notification output \"${output.id}\" failed: ${msg}`)\n }\n }),\n )\n\n return undefined\n }\n\n getOutputs(): ReadonlyArray<{ id: string; name: string; icon: string }> {\n return Array.from(this.outputs.values()).map(({ id, name, icon }) => ({ id, name, icon }))\n }\n\n getRouting(): ReadonlyMap<string, string[]> {\n return this.routing\n }\n\n getOutput(id: string): INotificationOutput | undefined {\n return this.outputs.get(id)\n }\n}\n","import type { Toast } from '@camstack/types'\n\nexport type Unsubscribe = () => void\n\ninterface ListenerEntry {\n readonly userId: string\n readonly callback: (toast: Toast) => void\n}\n\n/**\n * Service for broadcasting toast notifications to connected UI clients.\n * Framework-agnostic — integrates with tRPC subscriptions via subscribe().\n */\nexport class ToastService {\n private readonly listeners = new Map<string, ListenerEntry>()\n\n /**\n * Subscribe to toast events for a specific user.\n * Returns an unsubscribe function.\n */\n subscribe(connectionId: string, userId: string, callback: (toast: Toast) => void): Unsubscribe {\n this.listeners.set(connectionId, { userId, callback })\n return () => {\n this.listeners.delete(connectionId)\n }\n }\n\n /**\n * Broadcast a toast to all connected clients.\n */\n broadcast(toast: Toast): void {\n for (const entry of this.listeners.values()) {\n entry.callback(toast)\n }\n }\n\n /**\n * Send a toast to a specific user's connections only.\n */\n sendToUser(userId: string, toast: Toast): void {\n for (const entry of this.listeners.values()) {\n if (entry.userId === userId) {\n entry.callback(toast)\n }\n }\n }\n}\n","import type { IAddonHttpRoute, IAddonRouteProvider } from '@camstack/types'\n\ninterface RouteMatch {\n readonly route: IAddonHttpRoute\n readonly addonId: string\n readonly params: Record<string, string>\n}\n\ninterface RegisteredRoute {\n readonly addonId: string\n readonly route: IAddonHttpRoute\n /** Full path including /addon/{addonId}/ prefix */\n readonly fullPath: string\n}\n\n/**\n * Registry for dynamic HTTP routes registered by addons.\n * Framework-agnostic — the server HTTP layer queries this registry to dispatch requests.\n */\nexport class AddonRouteRegistry {\n private readonly routes = new Map<string, RegisteredRoute[]>()\n\n /**\n * Register all routes from an addon's route provider.\n */\n registerRoutes(addonId: string, provider: IAddonRouteProvider): void {\n const addonRoutes = provider.getRoutes()\n const registered: RegisteredRoute[] = addonRoutes.map((route) => {\n const normalizedPath = route.path.startsWith('/') ? route.path : `/${route.path}`\n return {\n addonId,\n route,\n fullPath: `/addon/${addonId}${normalizedPath}`,\n }\n })\n this.routes.set(addonId, registered)\n }\n\n /**\n * Unregister all routes for an addon.\n */\n unregisterRoutes(addonId: string): void {\n this.routes.delete(addonId)\n }\n\n /**\n * Match an incoming request method + path to a registered route.\n * Supports simple path parameters (e.g., /items/:id).\n */\n matchRoute(method: string, path: string): RouteMatch | null {\n const normalizedMethod = method.toUpperCase()\n\n for (const registeredRoutes of this.routes.values()) {\n for (const entry of registeredRoutes) {\n if (entry.route.method !== normalizedMethod) continue\n\n const params = matchPath(entry.fullPath, path)\n if (params !== null) {\n return {\n route: entry.route,\n addonId: entry.addonId,\n params,\n }\n }\n }\n }\n\n return null\n }\n\n /**\n * List all registered routes across all addons.\n */\n listRoutes(): ReadonlyArray<{ addonId: string; method: string; path: string; access: string; description?: string }> {\n const result: Array<{ addonId: string; method: string; path: string; access: string; description?: string }> = []\n for (const registeredRoutes of this.routes.values()) {\n for (const entry of registeredRoutes) {\n result.push({\n addonId: entry.addonId,\n method: entry.route.method,\n path: entry.fullPath,\n access: entry.route.access,\n description: entry.route.description,\n })\n }\n }\n return result\n }\n}\n\n/**\n * Match a route pattern against an actual path.\n * Supports :param segments (e.g., /addon/:addonId/items/:id).\n * Returns extracted params or null if no match.\n */\nfunction matchPath(pattern: string, path: string): Record<string, string> | null {\n const patternParts = pattern.split('/').filter(Boolean)\n const pathParts = path.split('/').filter(Boolean)\n\n if (patternParts.length !== pathParts.length) {\n return null\n }\n\n const params: Record<string, string> = {}\n\n for (let i = 0; i < patternParts.length; i++) {\n const patternPart = patternParts[i]!\n const pathPart = pathParts[i]!\n\n if (patternPart.startsWith(':')) {\n params[patternPart.slice(1)] = pathPart\n } else if (patternPart !== pathPart) {\n return null\n }\n }\n\n return params\n}\n","import { randomUUID } from 'node:crypto'\nimport type { IScopedLogger, IEventBus, LoggerFactory } from '@camstack/types'\n\nexport interface IRegisteredDevice {\n readonly id: string\n readonly name: string\n readonly providerId: string\n readonly capabilities: readonly string[]\n}\n\nexport class DeviceRegistry<T extends IRegisteredDevice = IRegisteredDevice> {\n private readonly devices = new Map<string, T>()\n private readonly logger: IScopedLogger\n\n constructor(\n private readonly eventBus: IEventBus,\n loggingService: LoggerFactory,\n ) {\n this.logger = loggingService.createLogger('device-registry')\n }\n\n registerDevice(device: T): void {\n this.devices.set(device.id, device)\n this.logger.info(`Device registered: ${device.id} (${device.name})`)\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'core', id: 'device-registry' },\n category: 'device.registered',\n data: { deviceId: device.id, name: device.name, providerId: device.providerId },\n })\n }\n\n unregisterDevice(id: string): void {\n const device = this.devices.get(id)\n if (!device) {\n return\n }\n\n this.devices.delete(id)\n this.logger.info(`Device unregistered: ${id}`)\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'core', id: 'device-registry' },\n category: 'device.unregistered',\n data: { deviceId: id },\n })\n }\n\n getDevice(id: string): T | null {\n return this.devices.get(id) ?? null\n }\n\n listDevices(): T[] {\n return Array.from(this.devices.values())\n }\n\n getDevicesByProvider(providerId: string): T[] {\n return Array.from(this.devices.values()).filter(\n (device) => device.providerId === providerId,\n )\n }\n\n getDevicesWithCapability(cap: string): T[] {\n return Array.from(this.devices.values()).filter((device) =>\n device.capabilities.includes(cap),\n )\n }\n\n registerProviderDevices(providerId: string, devices: readonly T[]): void {\n for (const device of devices) {\n this.registerDevice(device)\n }\n this.logger.info(`Bulk registered ${devices.length} devices for provider ${providerId}`)\n }\n\n unregisterProviderDevices(providerId: string): void {\n const providerDevices = this.getDevicesByProvider(providerId)\n for (const device of providerDevices) {\n this.unregisterDevice(device.id)\n }\n this.logger.info(`Bulk unregistered ${providerDevices.length} devices for provider ${providerId}`)\n }\n}\n","export interface IDeviceCapability {\n kind: string\n}\n\nexport interface CapabilityBinding {\n source: 'native' | 'addon' | 'disabled'\n addonId?: string\n config?: Record<string, unknown>\n}\n\nexport interface IResolvableDevice {\n readonly id: string\n readonly capabilities: string[]\n getCapability<T extends IDeviceCapability>(cap: string): T | null\n}\n\nexport interface IAddonRegistryAccess {\n getAddon(addonId: string): unknown | null\n}\n\nexport class CapabilityResolver {\n private readonly bindings = new Map<\n string,\n Partial<Record<string, CapabilityBinding>>\n >()\n\n constructor(\n private readonly addonRegistry: IAddonRegistryAccess,\n ) {}\n\n resolve<T extends IDeviceCapability>(\n device: IResolvableDevice,\n cap: string,\n ): T | null {\n const deviceBindings = this.bindings.get(device.id)\n const binding = deviceBindings?.[cap]\n\n if (binding) {\n if (binding.source === 'disabled') {\n return null\n }\n\n if (binding.source === 'addon' && binding.addonId) {\n const addon = this.addonRegistry.getAddon(binding.addonId)\n if (addon && typeof (addon as any).getCapabilityForDevice === 'function') {\n return (\n (addon as any).getCapabilityForDevice(device, cap, binding.config) ?? null\n )\n }\n return null\n }\n }\n\n // native or no explicit binding -- delegate to device\n return device.getCapability<T>(cap)\n }\n\n setBinding(\n deviceId: string,\n cap: string,\n binding: CapabilityBinding,\n ): void {\n const existing = this.bindings.get(deviceId) ?? {}\n this.bindings.set(deviceId, { ...existing, [cap]: binding })\n }\n\n removeBinding(deviceId: string, cap: string): void {\n const existing = this.bindings.get(deviceId)\n if (!existing) {\n return\n }\n const updated = { ...existing }\n delete updated[cap]\n this.bindings.set(deviceId, updated)\n }\n\n getBindings(\n deviceId: string,\n ): Partial<Record<string, CapabilityBinding>> {\n return this.bindings.get(deviceId) ?? {}\n }\n\n getEffectiveCapabilities(device: IResolvableDevice): string[] {\n const deviceBindings = this.bindings.get(device.id) ?? {}\n\n const result: string[] = []\n\n // Include native capabilities that are not disabled\n for (const cap of device.capabilities) {\n const binding = deviceBindings[cap]\n if (!binding || binding.source !== 'disabled') {\n result.push(cap)\n }\n }\n\n // Include addon-bound capabilities not already in the native list\n for (const [cap, binding] of Object.entries(deviceBindings)) {\n if (\n binding && binding.source === 'addon' &&\n !device.capabilities.includes(cap)\n ) {\n result.push(cap)\n }\n }\n\n return result\n }\n}\n","import { X509Certificate } from 'node:crypto'\nimport { execFile } from 'node:child_process'\nimport { promisify } from 'node:util'\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport * as os from 'node:os'\n\nconst execFileAsync = promisify(execFile)\n\nexport interface TlsCertPair {\n readonly cert: Buffer\n readonly key: Buffer\n}\n\nexport interface EnsureTlsResult {\n readonly certPath: string\n readonly keyPath: string\n readonly generated: boolean\n}\n\nexport interface CertOptions {\n /** Common Name for the cert (default: 'camstack.local') */\n readonly commonName?: string\n /** Validity in days (default: 825 — max for browsers) */\n readonly validDays?: number\n /** Additional SANs (DNS names or IPs) */\n readonly extraSans?: readonly string[]\n}\n\n/**\n * Ensure a self-signed TLS certificate exists in the given directory.\n * Generates one if missing. Returns paths to cert and key files.\n */\nexport async function ensureTlsCert(\n dataDir: string,\n options?: CertOptions,\n): Promise<EnsureTlsResult> {\n const tlsDir = join(dataDir, 'tls')\n const certPath = join(tlsDir, 'camstack.crt')\n const keyPath = join(tlsDir, 'camstack.key')\n\n // Already exists — reuse\n if (existsSync(certPath) && existsSync(keyPath)) {\n try {\n const certPem = readFileSync(certPath)\n const x509 = new X509Certificate(certPem)\n const validTo = new Date(x509.validTo)\n if (validTo > new Date()) {\n return { certPath, keyPath, generated: false }\n }\n // Expired — regenerate below\n } catch {\n // Corrupted — regenerate below\n }\n }\n\n mkdirSync(tlsDir, { recursive: true })\n\n const cn = options?.commonName ?? 'camstack.local'\n const validDays = options?.validDays ?? 825\n\n // Collect SANs: localhost, 127.0.0.1, all local IPs, hostname\n const sanDns = new Set<string>(['localhost', cn, os.hostname()])\n const sanIps = new Set<string>(['127.0.0.1', '::1'])\n\n // Add all local network IPs\n const interfaces = os.networkInterfaces()\n for (const addrs of Object.values(interfaces)) {\n if (!addrs) continue\n for (const addr of addrs) {\n if (!addr.internal) {\n sanIps.add(addr.address)\n }\n }\n }\n\n // Add extra SANs\n for (const san of options?.extraSans ?? []) {\n if (san.match(/^\\d+\\.\\d+\\.\\d+\\.\\d+$/) || san.includes(':')) {\n sanIps.add(san)\n } else {\n sanDns.add(san)\n }\n }\n\n // Build SAN string for openssl\n const sanParts: string[] = []\n for (const dns of sanDns) {\n sanParts.push(`DNS:${dns}`)\n }\n for (const ip of sanIps) {\n sanParts.push(`IP:${ip}`)\n }\n const sanString = sanParts.join(',')\n\n // Generate self-signed certificate using openssl CLI\n await execFileAsync('openssl', [\n 'req', '-x509',\n '-newkey', 'rsa:2048',\n '-keyout', keyPath,\n '-out', certPath,\n '-days', String(validDays),\n '-nodes',\n '-subj', `/CN=${cn}`,\n '-addext', `subjectAltName=${sanString}`,\n ])\n\n // Set restrictive permissions on the key file\n const { chmod } = await import('node:fs/promises')\n await chmod(keyPath, 0o600)\n\n return { certPath, keyPath, generated: true }\n}\n\n/**\n * Load TLS cert+key from files. Returns Buffers suitable for Node.js TLS options.\n */\nexport function loadTlsCert(certPath: string, keyPath: string): TlsCertPair {\n return {\n cert: readFileSync(certPath),\n key: readFileSync(keyPath),\n }\n}\n","/**\n * Factory for creating tRPC clients for addons.\n *\n * Two modes:\n * - Direct caller (in-process): zero overhead, uses createCallerFactory\n * - WSS client (worker/agent): real WebSocket connection to the server\n */\n\nexport interface DirectCallerOptions {\n /** The tRPC router instance (from buildAppRouter) */\n readonly router: unknown\n /** Context for the caller (user identity, etc.) */\n readonly context: { readonly user: { readonly id: string; readonly username: string; readonly role: string } }\n}\n\nexport interface WssClientOptions {\n /** WebSocket URL (e.g., wss://localhost:4443/trpc) */\n readonly url: string\n /** Auth token for the connection */\n readonly token: string\n}\n\nexport class AddonApiFactory {\n /**\n * Build a WSS URL from host and port.\n */\n buildWssUrl(host: string, port: number): string {\n return `wss://${host}:${port}/trpc`\n }\n\n /**\n * Create a direct caller -- calls tRPC procedures directly in-process.\n * Zero network overhead. Used for in-process addons and dev mode.\n *\n * @param options.router - The tRPC router from buildAppRouter()\n * @param options.context - The auth context (service account)\n * @returns A tRPC caller that can be used as context.api\n */\n async createDirectCaller(options: DirectCallerOptions): Promise<unknown> {\n const { initTRPC } = await import('@trpc/server')\n const t = initTRPC.create()\n const callerFactory = t.createCallerFactory(options.router as never)\n return callerFactory(options.context as never)\n }\n\n /**\n * Create a WSS tRPC client -- connects to the server via WebSocket.\n * Used for forked workers and remote agents.\n *\n * @param options.url - WSS URL (e.g., wss://localhost:4443/trpc)\n * @param options.token - Bearer token for authentication\n * @returns A tRPC client that can be used as context.api\n */\n async createWssClient(options: WssClientOptions): Promise<{ readonly client: unknown; readonly close: () => void }> {\n const { createTRPCClient, createWSClient, wsLink } = await import('@trpc/client')\n\n const wsClient = createWSClient({\n url: options.url,\n connectionParams: () => ({ token: options.token }),\n })\n\n const client = createTRPCClient({\n links: [wsLink({ client: wsClient })],\n })\n\n return {\n client,\n close: () => wsClient.close(),\n }\n }\n}\n","import * as os from 'node:os'\nimport { execFileSync } from 'node:child_process'\nimport type { HardwareInfo, GpuInfo, NpuInfo, PlatformScore, PlatformCapabilities } from '@camstack/types'\n\n/**\n * Get reliable \"available\" RAM in MB, cross-platform.\n * os.freemem() is unreliable on macOS (reports ~200MB on a 36GB system).\n * Uses systeminformation when available, falls back to native commands.\n */\nasync function getAvailableRAM_MB(): Promise<number> {\n try {\n const si = await import('systeminformation')\n const mem = await si.mem()\n return Math.round(mem.available / 1024 / 1024)\n } catch {\n // Fallback: platform-specific\n const platform = os.platform()\n try {\n if (platform === 'darwin') {\n // Parse vm_stat: (free + inactive + purgeable) * pageSize\n const output = execFileSync('vm_stat', { encoding: 'utf8', timeout: 3000 })\n const pageSize = parseInt(output.match(/page size of (\\d+)/)?.[1] ?? '16384')\n const free = parseInt(output.match(/Pages free:\\s+(\\d+)/)?.[1] ?? '0')\n const inactive = parseInt(output.match(/Pages inactive:\\s+(\\d+)/)?.[1] ?? '0')\n const purgeable = parseInt(output.match(/Pages purgeable:\\s+(\\d+)/)?.[1] ?? '0')\n return Math.round((free + inactive + purgeable) * pageSize / 1024 / 1024)\n } else if (platform === 'linux') {\n // Parse /proc/meminfo: MemAvailable\n const { readFileSync } = await import('node:fs')\n const meminfo = readFileSync('/proc/meminfo', 'utf8')\n const match = meminfo.match(/MemAvailable:\\s+(\\d+)\\s+kB/)\n if (match) return Math.round(parseInt(match[1]!) / 1024)\n }\n } catch { /* ignore */ }\n // Ultimate fallback: total RAM (conservative but safe)\n return Math.round(os.totalmem() / 1024 / 1024)\n }\n}\n\nexport class PlatformScorer {\n private cached: PlatformCapabilities | null = null\n\n /** Probe hardware + runtimes and score all backend combos. Cached after first call. */\n async probe(): Promise<PlatformCapabilities> {\n if (this.cached) return this.cached\n\n const start = Date.now()\n console.log('[PlatformScorer] Probing hardware...')\n const hardware = await this.probeHardware()\n console.log(`[PlatformScorer] Hardware: ${hardware.platform}/${hardware.arch}, ${hardware.cpuModel} (${hardware.cpuCores} cores), RAM ${Math.round(hardware.totalRAM_MB / 1024)}GB`)\n if (hardware.gpu) console.log(`[PlatformScorer] GPU: ${hardware.gpu.name}`)\n if (hardware.npu) console.log(`[PlatformScorer] NPU: ${hardware.npu.type}`)\n\n console.log('[PlatformScorer] Probing Node.js backends...')\n const nodeBackends = await this.probeNodeBackends()\n console.log(`[PlatformScorer] Node backends: ${nodeBackends.map(b => b.id).join(', ')}`)\n\n console.log('[PlatformScorer] Probing Python backends...')\n const pythonInfo = this.probePythonBackends()\n if (pythonInfo.pythonPath) {\n console.log(`[PlatformScorer] Python: ${pythonInfo.pythonPath} → ${pythonInfo.backends.filter(b => b.available).map(b => b.id).join(', ') || 'no backends'}`)\n } else {\n console.log('[PlatformScorer] Python: not found')\n }\n\n const scores = this.scoreBackends(hardware, nodeBackends, pythonInfo.backends)\n const bestScore = scores.find(s => s.available) ?? scores[scores.length - 1]!\n\n const elapsed = Date.now() - start\n console.log(`[PlatformScorer] Scoring complete in ${elapsed}ms — ${scores.length} combos`)\n console.log(`[PlatformScorer] Best: ${bestScore.runtime}/${bestScore.backend} (${bestScore.format}) — ${bestScore.reason} [score: ${bestScore.score}]`)\n for (const s of scores) {\n console.log(`[PlatformScorer] ${s.available ? '✓' : '✗'} ${s.runtime}/${s.backend} (${s.format}) — score ${s.score} — ${s.reason}`)\n }\n\n this.cached = {\n hardware,\n scores,\n bestScore,\n pythonPath: pythonInfo.pythonPath,\n }\n return this.cached\n }\n\n async probeHardware(): Promise<HardwareInfo> {\n const platform = os.platform() as HardwareInfo['platform']\n const arch = os.arch() as HardwareInfo['arch']\n const cpus = os.cpus()\n const cpuModel = cpus[0]?.model ?? 'unknown'\n const cpuCores = cpus.length\n const totalRAM_MB = Math.round(os.totalmem() / 1024 / 1024)\n const availableRAM_MB = await getAvailableRAM_MB()\n console.log(`[PlatformScorer] RAM: total=${totalRAM_MB}MB, available=${availableRAM_MB}MB (via systeminformation)`)\n\n let gpu: GpuInfo | null = null\n let npu: NpuInfo | null = null\n\n // macOS Apple Silicon\n if (platform === 'darwin' && arch === 'arm64') {\n gpu = { type: 'apple', name: 'Apple Silicon GPU' }\n npu = { type: 'apple-ane' }\n }\n\n // Linux NVIDIA\n if (platform === 'linux') {\n try {\n const output = execFileSync('nvidia-smi', ['--query-gpu=name,memory.total', '--format=csv,noheader'], {\n encoding: 'utf8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'],\n }).trim()\n if (output) {\n const [name, mem] = output.split(',').map(s => s.trim())\n gpu = {\n type: 'nvidia',\n name: name ?? 'NVIDIA GPU',\n memoryMB: parseInt(mem ?? '0'),\n }\n }\n } catch { /* no NVIDIA GPU */ }\n }\n\n return { platform, arch, cpuModel, cpuCores, totalRAM_MB, availableRAM_MB, gpu, npu }\n }\n\n private async probeNodeBackends(): Promise<Array<{ id: string; available: boolean }>> {\n const backends: Array<{ id: string; available: boolean }> = [\n { id: 'cpu', available: true },\n ]\n\n try {\n const ort = await import('onnxruntime-node') as any\n const providers: string[] = ort.InferenceSession?.getAvailableProviders?.() ?? []\n for (const p of providers) {\n const n = p.toLowerCase().replace('executionprovider', '')\n if (n === 'coreml') backends.push({ id: 'coreml', available: true })\n else if (n === 'cuda') backends.push({ id: 'cuda', available: true })\n else if (n === 'tensorrt') backends.push({ id: 'tensorrt', available: true })\n }\n } catch { /* onnxruntime not available */ }\n\n // macOS always has CoreML potential\n if (os.platform() === 'darwin' && !backends.some(b => b.id === 'coreml')) {\n backends.push({ id: 'coreml', available: true })\n }\n\n return backends\n }\n\n private probePythonBackends(): { pythonPath: string | null; backends: Array<{ id: string; format: string; available: boolean }> } {\n let pythonPath: string | null = null\n for (const cmd of ['python3', 'python']) {\n try {\n execFileSync(cmd, ['--version'], { timeout: 5000, stdio: 'pipe' })\n pythonPath = cmd\n break\n } catch { /* not found */ }\n }\n\n if (!pythonPath) return { pythonPath: null, backends: [] }\n\n const checks: Array<[string, string, string]> = [\n // [pythonModule, backendId, modelFormat]\n ['coremltools', 'coreml', 'coreml'],\n ['openvino.runtime', 'openvino', 'openvino'],\n ['torch', 'pytorch', 'onnx'],\n ['onnxruntime', 'onnx-py', 'onnx'],\n ]\n\n const backends: Array<{ id: string; format: string; available: boolean }> = []\n for (const [mod, id, format] of checks) {\n let available = false\n const probeStart = Date.now()\n try {\n execFileSync(pythonPath, ['-c', `import ${mod}`], { timeout: 30000, stdio: 'ignore' })\n available = true\n } catch { /* module not installed */ }\n const probeMs = Date.now() - probeStart\n console.log(`[PlatformScorer] Python ${mod}: ${available ? '✓' : '✗'} (${probeMs}ms)`)\n\n // Always show CoreML on macOS even if not installed\n if (id === 'coreml' && os.platform() === 'darwin') {\n backends.push({ id, format, available })\n } else if (available) {\n backends.push({ id, format, available })\n }\n }\n\n return { pythonPath, backends }\n }\n\n private scoreBackends(\n hardware: HardwareInfo,\n nodeBackends: Array<{ id: string; available: boolean }>,\n pythonBackends: Array<{ id: string; format: string; available: boolean }>,\n ): PlatformScore[] {\n const scores: PlatformScore[] = []\n\n // macOS Apple Silicon\n if (hardware.platform === 'darwin' && hardware.arch === 'arm64') {\n const pyCoreMl = pythonBackends.find(b => b.id === 'coreml')\n if (pyCoreMl) {\n scores.push({ runtime: 'python', backend: 'coreml', format: 'coreml', score: 95, reason: 'Apple Neural Engine (Python CoreML)', available: pyCoreMl.available })\n }\n const nodeCoreMl = nodeBackends.find(b => b.id === 'coreml')\n if (nodeCoreMl) {\n scores.push({ runtime: 'node', backend: 'coreml', format: 'onnx', score: 90, reason: 'CoreML via ONNX Runtime', available: nodeCoreMl.available })\n }\n }\n\n // NVIDIA\n if (hardware.gpu?.type === 'nvidia') {\n const tensorrt = nodeBackends.find(b => b.id === 'tensorrt')\n if (tensorrt) scores.push({ runtime: 'node', backend: 'tensorrt', format: 'onnx', score: 95, reason: 'NVIDIA TensorRT', available: true })\n const cuda = nodeBackends.find(b => b.id === 'cuda')\n if (cuda) scores.push({ runtime: 'node', backend: 'cuda', format: 'onnx', score: 85, reason: 'NVIDIA CUDA', available: true })\n }\n\n // Intel OpenVINO\n const openvino = pythonBackends.find(b => b.id === 'openvino')\n if (openvino) {\n const score = hardware.npu?.type === 'intel-npu' ? 90 : 80\n scores.push({ runtime: 'python', backend: 'openvino', format: 'openvino', score, reason: 'Intel OpenVINO', available: openvino.available })\n }\n\n // CPU fallbacks\n scores.push({ runtime: 'node', backend: 'cpu', format: 'onnx', score: 50, reason: 'CPU (ONNX Runtime Node)', available: true })\n const pyOnnx = pythonBackends.find(b => b.id === 'onnx-py')\n if (pyOnnx) {\n scores.push({ runtime: 'python', backend: 'cpu', format: 'onnx', score: 45, reason: 'CPU (Python ONNX)', available: pyOnnx.available })\n }\n\n return scores.sort((a, b) => b.score - a.score)\n }\n}\n","import type { PlatformScore, HardwareInfo, ModelRequirement, ResolvedInferenceConfig } from '@camstack/types'\n\nexport class InferenceConfigResolver {\n constructor(\n private readonly scores: readonly PlatformScore[],\n private readonly hardware: HardwareInfo,\n ) {}\n\n /**\n * Compute accuracy/backend weights based on available system RAM.\n * availableRAM_MB is now sourced from systeminformation (reliable cross-platform),\n * not os.freemem() which is broken on macOS.\n *\n * - > 16 GB available: prefer larger, more accurate models (accuracy 0.6, backend 0.4)\n * - > 8 GB available: balanced (accuracy 0.5, backend 0.5)\n * - <= 8 GB available: prefer speed (accuracy 0.4, backend 0.6)\n */\n private getWeights(): { accuracyWeight: number; backendWeight: number } {\n const ramMB = this.hardware.availableRAM_MB\n if (ramMB > 16_384) return { accuracyWeight: 0.6, backendWeight: 0.4 }\n if (ramMB > 8_192) return { accuracyWeight: 0.5, backendWeight: 0.5 }\n return { accuracyWeight: 0.4, backendWeight: 0.6 }\n }\n\n /**\n * Given an addon's model requirements, pick the best model + runtime + backend.\n *\n * Algorithm:\n * 1. Filter models by available RAM (minRAM_MB < 25% of available RAM)\n * 2. For each remaining model, find the best platform score whose format\n * is available in the model's formats\n * 3. Pick the model with the highest combined score using RAM-adaptive weights:\n * - High RAM (>16 GB): accuracy × 0.6 + backend × 0.4 (prefer accuracy)\n * - Mid RAM (>8 GB): accuracy × 0.5 + backend × 0.5 (balanced)\n * - Low RAM (<=8 GB): accuracy × 0.4 + backend × 0.6 (prefer speed)\n */\n resolve(requirements: readonly ModelRequirement[]): ResolvedInferenceConfig {\n if (requirements.length === 0) {\n return { modelId: '', runtime: 'node', backend: 'cpu', format: 'onnx', reason: 'No models declared' }\n }\n\n // Budget: 25% of available RAM (now reliable via systeminformation)\n const ramBudget = this.hardware.availableRAM_MB * 0.25\n const { accuracyWeight, backendWeight } = this.getWeights()\n\n console.log(`[InferenceConfigResolver] availableRAM: ${this.hardware.availableRAM_MB}MB, budget: ${Math.round(ramBudget)}MB, weights: accuracy=${accuracyWeight}, backend=${backendWeight}`)\n\n // Filter models that fit in memory\n const fits = requirements.filter(m => m.minRAM_MB < ramBudget)\n const candidates = fits.length > 0 ? fits : [requirements[0]!] // fallback to first/smallest\n\n console.log(`[InferenceConfigResolver] ${candidates.length}/${requirements.length} models fit RAM budget`)\n\n // For each model, find best compatible platform score\n let bestCombo: { model: ModelRequirement; score: PlatformScore; combined: number } | null = null\n\n for (const model of candidates) {\n for (const score of this.scores) {\n if (!score.available) continue\n if (!model.formats.includes(score.format)) continue\n\n const combined = model.accuracyScore * accuracyWeight + score.score * backendWeight\n\n if (!bestCombo || combined > bestCombo.combined) {\n console.log(`[InferenceConfigResolver] New best: ${model.modelId} (accuracy=${model.accuracyScore}) + ${score.backend}/${score.format} (score=${score.score}) → combined=${Math.round(combined)}`)\n bestCombo = { model, score, combined }\n }\n }\n }\n\n if (!bestCombo) {\n return {\n modelId: candidates[0]!.modelId,\n runtime: 'node',\n backend: 'cpu',\n format: 'onnx',\n reason: 'No compatible backend — CPU fallback',\n }\n }\n\n return {\n modelId: bestCombo.model.modelId,\n runtime: bestCombo.score.runtime,\n backend: bestCombo.score.backend,\n format: bestCombo.score.format,\n reason: `${bestCombo.model.name} on ${bestCombo.score.reason} (score: ${Math.round(bestCombo.combined)})`,\n }\n }\n}\n","import { randomUUID } from 'node:crypto'\nimport type { IScopedLogger, IEventBus, LoggerFactory, ProviderListItem } from '@camstack/types'\nimport { LifecycleStateMachine, type ElementStatus } from '../lifecycle/lifecycle-state-machine.js'\n\n/** Minimal device registry interface for provider management */\nexport type ProviderDeviceRegistry = {\n registerProviderDevices(providerId: string, devices: readonly IRegistrableDevice[]): void\n unregisterProviderDevices(providerId: string): void\n}\n\nexport interface IRegistrableDevice {\n readonly id: string\n readonly name: string\n readonly providerId: string\n readonly capabilities: readonly string[]\n}\n\nexport interface ProviderStatus {\n connected: boolean\n error?: string\n deviceCount: number\n}\n\nexport interface LiveEvent {\n type: string\n camera: string\n timestamp: number\n data: Record<string, unknown>\n}\n\nexport interface IManagedProvider {\n readonly id: string\n readonly type: string\n readonly name: string\n start(): Promise<void>\n stop(): Promise<void>\n getStatus(): ProviderStatus\n getDevices(): readonly IRegistrableDevice[]\n subscribeLiveEvents(callback: (event: LiveEvent) => void): () => void\n}\n\ninterface ProviderEntry<P extends IManagedProvider> {\n readonly provider: P\n readonly lifecycle: LifecycleStateMachine\n started: boolean\n unsubscribe?: () => void\n}\n\nexport type { ProviderListItem }\n\nexport class ProviderManager<P extends IManagedProvider = IManagedProvider> {\n private readonly providers = new Map<string, ProviderEntry<P>>()\n private readonly logger: IScopedLogger\n\n constructor(\n private readonly deviceRegistry: ProviderDeviceRegistry,\n private readonly eventBus: IEventBus,\n private readonly loggingService: LoggerFactory,\n ) {\n this.logger = loggingService.createLogger('provider-manager')\n }\n\n registerProvider(provider: P): void {\n const providerLogger = this.loggingService.createLogger(`provider:${provider.id}`)\n const lifecycle = new LifecycleStateMachine(\n provider.id,\n 'provider',\n this.eventBus,\n providerLogger,\n )\n this.providers.set(provider.id, { provider, lifecycle, started: false })\n this.logger.info(`Provider registered: ${provider.id} (${provider.name})`)\n }\n\n async startProvider(id: string): Promise<void> {\n const entry = this.providers.get(id)\n if (!entry) {\n throw new Error(`Provider \"${id}\" is not registered`)\n }\n\n if (entry.lifecycle.state === 'disabled') {\n throw new Error(`Provider \"${id}\" is disabled`)\n }\n\n entry.lifecycle.transition('starting')\n\n try {\n await entry.provider.start()\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err)\n entry.lifecycle.transition('error', message)\n throw err\n }\n\n entry.lifecycle.transition('running')\n\n const devices = entry.provider.getDevices()\n this.deviceRegistry.registerProviderDevices(id, devices)\n\n const unsubscribe = entry.provider.subscribeLiveEvents((event: LiveEvent) => {\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'provider', id },\n category: `provider.${event.type}`,\n data: event.data,\n })\n })\n\n entry.started = true\n entry.unsubscribe = unsubscribe\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'core', id: 'provider-manager' },\n category: 'provider.started',\n data: { providerId: id },\n })\n\n this.logger.info(`Provider started: ${id}`)\n }\n\n async stopProvider(id: string): Promise<void> {\n const entry = this.providers.get(id)\n if (!entry) {\n throw new Error(`Provider \"${id}\" is not registered`)\n }\n\n entry.lifecycle.transition('stopping')\n\n if (entry.unsubscribe) {\n entry.unsubscribe()\n entry.unsubscribe = undefined\n }\n\n this.deviceRegistry.unregisterProviderDevices(id)\n\n await entry.provider.stop()\n entry.started = false\n\n entry.lifecycle.transition('stopped')\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'core', id: 'provider-manager' },\n category: 'provider.stopped',\n data: { providerId: id },\n })\n\n this.logger.info(`Provider stopped: ${id}`)\n }\n\n async disableProvider(id: string): Promise<void> {\n const entry = this.providers.get(id)\n if (!entry) {\n throw new Error(`Provider \"${id}\" is not registered`)\n }\n\n if (entry.lifecycle.state === 'running' || entry.started) {\n await this.stopProvider(id)\n }\n\n entry.lifecycle.transition('disabled')\n this.logger.info(`Provider disabled: ${id}`)\n }\n\n async enableProvider(id: string): Promise<void> {\n const entry = this.providers.get(id)\n if (!entry) {\n throw new Error(`Provider \"${id}\" is not registered`)\n }\n\n if (entry.lifecycle.state !== 'disabled') {\n throw new Error(`Provider \"${id}\" is not disabled`)\n }\n\n entry.lifecycle.transition('stopped')\n this.logger.info(`Provider enabled: ${id}`)\n }\n\n async restartProvider(id: string): Promise<void> {\n await this.stopProvider(id)\n await this.startProvider(id)\n }\n\n getProvider(id: string): P | null {\n const entry = this.providers.get(id)\n return entry?.provider ?? null\n }\n\n getProviderStatus(id: string): ElementStatus | null {\n const entry = this.providers.get(id)\n return entry?.lifecycle.getStatus() ?? null\n }\n\n listProviders(): readonly ProviderListItem[] {\n return Array.from(this.providers.values()).map((entry) => ({\n id: entry.provider.id,\n type: entry.provider.type,\n name: entry.provider.name,\n status: entry.provider.getStatus(),\n started: entry.started,\n lifecycle: entry.lifecycle.getStatus(),\n }))\n }\n\n async shutdownAll(): Promise<void> {\n const startedIds = Array.from(this.providers.entries())\n .filter(([, entry]) => entry.started)\n .map(([id]) => id)\n\n for (const id of startedIds) {\n await this.stopProvider(id)\n }\n\n this.logger.info(`All providers shut down (${startedIds.length} stopped)`)\n }\n}\n"],"mappings":"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","names":["import_node_fs","import_node_path","import_node_path","path","_typeof","module","o","toPrimitive","toPropertyKey","r","opts: {\n links: OperationLink<TRouter, TInput, TOutput>[];\n op: Operation<TInput>;\n}","value: TType | TType[]","opts: {\n condition: (op: Operation) => boolean;\n /**\n * The link to execute next if the test function returns `true`.\n */\n true: TRPCLink<TRouter> | TRPCLink<TRouter>[];\n /**\n * The link to execute next if the test function returns `false`.\n */\n false: TRPCLink<TRouter> | TRPCLink<TRouter>[];\n}","cause: unknown","obj: unknown","err: unknown","fallback: string","TRPCClientError","message: string","opts?: {\n result?: Maybe<TRPCErrorResponse<inferErrorShape<TRouterOrProcedure>>>;\n cause?: Error;\n meta?: Record<string, unknown>;\n }","_cause: Error | TRPCErrorResponse<any> | object","opts: { meta?: Record<string, unknown>; cause?: Error }","transformer:\n | TransformerOptions<{ transformer: false }>['transformer']\n | TransformerOptions<{ transformer: true }>['transformer']\n | undefined","customFetchImpl?: FetchEsque | NativeFetchEsque","opts: HTTPLinkBaseOptions<AnyClientTypes>","array: unknown[]","dict: Record<number, unknown>","opts: GetInputOptions","opts: HTTPRequestOptions","import_objectSpread2","getUrl: GetUrl","getBody: GetBody","jsonHttpRequester: Requester","fn: unknown","queryParts: string[]","signal: Maybe<AbortSignal>","input: unknown","opts: HTTPLinkOptions<TRouter['_def']['_config']['$types']>","path","import_objectSpread2","meta: HTTPResult['meta'] | undefined","universalRequester: Requester","batchLoader: BatchLoader<TKey, TValue>","pendingItems: BatchItem<TKey, TValue>[] | null","dispatchTimer: ReturnType<typeof setTimeout> | null","items: BatchItem<TKey, TValue>[]","groupedItems: BatchItem<TKey, TValue>[][]","batch: Batch<TKey, TValue>","key: TKey","item: BatchItem<TKey, TValue>","resolve","signal: AbortSignal","opts: HTTPBatchLinkOptions<TRouter['_def']['_config']['$types']>","type: ProcedureType","path","import_objectSpread2","isFormData","value: unknown","opts: LoggerLinkFnOptions<any> & {\n colorMode: ColorMode;\n withContext?: boolean;\n }","path","parts: string[]","args: any[]","import_objectSpread2","opts: LoggerLinkOptions<TRouter>","result:\n | OperationResultEnvelope<unknown, TRPCClientError<TRouter>>\n | TRPCClientError<TRouter>","fn: 'error' | 'log'","resolve: (value: T | PromiseLike<T>) => void","reject: (reason?: any) => void","resolve","urlOptions: UrlOptionsWithConnectionParams","connectionParams: CallbackOrValue<TRPCRequestInfo['connectionParams']>","encoder: Encoder","message: TRPCConnectionParamsMessage","ws: WebSocket","pingTimeout: ReturnType<typeof setTimeout> | undefined","pongTimeout: ReturnType<typeof setTimeout> | undefined","connection: WsConnection","opts: WebSocketClientOptions","opts: WebSocketLinkOptions<TRouter>","jsonEncoder: Encoder","lazyDefaults: LazyOptions","keepAliveDefaults: KeepAliveOptions","attemptIndex: number","value: T | ((...args: TArgs) => T)","TRPCWebSocketClosedError","opts: { message: string; cause?: unknown }","onTimeout: () => void","timeoutMs: number","message: TRPCClientOutgoingMessage","callbacks: TCallbacks","messageId: MessageIdLike","WsConnection","opts: WebSocketConnectionOptions","this","import_objectSpread2","requestsToAwait: Promise<void>[]","path","closedError: TRPCWebSocketClosedError","cause: unknown","message: TRPCResponseMessage","message: TRPCClientIncomingRequest","messageOrMessages: TRPCClientOutgoingMessage | TRPCClientOutgoingMessage[]","message","opts: CreateTRPCClientOptions<TRouter>","client: TRPCUntypedClient<TRouter>","path","client: TRPCClient<TRouter>","opts: HTTPBatchStreamLinkOptions<TRouter['_def']['_config']['$types']>","type: ProcedureType","opts","promises","json: TRPCResponse","input: unknown","lastEventId: string | undefined","opts: UrlOptionsWithConnectionParams","opts: HTTPSubscriptionLinkOptions<\n inferClientTypes<TInferrable>,\n TEventSource\n >","result: TRPCResult<unknown>","opts: RetryLinkOptions<TInferrable>","next$: Unsubscribable","callNextTimeout: ReturnType<typeof setTimeout> | undefined","attempts: number","opts: LocalLinkOptions<TRouter>","chunk: unknown","ctx: inferRouterContext<TRouter> | undefined","newInput: unknown","cause: unknown","chunk: TRPCResult<unknown>","import_objectSpread2","clientCallTypeMap: Record<\n keyof DecorateProcedure<any, any>,\n ProcedureType\n>","experimental_localLink: typeof unstable_localLink","opts: CreateTRPCClientOptions<TInferrable>","opts: {\n type: TRPCType;\n input: TInput;\n path: string;\n context?: OperationContext;\n signal: Maybe<AbortSignal>;\n }","path: string","input?: unknown","opts?: TRPCRequestOptions","opts: Partial<\n TRPCSubscriptionObserver<unknown, TRPCClientError<AnyRouter>>\n > &\n TRPCRequestOptions","clientCallType: string","_asyncIterator","r","AsyncFromSyncIterator","module","e","n","o","OverloadYield","_awaitAsyncGenerator","_wrapAsyncGenerator","t","platform","rmSync","import_node_path","platform","arch","import_node_path","import_node_fs","import_node_child_process","import_promises","import_node_stream","platform","arch","unlinkSync","resolve","hash","fs","path","format","import_node_child_process","fs","path","import_node_crypto","promises","import_node_child_process","resolve","resolve","resolve","WebSocket","fs","path","import_node_crypto","import_better_sqlite3","fs","path","import_node_crypto","Database","import_better_sqlite3","Database","path","DailyRotateFile","resolve","import_node_crypto","path","import_node_crypto","fs","path","StorageLocationManager","location","hash","crypto","hash","crypto","crypto","path","import_node_crypto","import_node_crypto","import_node_child_process","import_node_util","import_node_fs","import_node_path","execFileAsync","createTRPCClient","createWSClient","wsLink","os","import_node_child_process","platform","readFileSync","arch","cpus","format","import_node_crypto"]}
|