@camstack/addon-pipeline 0.1.10 → 0.1.12

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.
Files changed (46) hide show
  1. package/assets/icon.svg +6 -0
  2. package/dist/audio-analyzer/index.js +16 -16
  3. package/dist/audio-analyzer/index.mjs +1 -1
  4. package/dist/audio-codec-nodeav/index.js +7 -7
  5. package/dist/audio-codec-nodeav/index.mjs +1 -1
  6. package/dist/decoder-nodeav/index.js +12 -12
  7. package/dist/decoder-nodeav/index.mjs +1 -1
  8. package/dist/detection-pipeline/index.js +45 -45
  9. package/dist/detection-pipeline/index.js.map +1 -1
  10. package/dist/detection-pipeline/index.mjs +1 -1
  11. package/dist/index-BhOycEVH.js +13867 -0
  12. package/dist/index-BhOycEVH.js.map +1 -0
  13. package/dist/index-FxfFGsiL.mjs +13868 -0
  14. package/dist/index-FxfFGsiL.mjs.map +1 -0
  15. package/dist/motion-wasm/index.js +8 -8
  16. package/dist/motion-wasm/index.mjs +1 -1
  17. package/dist/pipeline-runner/index.js +76 -77
  18. package/dist/pipeline-runner/index.js.map +1 -1
  19. package/dist/pipeline-runner/index.mjs +50 -51
  20. package/dist/pipeline-runner/index.mjs.map +1 -1
  21. package/dist/stream-broker/@mf-types.zip +0 -0
  22. package/dist/stream-broker/__mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.mjs-ChoHjdk6.mjs +17 -0
  23. package/dist/stream-broker/__mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.mjs-BvJPhiY_.mjs +20 -0
  24. package/dist/stream-broker/_stub.js +1 -1
  25. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BTj1RQPs.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-Czwg8GUO.mjs} +6 -6
  26. package/dist/stream-broker/{hostInit-wnZIaWA5.mjs → hostInit-fG6oFw4t.mjs} +6 -6
  27. package/dist/stream-broker/{index-DadYrR5H.mjs → index-BOmtakNy.mjs} +67 -44
  28. package/dist/stream-broker/{index-BQ_NNiX0.mjs → index-Bpv0NSqI.mjs} +5414 -5170
  29. package/dist/stream-broker/{index-Dwc0KrUN.mjs → index-l13fl8lu.mjs} +4249 -4164
  30. package/dist/stream-broker/index.js +521 -110
  31. package/dist/stream-broker/index.js.map +1 -1
  32. package/dist/stream-broker/index.mjs +426 -15
  33. package/dist/stream-broker/index.mjs.map +1 -1
  34. package/dist/stream-broker/remoteEntry.js +1 -1
  35. package/package.json +24 -9
  36. package/python/postprocessors/__pycache__/__init__.cpython-312.pyc +0 -0
  37. package/python/postprocessors/__pycache__/arcface.cpython-312.pyc +0 -0
  38. package/python/postprocessors/__pycache__/ctc.cpython-312.pyc +0 -0
  39. package/python/postprocessors/__pycache__/saliency.cpython-312.pyc +0 -0
  40. package/python/postprocessors/__pycache__/scrfd.cpython-312.pyc +0 -0
  41. package/python/postprocessors/__pycache__/softmax.cpython-312.pyc +0 -0
  42. package/python/postprocessors/__pycache__/yamnet.cpython-312.pyc +0 -0
  43. package/python/postprocessors/__pycache__/yolo.cpython-312.pyc +0 -0
  44. package/python/postprocessors/__pycache__/yolo_seg.cpython-312.pyc +0 -0
  45. package/dist/stream-broker/__mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.mjs-ezH__dL2.mjs +0 -17
  46. package/dist/stream-broker/__mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.mjs-ocGWYEqu.mjs +0 -20
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BhOycEVH.js","sources":["../../../node_modules/zod/v4/core/core.js","../../../node_modules/zod/v4/core/util.js","../../../node_modules/zod/v4/core/errors.js","../../../node_modules/zod/v4/core/parse.js","../../../node_modules/zod/v4/core/regexes.js","../../../node_modules/zod/v4/core/checks.js","../../../node_modules/zod/v4/core/doc.js","../../../node_modules/zod/v4/core/versions.js","../../../node_modules/zod/v4/core/schemas.js","../../../node_modules/zod/v4/core/registries.js","../../../node_modules/zod/v4/core/api.js","../../../node_modules/zod/v4/core/to-json-schema.js","../../../node_modules/zod/v4/core/json-schema-processors.js","../../../node_modules/zod/v4/classic/iso.js","../../../node_modules/zod/v4/classic/errors.js","../../../node_modules/zod/v4/classic/parse.js","../../../node_modules/zod/v4/classic/schemas.js","../../types/dist/index-YnRVILXN.mjs","../../types/dist/index.mjs"],"sourcesContent":["var _a;\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nexport const globalConfig = globalThis.__zod_globalConfig;\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","import { globalConfig } from \"./core.js\";\n// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const ratio = val / step;\n const roundedRatio = Math.round(ratio);\n // Use a relative epsilon scaled to the magnitude of the result\n const tolerance = Number.EPSILON * Math.max(Math.abs(ratio), 1);\n if (Math.abs(ratio - roundedRatio) < tolerance)\n return 0;\n return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = /* @__PURE__*/ cached(() => {\n // Skip the probe under `jitless`: strict CSPs report the caught `new Function`\n // as a `securitypolicyviolation` even though the throw is swallowed.\n if (globalConfig.jitless) {\n return false;\n }\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n if (o instanceof Map)\n return new Map(o);\n if (o instanceof Set)\n return new Set(o);\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = /* @__PURE__*/ new Set([\n \"string\",\n \"number\",\n \"bigint\",\n \"boolean\",\n \"symbol\",\n \"undefined\",\n]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n if (a._zod.def.checks?.length) {\n throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n }\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: b._zod.def.checks ?? [],\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined).\n// Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nexport function explicitlyAborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue === false) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const message = iss.message\n ? iss.message\n : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\");\n const { inst: _inst, continue: _continue, input: _input, ...rest } = iss;\n rest.path ?? (rest.path = []);\n rest.message = message;\n if (ctx?.reportInput) {\n rest.input = _input;\n }\n return rest;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error, path = []) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const cuid = /^[cC][0-9a-z]{6,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\nexport const httpProtocol = /^https?$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export class Doc {\n constructor(args = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n","export const version = {\n major: 4,\n minor: 4,\n patch: 3,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n if (util.explicitlyAborted(payload))\n continue;\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n // When normalize is off, require :// for http/https URLs\n // This prevents strings like \"http:example.com\" or \"https:/path\" from being silently accepted\n if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source) {\n if (!/^https?:\\/\\//i.test(trimmed)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid URL format\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n return;\n }\n }\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link $ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n // atob ignores whitespace, so reject it up front.\n if (/\\s/.test(data))\n return false;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalIn, isOptionalOut) {\n const isPresent = key in input;\n if (result.issues.length) {\n // For optional-in/out schemas, ignore errors on absent keys.\n if (isOptionalIn && isOptionalOut && !isPresent) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (!isPresent && !isOptionalIn) {\n if (!result.issues.length) {\n final.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: undefined,\n path: [key],\n });\n }\n return;\n }\n if (result.value === undefined) {\n if (isPresent) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalIn = _catchall.optin === \"optional\";\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n // skip __proto__ so it can't replace the result prototype via the\n // assignment setter on the plain {} we build into\n if (key === \"__proto__\")\n continue;\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalIn = el._zod.optin === \"optional\";\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalIn = schema?._zod?.optin === \"optional\";\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalIn && isOptionalOut) {\n // For optional-in/out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else if (!isOptionalIn) {\n doc.write(`\n const ${id}_present = ${k} in input;\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n if (!${id}_present && !${id}.issues.length) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: undefined,\n path: [${k}]\n });\n }\n\n if (${id}_present) {\n if (${id}.value === undefined) {\n newResult[${k}] = undefined;\n } else {\n newResult[${k}] = ${id}.value;\n }\n }\n\n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n inst._zod.parse = (payload, ctx) => {\n if (first) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n inst._zod.parse = (payload, ctx) => {\n if (first) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n // Fall back to union matching when the fast discriminator path fails:\n // - explicitly enabled via unionFallback, or\n // - during backward direction (encode), since codec-based discriminators\n // have different values in forward vs backward directions\n if (def.unionFallback || ctx.direction === \"backward\") {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n options: Array.from(disc.value.keys()),\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n const optinStart = getTupleOptStart(items, \"optin\");\n const optoutStart = getTupleOptStart(items, \"optout\");\n if (!def.rest) {\n if (input.length < optinStart) {\n payload.issues.push({\n code: \"too_small\",\n minimum: optinStart,\n inclusive: true,\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n if (input.length > items.length) {\n payload.issues.push({\n code: \"too_big\",\n maximum: items.length,\n inclusive: true,\n input,\n inst,\n origin: \"array\",\n });\n }\n }\n // Run every item in parallel, collecting results into an indexed\n // array. The post-processing in `handleTupleResults` walks them in\n // order so it can decide whether an absent optional-output error can\n // truncate the tail or must be reported to preserve required output.\n const itemResults = new Array(items.length);\n for (let i = 0; i < items.length; i++) {\n const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((rr) => {\n itemResults[i] = rr;\n }));\n }\n else {\n itemResults[i] = r;\n }\n }\n if (def.rest) {\n let i = items.length - 1;\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({ value: el, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((r) => handleTupleResult(r, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => handleTupleResults(itemResults, payload, items, input, optoutStart));\n }\n return handleTupleResults(itemResults, payload, items, input, optoutStart);\n };\n});\nfunction getTupleOptStart(items, key) {\n for (let i = items.length - 1; i >= 0; i--) {\n if (items[i]._zod[key] !== \"optional\")\n return i + 1;\n }\n return 0;\n}\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nfunction handleTupleResults(itemResults, final, items, input, optoutStart) {\n // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional\n // rule, but only after `optoutStart`: the first index where the output\n // tuple tail can be absent.\n for (let i = 0; i < items.length; i++) {\n const r = itemResults[i];\n const isPresent = i < input.length;\n if (r.issues.length) {\n if (!isPresent && i >= optoutStart) {\n final.value.length = i;\n break;\n }\n final.issues.push(...util.prefixIssues(i, r.issues));\n }\n final.value[i] = r.value;\n }\n // Drop trailing slots that produced `undefined` for absent input\n // (the array analog of an absent optional key on an object). The\n // `i >= input.length` floor is critical: an explicit `undefined`\n // *inside* the input must be preserved even when the schema is\n // optional-out (e.g. `z.string().or(z.undefined())` accepting an\n // explicit undefined value).\n for (let i = final.value.length - 1; i >= input.length; i--) {\n if (items[i]._zod.optout === \"optional\" && final.value[i] === undefined) {\n final.value.length = i;\n }\n else {\n break;\n }\n }\n return final;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (keyResult.issues.length) {\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n continue;\n }\n const outKey = keyResult.value;\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n // Reflect.ownKeys for Symbol-key support; filter non-enumerable to match z.object()\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n if (!Object.prototype.propertyIsEnumerable.call(input, key))\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n payload.fallback = true;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n payload.fallback = true;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (input === undefined && (result.issues.length || result.fallback)) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const input = payload.value;\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, input));\n return handleOptionalResult(result, input);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n payload.fallback = true;\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n payload.fallback = true;\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues, fallback: left.fallback }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodPreprocess = /*@__PURE__*/ core.$constructor(\"$ZodPreprocess\", (inst, def) => {\n $ZodPipe.init(inst, def);\n});\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // Cache the resolved inner type on the shared `def` so all clones of this\n // lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance,\n // preserving identity for cycle detection on recursive schemas.\n util.defineLazy(inst._zod, \"innerType\", () => {\n const d = def;\n if (!d._cachedInner)\n d._cachedInner = def.getter();\n return d._cachedInner;\n });\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link _cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn, params) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n }, params);\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && \"_prefault\" in result.schema)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // The `id` in `.meta()` is a Zod-specific registration tag used to extract\n // schemas into $defs — it is not user-facing JSON Schema metadata. Strip it\n // from the output body where it would otherwise leak. The id is preserved\n // implicitly via the $defs key (and via $ref paths).\n const rootMetaId = ctx.metadataRegistry.get(schema)?.id;\n if (rootMetaId !== undefined && result.id === rootMetaId)\n delete result.id;\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n if (seen.def.id === seen.defId)\n delete seen.def.id;\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n if (_schema._zod.traits.has(\"$ZodCodec\"))\n return true;\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n","import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n // when both minimum and exclusiveMinimum exist, pick the more restrictive one\n const exMin = typeof exclusiveMinimum === \"number\" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);\n const exMax = typeof exclusiveMaximum === \"number\" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY);\n const legacy = ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\";\n if (exMin) {\n if (legacy) {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n else if (typeof minimum === \"number\") {\n json.minimum = minimum;\n }\n if (exMax) {\n if (legacy) {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n else if (typeof maximum === \"number\") {\n json.maximum = maximum;\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, {\n ...params,\n path: [...params.path, \"items\"],\n });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const inIsTransform = def.in._zod.traits.has(\"$ZodTransform\");\n const innerType = ctx.io === \"input\" ? (inIsTransform ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n schemas[key] = finalize(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\n// Lazy-bind builder methods.\n//\n// Builder methods (`.optional`, `.array`, `.refine`, ...) live as\n// non-enumerable getters on each concrete schema constructor's\n// prototype. On first access from an instance the getter allocates\n// `fn.bind(this)` and caches it as an own property on that instance,\n// so detached usage (`const m = schema.optional; m()`) still works\n// and the per-instance allocation only happens for methods actually\n// touched.\n//\n// One install per (prototype, group), memoized by `_installedGroups`.\nconst _installedGroups = /* @__PURE__ */ new WeakMap();\nfunction _installLazyMethods(inst, group, methods) {\n const proto = Object.getPrototypeOf(inst);\n let installed = _installedGroups.get(proto);\n if (!installed) {\n installed = new Set();\n _installedGroups.set(proto, installed);\n }\n if (installed.has(group))\n return;\n installed.add(group);\n for (const key in methods) {\n const fn = methods[key];\n Object.defineProperty(proto, key, {\n configurable: true,\n enumerable: false,\n get() {\n const bound = fn.bind(this);\n Object.defineProperty(this, key, {\n configurable: true,\n writable: true,\n enumerable: true,\n value: bound,\n });\n return bound;\n },\n set(v) {\n Object.defineProperty(this, key, {\n configurable: true,\n writable: true,\n enumerable: true,\n value: v,\n });\n },\n });\n }\n}\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: createStandardJSONSchemaMethod(inst, \"input\"),\n output: createStandardJSONSchemaMethod(inst, \"output\"),\n },\n });\n inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // Parse-family is intentionally kept as per-instance closures: these are\n // the hot path AND the most-detached methods (`arr.map(schema.parse)`,\n // `const { parse } = schema`, etc.). Eager closures here mean callers pay\n // ~12 closure allocations per schema but get monomorphic call sites and\n // detached usage that \"just works\".\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n // All builder methods are placed on the internal prototype as lazy-bind\n // getters. On first access per-instance, a bound thunk is allocated and\n // cached as an own property; subsequent accesses skip the getter. This\n // means: no per-instance allocation for unused methods, full\n // detachability preserved (`const m = schema.optional; m()` works), and\n // shared underlying function references across all instances.\n _installLazyMethods(inst, \"ZodType\", {\n check(...chks) {\n const def = this.def;\n return this.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...chks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), { parent: true });\n },\n with(...chks) {\n return this.check(...chks);\n },\n clone(def, params) {\n return core.clone(this, def, params);\n },\n brand() {\n return this;\n },\n register(reg, meta) {\n reg.add(this, meta);\n return this;\n },\n refine(check, params) {\n return this.check(refine(check, params));\n },\n superRefine(refinement, params) {\n return this.check(superRefine(refinement, params));\n },\n overwrite(fn) {\n return this.check(checks.overwrite(fn));\n },\n optional() {\n return optional(this);\n },\n exactOptional() {\n return exactOptional(this);\n },\n nullable() {\n return nullable(this);\n },\n nullish() {\n return optional(nullable(this));\n },\n nonoptional(params) {\n return nonoptional(this, params);\n },\n array() {\n return array(this);\n },\n or(arg) {\n return union([this, arg]);\n },\n and(arg) {\n return intersection(this, arg);\n },\n transform(tx) {\n return pipe(this, transform(tx));\n },\n default(d) {\n return _default(this, d);\n },\n prefault(d) {\n return prefault(this, d);\n },\n catch(params) {\n return _catch(this, params);\n },\n pipe(target) {\n return pipe(this, target);\n },\n readonly() {\n return readonly(this);\n },\n describe(description) {\n const cl = this.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n },\n meta(...args) {\n // overloaded: meta() returns the registered metadata, meta(data)\n // returns a clone with `data` registered. The mapped type picks\n // up the second overload, so we accept variadic any-args and\n // return `any` to satisfy both at runtime.\n if (args.length === 0)\n return core.globalRegistry.get(this);\n const cl = this.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n },\n isOptional() {\n return this.safeParse(undefined).success;\n },\n isNullable() {\n return this.safeParse(null).success;\n },\n apply(fn) {\n return fn(this);\n },\n });\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n _installLazyMethods(inst, \"_ZodString\", {\n regex(...args) {\n return this.check(checks.regex(...args));\n },\n includes(...args) {\n return this.check(checks.includes(...args));\n },\n startsWith(...args) {\n return this.check(checks.startsWith(...args));\n },\n endsWith(...args) {\n return this.check(checks.endsWith(...args));\n },\n min(...args) {\n return this.check(checks.minLength(...args));\n },\n max(...args) {\n return this.check(checks.maxLength(...args));\n },\n length(...args) {\n return this.check(checks.length(...args));\n },\n nonempty(...args) {\n return this.check(checks.minLength(1, ...args));\n },\n lowercase(params) {\n return this.check(checks.lowercase(params));\n },\n uppercase(params) {\n return this.check(checks.uppercase(params));\n },\n trim() {\n return this.check(checks.trim());\n },\n normalize(...args) {\n return this.check(checks.normalize(...args));\n },\n toLowerCase() {\n return this.check(checks.toLowerCase());\n },\n toUpperCase() {\n return this.check(checks.toUpperCase());\n },\n slugify() {\n return this.check(checks.slugify());\n },\n });\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: core.regexes.httpProtocol,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\n/**\n * Validates a CUID v1 string.\n *\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2 | `z.cuid2()`} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n _installLazyMethods(inst, \"ZodNumber\", {\n gt(value, params) {\n return this.check(checks.gt(value, params));\n },\n gte(value, params) {\n return this.check(checks.gte(value, params));\n },\n min(value, params) {\n return this.check(checks.gte(value, params));\n },\n lt(value, params) {\n return this.check(checks.lt(value, params));\n },\n lte(value, params) {\n return this.check(checks.lte(value, params));\n },\n max(value, params) {\n return this.check(checks.lte(value, params));\n },\n int(params) {\n return this.check(int(params));\n },\n safe(params) {\n return this.check(int(params));\n },\n positive(params) {\n return this.check(checks.gt(0, params));\n },\n nonnegative(params) {\n return this.check(checks.gte(0, params));\n },\n negative(params) {\n return this.check(checks.lt(0, params));\n },\n nonpositive(params) {\n return this.check(checks.lte(0, params));\n },\n multipleOf(value, params) {\n return this.check(checks.multipleOf(value, params));\n },\n step(value, params) {\n return this.check(checks.multipleOf(value, params));\n },\n finite() {\n return this;\n },\n });\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n _installLazyMethods(inst, \"ZodArray\", {\n min(n, params) {\n return this.check(checks.minLength(n, params));\n },\n nonempty(params) {\n return this.check(checks.minLength(1, params));\n },\n max(n, params) {\n return this.check(checks.maxLength(n, params));\n },\n length(n, params) {\n return this.check(checks.length(n, params));\n },\n unwrap() {\n return this.element;\n },\n });\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n _installLazyMethods(inst, \"ZodObject\", {\n keyof() {\n return _enum(Object.keys(this._zod.def.shape));\n },\n catchall(catchall) {\n return this.clone({ ...this._zod.def, catchall: catchall });\n },\n passthrough() {\n return this.clone({ ...this._zod.def, catchall: unknown() });\n },\n loose() {\n return this.clone({ ...this._zod.def, catchall: unknown() });\n },\n strict() {\n return this.clone({ ...this._zod.def, catchall: never() });\n },\n strip() {\n return this.clone({ ...this._zod.def, catchall: undefined });\n },\n extend(incoming) {\n return util.extend(this, incoming);\n },\n safeExtend(incoming) {\n return util.safeExtend(this, incoming);\n },\n merge(other) {\n return util.merge(this, other);\n },\n pick(mask) {\n return util.pick(this, mask);\n },\n omit(mask) {\n return util.omit(this, mask);\n },\n partial(...args) {\n return util.partial(ZodOptional, this, args[0]);\n },\n required(...args) {\n return util.required(ZodNonOptional, this, args[0]);\n },\n });\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n // v3-compat: z.record(valueType, params?) — defaults keyType to z.string()\n if (!valueType || !valueType._zod) {\n return new ZodRecord({\n type: \"record\",\n keyType: string(),\n valueType: keyType,\n ...util.normalizeParams(valueType),\n });\n }\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n payload.fallback = true;\n return payload;\n });\n }\n payload.value = output;\n payload.fallback = true;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport function invertCodec(codec) {\n const def = codec._zod.def;\n return new ZodCodec({\n type: \"pipe\",\n in: def.out,\n out: def.in,\n transform: def.reverseTransform,\n reverseTransform: def.transform,\n });\n}\nexport const ZodPreprocess = /*@__PURE__*/ core.$constructor(\"ZodPreprocess\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodPreprocess.init(inst, def);\n});\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn, params) {\n return core._superRefine(fn, params);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\nexport function preprocess(fn, schema) {\n return new ZodPreprocess({\n type: \"pipe\",\n in: transform(fn),\n out: schema,\n });\n}\n","import { z } from \"zod\";\nconst MODEL_FORMATS = [\"onnx\", \"coreml\", \"openvino\", \"tflite\", \"pt\"];\nconst WELL_KNOWN_TABS = [\n { id: \"overview\", label: \"Overview\", icon: \"layout-dashboard\", order: -10 },\n { id: \"general\", label: \"General\", icon: \"settings\", order: 0 },\n { id: \"image\", label: \"Image\", icon: \"image\", order: 5 },\n { id: \"light\", label: \"Light\", icon: \"lightbulb\", order: 7 },\n { id: \"motion\", label: \"Motion\", icon: \"activity\", order: 10 },\n { id: \"audio\", label: \"Audio\", icon: \"mic\", order: 12 },\n { id: \"alarms\", label: \"Alarms\", icon: \"bell-ring\", order: 13 },\n { id: \"snapshot\", label: \"Snapshot\", icon: \"camera\", order: 15 },\n { id: \"osd\", label: \"OSD\", icon: \"type\", order: 18 },\n { id: \"stream-broker\", label: \"Stream Broker\", icon: \"radio\", order: 20 },\n { id: \"streaming\", label: \"Streaming\", icon: \"video\", order: 35 },\n { id: \"pipeline\", label: \"Detection Pipeline\", icon: \"cpu\", order: 39 },\n { id: \"zones\", label: \"Detection\", icon: \"shapes\", order: 38 },\n { id: \"live-stats\", label: \"Live Stats\", icon: \"activity\", order: 39 },\n { id: \"recording\", label: \"Recording\", icon: \"circle-dot\", order: 40 },\n // Pipeline-page tabs — `engine` co-locates `detection-pipeline`'s\n // vision-engine section + `audio-analyzer`'s audio-engine section\n // (same modality of choice, different pipelines). `scheduler` and\n // `decoder` group the runner / decoder addon settings under their\n // own tabs so the pipeline page bar stays manageable.\n { id: \"engine\", label: \"Inference Engine\", icon: \"zap\", order: 41 },\n { id: \"scheduler\", label: \"Scheduler\", icon: \"list-checks\", order: 42 },\n { id: \"decoder\", label: \"Decoder\", icon: \"film\", order: 43 },\n { id: \"notifications\", label: \"Notifications\", icon: \"bell\", order: 50 },\n { id: \"network\", label: \"Network\", icon: \"globe\", order: 60 },\n { id: \"storage\", label: \"Storage\", icon: \"hard-drive\", order: 70 },\n { id: \"advanced\", label: \"Advanced\", icon: \"wrench\", order: 100 }\n];\nconst WELL_KNOWN_TAB_MAP = Object.fromEntries(WELL_KNOWN_TABS.map((t) => [t.id, t]));\nfunction isValuelessField(field) {\n return field.type === \"separator\" || field.type === \"info\" || field.type === \"button\" || field.type === \"object-array\" || field.type === \"widget\" || field.type === \"addon-action-button\";\n}\nfunction hydrateSchema(schema, values) {\n return {\n ...schema.tabs ? { tabs: [...schema.tabs] } : {},\n sections: schema.sections.map((section) => ({\n ...section,\n fields: section.fields.map((field) => hydrateField(field, values))\n }))\n };\n}\nfunction hydrateField(field, values) {\n if (isValuelessField(field)) {\n return field;\n }\n if (field.type === \"group\") {\n const hydratedChildren = field.fields.map((child) => hydrateField(child, values));\n const out = {\n ...field,\n fields: hydratedChildren\n };\n return out;\n }\n if (field.type === \"sub-tabs\") {\n const hydratedTabs = field.tabs.map((tab) => ({\n ...tab,\n fields: tab.fields.map((child) => hydrateField(child, values))\n }));\n const out = {\n ...field,\n tabs: hydratedTabs\n };\n return out;\n }\n const key = field.key;\n const storedValue = Object.prototype.hasOwnProperty.call(values, key) ? values[key] : void 0;\n const defaultValue = field.default;\n if (field.multiple) {\n const stored = Array.isArray(storedValue) ? storedValue : storedValue !== void 0 && storedValue !== null ? [storedValue] : [];\n const itemFallback = field.multiple.itemDefault !== void 0 ? field.multiple.itemDefault : defaultValue !== void 0 ? defaultValue : typeOf(field) === \"string\" ? \"\" : null;\n const minCount = Math.max(field.multiple.min, stored.length);\n const items = [];\n for (let i = 0; i < minCount; i++) {\n items.push(i < stored.length ? stored[i] : itemFallback);\n }\n return { ...field, value: items };\n }\n const rawValue = storedValue !== void 0 ? storedValue : defaultValue !== void 0 ? defaultValue : null;\n const value = field.type === \"textarea\" && field.isJson && rawValue !== null && typeof rawValue === \"object\" ? JSON.stringify(rawValue, null, 2) : rawValue;\n const hydrated = { ...field, value };\n return hydrated;\n}\nfunction typeOf(field) {\n switch (field.type) {\n case \"text\":\n case \"textarea\":\n case \"password\":\n case \"color\":\n case \"probe\":\n return \"string\";\n case \"number\":\n case \"slider\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n default:\n return \"other\";\n }\n}\nconst StorageLocationTypeSchema = z.enum([\n \"data\",\n \"media\",\n \"recordings\",\n // Recording-stream slots — addons pick high/low/clips per use case.\n // The legacy `IStorageProvider` interface enumerated these; keeping\n // them in the Zod enum means the `storage` cap can route per-slot\n // location refs (e.g. `'recordings-high:nas-01'`) without losing\n // type safety.\n \"recordings-high\",\n \"recordings-low\",\n \"recordings-clips\",\n // Detection snapshots / thumbnails / crops.\n \"event-images\",\n \"models\",\n \"cache\",\n \"logs\",\n \"addons-data\",\n // `backups` — owned by the backup-orchestrator builtin. Default\n // root: `<dataDir>/backups`. Operators can repoint via the same\n // override mechanism every other location uses (storage settings).\n \"backups\"\n]);\nconst STORAGE_LOCATION_CARDINALITY = {\n // Singletons — system-internal or split-state-incoherent\n data: \"singleton\",\n media: \"singleton\",\n cache: \"singleton\",\n logs: \"singleton\",\n \"addons-data\": \"singleton\",\n models: \"singleton\",\n \"event-images\": \"singleton\",\n // Multi — operator-driven storage tiering\n recordings: \"multi\",\n \"recordings-high\": \"multi\",\n \"recordings-low\": \"multi\",\n \"recordings-clips\": \"multi\",\n backups: \"multi\"\n};\nconst StorageLocationSchema = z.object({\n id: z.string().regex(/^[a-z][a-z0-9-]*:[a-z0-9-]+$/),\n type: StorageLocationTypeSchema,\n displayName: z.string().min(1),\n providerId: z.string().min(1),\n config: z.record(z.string(), z.unknown()),\n isDefault: z.boolean().default(false),\n isSystem: z.boolean().default(false),\n createdAt: z.number(),\n updatedAt: z.number()\n});\nconst StorageLocationRefSchema = z.union([\n StorageLocationTypeSchema,\n z.string().regex(/^[a-z][a-z0-9-]*:[a-z0-9-]+$/)\n]);\nconst DecoderStatsSchema = z.object({\n inputFps: z.number(),\n outputFps: z.number(),\n avgDecodeTimeMs: z.number(),\n droppedFrames: z.number()\n});\nconst DecoderSessionConfigSchema = z.object({\n codec: z.string(),\n maxFps: z.number().default(0),\n outputFormat: z.enum([\"jpeg\", \"rgb\", \"bgr\", \"yuv420\", \"gray\"]).default(\"jpeg\"),\n scale: z.number().default(1),\n width: z.number().optional(),\n height: z.number().optional(),\n /**\n * Identifier of the camera this decoder session serves. Optional\n * because the cap is generic (any caller could request decode), but\n * stream-broker passes it so decoder logs include `deviceId` for\n * per-camera filtering when diagnosing failures (e.g. node-av\n * sendPacket errors on a single hung camera).\n */\n deviceId: z.number().int().nonnegative().optional(),\n /**\n * Free-form tag for log scoping. Stream-broker uses\n * `broker:<deviceId>/<profile>`. Decoder session logger surfaces it\n * on every line so `grep tag=broker:5/high` filters one camera\n * profile cleanly.\n */\n tag: z.string().optional()\n});\nfunction errMsg(err) {\n if (err instanceof Error) return err.message;\n if (typeof err === \"string\") return err;\n return String(err);\n}\nconst AUDIO_MACRO_LABELS = [\n { id: \"speech\", name: \"Speech\", icon: \"🗣️\" },\n { id: \"scream\", name: \"Scream / Shout\", icon: \"😱\" },\n { id: \"crying\", name: \"Crying / Baby\", icon: \"😢\" },\n { id: \"laughter\", name: \"Laughter\", icon: \"😂\" },\n { id: \"music\", name: \"Music\", icon: \"🎵\" },\n { id: \"dog\", name: \"Dog\", icon: \"🐕\" },\n { id: \"cat\", name: \"Cat\", icon: \"🐈\" },\n { id: \"bird\", name: \"Bird\", icon: \"🐦\" },\n { id: \"animal\", name: \"Animal (other)\", icon: \"🐾\" },\n { id: \"alarm\", name: \"Alarm / Siren\", icon: \"🚨\" },\n { id: \"doorbell\", name: \"Doorbell / Knock\", icon: \"🔔\" },\n { id: \"glass_breaking\", name: \"Glass Breaking\", icon: \"💥\" },\n { id: \"gunshot\", name: \"Gunshot / Explosion\", icon: \"💣\" },\n { id: \"vehicle\", name: \"Vehicle\", icon: \"🚗\" },\n { id: \"siren\", name: \"Emergency Siren\", icon: \"🚑\" },\n { id: \"fire\", name: \"Fire / Smoke\", icon: \"🔥\" },\n { id: \"water\", name: \"Water\", icon: \"💧\" },\n { id: \"wind\", name: \"Wind / Weather\", icon: \"🌬️\" },\n { id: \"door\", name: \"Door\", icon: \"🚪\" },\n { id: \"footsteps\", name: \"Footsteps\", icon: \"👣\" },\n { id: \"crowd\", name: \"Crowd / Chatter\", icon: \"👥\" },\n { id: \"telephone\", name: \"Telephone\", icon: \"📞\" },\n { id: \"engine\", name: \"Engine / Motor\", icon: \"⚙️\" },\n { id: \"tools\", name: \"Tools / Construction\", icon: \"🔨\" },\n { id: \"silence\", name: \"Silence\", icon: \"🤫\" }\n];\nconst YAMNET_TO_MACRO = {\n mapping: {\n // Speech\n \"Speech\": \"speech\",\n \"Child speech, kid speaking\": \"speech\",\n \"Conversation\": \"speech\",\n \"Narration, monologue\": \"speech\",\n \"Babbling\": \"speech\",\n \"Whispering\": \"speech\",\n \"Speech synthesizer\": \"speech\",\n \"Humming\": \"speech\",\n \"Rapping\": \"speech\",\n \"Singing\": \"speech\",\n \"Choir\": \"speech\",\n \"Child singing\": \"speech\",\n // Scream / Shout\n \"Shout\": \"scream\",\n \"Bellow\": \"scream\",\n \"Yell\": \"scream\",\n \"Screaming\": \"scream\",\n \"Children shouting\": \"scream\",\n \"Whoop\": \"scream\",\n // Crying\n \"Crying, sobbing\": \"crying\",\n \"Baby cry, infant cry\": \"crying\",\n \"Whimper\": \"crying\",\n \"Wail, moan\": \"crying\",\n \"Groan\": \"crying\",\n // Laughter\n \"Laughter\": \"laughter\",\n \"Baby laughter\": \"laughter\",\n \"Giggle\": \"laughter\",\n \"Snicker\": \"laughter\",\n \"Belly laugh\": \"laughter\",\n \"Chuckle, chortle\": \"laughter\",\n // Music\n \"Music\": \"music\",\n \"Musical instrument\": \"music\",\n \"Guitar\": \"music\",\n \"Piano\": \"music\",\n \"Drum\": \"music\",\n \"Drum kit\": \"music\",\n \"Violin, fiddle\": \"music\",\n \"Flute\": \"music\",\n \"Saxophone\": \"music\",\n \"Trumpet\": \"music\",\n \"Synthesizer\": \"music\",\n \"Pop music\": \"music\",\n \"Rock music\": \"music\",\n \"Hip hop music\": \"music\",\n \"Classical music\": \"music\",\n \"Jazz\": \"music\",\n \"Electronic music\": \"music\",\n \"Background music\": \"music\",\n // Dog\n \"Dog\": \"dog\",\n \"Bark\": \"dog\",\n \"Yip\": \"dog\",\n \"Howl\": \"dog\",\n \"Bow-wow\": \"dog\",\n \"Growling\": \"dog\",\n \"Whimper (dog)\": \"dog\",\n // Cat\n \"Cat\": \"cat\",\n \"Purr\": \"cat\",\n \"Meow\": \"cat\",\n \"Hiss\": \"cat\",\n \"Caterwaul\": \"cat\",\n // Bird\n \"Bird\": \"bird\",\n \"Bird vocalization, bird call, bird song\": \"bird\",\n \"Chirp, tweet\": \"bird\",\n \"Squawk\": \"bird\",\n \"Crow\": \"bird\",\n \"Owl\": \"bird\",\n \"Pigeon, dove\": \"bird\",\n // Animal (other)\n \"Animal\": \"animal\",\n \"Domestic animals, pets\": \"animal\",\n \"Livestock, farm animals, working animals\": \"animal\",\n \"Horse\": \"animal\",\n \"Cattle, bovinae\": \"animal\",\n \"Pig\": \"animal\",\n \"Sheep\": \"animal\",\n \"Goat\": \"animal\",\n \"Frog\": \"animal\",\n \"Insect\": \"animal\",\n \"Cricket\": \"animal\",\n // Alarm / Siren\n \"Alarm\": \"alarm\",\n \"Alarm clock\": \"alarm\",\n \"Smoke detector, smoke alarm\": \"alarm\",\n \"Fire alarm\": \"alarm\",\n \"Buzzer\": \"alarm\",\n \"Civil defense siren\": \"alarm\",\n \"Car alarm\": \"alarm\",\n // Emergency Siren\n \"Siren\": \"siren\",\n \"Police car (siren)\": \"siren\",\n \"Ambulance (siren)\": \"siren\",\n \"Fire engine, fire truck (siren)\": \"siren\",\n \"Emergency vehicle\": \"siren\",\n \"Foghorn\": \"siren\",\n // Doorbell / Knock\n \"Doorbell\": \"doorbell\",\n \"Ding-dong\": \"doorbell\",\n \"Knock\": \"doorbell\",\n \"Tap\": \"doorbell\",\n // Glass Breaking\n \"Glass\": \"glass_breaking\",\n \"Shatter\": \"glass_breaking\",\n \"Chink, clink\": \"glass_breaking\",\n // Gunshot / Explosion\n \"Gunshot, gunfire\": \"gunshot\",\n \"Machine gun\": \"gunshot\",\n \"Explosion\": \"gunshot\",\n \"Fireworks\": \"gunshot\",\n \"Firecracker\": \"gunshot\",\n \"Artillery fire\": \"gunshot\",\n \"Cap gun\": \"gunshot\",\n \"Boom\": \"gunshot\",\n // Vehicle\n \"Vehicle\": \"vehicle\",\n \"Car\": \"vehicle\",\n \"Truck\": \"vehicle\",\n \"Bus\": \"vehicle\",\n \"Motorcycle\": \"vehicle\",\n \"Car passing by\": \"vehicle\",\n \"Vehicle horn, car horn, honking\": \"vehicle\",\n \"Traffic noise, roadway noise\": \"vehicle\",\n \"Train\": \"vehicle\",\n \"Aircraft\": \"vehicle\",\n \"Helicopter\": \"vehicle\",\n \"Bicycle\": \"vehicle\",\n \"Skateboard\": \"vehicle\",\n // Fire / Smoke\n \"Fire\": \"fire\",\n \"Crackle\": \"fire\",\n // Water\n \"Water\": \"water\",\n \"Rain\": \"water\",\n \"Raindrop\": \"water\",\n \"Rain on surface\": \"water\",\n \"Stream\": \"water\",\n \"Waterfall\": \"water\",\n \"Ocean\": \"water\",\n \"Waves, surf\": \"water\",\n \"Splash, splatter\": \"water\",\n // Wind / Weather\n \"Wind\": \"wind\",\n \"Thunderstorm\": \"wind\",\n \"Thunder\": \"wind\",\n \"Wind noise (microphone)\": \"wind\",\n \"Rustling leaves\": \"wind\",\n // Door\n \"Door\": \"door\",\n \"Sliding door\": \"door\",\n \"Slam\": \"door\",\n \"Cupboard open or close\": \"door\",\n // Footsteps\n \"Walk, footsteps\": \"footsteps\",\n \"Run\": \"footsteps\",\n \"Shuffle\": \"footsteps\",\n // Crowd\n \"Crowd\": \"crowd\",\n \"Chatter\": \"crowd\",\n \"Cheering\": \"crowd\",\n \"Applause\": \"crowd\",\n \"Children playing\": \"crowd\",\n \"Hubbub, speech noise, speech babble\": \"crowd\",\n // Telephone\n \"Telephone\": \"telephone\",\n \"Telephone bell ringing\": \"telephone\",\n \"Ringtone\": \"telephone\",\n \"Telephone dialing, DTMF\": \"telephone\",\n \"Busy signal\": \"telephone\",\n // Engine / Motor\n \"Engine\": \"engine\",\n \"Engine starting\": \"engine\",\n \"Idling\": \"engine\",\n \"Accelerating, revving, vroom\": \"engine\",\n \"Light engine (high frequency)\": \"engine\",\n \"Medium engine (mid frequency)\": \"engine\",\n \"Heavy engine (low frequency)\": \"engine\",\n \"Lawn mower\": \"engine\",\n \"Chainsaw\": \"engine\",\n // Tools / Construction\n \"Hammer\": \"tools\",\n \"Jackhammer\": \"tools\",\n \"Sawing\": \"tools\",\n \"Power tool\": \"tools\",\n \"Drill\": \"tools\",\n \"Sanding\": \"tools\",\n // Silence\n \"Silence\": \"silence\"\n },\n preserveOriginal: false\n};\nconst APPLE_SA_TO_MACRO = {\n mapping: {\n \"speech\": \"speech\",\n \"child_speech\": \"speech\",\n \"conversation\": \"speech\",\n \"whispering\": \"speech\",\n \"singing\": \"speech\",\n \"humming\": \"speech\",\n \"shout\": \"scream\",\n \"yell\": \"scream\",\n \"screaming\": \"scream\",\n \"crying\": \"crying\",\n \"baby_crying\": \"crying\",\n \"sobbing\": \"crying\",\n \"laughter\": \"laughter\",\n \"baby_laughter\": \"laughter\",\n \"giggling\": \"laughter\",\n \"music\": \"music\",\n \"guitar\": \"music\",\n \"piano\": \"music\",\n \"drums\": \"music\",\n \"dog_bark\": \"dog\",\n \"dog_bow_wow\": \"dog\",\n \"dog_growling\": \"dog\",\n \"dog_howl\": \"dog\",\n \"cat_meow\": \"cat\",\n \"cat_purr\": \"cat\",\n \"cat_hiss\": \"cat\",\n \"bird\": \"bird\",\n \"bird_chirp\": \"bird\",\n \"bird_squawk\": \"bird\",\n \"animal\": \"animal\",\n \"horse\": \"animal\",\n \"cow_moo\": \"animal\",\n \"insect\": \"animal\",\n \"alarm\": \"alarm\",\n \"smoke_alarm\": \"alarm\",\n \"fire_alarm\": \"alarm\",\n \"car_alarm\": \"alarm\",\n \"siren\": \"siren\",\n \"police_siren\": \"siren\",\n \"ambulance_siren\": \"siren\",\n \"doorbell\": \"doorbell\",\n \"door_knock\": \"doorbell\",\n \"knocking\": \"doorbell\",\n \"glass_breaking\": \"glass_breaking\",\n \"glass_shatter\": \"glass_breaking\",\n \"gunshot\": \"gunshot\",\n \"explosion\": \"gunshot\",\n \"fireworks\": \"gunshot\",\n \"car\": \"vehicle\",\n \"truck\": \"vehicle\",\n \"motorcycle\": \"vehicle\",\n \"car_horn\": \"vehicle\",\n \"vehicle_horn\": \"vehicle\",\n \"traffic\": \"vehicle\",\n \"fire\": \"fire\",\n \"fire_crackle\": \"fire\",\n \"water\": \"water\",\n \"rain\": \"water\",\n \"ocean\": \"water\",\n \"splash\": \"water\",\n \"wind\": \"wind\",\n \"thunder\": \"wind\",\n \"thunderstorm\": \"wind\",\n \"door\": \"door\",\n \"door_slam\": \"door\",\n \"sliding_door\": \"door\",\n \"footsteps\": \"footsteps\",\n \"walking\": \"footsteps\",\n \"running\": \"footsteps\",\n \"crowd\": \"crowd\",\n \"chatter\": \"crowd\",\n \"cheering\": \"crowd\",\n \"applause\": \"crowd\",\n \"telephone_ring\": \"telephone\",\n \"ringtone\": \"telephone\",\n \"engine\": \"engine\",\n \"engine_starting\": \"engine\",\n \"lawn_mower\": \"engine\",\n \"chainsaw\": \"engine\",\n \"hammer\": \"tools\",\n \"jackhammer\": \"tools\",\n \"drill\": \"tools\",\n \"power_tool\": \"tools\",\n \"silence\": \"silence\"\n },\n preserveOriginal: false\n};\nconst _macroLookup = /* @__PURE__ */ new Map();\nfor (const [k, v] of Object.entries(YAMNET_TO_MACRO.mapping)) {\n _macroLookup.set(k.toLowerCase(), v);\n}\nfor (const [k, v] of Object.entries(APPLE_SA_TO_MACRO.mapping)) {\n _macroLookup.set(k.toLowerCase(), v);\n}\nfunction mapAudioLabelToMacro(label) {\n return _macroLookup.get(label.toLowerCase()) ?? null;\n}\nfunction getAudioMacroClassIds() {\n return AUDIO_MACRO_LABELS.map((l) => l.id);\n}\nvar DeviceType = /* @__PURE__ */ ((DeviceType2) => {\n DeviceType2[\"Camera\"] = \"camera\";\n DeviceType2[\"Hub\"] = \"hub\";\n DeviceType2[\"Light\"] = \"light\";\n DeviceType2[\"Siren\"] = \"siren\";\n DeviceType2[\"Switch\"] = \"switch\";\n DeviceType2[\"Sensor\"] = \"sensor\";\n DeviceType2[\"Thermostat\"] = \"thermostat\";\n DeviceType2[\"Button\"] = \"button\";\n DeviceType2[\"Generic\"] = \"generic\";\n return DeviceType2;\n})(DeviceType || {});\nvar DeviceFeature = /* @__PURE__ */ ((DeviceFeature2) => {\n DeviceFeature2[\"BatteryOperated\"] = \"battery-operated\";\n DeviceFeature2[\"Rebootable\"] = \"rebootable\";\n DeviceFeature2[\"NativeSnapshot\"] = \"native-snapshot\";\n DeviceFeature2[\"DoorbellButton\"] = \"doorbell-button\";\n DeviceFeature2[\"TwoWayAudio\"] = \"two-way-audio\";\n DeviceFeature2[\"PanTiltZoom\"] = \"pan-tilt-zoom\";\n DeviceFeature2[\"PtzAutotrack\"] = \"ptz-autotrack\";\n DeviceFeature2[\"MotionTrigger\"] = \"motion-trigger\";\n return DeviceFeature2;\n})(DeviceFeature || {});\nvar ChargingStatus = /* @__PURE__ */ ((ChargingStatus2) => {\n ChargingStatus2[\"ChargingDC\"] = \"charging-dc\";\n ChargingStatus2[\"ChargingSolar\"] = \"charging-solar\";\n ChargingStatus2[\"NotCharging\"] = \"not-charging\";\n return ChargingStatus2;\n})(ChargingStatus || {});\nvar DeviceRole = /* @__PURE__ */ ((DeviceRole2) => {\n DeviceRole2[\"Siren\"] = \"siren\";\n DeviceRole2[\"Floodlight\"] = \"floodlight\";\n DeviceRole2[\"Spotlight\"] = \"spotlight\";\n DeviceRole2[\"PirSensor\"] = \"pir-sensor\";\n DeviceRole2[\"Chime\"] = \"chime\";\n DeviceRole2[\"Autotrack\"] = \"autotrack\";\n DeviceRole2[\"Nightvision\"] = \"nightvision\";\n DeviceRole2[\"PrivacyMask\"] = \"privacy-mask\";\n DeviceRole2[\"Doorbell\"] = \"doorbell\";\n return DeviceRole2;\n})(DeviceRole || {});\nconst AccessoryKind = {\n Siren: DeviceRole.Siren,\n Floodlight: DeviceRole.Floodlight,\n Spotlight: DeviceRole.Spotlight,\n PirSensor: DeviceRole.PirSensor,\n Chime: DeviceRole.Chime,\n Autotrack: DeviceRole.Autotrack,\n Nightvision: DeviceRole.Nightvision,\n PrivacyMask: DeviceRole.PrivacyMask\n};\nconst ACCESSORY_LABEL = {\n [AccessoryKind.Siren]: \"Siren\",\n [AccessoryKind.Floodlight]: \"Floodlight\",\n [AccessoryKind.Spotlight]: \"Spotlight\",\n [AccessoryKind.PirSensor]: \"PIR\",\n [AccessoryKind.Chime]: \"Chime\",\n [AccessoryKind.Autotrack]: \"Autotracking\",\n [AccessoryKind.Nightvision]: \"Night Vision\",\n [AccessoryKind.PrivacyMask]: \"Privacy Mask\"\n};\nfunction accessoryStableId(parentStableId, kind, index) {\n const base = `${parentStableId}:${kind}`;\n return typeof index === \"number\" ? `${base}:${index}` : base;\n}\nfunction deviceMatchesProfile(features, profile) {\n if (!features || features.length === 0) return false;\n return features.includes(profile.when.hasFeature);\n}\nconst BATTERY_DEVICE_PROFILE = {\n id: \"battery\",\n label: \"Battery-operated camera\",\n when: { hasFeature: DeviceFeature.BatteryOperated },\n defaults: {\n audioMode: \"disabled\",\n detectionMode: \"on-motion\"\n },\n settings: {\n \"snapshot.minRefreshIntervalSec\": 3600,\n \"streamBroker.preBufferEnabled\": false\n }\n};\nconst DEVICE_PROFILES = [\n BATTERY_DEVICE_PROFILE\n];\nfunction resolveDeviceProfile(features) {\n for (const profile of DEVICE_PROFILES) {\n if (deviceMatchesProfile(features, profile)) return profile;\n }\n return null;\n}\nconst DeviceStatusSchema = z.object({\n /**\n * Device-level liveness. Drivers flip via `markOnline(boolean)` on\n * `BaseDevice`. Provider semantics vary — RTSP aggregates broker\n * stream-health, Reolink reads firmware push events, ONVIF tracks\n * ping responses. This cap intentionally does NOT prescribe which\n * signal drives the flag.\n */\n online: z.boolean(),\n /** Ms epoch of the last `online` transition. Lets consumers tell\n * apart \"just came online\" from \"still online\". */\n lastChangedAt: z.number()\n});\nconst deviceStatusCapability = {\n name: \"device-status\",\n scope: \"device\",\n mode: \"singleton\",\n methods: {},\n events: {\n /** Emitted when `online` transitions. Mirrors the semantics of\n * `battery.onStatusChanged`. */\n onStatusChanged: { data: z.object({\n deviceId: z.number(),\n status: DeviceStatusSchema\n }) }\n },\n status: {\n schema: DeviceStatusSchema,\n kind: \"push\"\n },\n runtimeState: DeviceStatusSchema\n};\nconst FeatureProbeStatusSchema = z.object({\n /**\n * Driver-specific flag bag. Each driver picks its own key names — the\n * cap deliberately does NOT enforce a closed enum here. Reolink keys:\n * `hasPtz`, `hasIntercom`, `hasDoorbell`, `hasFloodlight`, `hasSiren`,\n * `hasPirSensor`, `hasAutotrack`, `hasBattery`. Hikvision keys:\n * `hasSupplementalLight`, `lightHasWhiteLight`, `hasAlarmIo`, `hasPtz`.\n */\n flags: z.record(z.string(), z.unknown()),\n /**\n * Coarse driver-classification — lets cross-process consumers tell apart\n * cameras / battery-cams / NVRs without re-running the probe. `null`\n * before the first probe completes.\n */\n deviceType: z.string().nullable(),\n /** Camera/firmware model string. `null` when the firmware doesn't expose it. */\n model: z.string().nullable(),\n /** Channel count for NVR/Hub devices; `1` for standalone cameras; `null` pre-probe. */\n channelCount: z.number().nullable(),\n /**\n * Ms epoch of the last SUCCESSFUL probe. `0` before the first probe\n * completes — drivers' `getAccessoryChildren()` should treat zero as\n * \"probe not done yet, return empty\" so accessories aren't spawned\n * before the firmware is queried.\n */\n lastProbedAt: z.number(),\n /**\n * Framework convention: every runtime-state slice carries this for the\n * createRuntimeStateBridge stale-check helper. We keep it in sync with\n * `lastProbedAt` on every write.\n */\n lastFetchedAt: z.number()\n});\nconst featureProbeCapability = {\n name: \"feature-probe\",\n scope: \"device\",\n mode: \"singleton\",\n methods: {},\n events: {\n /** Fires whenever a fresh probe completes (kernel-driven `reprobe()`\n * or driver-initiated re-detect after a state change). */\n onProbeChanged: { data: z.object({\n deviceId: z.number(),\n status: FeatureProbeStatusSchema\n }) }\n },\n status: {\n schema: FeatureProbeStatusSchema,\n kind: \"push\"\n },\n runtimeState: FeatureProbeStatusSchema\n};\nconst ContributionSectionSchema = z.object({\n id: z.string(),\n title: z.string(),\n description: z.string().optional(),\n style: z.enum([\"card\", \"accordion\"]).optional(),\n defaultCollapsed: z.boolean().optional(),\n columns: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).optional(),\n tab: z.string().optional(),\n // Hoist the section into a top-level device tab (DeviceDetail\n // discovers these and renders one tab per unique `tab` id). Default\n // 'settings' keeps the section under the Config tab.\n location: z.enum([\"settings\", \"top-tab\"]).optional(),\n order: z.number().optional(),\n fields: z.array(z.any())\n});\nconst ContributionTabSchema = z.object({\n id: z.string(),\n label: z.string(),\n icon: z.string(),\n order: z.number().optional()\n});\nconst ContributionSchema = z.object({\n tabs: z.array(ContributionTabSchema).optional(),\n sections: z.array(ContributionSectionSchema)\n});\nconst ContributionOutputSchema = ContributionSchema.nullable();\nconst DEVICE_SETTINGS_CONTRIBUTION_METHODS = {\n getDeviceSettingsContribution: {\n input: z.object({ deviceId: z.number() }),\n output: ContributionOutputSchema,\n kind: \"query\",\n auth: \"protected\"\n },\n getDeviceLiveContribution: {\n input: z.object({ deviceId: z.number() }),\n output: ContributionOutputSchema,\n kind: \"query\",\n auth: \"protected\"\n },\n applyDeviceSettingsPatch: {\n input: z.object({ deviceId: z.number(), patch: z.record(z.string(), z.unknown()) }),\n output: z.object({ success: z.literal(true) }),\n kind: \"mutation\",\n auth: \"admin\"\n }\n};\nconst DEVICE_STATUS_METHOD = {\n getStatus: {\n input: z.object({ deviceId: z.number() }),\n output: z.unknown().nullable(),\n kind: \"query\",\n auth: \"protected\"\n }\n};\nfunction expandCapMethods(def) {\n let out = def.methods;\n if (def.exposesDeviceSettings) {\n out = { ...DEVICE_SETTINGS_CONTRIBUTION_METHODS, ...out };\n }\n if (def.status) {\n out = { ...DEVICE_STATUS_METHOD, ...out };\n }\n return out;\n}\nfunction method(input, output, options) {\n return {\n input,\n output,\n kind: options?.kind ?? \"query\",\n auth: options?.auth ?? \"protected\",\n ...options?.access !== void 0 ? { access: options.access } : {},\n timeoutMs: options?.timeoutMs\n };\n}\nfunction event(data) {\n return { data };\n}\nconst AudioClassSummarySchema = z.object({\n className: z.string(),\n /** Number of windows (chunks) where this class was the top hit. */\n hits: z.number().int().nonnegative(),\n /** Mean score across those hits, clamped to [0,1]. */\n avgScore: z.number().min(0).max(1),\n /** Peak score in the window. */\n peakScore: z.number().min(0).max(1)\n});\nconst AudioMetricsSnapshotSchema = z.object({\n /** Wall-clock timestamp (ms) of the most recent audio window. */\n ts: z.number().int(),\n /** Sliding-window length (seconds) used for aggregation. */\n windowSec: z.number().int().positive(),\n /** Latest level reading from the most recent window. */\n level: z.object({\n rms: z.number(),\n dbfs: z.number()\n }),\n /** Peak dBFS observed across the rolling window. */\n peakDbfs: z.number(),\n /** Mean dBFS across the rolling window. */\n avgDbfs: z.number(),\n /** Most recent above-threshold classification, or null on silence. */\n current: z.object({\n className: z.string(),\n score: z.number().min(0).max(1),\n timestamp: z.number().int()\n }).nullable(),\n /** Per-class summary across the rolling window — keys are\n * `macroClass` strings (e.g. `dog_bark`, `speech`, `glass_break`). */\n byClass: z.array(AudioClassSummarySchema).readonly()\n});\nconst AudioMetricsHistoryPointSchema = z.object({\n /** Wall-clock ms when this sample was recorded. */\n ts: z.number().int(),\n /** Instantaneous dBFS level at sample time. `null` for windows where\n * the source had no level reading (rare; happens at decode startup). */\n dbfs: z.number().nullable(),\n /** Rolling-window peak dBFS at sample time. Same window the live\n * snapshot reports. */\n peakDbfs: z.number(),\n /** Rolling-window mean dBFS at sample time. */\n avgDbfs: z.number(),\n /** Dominant above-threshold class at sample time, or null on silence. */\n topClass: z.string().nullable(),\n /** Score of the dominant class (`null` whenever `topClass` is null). */\n topScore: z.number().min(0).max(1).nullable()\n});\nconst AudioMetricsHistorySchema = z.object({\n points: z.array(AudioMetricsHistoryPointSchema).readonly(),\n /** Actual ms between adjacent samples after any subsampling. */\n effectiveSampleEveryMs: z.number().int().positive(),\n /** Wall-clock window covered by `points` (`points[N-1].ts - points[0].ts`),\n * or `0` when there's fewer than 2 samples. */\n windowMsActual: z.number().int().nonnegative()\n});\nconst audioMetricsCapability = {\n name: \"audio-metrics\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {\n /** Latest snapshot for this device. Null until the analytics\n * pipeline has processed at least one audio window. */\n getCurrentSnapshot: method(\n z.object({ deviceId: z.number() }),\n AudioMetricsSnapshotSchema.nullable()\n ),\n /**\n * Time-series view of recent audio-metrics samples. The provider\n * keeps an in-memory ring of ~1Hz samples (matching the slice-\n * write rate) capped at `MAX_HISTORY_POINTS_KEPT` (provider-side).\n * `windowSec` selects how far back to read; `sampleEveryMs`\n * downsamples by bucketed averaging when finer than the kept\n * granularity. Empty `points` array on freshly-booted providers\n * with no audio yet — same convention as `getCurrentSnapshot`.\n */\n getHistory: method(\n z.object({\n deviceId: z.number(),\n /** History window in seconds. Default 300 (5 minutes).\n * Provider clamps to its retention cap if larger. */\n windowSec: z.number().int().positive().optional(),\n /** Target sample interval in ms. Default 1000 (1 sample/second).\n * Provider clamps to natural sample rate if smaller, and\n * bucket-averages when bigger than the requested window\n * would produce more than `maxPoints` samples. */\n sampleEveryMs: z.number().int().positive().optional()\n }),\n AudioMetricsHistorySchema\n )\n },\n /** Reactive runtime-state mirror — live `device.state.audioMetrics.value`. */\n runtimeState: AudioMetricsSnapshotSchema\n};\nconst BatteryStatusSchema = z.object({\n /** 0..100 inclusive. Firmware-reported. */\n percentage: z.number().min(0).max(100),\n /**\n * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is\n * Reolink-specific for the Solar Panel 2 accessory (will become\n * common on other battery cams). `'none'` means running on battery\n * alone.\n */\n charging: z.enum([\"dc\", \"solar\", \"none\"]),\n /**\n * True when the camera firmware has gone into low-power mode. Battery\n * providers MUST avoid polling during sleep — reading the battery\n * wakes the camera up and drains charge.\n */\n sleeping: z.boolean(),\n /** Ms epoch of the last observation. Lets consumers reason about freshness. */\n lastUpdated: z.number()\n});\nconst batteryCapability = {\n name: \"battery\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch],\n methods: {},\n events: {\n /**\n * Emitted whenever the cached status changes (firmware push OR\n * poll observes a delta). The DeviceEventPropagator mirrors this\n * event on the parent chain — subscribing to a camera's source\n * receives battery events from child accessories automatically.\n */\n onStatusChanged: { data: z.object({\n deviceId: z.number(),\n status: BatteryStatusSchema\n }) }\n },\n status: {\n schema: BatteryStatusSchema,\n kind: \"push\"\n },\n /**\n * Runtime-state slice — every provider that registers this cap\n * stores the same shape under `device.runtimeState[battery]`.\n * Cross-provider uniformity: a Reolink Argus, a Frigate sensor\n * proxy, an ONVIF battery cam all read/write the same keys.\n * Consumers (BatteryBadge, snapshot wrapper sleep gate) read once\n * via `device.runtimeState.getCapState('battery')` regardless of\n * the underlying driver.\n */\n runtimeState: BatteryStatusSchema\n};\nconst BrightnessStatusSchema = z.object({\n /** Current level as 0..100 inclusive. Firmware-reported. */\n percentage: z.number().min(0).max(100),\n /** Ms epoch of the last operator-driven change. Useful for UI freshness. */\n lastChangedAt: z.number()\n});\nconst brightnessCapability = {\n name: \"brightness\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Light],\n methods: {\n setBrightness: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n percentage: z.number().min(0).max(100)\n }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n )\n },\n events: {\n /**\n * Emitted whenever the brightness changes — operator action OR\n * firmware push. Subscribers (UI sliders, automation engines) react\n * without polling.\n */\n onBrightnessChanged: { data: z.object({\n deviceId: z.number(),\n percentage: z.number().min(0).max(100),\n lastChangedAt: z.number()\n }) }\n },\n status: {\n schema: BrightnessStatusSchema,\n kind: \"command-driven\"\n },\n /**\n * Runtime-state slice — the last applied brightness level, mirrored\n * by the kernel. Read via `device.state.brightness.value` so UI\n * sliders surface the current level without polling the provider.\n */\n runtimeState: BrightnessStatusSchema\n};\nconst CamProfileSchema = z.enum([\"high\", \"mid\", \"low\"]);\nconst CAM_PROFILE_ORDER = [\"high\", \"mid\", \"low\"];\nconst CamStreamKindSchema = z.enum([\n \"pull-rtsp\",\n \"pull-rtmp\",\n \"pull-http\",\n \"pull-rfc4571\",\n \"push-annexb\"\n]);\nconst CamStreamResolutionSchema = z.object({\n width: z.number().int().positive(),\n height: z.number().int().positive()\n});\nconst CameraStreamSchema = z.object({\n /** Stable, provider-assigned id unique within the (deviceId) scope. */\n camStreamId: z.string().min(1),\n deviceId: z.number().int().nonnegative(),\n kind: CamStreamKindSchema,\n /** Required for pull-* kinds. Ignored for push-annexb. */\n url: z.string().optional(),\n codec: z.string().optional(),\n resolution: CamStreamResolutionSchema.optional(),\n fps: z.number().positive().optional(),\n /** Human label surfaced in the Admin UI \"Camera Stream\" dropdown. */\n label: z.string().optional(),\n /**\n * Device-level features the publisher advertised (e.g. `battery-operated`).\n * The broker, snapshot orchestrator, and prebuffer manager all consult\n * this list to derive policy — relaxed stall watchdog for battery\n * cams, prebuffer off by default, longer snapshot rate-limit, etc.\n *\n * Single source of truth replacing per-stream flags like the\n * historical `allowStall`: if the publisher knows the camera is\n * battery-powered, every downstream service derives the right policy\n * from this list.\n */\n deviceFeatures: z.array(z.string()).optional(),\n /**\n * Whether this stream participates in the broker's automatic profile\n * assignment (`computeInitialAssignment`). Defaults to `true`. Publishers\n * use `false` when they want a stream to be SELECTABLE in the UI but not\n * picked by default — e.g. Reolink publishes its native Baichuan streams\n * as `autoEligible: true` (the recommended path) and its RTSP / RTMP\n * mirrors as `autoEligible: false` (still pickable per slot, just not\n * the auto choice). Manual `assignProfile` calls remain valid for\n * non-eligible streams.\n */\n autoEligible: z.boolean().optional(),\n /**\n * Transport-specific opaque metadata. The broker passes it through to\n * the source reader without inspecting it. Currently used by\n * `pull-rfc4571` streams to carry the upstream SDP (so the reader can\n * route RTP packets to the right depacketizer without an in-band\n * DESCRIBE phase). Other kinds typically leave it undefined.\n */\n metadata: z.record(z.string(), z.unknown()).optional()\n});\nconst ProfileSlotStatusSchema = z.enum([\n \"unassigned\",\n \"idle\",\n \"connecting\",\n \"streaming\",\n \"error\"\n]);\nconst ProfileSlotSchema = z.object({\n deviceId: z.number().int().nonnegative(),\n profile: CamProfileSchema,\n /** Broker id the rest of the system addresses: `${deviceId}/${profile}`. */\n brokerId: z.string(),\n /** `null` when the profile is unassigned. */\n sourceCamStreamId: z.string().nullable(),\n status: ProfileSlotStatusSchema,\n resolution: CamStreamResolutionSchema.optional(),\n codec: z.string().optional(),\n preBufferSec: z.number().nonnegative().optional(),\n errorMessage: z.string().optional()\n});\nconst StreamSourceEntrySchema$1 = z.object({\n id: z.string(),\n label: z.string(),\n protocol: z.enum([\"rtsp\", \"rtmp\", \"annexb\", \"http-mjpeg\", \"webrtc\", \"custom\"]),\n url: z.string().optional(),\n resolution: z.object({ width: z.number(), height: z.number() }).readonly().optional(),\n fps: z.number().optional(),\n bitrate: z.number().optional(),\n codec: z.string().optional(),\n profileHint: z.enum([\"high\", \"mid\", \"low\"]).optional()\n});\nconst StreamSourceSchema = z.object({\n type: z.string(),\n url: z.string(),\n videoCodec: z.string().optional(),\n audioCodec: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).readonly().optional()\n});\nconst EncodedPacketSchema = z.object({\n type: z.enum([\"video\", \"audio\"]),\n data: z.instanceof(Uint8Array),\n pts: z.number(),\n dts: z.number(),\n keyframe: z.boolean(),\n codec: z.string()\n});\nconst DecodedFrameSchema = z.object({\n data: z.instanceof(Uint8Array),\n width: z.number(),\n height: z.number(),\n format: z.enum([\"jpeg\", \"rgb\", \"bgr\", \"yuv420\", \"gray\"]),\n timestamp: z.number()\n});\nconst BrokerStatusSchema$1 = z.enum([\"idle\", \"connecting\", \"streaming\", \"error\", \"stopped\"]);\nconst BrokerStatsSchema = z.object({\n status: BrokerStatusSchema$1,\n inputFps: z.number(),\n decodeFps: z.number(),\n encodedSubscribers: z.number(),\n decodedSubscribers: z.number(),\n uptimeMs: z.number(),\n bitrateKbps: z.number(),\n idrIntervalMs: z.number(),\n codec: z.string().optional(),\n totalBytes: z.number(),\n packetCount: z.number(),\n rtspClients: z.number(),\n pipeClients: z.number(),\n preBufferSec: z.number(),\n preBufferMs: z.number(),\n preBufferPackets: z.number(),\n /**\n * Moleculer node id of the decoder provider currently servicing this\n * stream's decoded subscribers. `null` until the deferred decoder is\n * created (no decoded clients yet, or codec not detected). Surfaces the\n * runtime decoder placement so the UI can show \"Decoder: <agent>\" without\n * a separate cap call per broker.\n */\n decoderNodeId: z.string().nullable(),\n /**\n * Detected audio track parameters from the RTSP DESCRIBE / SDP. `null`\n * when the stream has no audio track or the broker is in cold start.\n * `supported = false` means the codec was detected but the local\n * decoder pipeline cannot produce PCM chunks (e.g. AAC without the\n * AAC pipeline wired). Surfaced in the UI device-overview so operators\n * can pre-pick the audio-analysis model that matches the codec.\n */\n audio: z.object({\n codec: z.string(),\n sampleRate: z.number(),\n channels: z.number(),\n supported: z.boolean()\n }).nullable().optional()\n});\nconst StreamFormatSchema = z.enum([\"webrtc\", \"hls\", \"mjpeg\", \"rtsp\"]);\nconst StreamInfoSchema = z.object({\n streamId: z.string(),\n format: StreamFormatSchema,\n url: z.string().nullable(),\n active: z.boolean()\n});\nconst streamingEngineCapability = {\n name: \"streaming-engine\",\n scope: \"system\",\n mode: \"singleton\",\n internal: true,\n methods: {\n registerStream: method(\n z.object({ streamId: z.string(), sourceUrl: z.string(), codec: z.string().optional() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n unregisterStream: method(z.object({ streamId: z.string() }), z.void(), { kind: \"mutation\" }),\n getStreamUrl: method(\n z.object({ streamId: z.string(), format: StreamFormatSchema }),\n z.string().nullable()\n ),\n listStreams: method(z.void(), z.array(StreamInfoSchema))\n }\n};\nconst RtspRestreamEntrySchema = z.object({\n brokerId: z.string(),\n url: z.string(),\n mutedUrl: z.string(),\n enabled: z.boolean()\n});\nconst BrokerRtspClientSchema = z.object({\n sessionId: z.string(),\n remoteAddr: z.string(),\n playing: z.boolean(),\n muted: z.boolean(),\n connectedAt: z.number(),\n lastRtpAt: z.number(),\n bytesSent: z.number()\n});\nconst BrokerDecodedClientSchema = z.object({\n tag: z.string(),\n subscribedAt: z.number(),\n maxFps: z.number(),\n framesDelivered: z.number(),\n framesDropped: z.number()\n});\nconst BrokerAudioClientSchema = z.object({\n tag: z.string(),\n subscribedAt: z.number(),\n chunksDelivered: z.number()\n});\nconst BrokerClientsSchema = z.object({\n rtsp: z.array(BrokerRtspClientSchema).readonly(),\n decoded: z.array(BrokerDecodedClientSchema).readonly(),\n audio: z.array(BrokerAudioClientSchema).readonly(),\n pipeClients: z.number(),\n encodedSubscribers: z.number()\n});\nconst PlaceholderReasonSchema = z.enum([\n \"reconnecting\",\n \"sleeping\",\n \"offline\",\n \"disabled\",\n \"waking\"\n]);\nconst VideoCodecTargetSchema = z.enum([\"H264\", \"H265\", \"auto\"]);\nconst AudioCodecTargetSchema = z.enum([\"AAC\", \"Opus\", \"PCMU\", \"none\"]);\nconst MaxResolutionSchema = z.object({\n width: z.number().int().positive(),\n height: z.number().int().positive()\n});\nconst GetStreamWithCodecInputSchema = z.object({\n deviceId: z.number().int().nonnegative(),\n videoCodec: VideoCodecTargetSchema,\n audioCodec: AudioCodecTargetSchema.optional(),\n maxResolution: MaxResolutionSchema.optional(),\n tag: z.string().optional()\n});\nconst RtpSourceSchema = z.object({\n url: z.string(),\n videoCodec: z.enum([\"H264\", \"H265\"]),\n audioCodec: z.string(),\n resolution: MaxResolutionSchema,\n transcoded: z.boolean(),\n encoder: z.string(),\n pipelineKey: z.string()\n});\nconst streamBrokerCapability = {\n name: \"stream-broker\",\n scope: \"system\",\n mode: \"singleton\",\n exposesDeviceSettings: true,\n methods: {\n publishCameraStream: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n camStreamId: z.string().min(1),\n kind: CamStreamKindSchema,\n url: z.string().optional(),\n codec: z.string().optional(),\n resolution: CamStreamResolutionSchema.optional(),\n fps: z.number().positive().optional(),\n label: z.string().optional(),\n deviceFeatures: z.array(z.string()).optional(),\n autoEligible: z.boolean().optional(),\n metadata: z.record(z.string(), z.unknown()).optional()\n }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n retractCameraStream: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n camStreamId: z.string().min(1)\n }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n assignProfile: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n profile: CamProfileSchema,\n camStreamId: z.string().min(1)\n }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n unassignProfile: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n profile: CamProfileSchema\n }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n listAllCameraStreams: method(\n z.void(),\n z.array(CameraStreamSchema).readonly()\n ),\n listAllProfileSlots: method(\n z.void(),\n z.array(ProfileSlotSchema).readonly()\n ),\n getBrokerStats: method(\n z.object({ brokerId: z.string() }),\n BrokerStatsSchema\n ),\n listClients: method(\n z.object({ brokerId: z.string() }),\n BrokerClientsSchema\n ),\n killClient: method(\n z.object({\n brokerId: z.string(),\n channel: z.enum([\"rtsp\", \"decoded\", \"audio\"]),\n handle: z.string()\n }),\n z.object({ killed: z.boolean() }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n restartProfile: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n profile: CamProfileSchema\n }),\n z.object({ success: z.boolean() }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n getStreamUrl: method(\n z.object({ streamId: z.string(), format: StreamFormatSchema }),\n z.object({ url: z.string() })\n ),\n /**\n * Shared codec-targeted stream API — see Task #184.\n * Resolution order: source-select → HW transcode → libx264/libx265.\n */\n getStreamWithCodec: method(\n GetStreamWithCodecInputSchema,\n RtpSourceSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n releaseStreamWithCodec: method(\n z.object({ pipelineKey: z.string() }),\n z.object({ released: z.boolean(), refcount: z.number().int().nonnegative() }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n getBroker: method(\n z.object({ brokerId: z.string() }),\n z.custom()\n ),\n setPreBufferDuration: method(\n z.object({ brokerId: z.string(), seconds: z.number().min(0).max(30) }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n getPreBufferInfo: method(\n z.object({ brokerId: z.string() }),\n z.object({ configuredSec: z.number(), bufferedMs: z.number(), packetCount: z.number() })\n ),\n getRtspPort: method(z.void(), z.number()),\n getAllRtspEntries: method(\n z.object({ hostname: z.string().optional() }),\n z.array(RtspRestreamEntrySchema).readonly()\n ),\n getRtspEntry: method(\n z.object({ brokerId: z.string(), hostname: z.string().optional() }),\n RtspRestreamEntrySchema.nullable()\n ),\n regenerateRtspToken: method(\n z.object({ brokerId: z.string() }),\n z.string().nullable(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n setRtspEnabled: method(\n z.object({ brokerId: z.string(), enabled: z.boolean() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n isRtspEnabled: method(\n z.object({ brokerId: z.string() }),\n z.boolean()\n )\n },\n events: {\n onCamStreamDemand: event(z.object({\n deviceId: z.number().int().nonnegative(),\n camStreamId: z.string(),\n profile: CamProfileSchema\n })),\n onCamStreamIdle: event(z.object({\n deviceId: z.number().int().nonnegative(),\n camStreamId: z.string()\n })),\n onRequestStreamSourceRefresh: event(z.object({\n deviceId: z.number().int().nonnegative(),\n camStreamId: z.string(),\n brokerId: z.string()\n }))\n }\n};\nconst cameraStreamsCapability = {\n name: \"camera-streams\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {\n getCameraStreams: method(\n z.object({ deviceId: z.number().int().nonnegative() }),\n z.array(CameraStreamSchema).readonly()\n ),\n getBrokerStreams: method(\n z.object({ deviceId: z.number().int().nonnegative() }),\n z.array(ProfileSlotSchema).readonly()\n ),\n /**\n * Per-device RTSP restream entries. Returns the broker's published\n * RTSP URLs (one per `${deviceId}/${profile}`) for THIS device only,\n * including the rendered `url` field with the RTSP token applied.\n * Consumers (snapshot wrapper, recording, external probes) use this\n * to pick a stream URL without scanning the whole cluster.\n *\n * The system `stream-broker.getAllRtspEntries({hostname?})` still\n * exists for whole-cluster use cases (admin dashboard, settings\n * exports). This device-scoped accessor is the supported handle for\n * code that already has a `deviceId` in hand — keeps device-keyed\n * filtering server-side and rides the DeviceProxy auto-injection.\n */\n getRtspEntries: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n /** Override hostname embedded in returned URLs. Defaults to the broker's bound address. */\n hostname: z.string().optional()\n }),\n z.array(RtspRestreamEntrySchema).readonly()\n )\n },\n events: {\n /** Fires on publishCameraStream / retractCameraStream. */\n onCamStreamsChanged: event(z.object({\n deviceId: z.number().int().nonnegative(),\n camStreams: z.array(CameraStreamSchema).readonly()\n })),\n /** Fires on assignProfile / unassignProfile / runtime status change. */\n onProfileSlotsChanged: event(z.object({\n deviceId: z.number().int().nonnegative(),\n profileSlots: z.array(ProfileSlotSchema).readonly()\n }))\n },\n /**\n * Per-device live stream-broker state. Persistent settings (RTSP\n * tokens, profile assignments, pre-buffer config, RTSP-enabled toggles,\n * streamingDebug) stay in the broker's addon store — they survive\n * restarts. The slice below carries ONLY what's truly runtime:\n *\n * - `online` — at least one profile slot is currently `'streaming'`.\n * Drivers without a firmware liveness signal (RTSP, ONVIF…) can\n * subscribe and mirror this into `state.deviceStatus.online`.\n * - `slotStatuses` — current `ProfileSlotStatus` per profile,\n * mirroring the runtime-mutable subset of `ProfileSlot`.\n * - `slotErrors` — last error message per profile (only set when the\n * corresponding slot is in `'error'`).\n * - `lastChangedAt` — freshness signal for consumers that want to\n * reason about how stale the slice is.\n *\n * Written by the stream-broker manager on every transition that\n * affects these aggregates. Read via `device.state.cameraStreams.<field>`\n * (BaseDevice proxy) or, cross-process, via\n * `device-state.getCapSlice({deviceId, capName: 'camera-streams'})`.\n * The cap's `onChanged` event fires automatically on each write so\n * subscribers get push semantics for free.\n */\n runtimeState: z.object({\n online: z.boolean(),\n slotStatuses: z.object({\n high: ProfileSlotStatusSchema.optional(),\n mid: ProfileSlotStatusSchema.optional(),\n low: ProfileSlotStatusSchema.optional()\n }),\n slotErrors: z.object({\n high: z.string().optional(),\n mid: z.string().optional(),\n low: z.string().optional()\n }),\n lastChangedAt: z.number()\n })\n};\nconst DiscoveredChildStatusSchema = z.enum([\"online\", \"sleeping\", \"offline\", \"unknown\"]);\nconst DiscoveredChildDeviceSchema = z.object({\n /** Stable, integration-defined identifier. Mirrors Scrypted's `nativeId`. */\n childNativeId: z.string(),\n /** Friendly name as reported by the source (Reolink camera name, ONVIF profile, ...). */\n name: z.string(),\n /** DeviceType the child should be created with on adopt. */\n type: z.enum(DeviceType),\n status: DiscoveredChildStatusSchema,\n /** Free-form integration-specific metadata surfaced in the panel. */\n metadata: z.object({\n model: z.string().optional(),\n serialNumber: z.string().optional(),\n uid: z.string().optional(),\n /** Reolink: 0-based channel index inside the parent NVR/Hub. */\n rtspChannel: z.number().int().nonnegative().optional(),\n isBattery: z.boolean().optional(),\n isDoorbell: z.boolean().optional(),\n isMultifocal: z.boolean().optional()\n }).default({}),\n /**\n * `true` when the framework already created a child device for this\n * `childNativeId` under the current parent. The panel uses it to\n * gate the Add/Remove button and surface the existing `deviceId`.\n */\n alreadyAdopted: z.boolean(),\n /** When `alreadyAdopted=true`, the framework-assigned child device id. */\n adoptedDeviceId: z.number().int().nonnegative().nullable()\n});\nconst DeviceDiscoveryStatusSchema = z.object({\n discovered: z.array(DiscoveredChildDeviceSchema),\n /** Wall-clock ms of the last successful enumeration. */\n lastDiscoveryAt: z.number().int().nonnegative().nullable(),\n /** Last error surfaced from the source (rendered as a banner). */\n lastError: z.string().nullable()\n});\nconst deviceDiscoveryCapability = {\n name: \"device-discovery\",\n scope: \"device\",\n mode: \"singleton\",\n // Hub is the canonical parent. Other integrations (gateway-style)\n // can register against the cap by also targeting their root type.\n deviceTypes: [DeviceType.Hub],\n status: {\n schema: DeviceDiscoveryStatusSchema,\n kind: \"poll\"\n },\n // Mirror status into the per-device runtime-state slice so the panel\n // hydrates from the kernel cache without a round-trip on every open.\n runtimeState: DeviceDiscoveryStatusSchema.extend({\n lastFetchedAt: z.number().int().nonnegative()\n }),\n methods: {\n /**\n * Snapshot of the current `discovered` list. Returns the\n * runtime-state cache — call `refreshDiscovery` first if a\n * fresh round-trip to the source is required.\n */\n listDiscovered: method(\n z.object({ deviceId: z.number().int().nonnegative() }),\n z.array(DiscoveredChildDeviceSchema).readonly()\n ),\n /**\n * Force the integration to re-enumerate and update the\n * runtime-state slice. Returns the freshly-enumerated list (also\n * available via `listDiscovered` post-call).\n */\n refreshDiscovery: method(\n z.object({ deviceId: z.number().int().nonnegative() }),\n z.array(DiscoveredChildDeviceSchema).readonly(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Promote a discovered entry to a real child device. The framework\n * creates the child via `kernel.devices.create()` with\n * `parentDeviceId = parent.id` and seeds the child's config from\n * `childInitialConfig` (driver-defined; usually carries channel +\n * uid + parent reference). Returns the kernel-assigned numeric id.\n */\n adoptDevice: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n childNativeId: z.string(),\n /** Optional override for the child's display name. */\n name: z.string().optional()\n }),\n z.object({\n deviceId: z.number().int().nonnegative(),\n stableId: z.string()\n }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Inverse of `adoptDevice`: removes the child device from the\n * kernel registry. The discovered entry remains in the\n * enumeration (status updates resume) so the operator can re-adopt\n * it later without a fresh refresh.\n */\n releaseDevice: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n childDeviceId: z.number().int().nonnegative()\n }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst DoorbellStatusSchema = z.object({\n /** Ms epoch of the last press. null = never observed since this provider started. */\n lastPressedAt: z.number().nullable(),\n /** Counter since provider start. Resets on reboot. Useful for metrics/debug. */\n pressCountSinceStart: z.number()\n});\nconst DoorbellPressEventSchema = z.object({\n deviceId: z.number(),\n timestamp: z.number()\n});\nconst doorbellCapability = {\n name: \"doorbell\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Button],\n methods: {},\n events: {\n /**\n * Fires once per physical press. Reolink delivers via Baichuan\n * push (`ReolinkSimpleEvent.type === 'doorbell'`). There is no\n * release/duration — it's a pulse.\n */\n onPressed: { data: DoorbellPressEventSchema }\n },\n status: {\n schema: DoorbellStatusSchema,\n kind: \"push\"\n },\n /**\n * Runtime-state slice — last press timestamp + lifetime press count.\n * Mirrored by the kernel and readable via\n * `device.state.doorbell.value`. UIs can show \"last ring 5m ago\"\n * without subscribing.\n */\n runtimeState: DoorbellStatusSchema\n};\nconst FrameFormatSchema = z.enum([\"jpeg\", \"rgb\", \"bgr\", \"yuv420\", \"gray\"]);\nconst FrameInputSchema = z.object({\n data: z.custom(),\n format: FrameFormatSchema,\n width: z.number(),\n height: z.number(),\n timestamp: z.number()\n});\nconst BoundingBoxSchema = z.object({\n x: z.number(),\n y: z.number(),\n w: z.number(),\n h: z.number()\n});\nconst SpatialDetectionSchema = z.object({\n class: z.string(),\n originalClass: z.string(),\n score: z.number(),\n bbox: BoundingBoxSchema\n});\nconst AudioChunkInputSchema = z.object({\n data: z.instanceof(Float32Array),\n sampleRate: z.number(),\n channels: z.number(),\n timestamp: z.number(),\n /** Originating device id — used by the classifier for per-camera concurrency tracking. */\n deviceId: z.number().optional()\n});\nconst AudioLevelSchema = z.object({\n rms: z.number(),\n dbfs: z.number()\n});\nconst AudioClassificationLabelSchema = z.object({\n /**\n * Primary display class. Depending on how the label was produced\n * this is either the macro category (e.g. `dog`) or the raw\n * backend label (e.g. `Dog bark`). Mirrors `class` on\n * `SpatialDetection`.\n */\n className: z.string(),\n /**\n * Raw backend-native label the classifier actually emitted (e.g.\n * `Dog bark` for YAMNet, `dog_bark` for Apple SoundAnalysis). For\n * macro-aggregated entries this is the top raw contributor. Mirrors\n * `originalClass` on `SpatialDetection`.\n */\n originalClass: z.string().optional(),\n score: z.number()\n});\nconst MotionRegionSchema = z.object({\n bbox: BoundingBoxSchema,\n pixelCount: z.number(),\n intensity: z.number()\n});\nconst MotionAnalysisResultSchema = z.object({\n detected: z.boolean(),\n regionCount: z.number(),\n /** Regions passing minArea filter — used for pipeline triggering. */\n regions: z.array(MotionRegionSchema).readonly(),\n /** All raw regions from CCL before minArea filter — used for UI debug overlay. */\n rawRegions: z.array(MotionRegionSchema).readonly(),\n frameWidth: z.number(),\n frameHeight: z.number(),\n analysisMs: z.number()\n});\nconst motionDetectionCapability = {\n name: \"motion-detection\",\n scope: \"device\",\n mode: \"singleton\",\n exposesDeviceSettings: true,\n methods: {\n analyze: method(\n z.object({ deviceId: z.number(), frame: FrameInputSchema }),\n MotionAnalysisResultSchema,\n { kind: \"mutation\" }\n ),\n removeCamera: method(z.object({ deviceId: z.number() }), z.void(), { kind: \"mutation\" }),\n reset: method(z.void(), z.void(), { kind: \"mutation\" })\n },\n events: {\n onMotion: { data: z.object({\n deviceId: z.number(),\n detected: z.boolean(),\n regionCount: z.number()\n }) }\n }\n};\nconst OrchestratorMetricsSchema = z.object({\n activeCameras: z.number(),\n throttledCameras: z.number(),\n avgInferenceTimeMs: z.number(),\n queueDepth: z.number()\n});\nconst CameraMetricsSchema = z.object({\n detectionMode: z.enum([\"disabled\", \"always-on\", \"on-motion\"]),\n configuredFps: z.number(),\n actualFps: z.number(),\n queueDepth: z.number(),\n avgInferenceTimeMs: z.number(),\n droppedFrames: z.number(),\n phase: z.enum([\"idle\", \"watching\", \"active\"])\n});\nconst CameraMetricsWithDeviceIdSchema = CameraMetricsSchema.extend({\n deviceId: z.number()\n});\nconst ModelFormatSchema$1 = z.enum([\"onnx\", \"coreml\", \"openvino\", \"tflite\", \"pt\"]);\nconst PipelineSlotSchema = z.enum([\"detector\", \"cropper\", \"classifier\", \"refiner\", \"audio-classifier\"]);\nconst PipelineEngineChoiceSchema = z.object({\n runtime: z.enum([\"node\", \"python\"]),\n backend: z.string(),\n format: ModelFormatSchema$1,\n device: z.string().optional()\n});\nconst EngineDeviceInfoSchema = z.object({\n id: z.string(),\n label: z.string(),\n description: z.string().optional()\n});\nconst AvailableEngineSchema = z.object({\n engine: PipelineEngineChoiceSchema,\n devices: z.array(EngineDeviceInfoSchema).readonly(),\n defaultDevice: z.string()\n});\nconst PipelineDefaultStepSchema = z.lazy(\n () => z.object({\n addonId: z.string(),\n addonName: z.string(),\n slot: PipelineSlotSchema,\n inputClasses: z.array(z.string()).readonly(),\n outputClasses: z.array(z.string()).readonly(),\n enabled: z.boolean(),\n modelId: z.string(),\n children: z.array(PipelineDefaultStepSchema).readonly(),\n engine: PipelineEngineChoiceSchema.optional(),\n group: z.string().optional(),\n settings: z.record(z.string(), z.unknown()).optional()\n })\n);\nconst PipelineTemplateStepSchema = z.lazy(\n () => z.object({\n addonId: z.string(),\n enabled: z.boolean(),\n modelId: z.string(),\n children: z.array(PipelineTemplateStepSchema).readonly(),\n settings: z.record(z.string(), z.unknown()).optional()\n })\n);\nconst PipelineTemplateSchema$1 = z.object({\n id: z.string(),\n name: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n engine: PipelineEngineChoiceSchema,\n steps: z.array(PipelineTemplateStepSchema).readonly()\n});\nconst PipelineModelOptionSchema = z.object({\n id: z.string(),\n name: z.string(),\n formats: z.record(\n z.string(),\n z.object({ downloaded: z.boolean(), sizeMB: z.number() })\n )\n});\nconst ConfigFieldBridge = z.custom();\nconst PipelineAddonSchemaSchema = z.object({\n id: z.string(),\n name: z.string(),\n slot: PipelineSlotSchema,\n inputClasses: z.array(z.string()).readonly(),\n outputClasses: z.array(z.string()).readonly(),\n childSlots: z.array(PipelineSlotSchema).readonly(),\n models: z.array(PipelineModelOptionSchema).readonly(),\n defaultModelId: z.string(),\n // Per-format model override. Lets an addon declare \"on `coreml` prefer\n // apple-soundanalysis, on `onnx` prefer yamnet-onnx\". The orchestrator's\n // agent-seed routine uses this to pick a modelId that matches the\n // agent's active engine format.\n defaultModelIdByFormat: z.record(z.string(), z.string()).optional(),\n // Whether a freshly-seeded agent starts with this addon `enabled: true`.\n // Absent = true. Operator-controlled after first seed.\n enabledByDefault: z.boolean().optional(),\n defaultConfidence: z.number(),\n group: z.string().optional(),\n configSchema: z.array(ConfigFieldBridge).readonly().optional()\n});\nconst PipelineSlotSchemaSchema = z.object({\n id: PipelineSlotSchema,\n label: z.string(),\n priority: z.number(),\n parentSlot: PipelineSlotSchema.nullable(),\n addons: z.array(PipelineAddonSchemaSchema).readonly()\n});\nconst PipelineSchemaSchema = z.object({\n availableEngines: z.array(AvailableEngineSchema).readonly(),\n selectedEngine: PipelineEngineChoiceSchema,\n slots: z.array(PipelineSlotSchemaSchema).readonly()\n});\nconst DetectorOutputSchema = z.object({\n detections: z.array(SpatialDetectionSchema).readonly(),\n inferenceMs: z.number(),\n modelId: z.string()\n});\nconst PipelineStepInputSchema = z.lazy(\n () => z.object({\n addonId: z.string(),\n modelId: z.string(),\n enabled: z.boolean().default(true),\n children: z.array(PipelineStepInputSchema).optional(),\n settings: z.record(z.string(), z.unknown()).optional()\n })\n);\nconst ReferenceImageEntrySchema = z.object({\n filename: z.string(),\n stepIds: z.array(z.string()).readonly().optional()\n});\nconst ReferenceImageBodySchema = z.object({\n base64: z.string(),\n filename: z.string()\n});\nconst ReferenceAudioEntrySchema = z.object({\n filename: z.string(),\n sizeKb: z.number()\n});\nconst ReferenceAudioBodySchema = z.object({\n base64: z.string()\n});\nconst AudioBackendSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string(),\n available: z.boolean(),\n /**\n * Raw classifier labels this backend can emit (e.g. YAMNet's\n * 521-class set or Apple SoundAnalysis's 303-class set). Used by\n * the benchmark UI to populate the `enabledMicroClasses` filter\n * specific to the selected backend without a separate fetch.\n */\n rawLabels: z.array(z.string()).readonly().optional()\n});\nconst AudioCapabilitiesSchema = z.object({\n activeBackend: z.string(),\n availableBackends: z.array(AudioBackendSchema).readonly(),\n sampleRate: z.number(),\n chunkDurationMs: z.number()\n});\nconst DownloadModelResultSchema = z.object({\n filePath: z.string(),\n sizeMB: z.number(),\n durationMs: z.number()\n});\nconst AudioTestResultSchema = z.object({\n success: z.boolean(),\n error: z.string().optional(),\n frame: z.custom().optional()\n});\nconst PipelineConfigBridge = z.custom();\nconst ConfigUISchemaBridge = z.custom();\nconst ConfigUISchemaNullableBridge = z.custom();\nconst InferenceCapabilitiesBridge = z.custom();\nconst ModelAvailabilityListBridge = z.custom();\nconst PipelineRunResultBridge = z.custom();\nconst pipelineExecutorCapability = {\n name: \"pipeline-executor\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n // ── Engine selection ─────────────────────────────────────────────\n // `setEngine` removed in Phase 6c — the stateless-pipeline model\n // picks engine per-camera, not per-node. `getSelectedEngine` is\n // kept read-only so the benchmark + models-page can still show the\n // executor's bootstrap engine; its semantics degrade to \"what the\n // executor would pick by default\" in the stateless world.\n getAvailableEngines: method(z.void(), z.array(PipelineEngineChoiceSchema)),\n getSelectedEngine: method(z.void(), PipelineEngineChoiceSchema),\n getDefaultSteps: method(PipelineEngineChoiceSchema, z.array(PipelineDefaultStepSchema)),\n /**\n * Re-run the platform probe for the inference engine and write the\n * detected runtime / backend / device back into the addon's own\n * global settings store. Returns the engine that was picked so the\n * UI can confirm without a second round-trip. Triggers the standard\n * `requiresRestart` auto-restart flow because all three fields are\n * marked restart-required. Replaces the legacy per-agent\n * `pipeline-orchestrator.reprobeAgentHwAccel` surface for the\n * engine dimension — each addon now owns its own probe.\n */\n reprobeEngine: method(z.void(), PipelineEngineChoiceSchema, { kind: \"mutation\", auth: \"admin\" }),\n // ── Video pipeline step configuration (phase 2c) ─────────────────\n // Per-addonId config the operator tunes on the Pipeline → agent\n // page. Replaces the orchestrator's per-agent\n // `setAgentAddonDefaults` mutation. No `enabled` flag — the cap\n // binding system (wrapper caps + setWrapperActive) decides whether\n // a step runs.\n getVideoPipelineSteps: method(\n z.void(),\n z.record(z.string(), z.object({\n modelId: z.string(),\n settings: z.record(z.string(), z.unknown()).readonly()\n }))\n ),\n setVideoPipelineSteps: method(\n z.object({\n steps: z.record(z.string(), z.object({\n modelId: z.string(),\n settings: z.record(z.string(), z.unknown()).readonly()\n }))\n }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n // ── Global pipeline configuration ────────────────────────────────\n // `setGlobalSteps` removed in Phase 6c — there is no \"global\n // pipeline\" in the stateless model (each camera carries its own\n // steps via the orchestrator's `pipelines/<deviceId>`).\n // `getGlobalSteps` is kept read-only as a benchmark fallback;\n // it returns null in fresh stateless deploys.\n getSchema: method(z.void(), PipelineSchemaSchema),\n getGlobalSteps: method(z.void(), z.array(PipelineDefaultStepSchema).readonly().nullable()),\n getGlobalPipelineConfig: method(z.void(), PipelineConfigBridge),\n getOrchestratorConfigSchema: method(z.void(), ConfigUISchemaBridge),\n // ── Templates ────────────────────────────────────────────────────\n listTemplates: method(z.void(), z.array(PipelineTemplateSchema$1).readonly()),\n saveTemplate: method(\n z.object({\n name: z.string(),\n steps: z.array(PipelineTemplateStepSchema).readonly(),\n engine: PipelineEngineChoiceSchema\n }),\n PipelineTemplateSchema$1,\n { kind: \"mutation\" }\n ),\n updateTemplate: method(\n z.object({\n id: z.string(),\n name: z.string().optional(),\n steps: z.array(PipelineTemplateStepSchema).readonly().optional()\n }),\n PipelineTemplateSchema$1,\n { kind: \"mutation\" }\n ),\n deleteTemplate: method(z.object({ id: z.string() }), z.void(), { kind: \"mutation\" }),\n // ── Inference / detection ────────────────────────────────────────\n getCapabilities: method(z.void(), InferenceCapabilitiesBridge),\n getAddonModels: method(z.object({ addonId: z.string() }), ModelAvailabilityListBridge),\n downloadModel: method(\n z.object({ addonId: z.string(), modelId: z.string(), format: ModelFormatSchema$1 }),\n DownloadModelResultSchema,\n { kind: \"mutation\" }\n ),\n deleteModel: method(\n z.object({ addonId: z.string(), modelId: z.string(), format: ModelFormatSchema$1 }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\" }\n ),\n // NOTE: onDownloadProgress / onPipelineProgress removed in Fase H.4.\n // Consumers subscribe via the generic `live.onEvent` core router with\n // `{category: 'model.download.progress'}` or `{category: 'pipeline.progress'}`\n // — the event bus already handles category filtering, no dedicated\n // pipeline-executor method needed.\n detect: method(\n z.object({ addonId: z.string(), frame: FrameInputSchema, config: z.record(z.string(), z.unknown()).optional() }),\n DetectorOutputSchema\n ),\n // `runFrame` removed in Phase 4 — runtime dispatch now goes through\n // the stateless `runPipeline({engine, steps, frame, deviceId})` path.\n // The runner hydrates `steps` from the orchestrator's attach payload\n // (`pipelines[deviceId]`), so there is no longer an executor-side\n // global \"current pipeline\" for a legacy `runFrame` call to target.\n /**\n * Stateless single-frame execution. Callers (runner, benchmark) pass\n * the complete `engine` + `steps` tree; the executor holds no state\n * about cameras or saved pipelines.\n *\n * `engine` is optional during the migration window to preserve the\n * legacy call shape used by existing benchmark code; once all\n * callers pass it explicitly we make it required.\n *\n * Exactly one of `frame`, `imageBase64`, `referenceImage` must be\n * provided:\n * - `frame`: runtime dispatch path (runner → decoded broker frame).\n * Carries the raw buffer, dimensions, and format; the executor\n * uses it directly without base64 round-tripping.\n * - `imageBase64`: one-shot test path (benchmark ImageTab).\n * - `referenceImage`: named file from the reference-image store.\n */\n runPipeline: method(\n z.object({\n engine: PipelineEngineChoiceSchema.optional(),\n steps: z.array(PipelineStepInputSchema).min(1),\n frame: FrameInputSchema.optional(),\n imageBase64: z.string().optional(),\n /**\n * Binary JPEG bytes — preferred over `imageBase64` on internal\n * hops (hub → forked worker via Moleculer MsgPack) because it\n * skips the 33% base64 overhead + the per-call base64 decode on\n * the detection-pipeline worker. Callers can pass either; exactly\n * one of `frame`/`image`/`imageBase64`/`referenceImage` is required.\n */\n image: z.instanceof(Uint8Array).optional(),\n referenceImage: z.string().optional(),\n deviceId: z.number().optional(),\n sessionId: z.string().optional()\n }),\n PipelineRunResultBridge,\n { kind: \"mutation\" }\n ),\n /**\n * Batched run — N raw frames packed into one cap call. The provider\n * routes the batch through `SharedInferencePool.inferBatch`\n * (`MSG_INFER_BATCH = 0x03`) so the IPC framing and JSON response\n * envelope cost is amortised N:1 vs N concurrent `runPipeline`\n * calls. Single root step + uniform model assumed; trees with crop\n * children fall back to sequential execution.\n *\n * Used by `scripts/bench-scrypted-style.mts` to mirror Scrypted's\n * `detectObjects(media, {batch})` semantics for fair comparison.\n */\n runPipelineBatch: method(\n z.object({\n engine: PipelineEngineChoiceSchema.optional(),\n steps: z.array(PipelineStepInputSchema).min(1),\n frames: z.array(FrameInputSchema).min(1).max(255),\n deviceId: z.number().optional(),\n sessionId: z.string().optional()\n }),\n z.object({\n results: z.array(PipelineRunResultBridge).readonly()\n }),\n { kind: \"mutation\" }\n ),\n // ── Bench frame cache (Python pool-side) ──────────────────────────\n /**\n * Cache a raw frame inside the Python inference pool's memory.\n * Returns a numeric `frameId` that `inferCached` references —\n * subsequent calls send only 5 bytes through the pipe instead of\n * 1.2MB raw data, eliminating the pipe transfer bottleneck.\n */\n cacheFrameInPool: method(\n z.object({\n data: z.instanceof(Uint8Array),\n width: z.number().int().positive(),\n height: z.number().int().positive(),\n format: z.enum([\"rgb\", \"bgr\", \"gray\"])\n }),\n z.object({\n frameId: z.number(),\n width: z.number(),\n height: z.number()\n }),\n { kind: \"mutation\" }\n ),\n /**\n * Run inference on a previously cached frame. Sends only 5 bytes\n * (model_idx + frameId) through the IPC pipe — eliminates the\n * ~35ms per-call overhead of transferring 1.2MB raw data.\n */\n inferCached: method(\n z.object({\n stepId: z.string(),\n frameId: z.number().int()\n }),\n z.record(z.string(), z.unknown()),\n { kind: \"mutation\" }\n ),\n /**\n * Release a cached frame from the Python pool's memory.\n */\n uncacheFrame: method(\n z.object({ frameId: z.number().int() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n /** Returns the effective pool tuning (resolved from user overrides + backend defaults). */\n getEffectiveTuning: method(\n z.void(),\n z.object({\n batchMode: z.string(),\n windowMs: z.number(),\n maxBatchSize: z.number(),\n concurrency: z.number()\n })\n ),\n // ── Engine registry / management (stateless-pipeline spec) ────────\n /**\n * List every EngineFactory currently loaded in this executor's RAM,\n * with the models resident and a coarse \"in use\" marker derived from\n * ongoing inference activity. Used by the Pipeline page Engines tab.\n */\n listLoadedEngines: method(\n z.void(),\n z.array(z.object({\n engineKey: z.string(),\n engine: PipelineEngineChoiceSchema,\n modelsLoaded: z.array(z.string()).readonly(),\n inUseByCameras: z.array(z.number()).readonly(),\n /**\n * Origin of this resident factory.\n * - `runtime` — main camera-serving engine (no idle TTL).\n * - `warm-override` — benchmark/test override held in the warm\n * cache; auto-disposed after the idle TTL.\n */\n kind: z.enum([\"runtime\", \"warm-override\"]),\n /** Native pid of the underlying Python pool (null when no pool). */\n poolPid: z.number().nullable(),\n /** ms since this factory was last used (null when not warm-tracked). */\n idleMs: z.number().nullable(),\n /** Idle TTL after which `warm-override` factories self-evict (null when not applicable). */\n idleTtlMs: z.number().nullable()\n })).readonly()\n ),\n /** Warm up an engine without running a frame. No-op if already loaded. */\n spinEngine: method(\n z.object({ engine: PipelineEngineChoiceSchema }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Unload an engine from RAM. `force:true` unloads even when cameras\n * are actively using it (they re-spin on next frame). Default is\n * gated — returns `{success:false, reason}` when in use.\n */\n killEngine: method(\n z.object({\n engine: PipelineEngineChoiceSchema,\n force: z.boolean().optional()\n }),\n z.object({ success: z.boolean(), reason: z.string().optional() }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n // ── Benchmarks & testing ─────────────────────────────────────────\n // Moved to `@camstack/addon-benchmark` as customActions (2026-04-14).\n // The addon exposes runBenchmark / runPipelineTest / listBenchmarkHistory /\n // saveBenchmarkResult / deleteBenchmarkResult / clearBenchmarkHistory via\n // `api.addons.custom.mutate({addonId: 'benchmark', action, input})` and\n // delegates the actual pipeline execution back to this cap's runPipeline.\n // ── Reference media ──────────────────────────────────────────────\n listReferenceImages: method(z.void(), z.array(ReferenceImageEntrySchema).readonly()),\n getReferenceImage: method(z.object({ filename: z.string() }), ReferenceImageBodySchema.nullable()),\n getReferenceAudioFiles: method(z.void(), z.array(ReferenceAudioEntrySchema).readonly()),\n getReferenceAudio: method(z.object({ filename: z.string() }), ReferenceAudioBodySchema.nullable()),\n getAudioCapabilities: method(z.void(), AudioCapabilitiesSchema),\n runAudioTest: method(\n z.object({\n addonId: z.string(),\n modelId: z.string(),\n filename: z.string().optional(),\n // Per-step settings (e.g. `enabledClasses`) sourced from the\n // audio-classifier step's `getConfigSchema()`. The provider\n // applies them to the classification result before returning.\n settings: z.record(z.string(), z.unknown()).optional()\n }),\n AudioTestResultSchema,\n { kind: \"mutation\" }\n ),\n // ── Detection wiring / metrics (from detection-config) ───────────\n getDetectionConfigSchema: method(z.void(), ConfigUISchemaNullableBridge)\n // NOTE: orchestratorStatus / cameraDetectionStatus removed in the\n // pipeline page redesign — UI reads runner metrics directly via\n // perNodePipeline.getLocalMetrics / getCameraMetrics, which forward\n // to the pipeline-runner cap on the target node.\n //\n // NOTE: listBrokers / brokerStatus used to live here too — removed in\n // Fase H.3. Frontends now call `streamBroker.listBrokers` directly and\n // filter by deviceId client-side (brokerId prefix match). The broker\n // collection lives in the stream-broker capability and there is no\n // reason for pipeline-executor to mirror it.\n //\n // NOTE: subscribeLive / subscribeAudioLive removed in Fase H.4.\n // Consumers use the generic `live.onEvent` / `live.onDeviceEvent`\n // with `{category: 'pipeline.progress' | 'pipeline.inference-result'\n // | 'pipeline.audio-inference-result'}`.\n // Per-device pipeline step CRUD (`getDevicePipelineSteps` /\n // `setDevicePipelineSteps` / `clearDevicePipelineSteps`) removed in\n // Phase 4b. The orchestrator owns per-camera pipeline content now\n // (`pipelineOrchestrator.{get,set}CameraPipeline` +\n // `pipelines/<deviceId>` in its addon store). The executor is\n // stateless w.r.t. cameras — it receives `steps` inline on every\n // `runPipeline` call.\n }\n};\nconst ZoneKindEnum = z.enum([\"polygon\", \"tripwire\"]);\nconst PolygonPointSchema = z.object({\n x: z.number(),\n y: z.number()\n});\nconst ZoneSchema = z.object({\n id: z.string(),\n name: z.string(),\n kind: ZoneKindEnum.default(\"polygon\"),\n /** Polygon vertices, fraction of frame (0–1). */\n polygon: z.array(PolygonPointSchema).readonly(),\n /** Visual color for UI rendering. */\n color: z.string().default(\"#3b82f6\")\n});\nconst zonesCapability = {\n name: \"zones\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {\n listZones: method(\n z.object({ deviceId: z.number() }),\n z.array(ZoneSchema).readonly()\n ),\n addZone: method(\n z.object({ deviceId: z.number(), zone: ZoneSchema }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n removeZone: method(\n z.object({ deviceId: z.number(), zoneId: z.string() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n updateZone: method(\n z.object({ deviceId: z.number(), zone: ZoneSchema }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n )\n },\n /**\n * Runtime-state slice — the live zone catalogue mirrored by the\n * orchestrator on every CRUD mutation. Consumers read via\n * `device.state.zones.value` / `.watch(...)` without round-tripping\n * the cap, and the codegen DeviceProxy auto-wires the reactive\n * handle. Slice shape is `{ zones: Zone[] }` so future extensions\n * (e.g. zone groupings) can sit alongside the polygon list.\n */\n runtimeState: z.object({\n zones: z.array(ZoneSchema).readonly()\n })\n};\nconst motionCooldownMsField = { min: 0, max: 6e4, default: 3e4, step: 500 };\nconst motionFpsField = { min: 1, max: 30, default: 4, step: 1 };\nconst detectionFpsField = { min: 1, max: 30, default: 10, step: 1 };\nconst MotionSourceEnum = z.enum([\"onboard\", \"analyzer\"]);\nconst MotionSourcesSchema = z.array(MotionSourceEnum);\nconst ReportMotionInputSchema = z.object({\n deviceId: z.number(),\n detected: z.boolean(),\n source: MotionSourceEnum.default(\"analyzer\"),\n regions: z.array(MotionRegionSchema).readonly().optional()\n});\nconst RunnerCameraConfigSchema = z.object({\n deviceId: z.number(),\n /**\n * Operator-facing scheduling mode for the SW object detection\n * pipeline. Replaces the legacy 2-state `priority` toggle.\n *\n * - `'disabled'` — runner never subscribes to the substream for\n * detection; phase stays idle. Bindings stay\n * bound; this is the runtime-level off switch.\n * - `'always-on'` — phase starts in `'active'` and never falls\n * back to `'watching'`.\n * - `'on-motion'` — phase starts in `'watching'`; transitions to\n * `'active'` when a motion source fires; falls\n * back to `'watching'` after `motionCooldownMs`.\n */\n detectionMode: z.enum([\"disabled\", \"always-on\", \"on-motion\"]).default(\"on-motion\"),\n /** Audio scheduling mode — same values as `detectionMode`. The\n * audio-analyzer addon reads this to decide whether to subscribe\n * to the audio decoded stream. */\n audioMode: z.enum([\"disabled\", \"always-on\", \"on-motion\"]).default(\"always-on\"),\n motionCooldownMs: z.number().min(motionCooldownMsField.min).default(motionCooldownMsField.default),\n motionFps: z.number().min(motionFpsField.min).max(motionFpsField.max).default(motionFpsField.default),\n detectionFps: z.number().min(detectionFpsField.min).max(detectionFpsField.max).default(detectionFpsField.default),\n motionStreamId: z.string(),\n detectionStreamId: z.string(),\n /**\n * Motion sources that can activate the pipeline. At least one must\n * be present. Multiple sources OR-ed: any one firing arms the\n * cooldown timer and transitions watching → active. The same\n * `motionCooldownMs` applies to whichever source(s) fire — the\n * timer rearms on every `reportMotion(true)` and expires after the\n * window, returning the runner to `watching`.\n *\n * - `analyzer`: ML/frame-diff motion detection (motion-wasm or other\n * analyzer providers) running on decoded frames in this runner.\n * - `onboard`: camera-native motion pushes (Reolink Baichuan, ONVIF\n * analytics, Frigate motion). The provider emits ProviderMotion\n * events; the orchestrator forwards to `reportMotion`.\n */\n motionSources: MotionSourcesSchema.default([\"analyzer\"]),\n pipelineEnabled: z.boolean().default(true),\n // ── Stateless-pipeline: content carried with the attach ───────────\n /** Engine choice for video steps (runtime+backend+format). */\n engine: PipelineEngineChoiceSchema.optional(),\n /** Ordered tree of video steps. Absent → runner skips video detection. */\n steps: z.array(PipelineStepInputSchema).readonly().optional(),\n /** Audio classification branch. `enabled:false` disables, null skips. */\n audio: z.object({\n engine: PipelineEngineChoiceSchema,\n modelId: z.string(),\n enabled: z.boolean()\n }).nullable().optional(),\n /**\n * Per-camera detection zones (user + onboard) snapshot at dispatch\n * time. Forwarded so motion-wasm + pipeline-executor running on the\n * runner can apply include/exclude/monitor logic without an extra\n * round-trip to the hub. The orchestrator re-dispatches the camera\n * whenever its `zones` device-state slice changes, so the runner's\n * copy stays in sync. Empty array → no zone filtering.\n */\n zones: z.array(ZoneSchema).readonly().default([])\n});\nconst RunnerCameraDeviceUIFields = [\n {\n key: \"motionSources\",\n type: \"multiselect\",\n label: \"Motion Sources\",\n default: [\"analyzer\"],\n options: [\n { value: \"analyzer\", label: \"Frame-diff Analyzer (motion addon)\" },\n { value: \"onboard\", label: \"Camera Onboard Sensor\" }\n ]\n },\n // Analyzer-only knobs — gated on `motionSources` containing the\n // `analyzer` (frame-diff) source. When the operator picks\n // `onboard`-only (camera-native VMD), running an analyzer pipeline\n // would burn CPU for no signal, so we hide the FPS / cooldown /\n // stream-profile tuning entirely. The dependent section header in\n // the orchestrator reads \"Frame-diff Analyzer\" → these fields\n // disappear together when the source isn't selected.\n {\n key: \"motionFps\",\n type: \"slider\",\n label: \"Motion FPS (analyzer)\",\n min: motionFpsField.min,\n max: motionFpsField.max,\n step: motionFpsField.step,\n default: motionFpsField.default,\n showValue: true,\n unit: \"fps\",\n showWhen: { field: \"motionSources\", includes: \"analyzer\" }\n },\n {\n key: \"detectionFps\",\n type: \"slider\",\n label: \"Detection FPS\",\n min: detectionFpsField.min,\n max: detectionFpsField.max,\n step: detectionFpsField.step,\n default: detectionFpsField.default,\n showValue: true,\n unit: \"fps\"\n },\n // Motion cooldown applies to BOTH analyzer and onboard sources —\n // every reportMotion(true) re-arms the cooldown regardless of the\n // emitting source, so the operator must be able to tune it for\n // onboard-only cameras too. Without this the field silently\n // disappeared when the user picked \"Camera Onboard Sensor\" only.\n {\n key: \"motionCooldownMs\",\n type: \"slider\",\n label: \"Motion Cooldown\",\n description: \"Time without a fresh motion event before the active phase ends. Applies to all motion sources — every motion event re-arms the timer.\",\n min: motionCooldownMsField.min,\n max: motionCooldownMsField.max,\n step: motionCooldownMsField.step,\n default: motionCooldownMsField.default,\n showValue: true,\n unit: \"s\",\n displayScale: 1e3\n }\n];\nconst RunnerLocalLoadSchema = z.object({\n /** Moleculer node id of this runner instance. */\n nodeId: z.string(),\n /** Total cameras currently attached (regardless of phase). */\n attachedCameras: z.number(),\n /** Cameras currently in `active` phase (running detection inference). */\n activeCameras: z.number(),\n /** Average inference FPS across all attached cameras. */\n avgInferenceFps: z.number(),\n /** Average inference latency in ms across all attached cameras. */\n avgInferenceTimeMs: z.number(),\n /** Total queue depth across motion + detection queues. */\n queueDepthTotal: z.number(),\n /** Hardware capability flags reported by this node. */\n hardware: z.object({\n hasGpu: z.boolean(),\n inferenceBackend: z.string().optional(),\n cpuCores: z.number().optional()\n })\n});\nconst RunnerLocalMetricsSchema = z.object({\n nodeId: z.string(),\n activeCameras: z.number(),\n throttledCameras: z.number(),\n avgInferenceTimeMs: z.number(),\n queueDepth: z.number()\n});\nconst pipelineRunnerCapability = {\n name: \"pipeline-runner\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n // ── Camera lifecycle (called by orchestrator) ────────────────────\n /** Attach a camera to this runner. Subscribes to local broker. */\n attachCamera: method(RunnerCameraConfigSchema, z.object({ success: z.literal(true) }), { kind: \"mutation\" }),\n /** Detach a camera. Unsubscribes from local broker, clears queues. */\n detachCamera: method(z.object({ deviceId: z.number() }), z.object({ success: z.literal(true) }), { kind: \"mutation\" }),\n /**\n * Report an external motion event for a camera. Drives the runner's\n * phase machine: every `detected: true` clears + rearms the\n * cooldown timer (`motionCooldownMs`); when the timer expires the\n * camera returns to `watching`. `detected: false` is a no-op —\n * onboard sources never send an explicit clear, the timer is the\n * single closure path.\n *\n * `source` discriminates which motion path triggered the event so\n * the runner can attach the right metadata to the cap-state event\n * (analyzer carries `regions[]`, onboard does not). `regions` is\n * populated only for `source: 'analyzer'` — the analyzer's\n * frame-diff result. Always-on cameras silently ignore\n * reportMotion calls.\n */\n reportMotion: method(\n ReportMotionInputSchema,\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\" }\n ),\n // ── Observability (called by orchestrator + dashboards) ──────────\n /** Return load summary used by the orchestrator's load balancer. */\n getLocalLoad: method(z.void(), RunnerLocalLoadSchema),\n /** Return aggregate runtime metrics for this runner instance. */\n getLocalMetrics: method(z.void(), RunnerLocalMetricsSchema),\n /** Per-camera metrics for cameras attached to this runner. */\n getCameraMetrics: method(z.object({ deviceId: z.number() }), CameraMetricsSchema.nullable()),\n /** All per-camera metrics in one round-trip. */\n getAllCameraMetrics: method(z.void(), z.array(CameraMetricsWithDeviceIdSchema).readonly()),\n /** List the deviceIds currently attached to this runner. */\n getLocalCameras: method(z.void(), z.array(z.number()).readonly())\n // NOTE: Phase 6 (settings redesign) removed `getTuning` / `setTuning`.\n // The four tuning fields are now exposed via the addon-level settings\n // API (`pipeline-runner.getAddonSettings / updateAddonSettings`) and\n // rendered in the admin UI via `NodeAddonsSettingsPanel` instead of\n // the dedicated `NodeTuningTab` that used to call these cap methods.\n }\n};\nconst MotionStatusSchema = z.object({\n detected: z.boolean(),\n /** Ms epoch of the last detected-true observation. Null if never detected. */\n lastDetectedAt: z.number().nullable(),\n /**\n * Ms after which `detected` auto-reverts to false if no fresh push\n * arrives. Mirrors the scrypted-reolink-native default. Null means\n * the provider leaves detected state until a native \"clear\" event.\n */\n autoClearAfterMs: z.number().nullable()\n});\nconst MotionOnMotionChangedDataSchema = z.object({\n deviceId: z.number(),\n detected: z.boolean(),\n timestamp: z.number(),\n source: MotionSourceEnum,\n regions: z.array(MotionRegionSchema).readonly().optional()\n});\nconst motionCapability = {\n name: \"motion\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera, DeviceType.Sensor],\n methods: {\n /**\n * Pull the current motion state synchronously. Convenience shortcut\n * for consumers that don't need the full status object; equivalent\n * to `getStatus()?.detected ?? false`. Will likely be folded into\n * `getStatus` once the auto-injected status surface lands in every\n * consumer.\n */\n isDetected: method(\n z.object({ deviceId: z.number() }),\n z.boolean()\n )\n },\n events: {\n /**\n * Fires every time the runner transitions a camera between\n * `watching` and `active` phases. `source` carries which motion\n * path drove the transition; `regions` is populated only for\n * `source: 'analyzer'` (frame-diff regions from the ML motion\n * detector) — onboard sources don't carry per-frame regions\n * here (camera-provided zones / AI metadata live in dedicated\n * channels: `detection.camera-native`, future zone capability).\n *\n * Consumers that want all motion pushes (even with `detected`\n * unchanged) should subscribe to the status subscription via\n * `device-manager.subscribeDeviceStatusAggregate` instead.\n */\n onMotionChanged: { data: MotionOnMotionChangedDataSchema }\n },\n status: {\n schema: MotionStatusSchema,\n kind: \"push\"\n },\n /**\n * Runtime-state slice — the last observed motion snapshot, mirrored\n * by the kernel and readable cross-process via\n * `device.state.motion.value`. Reads never invoke the provider, so\n * UIs and other addons can poll the cached state safely.\n */\n runtimeState: MotionStatusSchema\n};\nconst MotionTriggerStatusSchema = z.object({\n enabled: z.boolean(),\n /** Ms epoch of the last operator-driven change. */\n lastChangedAt: z.number()\n});\nconst MotionTriggerRuntimeStateSchema = MotionTriggerStatusSchema.extend({\n /** Ms epoch of the last successful camera fetch (0 = never). */\n lastFetchedAt: z.number()\n});\nconst motionTriggerCapability = {\n name: \"motion-trigger\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Light, DeviceType.Siren, DeviceType.Switch],\n methods: {\n setMotionTrigger: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n enabled: z.boolean()\n }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n )\n },\n events: {\n onMotionTriggerChanged: { data: z.object({\n deviceId: z.number(),\n enabled: z.boolean(),\n lastChangedAt: z.number()\n }) }\n },\n status: {\n schema: MotionTriggerStatusSchema,\n kind: \"command-driven\"\n },\n runtimeState: MotionTriggerRuntimeStateSchema\n};\nconst AutotrackTargetTypeSchema = z.string().describe(\"Vendor target string (people/vehicle/pet); empty = camera default\");\nconst PtzAutotrackSettingsSchema = z.object({\n targetType: AutotrackTargetTypeSchema,\n stopDelaySeconds: z.number().int().min(0).max(300),\n disappearDelaySeconds: z.number().int().min(0).max(300)\n});\nconst PtzAutotrackTargetOptionSchema = z.object({\n value: z.string(),\n label: z.string()\n});\nconst PtzAutotrackStatusSchema = z.object({\n /** True when autotrack is currently armed on the camera. */\n enabled: z.boolean(),\n /** Ms epoch of the last on/off transition (0 if never observed). */\n lastChangedAt: z.number(),\n /** Currently-applied settings the camera reports. Drivers fill\n * this from the firmware GET so the UI can echo what's *really*\n * active vs the operator-typed values in the settings form. */\n currentSettings: PtzAutotrackSettingsSchema.nullable(),\n /**\n * Target types the camera advertises. Driver-supplied — Reolink\n * exposes `people` / `vehicle` / `pet`, Hikvision exposes\n * `auto` / `human` / `vehicle` when the `<smartTrackingType>` knob\n * is supported. Empty array = vendor doesn't expose a selector\n * (treat as auto-only). The UI renders these as the `targetType`\n * field options without hardcoding a vendor-specific list.\n */\n supportedTargetTypes: z.array(PtzAutotrackTargetOptionSchema)\n});\nconst PtzAutotrackRuntimeStateSchema = PtzAutotrackStatusSchema.extend({\n /** Ms epoch of the last successful camera fetch (0 = never). */\n lastFetchedAt: z.number()\n});\nconst ptzAutotrackCapability = {\n name: \"ptz-autotrack\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {\n /**\n * Read the current on/off state + last-applied settings.\n * Drivers may serve from a cache + refresh on a schedule —\n * callers should NOT poll faster than ~5s.\n */\n getStatus: method(\n z.object({ deviceId: z.number() }),\n PtzAutotrackStatusSchema\n ),\n /**\n * Arm or disarm autotrack. Resolves once the camera has\n * acknowledged the transition; the `onStatusChanged` event\n * fires shortly after with the live state.\n */\n setEnabled: method(\n z.object({ deviceId: z.number(), enabled: z.boolean() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n /**\n * Read settings (target type + delays). Mirrors the\n * `getStatus().currentSettings` payload but exposes it as a\n * standalone read for callers that want settings without the\n * status surface around them. `null` until the driver has\n * harvested the firmware state at least once.\n */\n getSettings: method(\n z.object({ deviceId: z.number() }),\n PtzAutotrackSettingsSchema.nullable()\n ),\n /**\n * Update one or more settings. Partial — keys that aren't\n * supplied keep their last persisted value. The driver is\n * responsible for clamping vendor-specific ranges if narrower\n * than the cross-vendor max declared on the schema.\n */\n setSettings: method(\n z.object({\n deviceId: z.number(),\n settings: PtzAutotrackSettingsSchema.partial()\n }),\n z.void(),\n { kind: \"mutation\" }\n )\n },\n events: {\n onStatusChanged: { data: z.object({\n deviceId: z.number(),\n status: PtzAutotrackStatusSchema\n }) }\n },\n status: {\n schema: PtzAutotrackStatusSchema,\n kind: \"command-driven\"\n },\n /**\n * Persistent slice mirrored across restarts. The provider writes\n * here on every successful firmware fetch / settings push;\n * `getStatus` and `getSettings` then read this snapshot synchronously\n * with a stale-driven async refresh in the background. Keeps the\n * fetch / cache / fallback logic out of the four cap methods —\n * they become trampolines over `runtimeState`.\n */\n runtimeState: PtzAutotrackRuntimeStateSchema\n};\nconst SwitchStatusSchema = z.object({\n on: z.boolean(),\n /** Ms epoch of the last state change. Useful for UI \"X minutes ago\". */\n lastChangedAt: z.number()\n});\nconst switchCapability = {\n name: \"switch\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Switch, DeviceType.Siren, DeviceType.Light],\n methods: {\n setState: method(\n z.object({ deviceId: z.number(), on: z.boolean() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n )\n },\n events: {\n onStateChanged: { data: z.object({\n deviceId: z.number(),\n on: z.boolean(),\n lastChangedAt: z.number()\n }) }\n },\n status: {\n schema: SwitchStatusSchema,\n kind: \"command-driven\"\n },\n /**\n * Runtime-state slice — the last applied on/off state, mirrored by\n * the kernel. Read via `device.state.switch.value`; UI toggles do\n * not need to re-query the provider after a setState mutation.\n */\n runtimeState: SwitchStatusSchema,\n settings: {\n bindings: [{\n kind: \"scalar\",\n statusPath: \"on\",\n method: \"setState\",\n valueArg: \"on\",\n field: { label: \"On\", kind: \"boolean\" }\n }]\n }\n};\nconst PerScopeBreakdownSchema = z.object({\n /** Total tracked objects in this scope (frame / zone / unzoned). */\n totalObjects: z.number().int().nonnegative(),\n /** Per-class count. Keys are macro class names (e.g. `person`, `car`). */\n byClass: z.record(z.string(), z.number().int().nonnegative())\n});\nconst ZoneScopeBreakdownSchema = PerScopeBreakdownSchema.extend({\n zoneId: z.string(),\n zoneName: z.string(),\n /** TrackIds of objects currently inside this zone — for cross-reference\n * with the per-track detail panel and live overlay. */\n trackIds: z.array(z.string()).readonly()\n});\nconst CameraOccupancySnapshotSchema = z.object({\n /** Frame timestamp of the inference result that produced this snapshot. */\n ts: z.number().int(),\n /** Frame width/height in pixels — let the UI normalize bbox coords. */\n frameWidth: z.number().int().nonnegative(),\n frameHeight: z.number().int().nonnegative(),\n /** Per-zone breakdown — one entry per defined zone (user + onboard). */\n zones: z.array(ZoneScopeBreakdownSchema).readonly(),\n /** Frame-wide aggregate (everywhere, regardless of zone membership). */\n frame: PerScopeBreakdownSchema,\n /** Detections that landed outside every zone. Empty when no zones defined. */\n unzoned: PerScopeBreakdownSchema\n});\nconst HistoryResolutionEnum = z.enum([\"minute\", \"5min\", \"hour\"]);\nconst HistoryRangeSchema = z.object({\n /** Range start (epoch ms, inclusive). */\n from: z.number().int(),\n /** Range end (epoch ms, inclusive). Defaults to \"now\" at query time. */\n to: z.number().int(),\n resolution: HistoryResolutionEnum\n});\nconst HistoryPointSchema = z.object({\n /** Bucket midpoint (epoch ms). */\n ts: z.number().int(),\n /** Object count averaged over the bucket (rounded to nearest integer). */\n count: z.number().int().nonnegative()\n});\nconst zoneAnalyticsCapability = {\n name: \"zone-analytics\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {\n /** Latest computed occupancy snapshot for this camera. Null when\n * the analytics pipeline hasn't seen a frame for this device yet\n * (no inference result emitted since boot or since binding was\n * activated). */\n getCurrentSnapshot: method(\n z.object({ deviceId: z.number() }),\n CameraOccupancySnapshotSchema.nullable()\n ),\n /** Time-series object count inside one zone. `className` optional —\n * omit to count every class in the zone. */\n getZoneHistory: method(\n z.object({\n deviceId: z.number(),\n zoneId: z.string(),\n className: z.string().optional()\n }).extend(HistoryRangeSchema.shape),\n z.array(HistoryPointSchema).readonly()\n ),\n /** Time-series frame-wide object count (everywhere). */\n getCameraHistory: method(\n z.object({\n deviceId: z.number(),\n className: z.string().optional()\n }).extend(HistoryRangeSchema.shape),\n z.array(HistoryPointSchema).readonly()\n ),\n /** Time-series count of objects outside every zone. */\n getUnzonedHistory: method(\n z.object({\n deviceId: z.number(),\n className: z.string().optional()\n }).extend(HistoryRangeSchema.shape),\n z.array(HistoryPointSchema).readonly()\n )\n },\n /**\n * Runtime-state slice — the latest occupancy snapshot mirrored by\n * the analytics frame processor on every inference result. Consumers\n * read via `device.state.zoneAnalytics.value` and stay in sync\n * automatically; the explicit `getCurrentSnapshot` cap method is\n * still useful for one-off polls without a subscription.\n */\n runtimeState: CameraOccupancySnapshotSchema\n};\nconst ZoneRuleModeEnum = z.enum([\"include\", \"exclude\"]);\nconst ZoneRuleSchema = z.object({\n /** Stable rule id — survives edits, used by the UI for diffing. */\n id: z.string(),\n /** Optional human-readable label rendered in the rule editor. */\n name: z.string().optional(),\n /** Zones this rule targets. The rule's `mode` applies to ALL\n * listed zones (OR-set: a detection in any one of them counts).\n * At least one zone id required — a rule with no targets is a\n * configuration mistake and the form validator rejects it. */\n zoneIds: z.array(z.string()).min(1).readonly(),\n mode: ZoneRuleModeEnum,\n /**\n * Class names this rule applies to. Empty / undefined ⇒ rule\n * applies to every class. Class strings match the `macroClass`\n * field on detections (e.g. `person`, `car`, `dog`).\n */\n classFilter: z.array(z.string()).readonly().optional(),\n /**\n * Minimum bbox/mask overlap (0–1) with any of the rule's zones\n * required to consider an entity \"in the zone\". Defaults to the\n * consumer's stage default when omitted. Kept for back-compat with\n * existing per-rule overrides; new operators pick the value via\n * `bboxInclusionPct` (operator-friendly 0–100). Whichever field is\n * set, the lower-level engine reads it as a 0–1 fraction.\n */\n overlapThreshold: z.number().min(0).max(1).optional(),\n /**\n * Operator-friendly version of `overlapThreshold` — the percentage\n * of the detection's bbox that must lie inside the zone for the\n * rule to match. Documented default is 85%; the engine substitutes\n * that when the field is omitted (kept optional so existing rules\n * stored without it stay valid).\n *\n * When BOTH `overlapThreshold` and `bboxInclusionPct` are set on a\n * rule, the engine prefers `bboxInclusionPct` because it's the\n * field exposed in the UI. Internally both feed the same gate.\n */\n bboxInclusionPct: z.number().min(0).max(100).optional(),\n /**\n * When `true` and a detection has a segmentation mask, use the\n * mask for overlap instead of the bbox. Detection-stage only;\n * motion rules ignore this field.\n */\n preferMask: z.boolean().optional(),\n /**\n * Soft-toggle: `false` disables the rule without deleting it.\n * Defaults to `true` so operators creating a rule via the UI\n * see it active immediately.\n */\n enabled: z.boolean().default(true)\n});\nconst ZoneRulesArraySchema = z.array(ZoneRuleSchema).readonly();\nconst ZoneRuleStageEnum = z.enum([\"motion\", \"detection\"]);\nconst zoneRulesCapability = {\n name: \"zone-rules\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {\n /** Read the full rule list for a given stage (empty when no rules\n * are defined yet). */\n listRules: method(\n z.object({ deviceId: z.number(), stage: ZoneRuleStageEnum }),\n z.array(ZoneRuleSchema).readonly()\n ),\n /** Bulk-replace the rule list for one stage. The provider validates\n * each entry against {@link ZoneRuleSchema} (zoneIds non-empty,\n * thresholds in range) and rejects the whole patch if any entry\n * is invalid — partial writes are a configuration footgun. */\n setRules: method(\n z.object({\n deviceId: z.number(),\n stage: ZoneRuleStageEnum,\n rules: z.array(ZoneRuleSchema).readonly()\n }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n )\n },\n /**\n * Runtime-state slice — both stages mirrored together so consumers\n * see one reactive handle (`device.state.zoneRules.value`) instead\n * of two. Bulk-replace mutations on either stage write the full\n * `{motion, detection}` shape, so subscribers always get the\n * complete current set. Consumers that only care about one stage\n * just read the matching property.\n */\n runtimeState: z.object({\n motion: z.array(ZoneRuleSchema).readonly(),\n detection: z.array(ZoneRuleSchema).readonly()\n })\n};\nconst ProviderStatusSchema = z.object({\n connected: z.boolean(),\n deviceCount: z.number(),\n error: z.string().optional()\n});\nconst DiscoveredDeviceSchema = z.object({\n externalId: z.string(),\n name: z.string(),\n type: z.string(),\n metadata: z.record(z.string(), z.unknown()).optional()\n});\nconst DiscoveryCandidateSchema = z.object({\n stableId: z.string(),\n type: z.enum(DeviceType),\n suggestedName: z.string(),\n prefilledConfig: z.record(z.string(), z.unknown())\n});\nconst DeviceSummarySchema = z.object({\n id: z.number(),\n stableId: z.string(),\n addonId: z.string(),\n type: z.string(),\n name: z.string(),\n parentDeviceId: z.number().nullable(),\n online: z.boolean(),\n features: z.array(z.string()),\n config: z.record(z.string(), z.unknown())\n});\nconst FieldProbeResultSchema = z.object({\n status: z.enum([\"ok\", \"error\"]),\n labels: z.array(z.string()).optional(),\n error: z.string().optional()\n});\nconst CreationSchemaOutputSchema = z.unknown();\nconst deviceProviderCapability = {\n name: \"device-provider\",\n scope: \"system\",\n mode: \"collection\",\n methods: {\n // ── Lifecycle + introspection ─────────────────────────────────────\n start: method(z.void(), z.void(), { kind: \"mutation\" }),\n stop: method(z.void(), z.void(), { kind: \"mutation\" }),\n getStatus: method(z.void(), ProviderStatusSchema),\n getDevices: method(z.void(), z.array(z.object({\n id: z.string(),\n name: z.string(),\n type: z.string()\n }))),\n // ── Discovery + adoption (optional — see supportsDiscovery) ──────\n supportsDiscovery: method(z.object({}), z.boolean()),\n discoverDevices: method(\n z.object({}),\n z.array(DiscoveryCandidateSchema),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n adoptDiscoveredDevice: method(\n z.object({ candidate: DiscoveryCandidateSchema }),\n DeviceSummarySchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n // ── Manual creation (optional — see supportsManualCreation) ──────\n supportsManualCreation: method(z.object({}), z.boolean()),\n /**\n * Fetch the creation form schema for a given DeviceType. Returns\n * `null` when the provider does not support manually creating\n * devices of that type. The output is a `ConfigUISchema` — the\n * router type-asserts it at the boundary.\n */\n getChildCreationSchema: method(\n z.object({ type: z.enum(DeviceType) }),\n CreationSchemaOutputSchema\n ),\n createDevice: method(\n z.object({\n type: z.enum(DeviceType),\n config: z.record(z.string(), z.unknown())\n }),\n DeviceSummarySchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Test a single field in the creation form before the device has\n * been persisted. Typical use: probing an RTSP URL entered by the\n * user. Providers that don't support field probing return\n * `{ success: true, message: 'Field test not supported' }`.\n *\n * `formValues` is the live snapshot of every field in the form at\n * the moment the user clicked Test — useful for probes that depend\n * on multiple fields together (e.g. Reolink autodetect needs host\n * + credentials + UID + transport mode in a single call). Optional\n * for backwards compatibility; providers free to ignore it.\n */\n testCreationField: method(\n z.object({\n type: z.enum(DeviceType),\n key: z.string(),\n value: z.unknown(),\n formValues: z.record(z.string(), z.unknown()).optional()\n }),\n FieldProbeResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst ConfigTabDeclarationSchema = z.object({\n id: z.string(),\n label: z.string(),\n icon: z.string(),\n order: z.number().optional()\n});\nconst ConfigSectionWithValuesSchema = z.object({\n id: z.string(),\n title: z.string(),\n description: z.string().optional(),\n style: z.enum([\"card\", \"accordion\"]).optional(),\n defaultCollapsed: z.boolean().optional(),\n columns: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).optional(),\n tab: z.string().optional(),\n // Hoist the section into a top-level device tab. DeviceDetail\n // discovers these from the aggregate and renders one tab per unique\n // `tab` id; the default `'settings'` keeps the section under Config.\n location: z.enum([\"settings\", \"top-tab\"]).optional(),\n order: z.number().optional(),\n fields: z.array(z.any())\n});\nconst SettingsSchemaWithValuesSchema = z.object({\n tabs: z.array(ConfigTabDeclarationSchema).optional(),\n sections: z.array(ConfigSectionWithValuesSchema)\n});\nconst SettingsPatchSchema = z.record(z.string(), z.unknown());\nconst SettingsUpdateResultSchema = z.object({\n success: z.literal(true)\n});\nconst addonSettingsCapability = {\n name: \"addon-settings\",\n scope: \"system\",\n mode: \"singleton\",\n nodeIdMode: \"data\",\n methods: {\n // ── Global-level settings ─────────────────────────────────────────\n //\n // `overlay` — optional preview overlay. When present, the provider\n // hydrates the schema as if the overlay were merged on top of the\n // persisted store (without writing anything). Used by override-mode\n // UIs (benchmark tabs) to get cascade-aware option lists when the\n // operator tweaks an upstream field — e.g. changing engineRuntime\n // from 'python' to 'node' refetches with `overlay: {engineRuntime:\n // 'node'}` so the backend/device dropdowns re-derive.\n getGlobalSettings: method(\n z.object({\n addonId: z.string(),\n nodeId: z.string().optional(),\n overlay: z.record(z.string(), z.unknown()).optional()\n }),\n SettingsSchemaWithValuesSchema.nullable()\n ),\n updateGlobalSettings: method(\n z.object({ addonId: z.string(), nodeId: z.string().optional(), patch: SettingsPatchSchema }),\n SettingsUpdateResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n // ── Device-level settings ─────────────────────────────────────────\n getDeviceSettings: method(\n z.object({ addonId: z.string(), deviceId: z.number(), nodeId: z.string().optional() }),\n SettingsSchemaWithValuesSchema.nullable()\n ),\n updateDeviceSettings: method(\n z.object({ addonId: z.string(), deviceId: z.number(), nodeId: z.string().optional(), patch: SettingsPatchSchema }),\n SettingsUpdateResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst AlertSeveritySchema = z.enum([\"info\", \"success\", \"warning\", \"error\"]);\nconst AlertStatusSchema = z.enum([\"active\", \"in-progress\", \"completed\", \"failed\", \"dismissed\"]);\nconst AlertSourceSchema = z.object({\n type: z.string(),\n id: z.string()\n});\nconst AlertSchema = z.object({\n id: z.string(),\n category: z.string(),\n severity: AlertSeveritySchema,\n title: z.string(),\n message: z.string(),\n status: AlertStatusSchema,\n progress: z.number().optional(),\n read: z.boolean(),\n createdAt: z.number(),\n updatedAt: z.number(),\n source: AlertSourceSchema.optional(),\n metadata: z.record(z.string(), z.unknown()).optional()\n});\nconst alertsCapability = {\n name: \"alerts\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n emit: method(AlertSchema, z.void(), { kind: \"mutation\" }),\n update: method(\n z.object({ alertId: z.string(), patch: AlertSchema.partial() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n list: method(\n z.object({ unreadOnly: z.boolean().optional(), limit: z.number().optional() }).optional(),\n z.array(AlertSchema).readonly()\n ),\n getUnreadCount: method(z.void(), z.number()),\n markRead: method(z.object({ alertId: z.string() }), z.void(), { kind: \"mutation\" }),\n markAllRead: method(z.void(), z.void(), { kind: \"mutation\" }),\n dismiss: method(z.object({ alertId: z.string() }), z.void(), { kind: \"mutation\" })\n }\n};\nconst storageCapability = {\n name: \"storage\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n // ── Small-file primitives ────────────────────────────────────────\n // `location` is a ref (type or fully-qualified id). The orchestrator\n // resolves the ref to a concrete `StorageLocation` and dispatches.\n resolve: method(\n z.object({ location: StorageLocationRefSchema, relativePath: z.string() }),\n z.string()\n ),\n write: method(\n z.object({ location: StorageLocationRefSchema, relativePath: z.string(), data: z.instanceof(Uint8Array) }),\n z.void(),\n { kind: \"mutation\" }\n ),\n read: method(\n z.object({ location: StorageLocationRefSchema, relativePath: z.string() }),\n z.instanceof(Uint8Array)\n ),\n exists: method(\n z.object({ location: StorageLocationRefSchema, relativePath: z.string() }),\n z.boolean()\n ),\n list: method(\n z.object({ location: StorageLocationRefSchema, prefix: z.string().optional() }),\n z.array(z.string()).readonly()\n ),\n delete: method(\n z.object({ location: StorageLocationRefSchema, relativePath: z.string() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n getAvailableSpace: method(\n z.object({ location: StorageLocationRefSchema }),\n z.number().nullable()\n ),\n // ── Chunked I/O ──────────────────────────────────────────────────\n // Same protocol as `storage-provider` but on the consumer side.\n // Sessions are owned by the orchestrator: it forwards each chunk\n // to the provider that backs the resolved location.\n beginUpload: method(\n z.object({ location: StorageLocationRefSchema, relativePath: z.string(), sizeBytes: z.number().optional() }),\n z.object({ uploadId: z.string() }),\n { kind: \"mutation\" }\n ),\n writeChunk: method(\n z.object({ uploadId: z.string(), offset: z.number(), data: z.instanceof(Uint8Array) }),\n z.void(),\n { kind: \"mutation\" }\n ),\n finalizeUpload: method(z.object({ uploadId: z.string() }), z.void(), { kind: \"mutation\" }),\n abortUpload: method(z.object({ uploadId: z.string() }), z.void(), { kind: \"mutation\" }),\n beginDownload: method(\n z.object({ location: StorageLocationRefSchema, relativePath: z.string() }),\n z.object({ downloadId: z.string(), sizeBytes: z.number() }),\n { kind: \"mutation\" }\n ),\n readChunk: method(\n z.object({ downloadId: z.string(), offset: z.number(), length: z.number() }),\n z.instanceof(Uint8Array)\n ),\n endDownload: method(z.object({ downloadId: z.string() }), z.void(), { kind: \"mutation\" }),\n // ── Location management ─────────────────────────────────────────\n // The orchestrator's authoritative surface for the admin-UI's\n // storage-locations page. Operators add/edit/test/remove location\n // instances here; `upsertLocation` and `deleteLocation` require\n // superAdmin auth.\n listLocations: method(\n z.object({ type: StorageLocationTypeSchema.optional() }),\n z.array(StorageLocationSchema).readonly()\n ),\n getDefaultLocation: method(\n z.object({ type: StorageLocationTypeSchema }),\n StorageLocationSchema.nullable()\n ),\n upsertLocation: method(\n StorageLocationSchema.omit({ createdAt: true, updatedAt: true }),\n StorageLocationSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n deleteLocation: method(\n z.object({ id: z.string() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n testLocation: method(\n z.object({ id: z.string() }),\n z.object({ ok: z.boolean(), error: z.string().optional() }),\n { auth: \"admin\" }\n ),\n // ── Provider discovery ──────────────────────────────────────────\n // The admin-UI's \"Add location\" wizard shows one entry per\n // registered `storage-provider` collection cap. Each entry is the\n // provider's `getProviderInfo()` blob — stable, addon-driven, no\n // hard-coded list in the UI. The orchestrator gathers them by\n // walking the registry on every call (cheap; the list almost\n // never changes after boot).\n listProviders: method(\n z.void(),\n z.array(z.object({\n providerId: z.string(),\n displayName: z.string(),\n supportedLocationTypes: z.array(StorageLocationTypeSchema).readonly(),\n configSchema: z.unknown()\n })).readonly()\n ),\n // Validate a candidate config against a provider BEFORE persisting.\n // Used by the wizard so operators can preflight a connection\n // (e.g. SFTP credentials, S3 bucket access) without leaving an\n // orphan record behind on failure.\n testConfig: method(\n z.object({\n providerId: z.string(),\n config: z.record(z.string(), z.unknown())\n }),\n z.object({ ok: z.boolean(), error: z.string().optional() }),\n { auth: \"admin\" }\n )\n }\n};\nconst ProviderInfoSchema = z.object({\n providerId: z.string().min(1),\n displayName: z.string().min(1),\n supportedLocationTypes: z.array(StorageLocationTypeSchema).readonly(),\n configSchema: z.unknown()\n});\nconst TestLocationResultSchema = z.object({\n ok: z.boolean(),\n error: z.string().optional()\n});\nconst BeginUploadInputSchema = z.object({\n location: StorageLocationSchema,\n relativePath: z.string(),\n sizeBytes: z.number().optional()\n});\nconst BeginUploadResultSchema = z.object({ uploadId: z.string() });\nconst WriteChunkInputSchema = z.object({\n uploadId: z.string(),\n offset: z.number(),\n data: z.instanceof(Uint8Array)\n});\nconst FinalizeUploadInputSchema = z.object({ uploadId: z.string() });\nconst AbortUploadInputSchema = z.object({ uploadId: z.string() });\nconst BeginDownloadInputSchema = z.object({\n location: StorageLocationSchema,\n relativePath: z.string()\n});\nconst BeginDownloadResultSchema = z.object({\n downloadId: z.string(),\n sizeBytes: z.number()\n});\nconst ReadChunkInputSchema = z.object({\n downloadId: z.string(),\n offset: z.number(),\n length: z.number()\n});\nconst EndDownloadInputSchema = z.object({ downloadId: z.string() });\nconst storageProviderCapability = {\n name: \"storage-provider\",\n scope: \"system\",\n mode: \"collection\",\n internal: true,\n methods: {\n /** Self-description for the \"Add location\" wizard. */\n getProviderInfo: method(z.void(), ProviderInfoSchema),\n /** Validate config + probe connectivity. Called on add and on edit. */\n testLocation: method(\n z.object({ config: z.record(z.string(), z.unknown()) }),\n TestLocationResultSchema,\n { auth: \"admin\" }\n ),\n // ── Small-file primitives ────────────────────────────────────────\n // The location is passed inline so the orchestrator dispatches\n // without provider-side location state.\n resolve: method(\n z.object({ location: StorageLocationSchema, relativePath: z.string() }),\n z.string()\n ),\n write: method(\n z.object({ location: StorageLocationSchema, relativePath: z.string(), data: z.instanceof(Uint8Array) }),\n z.void(),\n { kind: \"mutation\" }\n ),\n read: method(\n z.object({ location: StorageLocationSchema, relativePath: z.string() }),\n z.instanceof(Uint8Array)\n ),\n exists: method(\n z.object({ location: StorageLocationSchema, relativePath: z.string() }),\n z.boolean()\n ),\n list: method(\n z.object({ location: StorageLocationSchema, prefix: z.string().optional() }),\n z.array(z.string()).readonly()\n ),\n delete: method(\n z.object({ location: StorageLocationSchema, relativePath: z.string() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n getAvailableSpace: method(\n z.object({ location: StorageLocationSchema }),\n z.number().nullable()\n ),\n // ── Chunked upload ──────────────────────────────────────────────\n beginUpload: method(BeginUploadInputSchema, BeginUploadResultSchema, { kind: \"mutation\" }),\n writeChunk: method(WriteChunkInputSchema, z.void(), { kind: \"mutation\" }),\n finalizeUpload: method(FinalizeUploadInputSchema, z.void(), { kind: \"mutation\" }),\n abortUpload: method(AbortUploadInputSchema, z.void(), { kind: \"mutation\" }),\n // ── Chunked download ────────────────────────────────────────────\n beginDownload: method(BeginDownloadInputSchema, BeginDownloadResultSchema, { kind: \"mutation\" }),\n readChunk: method(ReadChunkInputSchema, z.instanceof(Uint8Array)),\n endDownload: method(EndDownloadInputSchema, z.void(), { kind: \"mutation\" })\n }\n};\nconst BackupSubDestinationInfoSchema = z.object({\n /**\n * Sub-id within this addon. Convention `default` for single-\n * destination addons; addons that host many (S3 with N buckets)\n * pick stable per-bucket strings. The orchestrator stitches\n * `<manifestId>:<subId>` for the wire format.\n */\n subId: z.string(),\n displayName: z.string(),\n description: z.string().optional(),\n kind: z.string(),\n triggerSupported: z.boolean(),\n restoreSupported: z.boolean()\n});\nconst BackupDestinationInfoSchema = BackupSubDestinationInfoSchema.extend({\n /** `<addonId>:<subId>` — globally-unique dispatch key. */\n id: z.string(),\n /**\n * Manifest id of the owning addon. The Settings button on the\n * destination card opens that addon's `globalSettingsSchema` panel.\n */\n addonId: z.string(),\n /** Operator-toggled enable flag from the destination-policy table. */\n enabled: z.boolean(),\n /** Operator-defined retention count (archives kept per destination). */\n retentionCount: z.number(),\n /** Operator-defined display label (overrides storage location displayName). */\n label: z.string().optional(),\n /** Newest-archive timestamp from `manifests.json`, or undefined. */\n lastSuccessAt: z.number().optional(),\n /** Newest-archive size from `manifests.json`, or undefined. */\n lastSuccessSizeBytes: z.number().optional(),\n /** Per-destination cron expression. Empty = manual-only (no schedule). */\n cron: z.string().optional(),\n /** ms-epoch of next computed firing for this destination's cron, if any. */\n nextRunAt: z.number().optional(),\n /** ms-epoch of last successful scheduled run (mirrors policy.lastRunAt). */\n lastRunAt: z.number().optional()\n});\nconst BackupArchiveEntrySchema = z.object({\n id: z.string(),\n filename: z.string(),\n createdAt: z.number(),\n sizeBytes: z.number(),\n label: z.string().optional(),\n /** Top-level locations included in the archive (db, addons, tls, …). */\n locations: z.array(z.string()).readonly()\n});\nconst BackupEntrySchema = z.object({\n id: z.string(),\n /** Addon id of the destination that owns this backup (e.g. `local-backup`, `s3-backup`). */\n destinationId: z.string().optional(),\n label: z.string().optional(),\n createdAt: z.number(),\n sizeBytes: z.number(),\n locations: z.array(z.string()).optional()\n});\nconst ArchiveEntrySchema = z.object({\n path: z.string(),\n kind: z.enum([\"file\", \"dir\", \"symlink\"]),\n sizeBytes: z.number(),\n mtime: z.number()\n});\nconst ArchiveManifestSchema = z.object({\n archiveVersion: z.literal(1),\n createdAt: z.number(),\n dataDir: z.string(),\n locations: z.array(z.string()),\n entries: z.array(ArchiveEntrySchema),\n totalBytes: z.number(),\n totalFiles: z.number()\n});\nconst LocationStatSchema = z.object({\n name: z.string(),\n sizeBytes: z.number(),\n fileCount: z.number(),\n present: z.boolean()\n});\nconst backupCapability = {\n name: \"backup\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n /**\n * Flat aggregate of every destination across every registered\n * `backup-destination` provider. This is the orchestrator-side\n * surface; it expands per-addon `listDestinations()` results into\n * one list the UI can render directly.\n */\n listDestinations: method(\n z.void(),\n z.array(BackupDestinationInfoSchema).readonly(),\n { auth: \"admin\" }\n ),\n /**\n * Trigger a backup. Without `destinations` the orchestrator fans\n * out to every destination flagged as enabled in the routing\n * config; with it, only the listed addons receive the archive.\n */\n trigger: method(\n z.object({\n /** Subset of registered `backup-destination` addon ids to write to. */\n destinations: z.array(z.string()).optional(),\n locations: z.array(z.string()).optional(),\n label: z.string().optional()\n }).optional(),\n z.array(BackupEntrySchema).readonly(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Union of every destination's archives, each tagged with `destinationId`. */\n list: method(z.void(), z.array(BackupEntrySchema).readonly(), { auth: \"admin\" }),\n /**\n * Pre-backup snapshot of the well-known locations on disk — sizes\n * + file counts. Powers the opt-in checklist that lets the\n * operator pick which subsections of state get archived.\n */\n listLocations: method(z.void(), z.array(LocationStatSchema).readonly(), { auth: \"admin\" }),\n /**\n * Read the embedded `.camstack-backup-manifest.json` from a\n * previously-created archive. The manifest carries the full\n * file/dir listing with sizes + mtimes — the readdir snapshot\n * the UI shows in the \"Contents\" panel. Returns `null` when the\n * archive predates manifests (created before this feature\n * shipped).\n */\n getEntries: method(\n z.object({ destinationId: z.string(), backupId: z.string() }),\n ArchiveManifestSchema.nullable(),\n { auth: \"admin\" }\n ),\n restore: method(\n z.object({\n destinationId: z.string(),\n backupId: z.string(),\n /**\n * Optional whitelist — only restore these top-level locations\n * from the archive. Default = every location the archive\n * carries (full restore). The boot-time apply hook reads\n * this list and skips entries whose path doesn't start with\n * any of them.\n */\n locations: z.array(z.string()).optional()\n }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n delete: method(\n z.object({ destinationId: z.string(), backupId: z.string() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * List archives at a single destination. Reads the per-location\n * `manifests.json` and returns one entry per archive (newest\n * first). Powers the destinations-table drill-in in admin UI.\n */\n listArchives: method(\n z.object({ destinationId: z.string() }),\n z.array(BackupArchiveEntrySchema).readonly(),\n { auth: \"admin\" }\n ),\n /**\n * Upsert a per-destination policy row. The `locationId` MUST be\n * the id of an existing `backups`-typed `StorageLocation`. Used\n * by the admin-UI destinations table (enable toggle + retention\n * input + optional label).\n */\n upsertDestinationPolicy: method(\n z.object({\n locationId: z.string(),\n enabled: z.boolean(),\n retentionCount: z.number().int().min(1).max(1e3),\n label: z.string().optional(),\n /**\n * Per-destination cron expression. Empty string clears the\n * schedule (manual-only). Validated server-side via croner;\n * malformed expressions reject the upsert with an actionable\n * message.\n */\n cron: z.string().optional()\n }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Validate a cron expression and peek the next N firing times.\n * Used by the admin-UI CronEditor to render a live \"next-run\"\n * preview as the operator edits the pattern.\n */\n previewSchedule: method(\n z.object({\n cron: z.string(),\n count: z.number().int().min(1).max(20).optional()\n }),\n z.object({\n ok: z.boolean(),\n error: z.string().optional(),\n nextRuns: z.array(z.number()).readonly()\n })\n )\n }\n};\nconst QueryFilterSchema = z.object({\n where: z.record(z.string(), z.unknown()).optional(),\n whereIn: z.record(z.string(), z.array(z.unknown())).optional(),\n whereBetween: z.record(z.string(), z.tuple([z.unknown(), z.unknown()])).optional(),\n orderBy: z.object({\n field: z.string(),\n direction: z.enum([\"asc\", \"desc\"])\n }).optional(),\n limit: z.number().optional(),\n offset: z.number().optional()\n});\nconst SettingsRecordSchema = z.object({\n id: z.string(),\n data: z.record(z.string(), z.unknown())\n});\nconst CollectionColumnSchema = z.object({\n name: z.string(),\n type: z.enum([\"TEXT\", \"INTEGER\", \"REAL\", \"JSON\", \"BOOLEAN\"]),\n primaryKey: z.boolean().optional(),\n notNull: z.boolean().optional(),\n unique: z.boolean().optional()\n});\nconst CollectionIndexSchema = z.object({\n name: z.string(),\n columns: z.array(z.string()).readonly(),\n unique: z.boolean().optional()\n});\nconst settingsStoreCapability = {\n name: \"settings-store\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n /** Get a single value by key from a collection. */\n get: method(\n z.object({ namespace: z.string().optional(), collection: z.string(), key: z.string() }),\n z.unknown()\n ),\n /** Set a value by key in a collection (upsert). */\n set: method(\n z.object({ namespace: z.string().optional(), collection: z.string(), key: z.string(), value: z.unknown() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n /** Get all entries matching an optional filter. */\n query: method(\n z.object({ namespace: z.string().optional(), collection: z.string(), filter: QueryFilterSchema.optional() }),\n z.array(SettingsRecordSchema).readonly()\n ),\n /** Insert a new record. */\n insert: method(\n z.object({ namespace: z.string().optional(), collection: z.string(), record: SettingsRecordSchema }),\n z.void(),\n { kind: \"mutation\" }\n ),\n /** Update an existing record by ID. */\n update: method(\n z.object({ namespace: z.string().optional(), collection: z.string(), id: z.string(), data: z.record(z.string(), z.unknown()) }),\n z.void(),\n { kind: \"mutation\" }\n ),\n /** Delete a record by key/ID. */\n delete: method(\n z.object({ namespace: z.string().optional(), collection: z.string(), key: z.string() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n /** Count entries in a collection, optionally filtered. */\n count: method(\n z.object({ namespace: z.string().optional(), collection: z.string(), filter: QueryFilterSchema.optional() }),\n z.number()\n ),\n /** Check if a collection is empty. */\n isEmpty: method(\n z.object({ namespace: z.string().optional(), collection: z.string() }),\n z.boolean()\n ),\n /**\n * Declare a typed (SQL-backed) collection with explicit columns +\n * indexes. Idempotent: re-declaring an existing collection with the\n * same shape is a no-op; shape changes (new columns, new indexes)\n * are applied additively. Subsequent `insert` / `update` / `delete`\n * / `query` calls on this collection use typed columns instead of\n * JSON-blob storage — `record.data` fields are spread across\n * columns, `query.filter.where` matches real columns (no\n * `json_extract` overhead), `orderBy` uses column indexes.\n *\n * Addons call this in `onInitialize` before their first read/write.\n * Collection names should be namespaced by addon (e.g.\n * `pipeline-analytics:object-events`) to avoid cross-addon\n * clashes — no automatic prefix is added.\n */\n declareCollection: method(\n z.object({\n namespace: z.string().optional(),\n collection: z.string(),\n columns: z.array(CollectionColumnSchema).readonly(),\n indexes: z.array(CollectionIndexSchema).readonly().optional()\n }),\n z.void(),\n { kind: \"mutation\" }\n )\n }\n};\nconst LogLevelSchema$1 = z.enum([\"debug\", \"info\", \"warn\", \"error\"]);\nconst LogEntrySchema = z.object({\n timestamp: z.date(),\n level: LogLevelSchema$1,\n scope: z.array(z.string()),\n message: z.string(),\n meta: z.record(z.string(), z.unknown()).optional(),\n tags: z.record(z.string(), z.string()).optional()\n});\nconst logDestinationCapability = {\n name: \"log-destination\",\n scope: \"system\",\n mode: \"collection\",\n internal: true,\n methods: {\n write: method(LogEntrySchema, z.void(), { kind: \"mutation\" }),\n query: method(\n z.object({\n scope: z.array(z.string()).optional(),\n level: LogLevelSchema$1.optional(),\n since: z.date().optional(),\n until: z.date().optional(),\n limit: z.number().optional(),\n tags: z.record(z.string(), z.string()).optional()\n }),\n z.array(LogEntrySchema).readonly()\n )\n }\n};\nconst StaticDirOutputSchema = z.object({ staticDir: z.string() });\nconst VersionOutputSchema = z.object({ version: z.string() });\nconst adminUiCapability = {\n name: \"admin-ui\",\n scope: \"system\",\n mode: \"singleton\",\n internal: true,\n methods: {\n getStaticDir: method(z.void(), StaticDirOutputSchema),\n getVersion: method(z.void(), VersionOutputSchema)\n }\n};\nconst SsoBridgeClaimsSchema = z.object({\n userId: z.string(),\n username: z.string(),\n isAdmin: z.boolean(),\n provider: z.string(),\n email: z.string().optional(),\n displayName: z.string().optional(),\n /**\n * Public HTTPS URL of the hub that issued this token. Used by\n * cloud-mode OAuth proxies (Alexa Smart Home Lambda, future Google\n * Home Lambda) to route a request back to the originating hub\n * without holding routing state of their own. The Lambda decodes the\n * JWT WITHOUT verifying the signature — the hub re-verifies on every\n * inbound call so trust still rests with the signing hub.\n */\n hubUrl: z.string().optional()\n});\nconst ssoBridgeCapability = {\n name: \"sso-bridge\",\n scope: \"system\",\n mode: \"singleton\",\n internal: true,\n methods: {\n signBridgeToken: method(\n z.object({\n claims: SsoBridgeClaimsSchema,\n ttlSec: z.number().int().positive().optional()\n }),\n z.object({ token: z.string() })\n ),\n verifyBridgeToken: method(\n z.object({ token: z.string() }),\n SsoBridgeClaimsSchema.nullable()\n )\n }\n};\nconst PasskeySummarySchema = z.object({\n credentialId: z.string(),\n label: z.string(),\n createdAt: z.number(),\n lastUsedAt: z.number().nullable(),\n transports: z.array(z.string()).default([])\n});\nconst userPasskeysCapability = {\n name: \"user-passkeys\",\n scope: \"system\",\n mode: \"collection\",\n internal: true,\n methods: {\n beginRegistration: method(\n z.object({ userId: z.string(), username: z.string() }),\n // PublicKeyCredentialCreationOptionsJSON — opaque JSON shape from\n // @simplewebauthn. The browser passes it straight to credentials.create().\n z.object({ optionsJSON: z.record(z.string(), z.unknown()) }),\n { kind: \"mutation\", auth: \"admin\", access: \"create\" }\n ),\n finishRegistration: method(\n z.object({\n userId: z.string(),\n /** RegistrationResponseJSON from the browser. */\n response: z.record(z.string(), z.unknown()),\n /** Operator-visible label (e.g. \"MacBook Touch ID\"). */\n label: z.string()\n }),\n z.object({ success: z.literal(true), credentialId: z.string() }),\n { kind: \"mutation\", auth: \"admin\", access: \"create\" }\n ),\n beginAuthentication: method(\n // userId optional — when absent, the addon emits a \"passkey discovery\"\n // (`allowCredentials: []`) so the browser shows every available\n // credential. When present, only the user's credentials are allowed.\n z.object({ userId: z.string().optional() }),\n z.object({ optionsJSON: z.record(z.string(), z.unknown()) }),\n { kind: \"mutation\", access: \"view\" }\n ),\n finishAuthentication: method(\n z.object({\n /** Required — the user the assertion belongs to (verified). */\n userId: z.string(),\n /** AuthenticationResponseJSON from the browser. */\n response: z.record(z.string(), z.unknown())\n }),\n z.object({ verified: z.boolean() }),\n { kind: \"mutation\", access: \"view\" }\n ),\n listPasskeys: method(\n z.object({ userId: z.string() }),\n z.array(PasskeySummarySchema),\n { auth: \"admin\" }\n ),\n removePasskey: method(\n z.object({ userId: z.string(), credentialId: z.string() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\", access: \"delete\" }\n )\n }\n};\nconst EmailAddressSchema = z.email();\nconst SendEmailInputSchema = z.object({\n to: z.union([EmailAddressSchema, z.array(EmailAddressSchema).min(1)]),\n cc: z.array(EmailAddressSchema).optional(),\n bcc: z.array(EmailAddressSchema).optional(),\n /** RFC 5322 `From` field. Most relays will reject if the domain\n * isn't authorised — the addon is responsible for substituting a\n * sane default when omitted. */\n from: z.string().optional(),\n /** Optional `Reply-To` override. */\n replyTo: z.string().optional(),\n subject: z.string(),\n /** Plain-text body. Required even when `html` is present (fallback\n * for clients that strip HTML — including most spam filters). */\n text: z.string(),\n /** Optional HTML body. Renders alongside `text` as multi-part. */\n html: z.string().optional()\n});\nconst SendEmailResultSchema = z.object({\n messageId: z.string(),\n accepted: z.array(EmailAddressSchema).default([]),\n rejected: z.array(EmailAddressSchema).default([])\n});\nconst SmtpStatusSchema = z.object({\n /** True iff the addon has successfully verified the relay. */\n ready: z.boolean(),\n /** Operator-visible host string (no credentials). */\n host: z.string(),\n /** Last error message reported by the relay, when not ready. */\n error: z.string().optional(),\n /** Last successful verify timestamp (unix ms). */\n lastVerifiedAt: z.number().optional()\n});\nconst smtpProviderCapability = {\n name: \"smtp-provider\",\n scope: \"system\",\n mode: \"collection\",\n internal: true,\n providerKind: \"email\",\n methods: {\n sendEmail: method(\n SendEmailInputSchema,\n SendEmailResultSchema,\n { kind: \"mutation\", auth: \"admin\", access: \"create\" }\n ),\n /** Round-trip ping against the SMTP relay (EHLO + AUTH if configured).\n * Used by the operator's \"Test connection\" button. */\n verify: method(\n z.void(),\n SmtpStatusSchema,\n { kind: \"mutation\", auth: \"admin\", access: \"view\" }\n ),\n getStatus: method(\n z.void(),\n SmtpStatusSchema,\n { auth: \"admin\" }\n )\n }\n};\nconst BrokerKindSchema = z.enum([\"external\", \"embedded\"]);\nconst BrokerStatusSchema = z.enum([\n \"connected\",\n \"disconnected\",\n \"auth-failed\",\n \"unreachable\",\n \"tls-error\"\n]);\nconst BrokerInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n url: z.string(),\n kind: BrokerKindSchema,\n status: BrokerStatusSchema,\n latencyMs: z.number().nullable(),\n error: z.string().optional(),\n /** Embedded brokers only: number of MQTT clients currently connected. */\n connectedClients: z.number().int().nonnegative().optional(),\n /** Epoch ms of the last live probe (external) or aedes snapshot (embedded). */\n lastCheckedAt: z.number().optional()\n});\nconst BrokerConnectionDetailsSchema = z.object({\n url: z.string(),\n username: z.string().optional(),\n password: z.string().optional(),\n /**\n * Suggested prefix for `clientId`. Each consumer should suffix this\n * with its own discriminator (addon id, instance id) so reconnects\n * don't kick each other off (MQTT spec: clientId must be unique per\n * broker).\n */\n clientIdPrefix: z.string().optional()\n});\nconst AddBrokerInputSchema = z.object({\n name: z.string().min(1),\n url: z.string().regex(/^(mqtt|mqtts|ws|wss):\\/\\//, \"URL must start with mqtt(s):// or ws(s)://\"),\n username: z.string().optional(),\n password: z.string().optional(),\n clientIdPrefix: z.string().optional()\n});\nconst AddBrokerResultSchema = z.object({\n id: z.string()\n});\nconst IdInputSchema = z.object({ id: z.string() });\nconst TestResultSchema = z.discriminatedUnion(\"ok\", [\n z.object({ ok: z.literal(true), latencyMs: z.number() }),\n z.object({ ok: z.literal(false), error: z.string() })\n]);\nconst StartEmbeddedInputSchema = z.object({\n port: z.number().int().min(1).max(65535).default(1883),\n /** Allow anonymous connect (no username/password). Default: false. */\n allowAnonymous: z.boolean().default(false),\n /** Optional shared username/password for clients. */\n username: z.string().optional(),\n password: z.string().optional()\n});\nconst StartEmbeddedResultSchema = z.object({\n id: z.string(),\n url: z.string()\n});\nconst StatusSchema = z.object({\n brokerCount: z.number(),\n embeddedRunning: z.boolean()\n});\nconst mqttBrokerCapability = {\n name: \"mqtt-broker\",\n scope: \"system\",\n mode: \"collection\",\n providerKind: \"broker\",\n status: { schema: StatusSchema, kind: \"poll\" },\n methods: {\n listBrokers: method(z.void(), z.array(BrokerInfoSchema)),\n getBrokerConfig: method(IdInputSchema, BrokerConnectionDetailsSchema),\n addBroker: method(AddBrokerInputSchema, AddBrokerResultSchema, { kind: \"mutation\" }),\n removeBroker: method(IdInputSchema, z.void(), { kind: \"mutation\" }),\n testConnection: method(IdInputSchema, TestResultSchema, { kind: \"mutation\" }),\n startEmbeddedBroker: method(StartEmbeddedInputSchema, StartEmbeddedResultSchema, { kind: \"mutation\" }),\n stopEmbeddedBroker: method(IdInputSchema, z.void(), { kind: \"mutation\" }),\n getStatus: method(z.void(), StatusSchema)\n }\n};\nconst LinkStateSchema = z.enum([\"unlinked\", \"linked\", \"error\"]);\nconst DeviceExportStatusSchema = z.object({\n linkState: LinkStateSchema,\n exposedDeviceCount: z.number(),\n error: z.string().optional()\n});\nconst DeviceKindSchema = z.string();\nconst ExposedDeviceSchema = z.object({\n deviceId: z.string(),\n exposedAs: z.string().optional(),\n capabilities: z.array(z.string()).optional()\n});\nconst ExposeInputSchema = z.object({\n deviceId: z.string(),\n capabilities: z.array(z.string()).optional()\n});\nconst UnexposeInputSchema = z.object({ deviceId: z.string() });\nconst deviceExportCapability = {\n name: \"device-export\",\n scope: \"system\",\n mode: \"collection\",\n providerKind: \"device-export\",\n status: { schema: DeviceExportStatusSchema, kind: \"poll\" },\n /**\n * Each export provider contributes its own per-device \"Export\" panel\n * (enabled toggle, preferred stream, addon-specific knobs like the\n * HA-MQTT discovery prefix). The three framework methods\n * `getDeviceSettingsContribution` / `getDeviceLiveContribution` /\n * `applyDeviceSettingsPatch` are auto-injected on the provider\n * interface and routed to the device-details aggregator.\n */\n exposesDeviceSettings: true,\n methods: {\n getStatus: method(z.void(), DeviceExportStatusSchema),\n listSupportedDeviceKinds: method(z.void(), z.array(DeviceKindSchema)),\n listExposedDevices: method(z.void(), z.array(ExposedDeviceSchema)),\n exposeDevice: method(ExposeInputSchema, z.void(), { kind: \"mutation\" }),\n unexposeDevice: method(UnexposeInputSchema, z.void(), { kind: \"mutation\" })\n }\n};\nconst AddonPageDeclarationSchema$1 = z.object({\n id: z.string(),\n label: z.string(),\n icon: z.string(),\n path: z.string(),\n remoteName: z.string(),\n bundle: z.string()\n});\nconst AddonPageInfoSchema = z.object({\n addonId: z.string(),\n page: AddonPageDeclarationSchema$1,\n bundleUrl: z.string()\n});\nconst addonPagesCapability = {\n name: \"addon-pages\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n listPages: method(z.void(), z.array(AddonPageInfoSchema).readonly())\n }\n};\nconst AddonPageDeclarationSchema = z.object({\n id: z.string(),\n label: z.string(),\n icon: z.string(),\n path: z.string(),\n /**\n * Module Federation remote name — must match the `name` field on the\n * page addon's `federation()` plugin config. Used by admin-ui's\n * `<AddonPageLoader>` to call `loadRemote('<remoteName>/page')`.\n * Conventionally `addon_<id>_page` (snake_case; MF names cannot\n * contain hyphens).\n */\n remoteName: z.string(),\n /**\n * Bundle filename inside the addon's `dist/` dir served at\n * `/api/addon-pages/<addonId>/<bundle>`. With Module Federation this\n * is always `'remoteEntry.js'`; the value is kept on the metadata so\n * the static-file route can compute an mtime-based cache-buster URL\n * without a separate filesystem stat.\n */\n bundle: z.string()\n});\nconst addonPagesSourceCapability = {\n name: \"addon-pages-source\",\n scope: \"system\",\n mode: \"collection\",\n internal: true,\n methods: {\n listPages: method(z.void(), z.array(AddonPageDeclarationSchema).readonly())\n }\n};\nconst WidgetHostEnum = z.enum([\"device-tab\", \"dashboard\", \"integration-detail\"]);\nconst WidgetSizeEnum = z.enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"]);\nconst WidgetMetadataSchema = z.object({\n /** Stable id within the addon — kebab-case. */\n stableId: z.string(),\n /** Operator-facing label. */\n label: z.string(),\n description: z.string().optional(),\n icon: z.string().optional(),\n /**\n * Module Federation remote name — must match the `name` field on the\n * widget addon's `federation()` plugin config. Used by the host's\n * `<WidgetRegistryProvider>` to call `loadRemote('<remoteName>/widgets')`.\n * Conventionally `addon_<addonid>_widgets` (snake_case; MF names\n * cannot contain hyphens).\n */\n remoteName: z.string(),\n /**\n * Bundle filename inside the addon's `dist/` dir served at\n * `/api/addon-widgets/<addonId>/<bundle>`. With Module Federation\n * this is always `'remoteEntry.js'` — the value is kept on the\n * metadata so the static-file route can compute an mtime-based\n * cache-buster URL without a separate filesystem stat.\n */\n bundle: z.string(),\n /** Where the widget makes sense to render. */\n hosts: z.array(WidgetHostEnum).readonly(),\n /** Required props the host must supply. Validated at <WidgetSlot> mount. */\n requires: z.object({\n deviceContext: z.boolean().default(false),\n integrationContext: z.boolean().default(false)\n }),\n /** Dashboard placement HINTS (operator can override per instance). */\n defaultSize: WidgetSizeEnum.default(\"md\"),\n allowedSizes: z.array(WidgetSizeEnum).readonly().default([\"sm\", \"md\", \"lg\"]),\n defaultColumns: z.number().int().min(1).max(12).default(6),\n defaultRows: z.number().int().min(1).max(12).default(1)\n});\nconst addonWidgetsSourceCapability = {\n name: \"addon-widgets-source\",\n scope: \"system\",\n mode: \"collection\",\n internal: true,\n methods: {\n listWidgets: method(z.void(), z.array(WidgetMetadataSchema).readonly())\n }\n};\nconst EnrichedWidgetMetadataSchema = WidgetMetadataSchema.extend({\n addonId: z.string(),\n bundleUrl: z.string()\n});\nconst addonWidgetsCapability = {\n name: \"addon-widgets\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n listWidgets: method(z.void(), z.array(EnrichedWidgetMetadataSchema).readonly())\n }\n};\nconst AddonHttpRouteSchema = z.object({\n method: z.enum([\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\"]),\n path: z.string(),\n access: z.enum([\"public\", \"authenticated\", \"admin\"]).optional(),\n description: z.string().optional()\n});\nconst InvokeRequestSchema = z.object({\n method: z.string(),\n path: z.string(),\n params: z.record(z.string(), z.string()),\n query: z.record(z.string(), z.string()),\n body: z.unknown(),\n headers: z.record(z.string(), z.string()),\n user: z.object({\n id: z.string(),\n username: z.string(),\n isAdmin: z.boolean()\n }).optional(),\n scopedToken: z.unknown().optional()\n});\nconst InvokeReplyEnvelopeSchema = z.object({\n status: z.number().int(),\n headers: z.record(z.string(), z.string()),\n /** When set, the hub MUST `reply.redirect(redirectUrl)` instead of\n * sending `body`. Status defaults to 302 when this is set unless\n * the handler called `reply.code(...)` explicitly. */\n redirectUrl: z.string().nullable(),\n /** JSON-serializable body. `undefined` is treated as \"no body\". */\n body: z.unknown().optional(),\n /** Set when the handler called `reply.type(mime)`. */\n contentType: z.string().optional()\n});\nconst addonRoutesCapability = {\n name: \"addon-routes\",\n scope: \"system\",\n mode: \"collection\",\n internal: true,\n methods: {\n getRoutes: method(z.void(), z.array(AddonHttpRouteSchema)),\n /**\n * Cross-process dispatch entry point. Forked addons implement this\n * (via `buildAddonRouteProvider`) so the hub's Fastify catch-all\n * can route through Moleculer when the handler lives in a worker.\n *\n * Local addons can implement it for free with the same helper;\n * the hub bypasses the wire on co-located addons.\n */\n invoke: method(InvokeRequestSchema, InvokeReplyEnvelopeSchema, { kind: \"mutation\" })\n }\n};\nconst HWACCEL_OPTIONS = [\n { value: \"auto\", label: \"Auto (defer to probed best)\" },\n { value: \"none\", label: \"Off (software)\" },\n { value: \"videotoolbox\", label: \"VideoToolbox (macOS)\" },\n { value: \"cuda\", label: \"CUDA (NVIDIA)\" },\n { value: \"nvdec\", label: \"NVDEC (NVIDIA legacy)\" },\n { value: \"vaapi\", label: \"VAAPI (Linux Intel/AMD)\" },\n { value: \"qsv\", label: \"QuickSync (Intel)\" },\n { value: \"d3d11va\", label: \"D3D11VA (Windows)\" },\n { value: \"dxva2\", label: \"DXVA2 (Windows legacy)\" },\n { value: \"amf\", label: \"AMF (AMD)\" },\n { value: \"vdpau\", label: \"VDPAU (Linux NVIDIA legacy)\" },\n { value: \"drm\", label: \"DRM (Linux generic)\" }\n];\nconst DEFAULT_DECODER_HWACCEL_CONFIG = {\n hwaccel: \"auto\",\n probedBestHwaccel: \"\"\n};\nconst decoderCapability = {\n name: \"decoder\",\n scope: \"system\",\n // Singleton — one decoder per node. `decoder-nodeav` is the default\n // install; operators can swap to a different provider via the\n // binding system's active-addon selection. The old collection shape\n // existed to let node-av + ffmpeg coexist and priority-sort at\n // stream-start; that fallback was dropped once node-av covered the\n // full codec matrix.\n mode: \"singleton\",\n methods: {\n // ── Discovery ─────────────────────────────────────────────────\n supportsCodec: method(z.object({ codec: z.string() }), z.boolean()),\n getInfo: method(z.void(), z.object({\n id: z.string(),\n name: z.string(),\n isPullMode: z.boolean().optional(),\n priority: z.number().optional()\n })),\n // ── Session lifecycle ─────────────────────────────────────────\n // `nodeId` carries the Moleculer nodeID of the decoder provider that\n // owns the session. Brokers store it so they can react to per-agent\n // events (e.g. `pipeline.agent-hwaccel-changed`) and rotate only the\n // sessions that actually live on the affected node.\n createSession: method(DecoderSessionConfigSchema, z.object({ sessionId: z.string(), nodeId: z.string() })),\n destroySession: method(z.object({ sessionId: z.string() }), z.void()),\n // ── Data plane ────────────────────────────────────────────────\n pushPacket: method(z.object({\n sessionId: z.string(),\n packet: EncodedPacketSchema\n }), z.void()),\n openStream: method(z.object({\n sessionId: z.string(),\n url: z.string()\n }), z.void()),\n // ── Output — polling-based frame retrieval ────────────────────\n pullFrames: method(z.object({\n sessionId: z.string(),\n maxCount: z.number().default(1)\n }), z.array(DecodedFrameSchema)),\n // ── Control ───────────────────────────────────────────────────\n updateConfig: method(z.object({\n sessionId: z.string(),\n config: DecoderSessionConfigSchema.partial()\n }), z.void()),\n getStats: method(z.object({ sessionId: z.string() }), DecoderStatsSchema),\n // ── Inventory — session-level state ONLY ─────────────────────\n // Sessions are a decoder concept, so `listActiveSessions` lives\n // here. Process-level measurements (memory/cpu) go through the\n // generic `metrics-provider` cap — decoder stays free of\n // observability concerns that aren't specific to decoding.\n listActiveSessions: method(z.void(), z.array(z.object({\n sessionId: z.string(),\n codec: z.string(),\n outputFormat: z.string(),\n createdAtMs: z.number()\n })).readonly()),\n /**\n * Re-run the host platform-probe for the decoder's hwaccel backend\n * and write the detected value into the addon's own global\n * settings (`probedBestHwaccel`). Replaces the legacy per-agent\n * `pipeline-orchestrator.reprobeAgentHwAccel` — each decoder addon\n * now owns its own probe.\n *\n * Returns the backend the probe picked (`'none'` = software-only\n * host, otherwise one of `HwAccelBackend`). The operator's\n * `hwaccel` setting (auto / none / backend) is not touched; only\n * the `probedBestHwaccel` hint.\n */\n reprobeHwaccel: method(\n z.void(),\n z.object({ backend: z.string() }),\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst RegisteredStreamSchema = z.object({\n streamId: z.string(),\n label: z.string().optional(),\n codec: z.string(),\n type: z.enum([\"video\", \"audio\"]),\n sourceUrl: z.string()\n});\nconst ExposedResourceSchema = z.object({\n streamId: z.string(),\n format: z.string(),\n value: z.string()\n});\nconst restreamerCapability = {\n name: \"restreamer\",\n scope: \"system\",\n mode: \"collection\",\n internal: true,\n methods: {\n registerDevice: method(\n z.object({ deviceId: z.number(), streams: z.array(RegisteredStreamSchema).readonly() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n unregisterDevice: method(z.object({ deviceId: z.number() }), z.void(), { kind: \"mutation\" }),\n getExposedResources: method(\n z.object({ deviceId: z.number() }),\n z.array(ExposedResourceSchema).readonly()\n )\n }\n};\nconst webrtcClientHintsSchema = z.object({\n viewportWidth: z.number().int().positive().optional(),\n viewportHeight: z.number().int().positive().optional(),\n devicePixelRatio: z.number().positive().optional(),\n /** navigator.connection.downlink — Mbps the browser estimates. */\n downlinkMbps: z.number().nonnegative().optional(),\n /** Hard tier override; takes precedence over scoring when registered. */\n prefersTier: z.string().optional()\n}).partial();\nconst webrtcCapability = {\n name: \"webrtc\",\n scope: \"system\",\n mode: \"collection\",\n internal: true,\n methods: {\n handleOffer: method(\n z.object({ streamId: z.string(), sdpOffer: z.string() }),\n z.string(),\n { kind: \"mutation\" }\n ),\n supportsStream: method(z.object({ streamId: z.string() }), z.boolean()),\n registerStream: method(\n z.object({ streamId: z.string(), codec: z.string() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n unregisterStream: method(z.object({ streamId: z.string() }), z.void(), { kind: \"mutation\" }),\n /**\n * Two-step server-offer signaling. `hints` is optional — providers\n * that don't care about adaptive source selection ignore it.\n */\n createSession: method(\n z.object({\n streamId: z.string(),\n hints: webrtcClientHintsSchema.optional()\n }),\n z.object({ sessionId: z.string(), sdpOffer: z.string() }),\n { kind: \"mutation\" }\n ),\n handleAnswer: method(\n z.object({ sessionId: z.string(), sdpAnswer: z.string() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n closeSession: method(z.object({ sessionId: z.string() }), z.void(), { kind: \"mutation\" }),\n /**\n * Whether this provider supports adaptive bitrate for the given stream.\n * Currently always false — adaptive selection is one-shot at session\n * start, not in-session encoder switching. Phase 5 plans to layer\n * encoder-driven adaptation on top.\n */\n hasAdaptiveBitrate: method(\n z.object({ streamId: z.string() }),\n z.boolean()\n )\n }\n};\nconst WebrtcStreamTargetSchema = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"adaptive\") }),\n z.object({ kind: z.literal(\"profile\"), profile: CamProfileSchema }),\n z.object({ kind: z.literal(\"cam-stream\"), camStreamId: z.string().min(1) })\n]);\nconst WebrtcStreamChoiceSchema = z.object({\n /** Stable id for React keys / dropdowns (e.g. `'adaptive'`, `'profile:high'`, `'stream:native:main'`). */\n id: z.string(),\n /** Display label. */\n label: z.string(),\n /** Discriminated target — pass straight to `createSession`. */\n target: WebrtcStreamTargetSchema,\n /** Codec of the underlying broker stream (null for adaptive). */\n codec: z.string().nullable(),\n /** Resolution of the underlying stream (null for adaptive). */\n resolution: z.object({ width: z.number(), height: z.number() }).nullable(),\n /** Broker status (null for adaptive). */\n status: z.enum([\"idle\", \"connecting\", \"streaming\", \"error\", \"stopped\"]).nullable(),\n /** Input FPS from the camera (null for adaptive). */\n inputFps: z.number().nullable(),\n /** Decoded FPS (null for adaptive). */\n decodeFps: z.number().nullable(),\n /** Bitrate in kbps (null for adaptive). */\n bitrateKbps: z.number().nullable()\n});\nconst webrtcSessionCapability = {\n name: \"webrtc-session\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {\n /**\n * List available WebRTC streams for a device.\n * Returns adaptive (if any profile is assigned) + each assigned profile\n * with codec/resolution info. UI renders this directly — no hardcoded\n * profile names needed.\n */\n listStreams: method(\n z.object({ deviceId: z.number().int().nonnegative() }),\n z.array(WebrtcStreamChoiceSchema)\n ),\n /**\n * Open a WebRTC session against a specific target on the device.\n * `target.kind` discriminates between adaptive selection, a profile\n * slot, or a specific cam stream source — see `WebrtcStreamTarget`.\n * The server resolves the target to a live broker; clients never\n * build or parse brokerId strings.\n */\n createSession: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n target: WebrtcStreamTargetSchema,\n hints: webrtcClientHintsSchema.optional()\n }),\n z.object({ sessionId: z.string(), sdpOffer: z.string() }),\n { kind: \"mutation\" }\n ),\n /**\n * Accept a CLIENT-generated SDP offer and return the server's\n * SDP answer. Mirrors the WHEP / Alexa\n * `Alexa.RTCSessionController.InitiateSessionWithOffer` direction\n * (client offers, server answers) — the dual of `createSession`,\n * which has the server offer first.\n *\n * `target` defaults to the device's adaptive selection when\n * omitted; an optional `sessionId` lets the client provide its\n * own correlation id (Alexa supplies one in the directive\n * payload). The returned `sessionId` is whatever the server uses\n * to track the session and accepts via `closeSession`.\n */\n handleOffer: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n target: WebrtcStreamTargetSchema.optional(),\n sdpOffer: z.string(),\n sessionId: z.string().optional()\n }),\n z.object({ sessionId: z.string(), sdpAnswer: z.string() }),\n { kind: \"mutation\" }\n ),\n handleAnswer: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n sessionId: z.string(),\n sdpAnswer: z.string()\n }),\n z.void(),\n { kind: \"mutation\" }\n ),\n closeSession: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n sessionId: z.string()\n }),\n z.void(),\n { kind: \"mutation\" }\n ),\n /** Whether the underlying provider supports adaptive bitrate for this profile. */\n hasAdaptiveBitrate: method(\n z.object({\n deviceId: z.number().int().nonnegative(),\n profile: CamProfileSchema\n }),\n z.boolean()\n )\n }\n};\nconst CameraPipelineConfigSchema = z.object({\n engine: PipelineEngineChoiceSchema,\n steps: z.array(PipelineStepInputSchema).readonly(),\n audio: z.object({\n engine: PipelineEngineChoiceSchema,\n modelId: z.string(),\n enabled: z.boolean(),\n settings: z.record(z.string(), z.unknown()).readonly().optional()\n }).nullable().optional()\n});\nconst PipelineTemplateSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional(),\n config: CameraPipelineConfigSchema,\n createdAt: z.string(),\n updatedAt: z.string()\n});\nconst AgentAddonConfigSchema = z.object({\n enabled: z.boolean(),\n modelId: z.string(),\n settings: z.record(z.string(), z.unknown()).readonly()\n});\nconst AgentPipelineSettingsSchema = z.object({\n addonDefaults: z.record(z.string(), AgentAddonConfigSchema).readonly()\n});\nconst CameraPipelineForAgentSchema = z.object({\n steps: z.array(PipelineStepInputSchema).readonly(),\n audio: z.object({\n modelId: z.string(),\n enabled: z.boolean()\n }).nullable()\n});\nconst CameraStepOverridePatchSchema = z.object({\n enabled: z.boolean().optional(),\n modelId: z.string().optional(),\n settings: z.record(z.string(), z.unknown()).readonly().optional()\n});\nconst CameraPipelineSettingsSchema = z.object({\n pinnedAgentNodeId: z.string().optional(),\n stepToggles: z.record(z.string(), z.boolean()).optional(),\n stepOverridesByAgent: z.record(\n z.string(),\n z.record(z.string(), CameraStepOverridePatchSchema)\n ).optional(),\n pipelineByAgent: z.record(z.string(), CameraPipelineForAgentSchema).optional()\n});\nconst PipelineAssignmentSchema = z.object({\n deviceId: z.number(),\n /** Moleculer node id of the runner currently responsible for this camera. */\n agentNodeId: z.string(),\n /** True when the assignment was set manually, false when chosen by the balancer. */\n pinned: z.boolean(),\n /** Why this assignment was made — useful for debugging the load balancer. */\n reason: z.enum([\"manual\", \"capacity\", \"hardware-affinity\", \"failover\", \"rebalance\"]),\n /** Unix timestamp (ms) when the assignment was last updated. */\n assignedAt: z.number()\n});\nconst DecoderAssignmentSchema = z.object({\n deviceId: z.number(),\n /** Moleculer node id of the decoder provider currently responsible for this camera. */\n decoderNodeId: z.string(),\n /** True when the assignment was set manually via `assignDecoder`, false when chosen by the balancer. */\n pinned: z.boolean(),\n /** Why this assignment was made — useful for debugging the decoder balancer. */\n reason: z.enum([\"manual\", \"co-located\", \"capacity\", \"hardware-affinity\"])\n});\nconst AgentLoadSummarySchema = z.object({\n nodeId: z.string(),\n online: z.boolean(),\n load: RunnerLocalLoadSchema,\n /** Computed score used by the L2 capacity balancer (lower = less loaded). */\n score: z.number()\n});\nconst GlobalMetricsSchema = z.object({\n totalAgents: z.number(),\n onlineAgents: z.number(),\n totalCameras: z.number(),\n attachedCameras: z.number(),\n activeCameras: z.number(),\n /** Average inference time across all agents weighted by their camera count. */\n avgInferenceTimeMs: z.number(),\n /** Total queue depth across all agents. */\n queueDepth: z.number()\n});\nconst CapabilityBindingsSchema = z.record(z.string(), z.string());\nconst pipelineOrchestratorCapability = {\n name: \"pipeline-orchestrator\",\n scope: \"system\",\n mode: \"singleton\",\n exposesDeviceSettings: true,\n methods: {\n // ── Pipeline placement overrides ────────────────────────────────────\n /**\n * Pin a camera's pipeline to a specific agent (L1 affinity).\n * The orchestrator re-evaluates the assignment immediately.\n */\n assignPipeline: method(\n z.object({ deviceId: z.number(), agentNodeId: z.string() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Clear a camera's pipeline pin and let the auto-balancer re-pick\n * the optimal agent. The orchestrator persists `preferredAgent=null`\n * (and `pipelineNodeId='auto'`), then re-runs the balancer with the\n * cached `RunnerCameraConfig` and migrates only when the chosen\n * node differs. The camera stays in `getPipelineAssignments()` —\n * just with `pinned=false`. If no runner is currently available\n * (cluster-wide), the camera is left unassigned but the cached\n * config is kept so the next dispatch event re-attaches it.\n */\n unassignPipeline: method(\n z.object({ deviceId: z.number() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Trigger a full rebalance pass. Iterates over all assigned cameras,\n * recomputes the optimal agent for each one based on current load +\n * hardware affinity, and migrates cameras whose current agent is no\n * longer optimal. Pinned cameras are never migrated.\n */\n rebalance: method(z.void(), z.object({ migrated: z.number() }), { kind: \"mutation\", auth: \"admin\" }),\n // ── Observability ────────────────────────────────────────────────\n /** Get the full camera-to-agent assignment map. */\n getPipelineAssignments: method(z.void(), z.array(PipelineAssignmentSchema).readonly()),\n /** Get one camera's assignment, or null if unassigned. */\n getPipelineAssignment: method(z.object({ deviceId: z.number() }), PipelineAssignmentSchema.nullable()),\n /** Get per-agent load summaries used by the load balancer + dashboards. */\n getAgentLoad: method(z.void(), z.array(AgentLoadSummarySchema).readonly()),\n /** Aggregate global metrics across the whole detection cluster. */\n getGlobalMetrics: method(z.void(), GlobalMetricsSchema),\n /**\n * Per-camera live metrics (phase, fps, inference, queue, drops).\n * The orchestrator owns the device→agent assignment map and is the\n * canonical place to ask \"give me the metrics for this camera\". It\n * resolves the agent that holds the camera and delegates to that\n * runner's `getCameraMetrics`. Returns null if the device is not\n * assigned or the runner has no record for it (e.g. the camera was\n * just dispatched and the runner hasn't received the first frame).\n */\n getCameraMetrics: method(z.object({ deviceId: z.number() }), CameraMetricsSchema.nullable()),\n // ── Capability bindings (which addon implements each cap on each node) ──\n /** Read the capability binding map for one node. Empty record = no overrides (first-registered wins). */\n getCapabilityBindings: method(z.object({ nodeId: z.string() }), CapabilityBindingsSchema),\n /** Set the addon that implements `capName` on `nodeId`. Emits `capability.binding-changed`. */\n setCapabilityBinding: method(\n z.object({ nodeId: z.string(), capName: z.string(), addonId: z.string() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n // ── Decoder scheduling ─────────────────────────────────────────────\n /** Pin a device's decoder to a specific node. */\n assignDecoder: method(\n z.object({ deviceId: z.number(), nodeId: z.string() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Clear a device's decoder pin (revert to auto). */\n unassignDecoder: method(\n z.object({ deviceId: z.number() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Get every camera's decoder placement. */\n getDecoderAssignments: method(z.void(), z.array(DecoderAssignmentSchema).readonly()),\n // ── Audio scheduling ───────────────────────────────────────────────\n /** Pin a device's audio analysis to a specific cluster node. */\n assignAudio: method(\n z.object({ deviceId: z.number(), nodeId: z.string() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Clear a device's audio node pin (revert to auto load-balanced). */\n unassignAudio: method(\n z.object({ deviceId: z.number() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Get the current audio assignment for one device, or null if not yet assigned. */\n getAudioAssignment: method(\n z.object({ deviceId: z.number() }),\n z.object({\n nodeId: z.string(),\n pinned: z.boolean(),\n assignedAt: z.number()\n }).nullable()\n ),\n /** Get per-node audio load (device counts) for all known audio-analyzer nodes. */\n getAudioNodeLoad: method(\n z.void(),\n z.array(z.object({ nodeId: z.string(), deviceCount: z.number() }))\n ),\n /** Get all current audio assignments across all devices. */\n getAudioAssignments: method(\n z.void(),\n z.array(z.object({\n deviceId: z.number(),\n nodeId: z.string(),\n pinned: z.boolean(),\n assignedAt: z.number()\n }))\n ),\n /**\n * Get one camera's decoder placement (computed if not yet pinned).\n * Consumed by `stream-broker.createBroker` so decoder provider\n * selection is deterministic — fixes the 2026-04-18 race where\n * `capProviders[0]` silently picked ffmpeg-on-agent-0 for a\n * hub-assigned camera.\n *\n * `pipelineNodeId` is the node already chosen to run inference for\n * this camera. When provided, the balancer prefers co-location with\n * it; omitted → falls back to the last known assignment in the\n * `assignments` map and finally to 'hub'.\n */\n getDecoderAssignment: method(\n z.object({\n deviceId: z.number(),\n pipelineNodeId: z.string().optional()\n }),\n DecoderAssignmentSchema\n ),\n // NOTE: the `getDeviceOrchestrationSettings`,\n // `getDeviceOrchestrationOverrides` and `getGlobalOrchestrationSettings`\n // methods were removed in Phase 6. Consumers now read settings via\n // the standard 3-level resolver (`resolveAddonSettings`) over the\n // addon config store — see the top of this file for details.\n // ── 3-level pipeline settings (new model) ──────────────────────────\n //\n // Replaces the per-camera full-config + cluster-default model with:\n // `agent.addonDefaults` (flat per-addon config; auto-seeded from catalog),\n // `camera.stepToggles` (bool overlay; absent = inherit agent),\n // `camera.pipelineByAgent` (wholesale override escape hatch).\n //\n // The orchestrator's `resolvePipeline` collapses these into the\n // `CameraPipelineConfig` the runner consumes at dispatch.\n // `agentNodeId` (not `nodeId`) is intentional: the generated cap router\n // auto-routes any input field literally named `nodeId` to that node's\n // provider. `pipeline-orchestrator` is a HUB-SINGLETON cap — the\n // agent-node identifier here is DATA (\"which agent to read/write\"),\n // not routing. Using `agentNodeId` keeps the call on the hub as\n // intended.\n /** Read one agent's settings. Null when not yet seeded. */\n getAgentSettings: method(\n z.object({ agentNodeId: z.string() }),\n AgentPipelineSettingsSchema.nullable()\n ),\n /** Enumerate every agent's settings (hub + remote runners). */\n listAgentSettings: method(\n z.void(),\n z.array(z.object({\n nodeId: z.string(),\n settings: AgentPipelineSettingsSchema\n })).readonly()\n ),\n /** Bulk-replace ALL addon configs on one agent. Used by the agent-level PipelineEditor which emits the full map per edit. Merges on top of existing entries — omitted addonIds are left alone. */\n setAgentAddonDefaults: method(\n z.object({\n agentNodeId: z.string(),\n defaults: z.record(z.string(), AgentAddonConfigSchema)\n }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Drop a single agent's persisted settings. Used by the cluster\n * \"Offline agents\" panel to evict stale entries left behind when an\n * agent's data dir was rebuilt (new random nodeId) or older code wrote\n * the env name as the nodeId. The orchestrator otherwise never deletes\n * agentSettings — entries accumulate until a hub reset.\n *\n * `success: false` indicates the nodeId wasn't in the store (no-op).\n * Refuses to remove `hub` (the orchestrator always co-resides with it).\n */\n removeAgentSettings: method(\n z.object({ agentNodeId: z.string() }),\n z.object({ success: z.boolean(), removed: z.boolean() }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n // Phase 2f: `setAgentEngineChoice`, `setAgentHwAccel`,\n // `reprobeAgentHwAccel` removed. Engine ownership moved to the\n // `detection-pipeline` addon (`engineRuntime/engineBackend/engineDevice`\n // + `pipelineExecutor.reprobeEngine`). Hwaccel ownership moved to\n // each decoder addon (`decoder-nodeav`/`decoder-ffmpeg` global\n // settings + `decoder.reprobeHwaccel`). UI + decoder sessions read\n // via `api.addonSettings.getGlobalSettings({addonId, nodeId})`.\n /** Read one camera's settings. Null when never touched (inherits agent defaults fully). */\n getCameraSettings: method(\n z.object({ deviceId: z.number() }),\n CameraPipelineSettingsSchema.nullable()\n ),\n /** Set or clear the 3-state toggle for one (camera, addonId). Pass `enabled: null` to clear and revert to agent default. */\n setCameraStepToggle: method(\n z.object({\n deviceId: z.number(),\n addonId: z.string(),\n enabled: z.boolean().nullable()\n }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Read every L2.5 override map for a device. Null when device has no overrides. */\n getCameraStepOverrides: method(\n z.object({ deviceId: z.number() }),\n z.record(\n z.string(),\n // agentNodeId\n z.record(z.string(), CameraStepOverridePatchSchema)\n ).nullable()\n ),\n /**\n * Write or clear the L2.5 per-agent override for one addonId on a device.\n * `patch: null` clears the entry entirely for that (agent, addon) pair.\n */\n setCameraStepOverride: method(\n z.object({\n deviceId: z.number(),\n agentNodeId: z.string(),\n addonId: z.string(),\n patch: CameraStepOverridePatchSchema.nullable()\n }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Write or clear the wholesale per-agent pipeline override. Pass `pipeline: null` to drop the override. */\n setCameraPipelineForAgent: method(\n z.object({\n deviceId: z.number(),\n agentNodeId: z.string(),\n pipeline: CameraPipelineForAgentSchema.nullable()\n }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Resolve the effective pipeline for `(deviceId, agentNodeId?)` — walks the full precedence chain. Read-only preview used by the UI to show what will run. */\n resolvePipeline: method(\n z.object({ deviceId: z.number(), agentNodeId: z.string().optional() }),\n CameraPipelineConfigSchema\n ),\n // ── Template library (hub-only, read by any device-details UI) ─────\n /** List every template the operator has saved. */\n listTemplates: method(z.void(), z.array(PipelineTemplateSchema).readonly()),\n /** Create a new named preset from a given CameraPipelineConfig. */\n saveTemplate: method(\n z.object({\n name: z.string(),\n description: z.string().optional(),\n config: CameraPipelineConfigSchema\n }),\n PipelineTemplateSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Partial update of a template. Any omitted field is preserved. */\n updateTemplate: method(\n z.object({\n id: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n config: CameraPipelineConfigSchema.optional()\n }),\n PipelineTemplateSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Remove a template. Camera configs that were seeded from it keep a copy. */\n deleteTemplate: method(\n z.object({ id: z.string() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst AudioAnalysisResultSchema = z.object({\n level: AudioLevelSchema,\n classification: z.object({\n labels: z.array(AudioClassificationLabelSchema).readonly(),\n inferenceMs: z.number()\n }).optional(),\n timestamp: z.number()\n});\nconst AudioAnalysisSettingsSchema = z.object({\n minConfidence: z.number().min(0).max(1).default(0.3),\n allowedClasses: z.array(z.string()).default([])\n});\nconst AudioClassificationResultSchema = z.object({\n // Macro-aggregated labels (25-class taxonomy from `AUDIO_MACRO_LABELS`).\n // Primary surface — used by the live audio analyzer and notifications.\n labels: z.array(AudioClassificationLabelSchema).readonly(),\n // Raw backend-native labels (e.g. YAMNet's 521 classes or Apple\n // SoundAnalysis's 303 classes), unaggregated. Optional so existing\n // consumers continue to work; populated by the analyzer provider\n // for callers that want fine-grained output — the benchmark UI uses\n // this in `micro` mode.\n rawLabels: z.array(AudioClassificationLabelSchema).readonly().optional(),\n inferenceMs: z.number()\n});\nconst AUDIO_BACKEND_CHOICES = [\n { value: \"auto\", label: \"Auto (platform default)\" },\n { value: \"apple-soundanalysis\", label: \"Apple SoundAnalysis (macOS 12+)\" },\n { value: \"yamnet-onnx\", label: \"YAMNet ONNX (cross-platform)\" }\n];\nconst DEFAULT_AUDIO_ANALYZER_CONFIG = {\n audioBackend: \"auto\",\n probedBestAudioBackend: \"\",\n selectedAudioModel: \"\"\n};\nconst audioAnalyzerCapability = {\n name: \"audio-analyzer\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n analyseChunk: method(\n z.object({ chunk: AudioChunkInputSchema, settings: AudioAnalysisSettingsSchema }),\n AudioAnalysisResultSchema.nullable(),\n { kind: \"mutation\" }\n ),\n // ONNX / Apple SoundAnalysis inference can exceed the broker's default\n // 5s requestTimeout on first load or under CPU pressure. 30s covers\n // even the worst-case cold-start without hanging indefinitely.\n classify: method(AudioChunkInputSchema, AudioClassificationResultSchema, { timeoutMs: 3e4 }),\n isReady: method(z.void(), z.boolean()),\n dispose: method(z.void(), z.void(), { kind: \"mutation\" }),\n /**\n * Re-run the host platform-probe for the audio backend and persist\n * the detected value into `probedBestAudioBackend`. Replaces the\n * orchestrator's legacy `AgentPipelineSettings.audio.engine` —\n * audio-analyzer now owns the choice. Operator `audioBackend` is\n * not touched; only the probed-best hint.\n */\n reprobeAudioEngine: method(\n z.void(),\n z.object({ backend: z.string() }),\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst audioAnalysisCapability = {\n name: \"audio-analysis\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n exposesDeviceSettings: true,\n methods: {\n /**\n * Resolve per-device audio analysis settings (minConfidence,\n * allowedClasses) from the addon settings store for a given camera.\n * Orchestrator callers use this before handing chunks to\n * `audio-analyzer.processChunk`.\n */\n resolveDeviceSettings: method(\n z.object({ deviceId: z.number() }),\n z.custom()\n )\n },\n events: {\n onAudioLevel: event(z.object({\n deviceId: z.number(),\n rms: z.number(),\n dbfs: z.number()\n }))\n }\n};\nconst PcmSampleFormatSchema = z.enum([\"f32le\", \"s16le\"]);\nconst AudioCodecInfoSchema = z.object({\n codec: z.string(),\n canDecode: z.boolean(),\n canEncode: z.boolean(),\n label: z.string().optional()\n});\nconst AudioDecodeSessionConfigSchema = z.object({\n codec: z.string(),\n sourceSampleRate: z.number().int().positive(),\n sourceChannels: z.number().int().positive(),\n extraData: z.instanceof(Uint8Array).optional(),\n targetSampleRate: z.number().int().positive(),\n targetChannels: z.number().int().positive(),\n targetFormat: PcmSampleFormatSchema.optional(),\n idleMs: z.number().int().positive().optional(),\n tag: z.string().optional()\n});\nconst AudioEncodeSessionConfigSchema = z.object({\n codec: z.string(),\n sourceSampleRate: z.number().int().positive(),\n sourceChannels: z.number().int().positive(),\n sourceFormat: PcmSampleFormatSchema.optional(),\n targetSampleRate: z.number().int().positive(),\n targetChannels: z.number().int().positive(),\n bitrateKbps: z.number().int().positive().optional(),\n idleMs: z.number().int().positive().optional(),\n tag: z.string().optional()\n});\nconst AudioPcmChunkSchema = z.object({\n data: z.instanceof(Uint8Array),\n sampleRate: z.number().int().positive(),\n channels: z.number().int().positive(),\n format: PcmSampleFormatSchema,\n pts: z.number()\n});\nconst AudioEncodedChunkSchema = z.object({\n data: z.instanceof(Uint8Array),\n codec: z.string(),\n pts: z.number(),\n frameComplete: z.boolean()\n});\nconst SessionInventoryEntrySchema = z.object({\n sessionId: z.string(),\n kind: z.enum([\"decode\", \"encode\"]),\n codec: z.string(),\n sourceSampleRate: z.number(),\n sourceChannels: z.number(),\n targetSampleRate: z.number(),\n targetChannels: z.number(),\n format: PcmSampleFormatSchema,\n tag: z.string().optional(),\n createdAtMs: z.number(),\n lastActivityMs: z.number(),\n framesIn: z.number(),\n framesOut: z.number()\n});\nconst audioCodecCapability = {\n name: \"audio-codec\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n // ── Discovery ─────────────────────────────────────────────────────────\n /** Probe the local runtime and return the supported codec matrix. */\n listSupportedCodecs: method(z.void(), z.array(AudioCodecInfoSchema).readonly()),\n /** Cheap predicate — does the runtime support `(codec, kind)`? */\n canHandle: method(\n z.object({ codec: z.string(), kind: z.enum([\"decode\", \"encode\"]) }),\n z.boolean()\n ),\n // ── Session lifecycle ─────────────────────────────────────────────────\n createDecodeSession: method(\n AudioDecodeSessionConfigSchema,\n z.object({ sessionId: z.string(), nodeId: z.string() }),\n { kind: \"mutation\" }\n ),\n createEncodeSession: method(\n AudioEncodeSessionConfigSchema,\n z.object({ sessionId: z.string(), nodeId: z.string() }),\n { kind: \"mutation\" }\n ),\n closeSession: method(\n z.object({ sessionId: z.string(), nodeId: z.string().optional() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n // ── Decode data plane ─────────────────────────────────────────────────\n // Session-bound methods include an optional `nodeId` field so the\n // generated cap router auto-routes calls to the same node that owns\n // the session. Audio-codec sessions are process-local — without sticky\n // routing the round-robin across nodes serves \"session not found\" on\n // every other call.\n /** Push one encoded audio frame into a decode session. */\n pushEncodedFrame: method(\n z.object({\n sessionId: z.string(),\n nodeId: z.string().optional(),\n data: z.instanceof(Uint8Array),\n /** Source PTS in milliseconds. Synthesised when omitted. */\n pts: z.number().optional()\n }),\n z.void(),\n { kind: \"mutation\" }\n ),\n /** Pull up to `maxCount` PCM chunks from a decode session. */\n pullPcm: method(\n z.object({\n sessionId: z.string(),\n nodeId: z.string().optional(),\n maxCount: z.number().int().positive().default(8)\n }),\n z.array(AudioPcmChunkSchema)\n ),\n // ── Encode data plane ─────────────────────────────────────────────────\n /** Push one PCM chunk into an encode session. */\n pushPcm: method(\n z.object({\n sessionId: z.string(),\n nodeId: z.string().optional(),\n data: z.instanceof(Uint8Array),\n /** Source PTS in milliseconds. */\n pts: z.number().optional()\n }),\n z.void(),\n { kind: \"mutation\" }\n ),\n /** Pull up to `maxCount` encoded chunks from an encode session. */\n pullEncoded: method(\n z.object({\n sessionId: z.string(),\n nodeId: z.string().optional(),\n maxCount: z.number().int().positive().default(8)\n }),\n z.array(AudioEncodedChunkSchema)\n ),\n /** Flush any pending encoded output (call before close on graceful tear). */\n flushEncode: method(\n z.object({ sessionId: z.string(), nodeId: z.string().optional() }),\n z.array(AudioEncodedChunkSchema),\n { kind: \"mutation\" }\n ),\n // ── Inventory ─────────────────────────────────────────────────────────\n listActiveSessions: method(\n z.void(),\n z.array(SessionInventoryEntrySchema).readonly()\n )\n }\n};\nconst EmbeddingResultSchema = z.object({\n embedding: z.array(z.number()),\n inferenceMs: z.number()\n});\nconst EmbeddingInfoSchema = z.object({\n modelId: z.string(),\n embeddingDim: z.number(),\n ready: z.boolean()\n});\nconst embeddingEncoderCapability = {\n name: \"embedding-encoder\",\n scope: \"system\",\n mode: \"collection\",\n internal: true,\n methods: {\n encode: method(\n z.object({ crop: z.instanceof(Uint8Array), width: z.number(), height: z.number() }),\n EmbeddingResultSchema\n ),\n encodeText: method(z.object({ text: z.string() }), EmbeddingResultSchema),\n getInfo: method(z.void(), EmbeddingInfoSchema)\n }\n};\nconst DeviceInfoSchema = z.object({\n /** Progressive, system-wide unique number. Allocated synchronously by\n * `device-manager.allocateDeviceId` BEFORE the owning `IDevice` is\n * constructed, so every live device exposes an `id` — no transient\n * null window. Distinct from `stableId`, which is unique per\n * integration. Ids are monotonic and never reissued on removal. */\n id: z.number(),\n stableId: z.string(),\n addonId: z.string(),\n type: z.enum(DeviceType),\n name: z.string(),\n /** Operator-organisational location label. `null` when unset. */\n location: z.string().nullable(),\n /** Soft-disabled flag. */\n disabled: z.boolean(),\n parentDeviceId: z.number().nullable(),\n /** Optional semantic role — `DeviceRole` string. null for top-level devices. */\n role: z.string().nullable().optional(),\n online: z.boolean(),\n features: z.array(z.string()),\n /** true when the device has a getStreamSources() method (ICameraDevice) */\n isCamera: z.boolean(),\n /** Current config values — serializable snapshot */\n config: z.record(z.string(), z.unknown()),\n /** Hardware + identity blob (manufacturer / model / firmware / sn /\n * uid / mac / …). Populated by drivers; editable via setMetadata. */\n metadata: z.record(z.string(), z.unknown()).nullable().optional()\n});\nconst ConfigEntrySchema$1 = z.object({\n key: z.string(),\n value: z.unknown(),\n description: z.string().optional()\n});\nconst SavedDeviceRowSchema = z.object({\n /** Numeric id reserved at allocateDeviceId time. */\n id: z.number(),\n /** External-system identifier — required for the worker's `kernel.devices.create()` call. */\n stableId: z.string(),\n type: z.string(),\n name: z.string(),\n /** Operator-organisational location label. `null` when unset. */\n location: z.string().nullable(),\n /** Soft-disabled flag. */\n disabled: z.boolean(),\n parentDeviceId: z.number().nullable(),\n /** Optional semantic role — stringified `DeviceRole` enum value. null for top-level devices. */\n role: z.string().nullable().optional()\n});\nconst DeviceMetaSchema = z.object({\n id: z.number(),\n stableId: z.string(),\n addonId: z.string(),\n type: z.string(),\n name: z.string(),\n location: z.string().nullable(),\n disabled: z.boolean(),\n parentDeviceId: z.number().nullable(),\n metadata: z.record(z.string(), z.unknown()).nullable().optional()\n});\nconst ConfigUISchemaOutput = z.unknown().nullable();\nconst StreamProbeResultSchema = z.object({\n streamId: z.string(),\n width: z.number().optional(),\n height: z.number().optional(),\n codec: z.string().optional(),\n fps: z.number().optional(),\n bitrateKbps: z.number().optional()\n});\nconst DeviceRegisterPayloadSchema = z.object({\n addonId: z.string(),\n stableId: z.string(),\n /** Pre-allocated numeric id from `allocateDeviceId`. The hub persists\n * it alongside the meta record; callers never invent this value. */\n id: z.number(),\n type: z.string(),\n name: z.string(),\n /** Operator-organisational location label. Optional on register —\n * the hub seeds `null` when omitted. */\n location: z.string().nullable().optional(),\n /** Soft-disabled flag. Optional on register — the hub seeds `false`. */\n disabled: z.boolean().optional(),\n parentDeviceId: z.number().nullable(),\n /** Optional semantic role — see `DeviceRole`. Driver authors pass this\n * at register time when the device is an accessory with a known role. */\n role: z.string().nullable().optional(),\n /** Snapshot of `device.features` at registration time. Persisted in\n * `DeviceMeta` so the hub can answer `getDevice` for forked-worker\n * devices with the right `DeviceFeature[]` even when the live\n * instance lives on a remote node. Re-published on every register\n * call (workers re-register on init), so probe-driven updates\n * (e.g. PTZ flag flipping after the abilities probe) propagate. */\n features: z.array(z.string()).optional(),\n config: z.record(z.string(), z.unknown())\n});\nconst DeviceRemovePayloadSchema = z.object({\n deviceId: z.number()\n});\nconst DevicePersistConfigPayloadSchema = z.object({\n deviceId: z.number(),\n data: z.record(z.string(), z.unknown())\n});\nconst deviceManagerCapability = {\n name: \"device-manager\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n // ── Persistence (migrated from device-persistence) ────────────────────────\n /** Reserve (or re-resolve) a progressive numeric id for `(addonId, stableId)`.\n * Idempotent: returns the existing id if one is already persisted for the\n * pair. Callers invoke this before `registerDevice` so the live IDevice\n * can bind `id` at construction time through `DeviceContext.id`. */\n allocateDeviceId: method(\n z.object({ addonId: z.string(), stableId: z.string() }),\n z.object({ id: z.number() }),\n { kind: \"mutation\" }\n ),\n /** Register a device in the DB + in-memory registry. Called by DeviceManagerApi.register(). */\n registerDevice: method(DeviceRegisterPayloadSchema, z.void(), { kind: \"mutation\" }),\n /** Remove a device from the DB + in-memory registry. Called by DeviceManagerApi.remove(). */\n removeDevice: method(DeviceRemovePayloadSchema, z.void(), { kind: \"mutation\" }),\n /** Persist device config blob. Called by DeviceConfig.set/setAll(). */\n persistConfig: method(DevicePersistConfigPayloadSchema, z.void(), { kind: \"mutation\" }),\n /** Load persisted config for a device. Called at restore time. */\n loadConfig: method(\n z.object({ deviceId: z.number() }),\n z.record(z.string(), z.unknown())\n ),\n /** Load persisted runtime state. Called at device adopt time. */\n loadRuntimeState: method(\n z.object({ deviceId: z.number() }),\n z.record(z.string(), z.unknown())\n ),\n /** Load operator-organisational meta surface for a device. Called by\n * the kernel proxy to populate `DeviceContext.deviceMeta` before\n * the device class constructor runs. Returns `null` when the id\n * doesn't resolve to a persisted row. */\n loadMeta: method(\n z.object({ deviceId: z.number() }),\n DeviceMetaSchema.nullable()\n ),\n /** Update the operator-edited display name. Persists to the meta\n * row + emits `EventCategory.DeviceMetaChanged`. */\n setName: method(\n z.object({ deviceId: z.number(), name: z.string() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Update the operator-organisational location label. `null`\n * clears it. */\n setLocation: method(\n z.object({ deviceId: z.number(), location: z.string().nullable() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Patch the device's hardware-identity metadata blob. Merges\n * `patch` over the current blob (shallow). Value `null` for a\n * given key removes that key. Drivers populate factual fields\n * on first probe (model / firmware / mac / sn / uid); operators\n * can override or augment via the Device Info tab. */\n setMetadata: method(\n z.object({\n deviceId: z.number(),\n patch: z.record(z.string(), z.unknown())\n }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Operator-curated location registry. Returns the union of:\n * (1) labels persisted in the registry via `addLocation`, and\n * (2) labels currently in use on at least one device's\n * `meta.location` field.\n * Sorted case-insensitively + deduped + trimmed of empty strings.\n * Drives the autocomplete in the Device Info location editor. */\n listLocations: method(\n z.void(),\n z.array(z.string())\n ),\n /** Add a label to the curated location registry. No-op when the\n * label (case-insensitive, trimmed) is already present. Empty\n * / whitespace-only inputs throw. */\n addLocation: method(\n z.object({ name: z.string() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Remove a label from the curated registry. Devices that still\n * reference this label keep their `meta.location` value — the\n * registry is purely a suggestion list. To purge from devices,\n * iterate them and call `setLocation(deviceId, null)`\n * separately (or pass `cascade: true` to do it in one shot). */\n removeLocation: method(\n z.object({ name: z.string(), cascade: z.boolean().optional() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Soft-disable / re-enable the device. Drivers consult\n * `BaseDevice.disabled` to gate lifecycle hooks. */\n setDisabled: method(\n z.object({ deviceId: z.number(), disabled: z.boolean() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** List persisted devices for an addon (DB, for restore). */\n listPersistedByAddon: method(\n z.object({ addonId: z.string() }),\n z.array(SavedDeviceRowSchema)\n ),\n // ── Query — live registry ─────────────────────────────────────────────────\n /** List all devices (live registry), optionally filtered by addonId. */\n listAll: method(\n z.object({ addonId: z.string().optional() }),\n z.array(DeviceInfoSchema)\n ),\n /** Get a single device by numeric deviceId. */\n getDevice: method(\n z.object({ deviceId: z.number() }),\n DeviceInfoSchema.nullable()\n ),\n /** List children of a parent device (by parent numeric id). */\n getChildren: method(\n z.object({ parentDeviceId: z.number() }),\n z.array(DeviceInfoSchema)\n ),\n // ── Runtime — live device operations ─────────────────────────────────────\n /** Get stream sources for a camera device. */\n getStreamSources: method(\n z.object({ deviceId: z.number() }),\n z.array(StreamSourceEntrySchema$1)\n ),\n /** Get config entries (key + value + description) for a device. */\n getConfigSchema: method(\n z.object({ deviceId: z.number() }),\n z.array(ConfigEntrySchema$1)\n ),\n /** Get the ConfigUISchema for a device's settings (for admin UI rendering). */\n getSettingsSchema: method(\n z.object({ deviceId: z.number() }),\n ConfigUISchemaOutput\n ),\n // ── Mutations — config changes, enable/disable, remove ────────────────────\n /** Update device config values (partial merge). */\n updateConfig: method(\n z.object({\n deviceId: z.number(),\n values: z.record(z.string(), z.unknown())\n }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Enable a device (writes enabled=true to device config). */\n enable: method(\n z.object({ deviceId: z.number() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Disable a device (writes enabled=false to device config). */\n disable: method(\n z.object({ deviceId: z.number() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Remove a device and all children: calls device.removeDevice() then removes from registry + DB. */\n remove: method(\n z.object({ deviceId: z.number() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n // ── Stream profile map ────────────────────────────────────────────────────\n /** Get quality→streamId mapping for a camera. Derived from profileHint if not explicitly set. */\n getStreamProfileMap: method(\n z.object({ deviceId: z.number() }),\n z.record(z.string(), z.string().nullable())\n ),\n /** Persist quality→streamId mapping in device config under reserved key _profileMap. */\n setStreamProfileMap: method(\n z.object({\n deviceId: z.number(),\n profileMap: z.record(z.string(), z.string().nullable())\n }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Run ffprobe on each stream source URL and return metadata. No-op if stream probe unavailable. */\n probeStreams: method(\n z.object({ deviceId: z.number() }),\n z.array(StreamProbeResultSchema),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n // ── Bindings — per-device capability provider map ────────────────────────\n /**\n * Return the per-capability binding map for a device. Each entry lists the\n * currently-active provider (native or wrapper) + the underlying native\n * addon id, so consumers can decide routing without re-running discovery.\n */\n getBindings: method(\n z.object({ deviceId: z.number() }),\n z.object({\n deviceId: z.number(),\n entries: z.array(z.object({\n capName: z.string(),\n kind: z.enum([\"native\", \"wrapped\"]),\n providerAddonId: z.string(),\n providerNodeId: z.string(),\n nativeAddonId: z.string()\n }))\n })\n ),\n /**\n * Return the binding map for every device known to the hub. Used by\n * `SystemManager` warm-boot: a single round-trip resolves the\n * routing for the entire fleet so subsequent `sm.getDeviceById(id)`\n * calls are sync. Bindings change rarely (only on wrapper toggle or\n * device add/remove) — clients invalidate via the\n * `capability.binding-changed` event.\n */\n getAllBindings: method(\n z.object({}),\n z.array(z.object({\n deviceId: z.number(),\n entries: z.array(z.object({\n capName: z.string(),\n kind: z.enum([\"native\", \"wrapped\"]),\n providerAddonId: z.string(),\n providerNodeId: z.string(),\n nativeAddonId: z.string()\n }))\n }))\n ),\n /**\n * Activate (or deactivate) a wrapper addon for a (device, cap) pair.\n * Persists the binding via ctx.settings. active=false clears the wrapper\n * (falls back to native if registered).\n */\n setWrapperActive: method(\n z.object({\n deviceId: z.number(),\n capName: z.string(),\n wrapperAddonId: z.string(),\n active: z.boolean()\n }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Return the addon ids that declared a wrapper provider for `capName`.\n * Backs the device-bindings UI's wrapper-picker dropdown. Entries are\n * sourced from `CapabilityRegistry.wrapperProviders`, populated at\n * `ProviderRegistration.kind === 'wrapper'` time.\n */\n listWrappersForCap: method(\n z.object({ capName: z.string() }),\n z.array(z.string())\n ),\n /**\n * Return every device-scoped capability name that applies to a\n * deviceType (scope:'device' + deviceTypes includes the given type),\n * paired with the wrappers that can provide it. Backs the device\n * bindings UI so it can show rows for bindable caps even when no\n * native is registered yet — the user can still activate a wrapper\n * to light the cap up (e.g. snapshot via ffmpeg fallback for a camera\n * without `snapshotUrl`).\n */\n listBindableCapsForDeviceType: method(\n z.object({ deviceType: z.string() }),\n z.array(z.object({\n capName: z.string(),\n wrappers: z.array(z.string())\n }))\n ),\n // ── Device-details aggregators ───────────────────────────────────────────\n //\n // Single entry point the admin UI calls to render the device-details page.\n // The hub enumerates every provider of `device-settings-contributor` (a\n // `collection` cap) plus its own base section and returns a single\n // `ConfigUISchemaWithValues` with merged tabs/sections.\n //\n // Two endpoints, two cadences:\n // - `getDeviceSettingsAggregate` — editable fields + static readonly.\n // Cached on the UI side, invalidated on successful `updateDeviceField`.\n // - `getDeviceLiveInfoAggregate` — readonly, dynamic. UI polls at a\n // short interval (~2-3 s). Fields carry `source: 'live'` so the\n // renderer knows which query owns the value.\n //\n // Save flow goes through `updateDeviceField` — the aggregator routes the\n // write to `addon-settings.updateDeviceSettings` for the declared\n // `writerAddonId` (or to its own device config store when `writerAddonId`\n // equals the device-manager addon id).\n getDeviceSettingsAggregate: method(\n z.object({ deviceId: z.number() }),\n SettingsSchemaWithValuesSchema.nullable()\n ),\n getDeviceLiveInfoAggregate: method(\n z.object({ deviceId: z.number() }),\n SettingsSchemaWithValuesSchema.nullable()\n ),\n /**\n * Unified entry point — returns both settings + live in a single call\n * so the admin UI pulls the whole device-details panel with one round-\n * trip instead of firing two parallel queries. The `live` field is the\n * polled portion; the UI re-fetches the whole aggregate at the live\n * cadence and uses the `settings` slice verbatim until the user\n * writes through `updateDeviceFieldsBatch`.\n */\n getDeviceAggregate: method(\n z.object({ deviceId: z.number() }),\n z.object({\n settings: SettingsSchemaWithValuesSchema.nullable(),\n live: SettingsSchemaWithValuesSchema.nullable()\n })\n ),\n updateDeviceField: method(\n z.object({\n deviceId: z.number(),\n writerCapName: z.string(),\n writerAddonId: z.string(),\n key: z.string(),\n value: z.unknown()\n }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Batched counterpart of `updateDeviceField` — the admin UI groups\n * per-provider changes so a single round-trip triggers at most one\n * `applyDeviceSettingsPatch` per `(capName, addonId)` tuple. Per-patch\n * failures are reported in `failures[]` without aborting the others;\n * consumers inspect the list and surface targeted errors.\n */\n updateDeviceFieldsBatch: method(\n z.object({\n deviceId: z.number(),\n changes: z.array(z.object({\n writerCapName: z.string(),\n writerAddonId: z.string(),\n key: z.string(),\n value: z.unknown()\n }))\n }),\n z.object({\n success: z.literal(true),\n failures: z.array(z.object({\n writerCapName: z.string(),\n writerAddonId: z.string(),\n error: z.string()\n }))\n }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n // ── Device-provider operations (routed via CapabilityRegistry) ────────────\n //\n // These methods proxy to the `device-provider` capability collection,\n // routing by addonId. Moving them here from the compat router\n // (`device-ops.router.ts`) allows addon ctx.api callers to reach them\n // through the standard Moleculer-registered cap surface.\n /** Trigger device discovery on a device-provider addon. */\n discoverDevices: method(\n z.object({ addonId: z.string() }),\n z.array(DiscoveryCandidateSchema),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Adopt a discovered device via the device-provider capability. */\n adoptDevice: method(\n z.object({\n addonId: z.string(),\n candidate: DiscoveryCandidateSchema\n }),\n DeviceSummarySchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Get the creation form schema (ConfigUISchema) for a device type from a provider.\n * Returns null when the provider does not support manual creation.\n */\n getCreationSchema: method(\n z.object({\n addonId: z.string(),\n type: z.enum(DeviceType)\n }),\n z.unknown().nullable()\n ),\n /** Create a new device via the device-provider capability. */\n createDevice: method(\n z.object({\n addonId: z.string(),\n type: z.enum(DeviceType),\n config: z.record(z.string(), z.unknown())\n }),\n DeviceSummarySchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Test a single form field value during device creation (no device\n * exists yet). `formValues` carries the live snapshot of every\n * field in the form so probes that depend on multiple fields (e.g.\n * Reolink autodetect needs host + credentials + UID together) can\n * run without a separate round-trip per field. Optional for\n * backwards compatibility.\n */\n testCreationField: method(\n z.object({\n addonId: z.string(),\n type: z.enum(DeviceType),\n key: z.string(),\n value: z.unknown(),\n formValues: z.record(z.string(), z.unknown()).optional()\n }),\n FieldProbeResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Test a field value on an existing device (e.g. probe an RTSP URL).\n * Routes through the device-provider for the owning addon.\n */\n testField: method(\n z.object({\n deviceId: z.number(),\n key: z.string(),\n value: z.unknown()\n }),\n FieldProbeResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Aggregate status snapshot across every cap registered for a\n * device. Returns a flat map `{ capName: status | null }` where\n * `status` is whatever `capDef.status.schema` validates to — or\n * `null` when no provider for that cap is registered on the\n * device, or the provider returned null, or the returned value\n * failed validation.\n *\n * `caps` is a positional tuple of cap names. The runtime only\n * returns entries for caps that are KNOWN to the system (validated\n * against `CAP_NAMES_WITH_STATUS` at call time); unknown names are\n * silently skipped. The client-side hook narrows the return type\n * using `CapStatusTypeMap` so the TS-inferred shape matches the\n * runtime shape.\n *\n * When `caps` is omitted, the server returns status for EVERY\n * registered cap on the device. Use this only for debug / overview\n * pages — it's O(N caps) per call.\n */\n getDeviceStatusAggregate: method(\n z.object({\n deviceId: z.number(),\n caps: z.array(z.string()).readonly().optional()\n }),\n z.record(z.string(), z.unknown().nullable())\n )\n }\n};\nconst deviceStateCapability = {\n name: \"device-state\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n /** Full state snapshot for one device. Empty object if no\n * cap-keyed slice has been written yet. */\n getSnapshot: method(\n z.object({ deviceId: z.number() }),\n z.record(z.string(), z.record(z.string(), z.unknown()))\n ),\n /** Single cap slice. Returns null when the slice hasn't been\n * written or the device isn't registered. */\n getCapSlice: method(\n z.object({ deviceId: z.number(), capName: z.string() }),\n z.record(z.string(), z.unknown()).nullable()\n ),\n /**\n * Whole-system snapshot — every device's full state in one\n * payload. Used by `SystemManager` for warm-boot: a single\n * round-trip populates the client mirror so every subsequent\n * `sm.getDeviceById(id).state.<cap>.value` is sync. Empty inner\n * record for devices that haven't emitted any slice yet.\n */\n getAllSnapshots: method(\n z.object({}),\n z.record(z.string(), z.record(z.string(), z.record(z.string(), z.unknown())))\n ),\n /**\n * Canonical cross-layer WRITE for one cap-keyed slice. Used by\n * everyone who needs to publish runtime state for a device:\n * device providers (via `BaseDevice.runtimeState.setCapState`\n * which delegates here), system-scope addons (e.g. the pipeline\n * runner writing the `motion` slice on phase transitions), and\n * direct cap-router callers in tests.\n *\n * Behavior on the hub:\n * 1. Resolve the device — throws if unknown.\n * 2. Diff the slice against the current mirror (no-op on\n * identical writes — saves disk and event churn).\n * 3. Update the mirror in place.\n * 4. Persist the full per-device blob to disk (debounced).\n * 5. Emit `onChanged` for this cap so subscribers (UI mirror,\n * SystemManager, per-cap typed listeners) refresh.\n *\n * Schema validation is the caller's responsibility — callers\n * going through `BaseDevice.runtimeState.setCapState` get the\n * cap's `runtimeState` schema enforced in-process before the\n * write reaches here. Direct callers should validate against\n * the cap's schema themselves.\n *\n * No `patch` variant — for shallow merges read the slice via\n * `getCapSlice` first, merge, and write. The single-writer\n * conventions on each cap make atomic-merge semantics\n * unnecessary in practice.\n */\n setCapSlice: method(\n z.object({\n deviceId: z.number(),\n capName: z.string(),\n slice: z.record(z.string(), z.unknown())\n }),\n z.void(),\n { kind: \"mutation\" }\n )\n },\n events: {\n /**\n * Fires whenever a cap-keyed slice changes. Per-event payload\n * carries the slice that changed — subscribers can render off\n * the payload alone without re-querying. Filterable by `deviceId`\n * via the standard `EventFilter` helpers.\n */\n onChanged: event(z.object({\n deviceId: z.number(),\n capName: z.string(),\n slice: z.record(z.string(), z.unknown())\n }))\n }\n};\nconst AuthResultSchema = z.object({\n userId: z.string(),\n username: z.string(),\n email: z.string().optional(),\n displayName: z.string().optional(),\n /**\n * Whether the authenticating user is an admin. The auth-provider\n * surface returns this so the server's login flow can mint a JWT\n * with the correct bypass flag. Non-admin users authenticated via\n * an external IdP still need their scopes assigned by an admin via\n * `setUserScopes` — the SSO flow doesn't carry permissions.\n */\n isAdmin: z.boolean().default(false)\n});\nconst authProviderCapability = {\n name: \"auth-provider\",\n scope: \"system\",\n mode: \"collection\",\n internal: true,\n methods: {\n validateCredentials: method(\n z.object({ username: z.string(), password: z.string() }),\n AuthResultSchema.nullable(),\n { kind: \"mutation\" }\n ),\n getLoginUrl: method(z.object({ state: z.string() }), z.string()),\n handleCallback: method(z.record(z.string(), z.string()), AuthResultSchema, { kind: \"mutation\" }),\n validateToken: method(z.object({ token: z.string() }), AuthResultSchema.nullable())\n }\n};\nconst AuthProviderInfoSchema = z.object({\n /** Stable id matching the addon id (used for `getLoginUrl({addonId,…})`). */\n addonId: z.string(),\n /**\n * Per-instance id when one addon registers multiple \"logical\"\n * providers (e.g. OIDC with Google + Microsoft + custom). The login\n * URL becomes `/addon/${addonId}/${instanceId}/start` — handler reads\n * `:instanceId` from the route. Empty/unset means the addon is a\n * single-instance provider; the URL is `/addon/${addonId}/start`.\n */\n instanceId: z.string().optional(),\n /** Display label shown on the login button + admin row. */\n displayName: z.string(),\n /** Optional iconography hint (lucide-react icon name OR emoji). */\n icon: z.string().optional(),\n /** When true, the provider exposes a redirect-based login flow\n * (`getLoginUrl` returns a URL the browser navigates to). */\n hasRedirectFlow: z.boolean(),\n /** When true, the provider exposes a credential-form login flow\n * (`validateCredentials` accepts username + password). */\n hasCredentialFlow: z.boolean(),\n /** Provider kind, drives admin-UI hint dispatch (oidc / saml / totp / …). */\n kind: z.string().optional(),\n /** Operator-facing status string (e.g. \"Connected to https://login.acme.com\"). */\n status: z.string().optional(),\n /** When false, the provider is registered but disabled by config; the\n * UI surfaces it as inactive without enumerating it for login. */\n enabled: z.boolean()\n});\nconst authenticationCapability = {\n name: \"authentication\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n /** All registered auth providers, both enabled and disabled. */\n listProviders: method(z.void(), z.array(AuthProviderInfoSchema).readonly()),\n /**\n * Toggle a provider's enabled flag. Disabled providers stay\n * registered but aren't surfaced on the login page. The orchestrator\n * persists the state in `addon-settings` so it survives restarts.\n */\n setProviderEnabled: method(\n z.object({ addonId: z.string(), enabled: z.boolean() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst NetworkEndpointSchema = z.object({\n url: z.string(),\n hostname: z.string(),\n port: z.number(),\n protocol: z.enum([\"http\", \"https\"])\n});\nconst NetworkAccessStatusSchema = z.object({\n connected: z.boolean(),\n endpoint: NetworkEndpointSchema.nullable(),\n error: z.string().optional()\n});\nconst NetworkEndpointEntrySchema = NetworkEndpointSchema.extend({\n /**\n * Stable id within the provider — typically `<mode>-<sourcePort>` so\n * the orchestrator can dedupe across `listEndpoints` polls.\n */\n id: z.string(),\n /** Operator-facing label (mirrors `MeshEndpoint.label`). */\n label: z.string(),\n /** Optional provider-specific mode tag, used for icon/colour in admin UI. */\n mode: z.string().optional(),\n /** Originating local port the ingress fronts (informational). */\n sourcePort: z.number().optional()\n});\nconst networkAccessCapability = {\n name: \"network-access\",\n scope: \"system\",\n mode: \"collection\",\n internal: true,\n providerKind: \"ingress\",\n methods: {\n start: method(z.void(), NetworkEndpointSchema, { kind: \"mutation\" }),\n stop: method(z.void(), z.void(), { kind: \"mutation\" }),\n getEndpoint: method(z.void(), NetworkEndpointSchema.nullable()),\n getStatus: method(z.void(), NetworkAccessStatusSchema),\n /**\n * Enumerate every active ingress entry. Default implementation (when\n * the provider omits this method) is derived from `getEndpoint()` —\n * see the remote-access orchestrator for the fallback path.\n */\n listEndpoints: method(z.void(), z.array(NetworkEndpointEntrySchema).readonly())\n }\n};\nconst RemoteAccessEndpointSchema = z.object({\n url: z.string(),\n hostname: z.string(),\n port: z.number(),\n protocol: z.enum([\"http\", \"https\"])\n});\nconst RemoteAccessProviderInfoSchema = z.object({\n /** Stable id matching the addon id. */\n addonId: z.string(),\n /** Display label shown on the admin row — sourced from the addon manifest. */\n displayName: z.string(),\n /** When false, the provider is registered but disabled. */\n enabled: z.boolean(),\n /** True when the underlying tunnel/connection is up. */\n connected: z.boolean(),\n /** Public-facing endpoint, when connected. Null otherwise. */\n endpoint: RemoteAccessEndpointSchema.nullable(),\n /** Last error message (when connected=false), if available. */\n error: z.string().optional()\n});\nconst remoteAccessCapability = {\n name: \"remote-access\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n /** All registered remote-access providers + their live status. */\n listProviders: method(z.void(), z.array(RemoteAccessProviderInfoSchema).readonly()),\n /**\n * Start a specific provider's tunnel. Per-provider config still\n * lives on the addon's settings panel; this is just the on/off\n * trigger so the admin UI can manage the lifecycle from one place.\n */\n startProvider: method(\n z.object({ addonId: z.string() }),\n RemoteAccessEndpointSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Stop a specific provider's tunnel (idempotent on already-stopped). */\n stopProvider: method(\n z.object({ addonId: z.string() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst TurnServerSchema = z.object({\n /** Single URL or list of URLs (e.g. \"turn:turn.example.com:3478?transport=udp\"). */\n urls: z.union([z.string(), z.array(z.string())]),\n username: z.string().optional(),\n credential: z.string().optional()\n});\nconst turnProviderCapability = {\n name: \"turn-provider\",\n scope: \"system\",\n mode: \"collection\",\n methods: {\n /**\n * Return the current list of TURN/STUN servers with credentials.\n * Implementations may fetch fresh short-lived credentials on each call\n * (e.g. Cloudflare API) — consumers SHOULD call this per-session.\n */\n getTurnServers: method(\n z.void(),\n z.array(TurnServerSchema).readonly()\n )\n }\n};\nconst TurnProviderInfoSchema = z.object({\n /** Stable id matching the addon id. */\n addonId: z.string(),\n /** Display label shown on the admin row — sourced from the addon manifest. */\n displayName: z.string(),\n /** When false, the provider is registered but disabled. */\n enabled: z.boolean(),\n /** Number of servers this provider is currently exposing. */\n serverCount: z.number(),\n /**\n * Flat list of every TURN/STUN URL this provider currently exposes.\n * One row per URL (multi-URL ICE server entries are flattened). The\n * admin UI shows this in a compact per-provider list so operators\n * can verify what's actually being negotiated without having to dig\n * into the combined `getAllServers` output.\n */\n urls: z.array(z.string()).readonly(),\n /** Last fetch error (when serverCount=0 due to API failure), if any. */\n error: z.string().optional()\n});\nconst turnOrchestratorCapability = {\n name: \"turn-orchestrator\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n /** All registered TURN providers + per-provider stats. */\n listProviders: method(z.void(), z.array(TurnProviderInfoSchema).readonly()),\n /**\n * Combined list of TURN/STUN servers from all ENABLED providers.\n * Consumed by the WebRTC layer at session-creation time —\n * implementations may fetch fresh short-lived credentials each\n * call (e.g. Cloudflare API), so consumers SHOULD call per-session.\n */\n getAllServers: method(z.void(), z.array(TurnServerSchema).readonly()),\n /** Toggle a provider's enabled flag. */\n setProviderEnabled: method(\n z.object({ addonId: z.string(), enabled: z.boolean() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst SnapshotImageSchema = z.object({\n base64: z.string(),\n contentType: z.string()\n});\nconst SnapshotStatusSchema = z.object({\n /** Ms epoch of the last successful capture. Null if none yet. */\n lastCapturedAt: z.number().nullable(),\n /** Age of the cached image in ms. Null if no cache. */\n cacheAgeMs: z.number().nullable(),\n /** Size in bytes of the last captured image. Null if no capture. */\n lastBytes: z.number().nullable(),\n /** Stream id used for the last capture ('high'|'mid'|'low' or custom). Null if via HTTP endpoint. */\n lastStreamId: z.string().nullable()\n});\nconst snapshotCapability = {\n name: \"snapshot\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n // Owns per-device snapshot settings (preferred stream, debug logging).\n // The three DeviceSettingsContribution methods are auto-added to the\n // provider interface via `InferProvider` — `SnapshotAddon` implements\n // them and persists per-device state through `ctx.settings.writeDeviceStore`.\n exposesDeviceSettings: true,\n methods: {\n getSnapshot: method(\n z.object({\n deviceId: z.number(),\n streamId: z.string().optional(),\n /**\n * Bypass the cache freshness check and fetch directly from the\n * native (or stream-broker fallback). Triggered by the UI's\n * \"refresh\" button so an operator can force a fresh frame\n * even when the cache is well within `snapshotMaxAgeMs`.\n * On battery cams this WILL wake the camera — accept the\n * cost only when the user explicitly asks for it.\n */\n force: z.boolean().optional()\n }),\n SnapshotImageSchema.nullable()\n ),\n invalidateCache: method(\n z.object({ deviceId: z.number() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n )\n },\n status: {\n schema: SnapshotStatusSchema,\n kind: \"poll\"\n }\n};\nconst snapshotProviderCapability = {\n name: \"snapshot-provider\",\n scope: \"system\",\n mode: \"collection\",\n methods: {\n supportsDevice: method(\n z.object({ deviceId: z.number() }),\n z.boolean()\n ),\n getSnapshot: method(\n z.object({\n deviceId: z.number(),\n streamId: z.string().optional()\n }),\n SnapshotImageSchema.nullable()\n )\n }\n};\nconst NotificationSchema = z.object({\n title: z.string(),\n body: z.string(),\n imageUrl: z.string().optional(),\n deviceId: z.number().optional(),\n eventId: z.string().optional(),\n priority: z.enum([\"low\", \"normal\", \"high\", \"critical\"]).default(\"normal\"),\n metadata: z.record(z.string(), z.unknown()).optional()\n});\nconst notificationOutputCapability = {\n name: \"notification-output\",\n scope: \"system\",\n mode: \"collection\",\n methods: {\n send: method(NotificationSchema, z.void(), { kind: \"mutation\" }),\n sendTest: method(\n z.void(),\n z.object({ success: z.boolean(), error: z.string().optional() }),\n { kind: \"mutation\" }\n )\n }\n};\nconst NotificationRuleConditionsSchema = z.object({\n deviceIds: z.array(z.number()).readonly().optional(),\n classNames: z.array(z.string()).readonly().optional(),\n zoneIds: z.array(z.string()).readonly().optional(),\n minConfidence: z.number().optional(),\n source: z.enum([\"pipeline\", \"onboard\", \"any\"]).optional(),\n schedule: z.object({\n days: z.array(z.number()).readonly(),\n startHour: z.number(),\n endHour: z.number()\n }).optional(),\n cooldownSeconds: z.number().optional(),\n minDwellSeconds: z.number().optional()\n});\nconst NotificationRuleTemplateSchema = z.object({\n title: z.string(),\n body: z.string(),\n imageMode: z.enum([\"crop\", \"annotated\", \"full\", \"none\"])\n});\nconst NotificationRuleSchema = z.object({\n id: z.string(),\n name: z.string(),\n enabled: z.boolean(),\n eventTypes: z.array(z.string()).readonly(),\n conditions: NotificationRuleConditionsSchema,\n outputs: z.array(z.string()).readonly(),\n template: NotificationRuleTemplateSchema.optional(),\n priority: z.enum([\"low\", \"normal\", \"high\", \"critical\"])\n});\nconst NotificationTestResultSchema = z.object({\n ruleId: z.string(),\n eventId: z.string(),\n timestamp: z.number(),\n wouldFire: z.boolean(),\n reason: z.string().optional()\n});\nconst NotificationHistoryEntrySchema = z.object({\n id: z.string(),\n ruleId: z.string(),\n ruleName: z.string(),\n eventId: z.string(),\n timestamp: z.number(),\n outputs: z.array(z.string()).readonly(),\n success: z.boolean(),\n error: z.string().optional(),\n deviceId: z.number().optional()\n});\nconst NotificationHistoryFilterSchema = z.object({\n ruleId: z.string().optional(),\n deviceId: z.number().optional(),\n from: z.number().optional(),\n to: z.number().optional(),\n limit: z.number().optional()\n});\nconst advancedNotifierCapability = {\n name: \"advanced-notifier\",\n scope: \"system\",\n mode: \"singleton\",\n internal: true,\n methods: {\n getRules: method(\n z.void(),\n z.object({ rules: z.array(NotificationRuleSchema).readonly() })\n ),\n upsertRule: method(\n z.object({ rule: NotificationRuleSchema }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\" }\n ),\n deleteRule: method(\n z.object({ ruleId: z.string() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\" }\n ),\n testRule: method(\n z.object({ ruleId: z.string(), lookbackMinutes: z.number() }),\n z.object({ results: z.array(NotificationTestResultSchema).readonly() }),\n { kind: \"mutation\" }\n ),\n getHistory: method(\n z.object({ filter: NotificationHistoryFilterSchema.optional() }),\n z.object({ entries: z.array(NotificationHistoryEntrySchema).readonly() })\n )\n }\n};\nconst RecordingModeSchema = z.enum([\"continuous\", \"motion\", \"scheduled\", \"composite\"]);\nconst StreamPolicySchema = z.object({\n streamId: z.string(),\n mode: z.enum([\"always\", \"inherit\"])\n});\nconst ScheduleRuleSchema = z.object({\n days: z.array(z.number()).readonly(),\n startTime: z.string(),\n endTime: z.string(),\n mode: z.enum([\"continuous\", \"motion\"])\n});\nconst RecordingPolicySchema = z.object({\n deviceId: z.number(),\n mode: RecordingModeSchema,\n streams: z.array(StreamPolicySchema).readonly(),\n enabled: z.boolean(),\n preBufferSec: z.number(),\n postBufferSec: z.number(),\n scheduleRules: z.array(ScheduleRuleSchema).readonly().optional()\n});\nconst DataCategorySchema = z.enum([\n \"recording:main\",\n \"recording:mid\",\n \"recording:sub\",\n \"thumbnail:scrub\",\n \"thumbnail:event\"\n]);\nconst RecordingStorageConfigSchema = z.object({\n deviceId: z.number(),\n dataCategory: DataCategorySchema,\n storageName: z.string(),\n subDirectory: z.string(),\n retentionDays: z.number().nullable(),\n retentionGb: z.number().nullable()\n});\nconst RecordingSegmentSchema = z.object({\n id: z.string(),\n deviceId: z.number(),\n streamId: z.string(),\n startTime: z.number(),\n endTime: z.number(),\n duration: z.number(),\n path: z.string(),\n storageName: z.string(),\n subDirectory: z.string(),\n sizeBytes: z.number(),\n codec: z.enum([\"h264\", \"h265\"]),\n hasAudio: z.boolean()\n});\nconst RecordingThumbnailSchema = z.object({\n deviceId: z.number(),\n timestamp: z.number(),\n path: z.string(),\n storageName: z.string(),\n subDirectory: z.string(),\n sizeBytes: z.number(),\n category: z.enum([\"scrub\", \"event\"])\n});\nconst AvailabilityRangeSchema = z.object({\n startTime: z.number(),\n endTime: z.number(),\n streams: z.array(z.string()).readonly()\n});\nconst StorageUsageSchema = z.object({\n totalBytes: z.number(),\n segmentCount: z.number()\n});\nconst StreamEstimateSchema = z.object({\n bitrateKbps: z.number(),\n retentionDays: z.number().nullable(),\n retentionGb: z.number().nullable(),\n estimatedGb: z.number(),\n estimatedDaysAtCapacity: z.number().nullable()\n});\nconst StorageEstimateSchema = z.object({\n perStream: z.record(z.string(), StreamEstimateSchema),\n thumbnails: z.object({ estimatedGb: z.number() }),\n totalEstimatedGb: z.number(),\n motionEstimate: z.object({\n avgEventsPerDay: z.number(),\n avgDurationSec: z.number(),\n dutyCyclePercent: z.number()\n }).optional()\n});\nconst MotionStatsSchema = z.object({\n totalEvents: z.number(),\n avgDurationSec: z.number(),\n avgEventsPerDay: z.number(),\n dutyCyclePercent: z.number()\n});\nconst DeviceIdInput = z.object({ deviceId: z.number() });\nconst EnableInput = z.object({\n deviceId: z.number(),\n policy: RecordingPolicySchema.omit({ deviceId: true }),\n storageOverrides: z.array(RecordingStorageConfigSchema.omit({ deviceId: true })).readonly().optional(),\n ffmpegOverrides: z.record(z.string(), z.unknown()).optional()\n});\nconst TimeRangeInput = z.object({\n deviceId: z.number(),\n startTime: z.number(),\n endTime: z.number()\n});\nconst StreamTimeRangeInput = z.object({\n deviceId: z.number(),\n streamId: z.string(),\n startTime: z.number(),\n endTime: z.number()\n});\nconst PlaylistInput = z.object({\n deviceId: z.number(),\n streamId: z.string(),\n startTime: z.number(),\n endTime: z.number(),\n live: z.boolean().optional()\n});\nconst ThumbnailInput = z.object({\n deviceId: z.number(),\n timestamp: z.number(),\n category: z.string().optional()\n});\nconst DeviceStreamInput = z.object({\n deviceId: z.number(),\n streamId: z.string()\n});\nconst StorageEstimateInput = z.object({\n deviceId: z.number(),\n motionInput: z.object({\n avgEventsPerDay: z.number(),\n avgDurationSec: z.number()\n }).optional()\n});\nconst RetentionConfigInput = z.object({\n deviceId: z.number(),\n dataCategory: DataCategorySchema\n});\nconst SetPolicyInput = z.object({\n deviceId: z.number(),\n policy: RecordingPolicySchema.omit({ deviceId: true })\n});\nconst UpdateConfigInput = z.object({\n deviceId: z.number(),\n policy: RecordingPolicySchema.omit({ deviceId: true }),\n ffmpegOverrides: z.record(z.string(), z.unknown()).optional()\n});\nconst recordingEngineCapability = {\n name: \"recording-engine\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n // ── Status ────────────────────────────────────────────────────────\n getStatus: method(z.void(), z.object({\n activeRecordings: z.number(),\n totalSegments: z.number(),\n totalSizeMB: z.number()\n })),\n // ── Lifecycle ─────────────────────────────────────────────────────\n enable: method(EnableInput, z.void(), { kind: \"mutation\", auth: \"admin\" }),\n disable: method(DeviceIdInput, z.void(), { kind: \"mutation\", auth: \"admin\" }),\n // ── Config ────────────────────────────────────────────────────────\n getConfig: method(DeviceIdInput, RecordingPolicySchema.nullable()),\n updateConfig: method(UpdateConfigInput, z.void(), { kind: \"mutation\", auth: \"admin\" }),\n // ── Playback ──────────────────────────────────────────────────────\n getPlaylist: method(PlaylistInput, z.string()),\n getThumbnail: method(ThumbnailInput, RecordingThumbnailSchema.nullable()),\n getSegments: method(StreamTimeRangeInput, z.array(RecordingSegmentSchema).readonly()),\n getAvailability: method(TimeRangeInput, z.array(AvailabilityRangeSchema).readonly()),\n // ── Storage ───────────────────────────────────────────────────────\n estimateStorage: method(StorageEstimateInput, StorageEstimateSchema),\n estimateGlobalStorage: method(z.void(), StorageEstimateSchema),\n getStorageUsage: method(DeviceStreamInput, StorageUsageSchema),\n // ── Policy ────────────────────────────────────────────────────────\n setPolicy: method(SetPolicyInput, z.void(), { kind: \"mutation\", auth: \"admin\" }),\n getPolicy: method(DeviceIdInput, RecordingPolicySchema.nullable()),\n getPolicyStatus: method(DeviceIdInput, z.object({\n deviceId: z.number(),\n enabled: z.boolean(),\n mode: RecordingModeSchema,\n activeStreams: z.number()\n }).nullable()),\n // ── Retention ─────────────────────────────────────────────────────\n getRetentionConfig: method(RetentionConfigInput, RecordingStorageConfigSchema.nullable()),\n updateRetentionConfig: method(RecordingStorageConfigSchema, z.void(), { kind: \"mutation\", auth: \"admin\" }),\n // ── Motion ────────────────────────────────────────────────────────\n getMotionStats: method(TimeRangeInput, MotionStatsSchema)\n }\n};\nconst detectionPipelineCapability = {\n name: \"detection-pipeline\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n exposesDeviceSettings: true,\n methods: {}\n};\nconst TrackStateSchema = z.enum([\"new\", \"entered\", \"left\", \"moving\", \"idle\"]);\nconst EventKindSchema = z.enum([\"motion\", \"object\", \"audio\"]);\nconst TrackPositionSchema = z.object({\n x: z.number(),\n y: z.number(),\n timestamp: z.number(),\n bbox: BoundingBoxSchema\n});\nconst TrackSnapshotSchema = z.object({\n timestamp: z.number(),\n position: TrackPositionSchema,\n /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */\n mediaKey: z.string()\n});\nconst TrackSchema = z.object({\n trackId: z.string(),\n deviceId: z.number(),\n className: z.string(),\n label: z.string().optional(),\n firstSeen: z.number(),\n lastSeen: z.number(),\n /** Frame-rate position history (subject to maxPositionHistory cap). */\n positions: z.array(TrackPositionSchema).readonly(),\n /** Periodic snapshots at snapshotIntervalMs cadence (subject to\n * saveThumbnails policy). */\n snapshots: z.array(TrackSnapshotSchema).readonly(),\n /** Deduplicated zones the track has entered at least once. */\n zonesVisited: z.array(z.string()).readonly(),\n /** Cumulative normalized distance travelled (0..1 units = full frame width). */\n totalDistance: z.number(),\n state: TrackStateSchema,\n active: z.boolean()\n});\nconst BaseEventFields = {\n id: z.string(),\n deviceId: z.number(),\n timestamp: z.number()\n};\nconst MotionEventSchema = z.object({\n ...BaseEventFields,\n kind: z.literal(\"motion\"),\n regionCount: z.number(),\n regions: z.array(z.object({\n bbox: BoundingBoxSchema,\n pixelCount: z.number(),\n intensity: z.number()\n })).readonly(),\n frameWidth: z.number(),\n frameHeight: z.number()\n});\nconst ObjectEventSchema = z.object({\n ...BaseEventFields,\n kind: z.literal(\"object\"),\n trackId: z.string(),\n className: z.string(),\n label: z.string().optional(),\n confidence: z.number(),\n bbox: BoundingBoxSchema,\n zones: z.array(z.string()).readonly(),\n state: TrackStateSchema,\n /** MediaStore key for the crop attached to this event (if any). */\n mediaKey: z.string().optional()\n});\nconst AudioEventSchema = z.object({\n ...BaseEventFields,\n kind: z.literal(\"audio\"),\n rms: z.number(),\n dbfs: z.number(),\n classification: z.object({\n className: z.string(),\n originalClass: z.string().optional(),\n score: z.number()\n }).optional()\n});\nconst MediaFileSchema = z.object({\n key: z.string(),\n kind: z.enum([\"crop\", \"thumbnail\", \"snapshot\"]),\n base64: z.string(),\n sizeBytes: z.number(),\n timestamp: z.number()\n});\nconst DEFAULT_EVENT_QUERY_LIMIT = 1e3;\nconst MAX_EVENT_QUERY_LIMIT = 5e3;\nconst DeviceEventQueryInput = z.object({\n deviceId: z.number(),\n since: z.number().optional(),\n until: z.number().optional(),\n limit: z.number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT)\n});\nconst ObjectEventQueryInput = DeviceEventQueryInput.extend({\n classFilter: z.string().optional()\n});\nconst TrackedDetectionSchema = z.object({\n trackId: z.string(),\n className: z.string(),\n confidence: z.number(),\n bbox: BoundingBoxSchema,\n zones: z.array(z.string()).readonly(),\n state: TrackStateSchema\n});\nconst pipelineAnalyticsCapability = {\n name: \"pipeline-analytics\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n exposesDeviceSettings: true,\n methods: {\n // ── Tracks ────────────────────────────────────────────────\n getActiveTracks: method(\n z.object({ deviceId: z.number() }),\n z.array(TrackSchema).readonly()\n ),\n getTrack: method(\n z.object({ deviceId: z.number(), trackId: z.string() }),\n TrackSchema.nullable()\n ),\n /** Historical completed tracks for a device. Queried from the\n * persisted `pipeline-analytics:tracks` collection; active tracks\n * still in RAM are not included. */\n listTracks: method(\n z.object({\n deviceId: z.number(),\n since: z.number().optional(),\n until: z.number().optional(),\n limit: z.number().optional()\n }),\n z.array(TrackSchema).readonly()\n ),\n clearTracks: method(\n z.object({ deviceId: z.number() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n // ── Events (per-kind, parallel-queryable) ─────────────────\n getMotionEvents: method(\n DeviceEventQueryInput,\n z.array(MotionEventSchema).readonly()\n ),\n getObjectEvents: method(\n ObjectEventQueryInput,\n z.array(ObjectEventSchema).readonly()\n ),\n getAudioEvents: method(\n DeviceEventQueryInput,\n z.array(AudioEventSchema).readonly()\n ),\n // ── Media ─────────────────────────────────────────────────\n getEventMedia: method(\n z.object({ eventId: z.string() }),\n z.array(MediaFileSchema).readonly()\n ),\n getTrackMedia: method(\n z.object({ trackId: z.string() }),\n z.array(MediaFileSchema).readonly()\n )\n },\n events: {\n /**\n * Enriched frame emitted after refinement. Carries lightweight\n * tracked-detection metadata (track id, class, zones, state) so\n * downstream consumers (stream overlays, notifications) can\n * annotate without querying full Track state.\n */\n onFrameTracked: {\n data: z.object({\n deviceId: z.number(),\n timestamp: z.number(),\n frameWidth: z.number(),\n frameHeight: z.number(),\n detections: z.array(TrackedDetectionSchema).readonly()\n })\n },\n /** Track entered active state (first-seen). */\n onTrackStarted: {\n data: z.object({\n deviceId: z.number(),\n trackId: z.string(),\n className: z.string()\n })\n },\n /** Track expired (TTL reached after last detection). */\n onTrackEnded: {\n data: z.object({\n deviceId: z.number(),\n trackId: z.string(),\n className: z.string(),\n durationMs: z.number()\n })\n },\n /** Canonical \"something happened at device X\" event, per-kind. */\n onDetectionEvent: {\n data: z.object({\n deviceId: z.number(),\n kind: EventKindSchema,\n eventId: z.string(),\n timestamp: z.number()\n })\n }\n }\n};\nconst CpuBreakdownSchema = z.object({\n total: z.number(),\n user: z.number(),\n system: z.number(),\n irq: z.number(),\n nice: z.number(),\n loadAvg: z.tuple([z.number(), z.number(), z.number()]),\n cores: z.number()\n});\nconst MemoryInfoSchema = z.object({\n percent: z.number(),\n totalBytes: z.number(),\n usedBytes: z.number(),\n availableBytes: z.number(),\n swapUsedBytes: z.number(),\n swapTotalBytes: z.number()\n});\nconst DiskIoSnapshotSchema = z.object({\n readBytes: z.number(),\n writeBytes: z.number(),\n readOps: z.number(),\n writeOps: z.number(),\n timestampMs: z.number()\n});\nconst NetworkIoSnapshotSchema = z.object({\n rxBytes: z.number(),\n txBytes: z.number(),\n rxPackets: z.number(),\n txPackets: z.number(),\n rxErrors: z.number(),\n txErrors: z.number(),\n timestampMs: z.number()\n});\nconst MetricsGpuInfoSchema = z.object({\n utilization: z.number(),\n model: z.string(),\n memoryUsedBytes: z.number(),\n memoryTotalBytes: z.number(),\n temperature: z.number().nullable()\n});\nconst ProcessResourceInfoSchema = z.object({\n openFds: z.number(),\n threadCount: z.number(),\n activeHandles: z.number(),\n activeRequests: z.number()\n});\nconst PressureAvgsSchema = z.object({\n avg10: z.number(),\n avg60: z.number(),\n avg300: z.number()\n});\nconst PressureInfoSchema = z.object({\n some: PressureAvgsSchema,\n full: PressureAvgsSchema.nullable()\n});\nconst SystemResourceSnapshotSchema = z.object({\n cpu: CpuBreakdownSchema,\n memory: MemoryInfoSchema,\n gpu: MetricsGpuInfoSchema.nullable(),\n network: NetworkIoSnapshotSchema,\n disk: DiskIoSnapshotSchema,\n pressure: z.object({\n cpu: PressureInfoSchema.nullable(),\n memory: PressureInfoSchema.nullable(),\n io: PressureInfoSchema.nullable()\n }),\n process: ProcessResourceInfoSchema,\n cpuTemperature: z.number().nullable(),\n timestampMs: z.number()\n});\nconst DiskSpaceInfoSchema = z.object({\n path: z.string(),\n totalBytes: z.number(),\n usedBytes: z.number(),\n availableBytes: z.number(),\n percent: z.number()\n});\nconst PidResourceStatsSchema = z.object({\n pid: z.number(),\n cpu: z.number(),\n memory: z.number()\n});\nconst AddonInstanceSchema = z.object({\n addonId: z.string(),\n nodeId: z.string(),\n role: z.enum([\"hub\", \"worker\"]),\n pid: z.number(),\n state: z.enum([\"starting\", \"running\", \"stopping\", \"stopped\", \"crashed\"]),\n uptimeSec: z.number()\n});\nconst NodeProcessSchema = z.object({\n pid: z.number(),\n ppid: z.number(),\n pgid: z.number(),\n classification: z.enum([\"root\", \"managed\", \"system\", \"ghost\"]),\n /** `$process` addon binding when `managed`, else null. */\n addonId: z.string().nullable(),\n /** Kernel-reported nodeId when the process is a known agent/worker. */\n nodeId: z.string().nullable(),\n /** Truncated command line. */\n command: z.string(),\n cpuPercent: z.number(),\n memoryRssBytes: z.number(),\n /** Wall-clock uptime (seconds). Parsed from `ps etime`. */\n uptimeSec: z.number(),\n /** True when ancestor walk reaches `ppid=1` (reparented to init/launchd). */\n orphaned: z.boolean()\n});\nconst KillProcessInputSchema = z.object({\n pid: z.number(),\n /** Force = SIGKILL. Default is SIGTERM. */\n force: z.boolean().optional()\n});\nconst KillProcessResultSchema = z.object({\n success: z.boolean(),\n reason: z.string().optional(),\n signal: z.enum([\"SIGTERM\", \"SIGKILL\"]).optional()\n});\nconst SystemMetricsSchema = z.object({\n cpuPercent: z.number(),\n memoryPercent: z.number(),\n memoryUsedMB: z.number(),\n memoryTotalMB: z.number(),\n diskPercent: z.number().optional(),\n temperature: z.number().optional(),\n gpuPercent: z.number().optional(),\n gpuMemoryPercent: z.number().optional()\n});\nconst metricsProviderCapability = {\n name: \"metrics-provider\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n /** Fresh, full system snapshot (triggers OS-level collection). */\n collectSnapshot: method(z.void(), SystemResourceSnapshotSchema),\n /** Most recent cached snapshot from the background sampler, or null pre-first-sample. */\n getCached: method(z.void(), SystemResourceSnapshotSchema.nullable()),\n /** Light-weight cached summary for heartbeats and list views. */\n getCurrent: method(z.void(), SystemMetricsSchema),\n /** Disk space for the given mount/path. */\n getDiskSpace: method(z.object({ dirPath: z.string() }), DiskSpaceInfoSchema),\n /** GPU info (null if unavailable). */\n getGpuInfo: method(z.void(), MetricsGpuInfoSchema.nullable()),\n /** CPU temperature in °C (null if unavailable). */\n getCpuTemperature: method(z.void(), z.number().nullable()),\n /** Per-PID resource stats. Missing/dead PIDs are omitted from the result. */\n getProcessStats: method(\n z.object({ pids: z.array(z.number()) }),\n z.array(PidResourceStatsSchema)\n ),\n /**\n * List addon instances known to this node — one entry per forked worker\n * plus a synthetic 'hub' entry representing the local hub process.\n * Used by benchmarks/observability to detect whether a given addon runs\n * in its own process (measurable independently) or inline with the hub.\n */\n listAddonInstances: method(z.void(), z.array(AddonInstanceSchema).readonly()),\n /**\n * Resource stats for the process hosting the given addon.\n * Returns null when the addon runs in-process on the hub (can't measure\n * independently — caller should detect via listAddonInstances). Returns\n * hub process stats for addonId '$hub'.\n */\n getAddonStats: method(z.object({ addonId: z.string() }), PidResourceStatsSchema.nullable()),\n /**\n * Snapshot of every camstack-related process on this node with a\n * ghost/managed/root classification. Powers the Cluster → Agent →\n * Processes tab: cross-references `$process.list` against a `ps` scan\n * so orphaned trees (PPID=1) or unknown children show up as `ghost`\n * and can be killed from the UI.\n */\n listNodeProcesses: method(z.void(), z.array(NodeProcessSchema).readonly()),\n /**\n * Send SIGTERM (or SIGKILL when `force`) to a pid inside this node's\n * process tree. The provider refuses pids that aren't in the live\n * `listNodeProcesses()` snapshot — callers can't use this endpoint\n * to kill arbitrary system processes.\n */\n killProcess: method(\n KillProcessInputSchema,\n KillProcessResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst PtzPresetSchema = z.object({ id: z.string(), name: z.string() });\nconst PtzPositionSchema = z.object({ pan: z.number(), tilt: z.number(), zoom: z.number() });\nconst PtzMoveCommandSchema = z.object({\n pan: z.number().optional(),\n tilt: z.number().optional(),\n zoom: z.number().optional(),\n speed: z.number().optional()\n});\nconst ptzCapability = {\n name: \"ptz\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {\n move: method(\n PtzMoveCommandSchema.extend({ deviceId: z.number() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n continuousMove: method(\n PtzMoveCommandSchema.extend({ deviceId: z.number() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n stop: method(\n z.object({ deviceId: z.number() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n getPresets: method(\n z.object({ deviceId: z.number() }),\n z.array(PtzPresetSchema)\n ),\n goToPreset: method(\n z.object({ deviceId: z.number(), presetId: z.string() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n goHome: method(\n z.object({ deviceId: z.number() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n /**\n * Pull the current PTZ position. Redundant with the auto-injected\n * `getStatus` method (see `status` below); kept for callers that\n * haven't migrated. Will be folded into `getStatus` in a future\n * cleanup pass once all consumers use the typed status surface.\n */\n getPosition: method(\n z.object({ deviceId: z.number() }),\n PtzPositionSchema\n )\n },\n status: {\n schema: PtzPositionSchema,\n kind: \"command-driven\"\n }\n};\nconst EventItemSchema = z.object({\n id: z.string(),\n type: z.string(),\n timestamp: z.number(),\n // unix ms\n label: z.string().optional(),\n thumbnailUrl: z.string().optional(),\n clipUrl: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional()\n});\nconst eventsCapability = {\n name: \"events\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {\n getEvents: method(\n z.object({\n deviceId: z.number(),\n from: z.number().optional(),\n to: z.number().optional(),\n limit: z.number().optional()\n }),\n z.array(EventItemSchema)\n ),\n getEventThumbnail: method(\n z.object({ deviceId: z.number(), eventId: z.string() }),\n z.object({ base64: z.string(), contentType: z.string() }).nullable()\n ),\n getEventClipUrl: method(\n z.object({ deviceId: z.number(), eventId: z.string() }),\n z.string().nullable()\n )\n }\n};\nconst SegmentSchema = z.object({\n id: z.string(),\n startTs: z.number(),\n // unix ms\n endTs: z.number(),\n durationSec: z.number(),\n sizeBytes: z.number().optional()\n});\nconst recordingCapability = {\n name: \"recording\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {\n getSegments: method(\n z.object({\n deviceId: z.number(),\n from: z.number().optional(),\n to: z.number().optional()\n }),\n z.array(SegmentSchema)\n ),\n getPlaybackUrl: method(\n z.object({ deviceId: z.number(), segmentId: z.string() }),\n z.string().nullable()\n ),\n getThumbnailAt: method(\n z.object({ deviceId: z.number(), timestamp: z.number() }),\n z.object({ base64: z.string(), contentType: z.string() }).nullable()\n )\n }\n};\nconst StreamSourceEntrySchema = z.object({\n id: z.string(),\n label: z.string(),\n protocol: z.enum([\"rtsp\", \"rtmp\", \"annexb\", \"http-mjpeg\", \"webrtc\", \"custom\"]),\n url: z.string().optional(),\n resolution: z.object({ width: z.number(), height: z.number() }).optional(),\n fps: z.number().optional(),\n bitrate: z.number().optional(),\n codec: z.string().optional(),\n profileHint: z.enum([\"high\", \"mid\", \"low\"]).optional(),\n sdp: z.string().optional()\n});\nconst ConfigEntrySchema = z.object({\n key: z.string(),\n value: z.unknown()\n});\nconst deviceOpsCapability = {\n name: \"device-ops\",\n scope: \"device\",\n mode: \"singleton\",\n methods: {\n /**\n * Return stream sources for camera-like devices. Non-camera devices\n * return an empty array (the bridge did the same; preserved for compat).\n */\n getStreamSources: method(\n z.object({ deviceId: z.number() }),\n z.array(StreamSourceEntrySchema)\n ),\n /**\n * Return the device's config entries (key + current value). Used by\n * the device-manager aggregator when reading the driver's schema+values.\n */\n getConfigEntries: method(\n z.object({ deviceId: z.number() }),\n z.array(ConfigEntrySchema)\n ),\n /**\n * Bulk-apply a config patch via `IDevice.config.setAll`. Covers the\n * updateConfig / setStreamProfileMap / enable-as-config paths from\n * the old bridge.\n */\n setConfig: method(\n z.object({\n deviceId: z.number(),\n values: z.record(z.string(), z.unknown())\n }),\n z.void(),\n { kind: \"mutation\" }\n ),\n /**\n * Invoke `IDevice.removeDevice()` so the driver can release resources\n * (close sockets, stop background tasks, …). The device-manager still\n * performs its own persistence cleanup before/after this call.\n */\n removeDevice: method(\n z.object({ deviceId: z.number() }),\n z.void(),\n { kind: \"mutation\" }\n ),\n /**\n * Build the ConfigUISchema (FormBuilder input shape) from the device's\n * Zod config schema. Runs on the worker that owns the IDevice so the\n * Zod types stay local (they're function references, not\n * serializable). Returns a fully JSON-serializable schema with\n * sections/fields the admin UI renders directly.\n *\n * Needed because the hub-side `device-manager.getSettingsSchema`\n * couldn't reach forked-worker devices — it had no registry entry\n * and no cross-process lookup, so the UI silently rendered an empty\n * settings panel for every worker-owned device.\n *\n * Returns `null` when the device isn't found on this worker.\n */\n getSettingsSchema: method(\n z.object({ deviceId: z.number() }),\n z.unknown().nullable()\n )\n }\n};\nconst CameraCredentialsSchema = z.object({\n /** Camera IP or hostname (no scheme). */\n host: z.string(),\n /** Primary protocol port (varies per vendor: Baichuan 9000, ISAPI 80/443, RTSP 554). */\n port: z.number().int().positive().optional(),\n /** ONVIF service port if known by the provider. */\n onvifPort: z.number().int().positive().optional(),\n /** RTSP service port if known. */\n rtspPort: z.number().int().positive().optional(),\n /** HTTP(S) flag for the primary protocol port. */\n https: z.boolean().optional(),\n /** Login username. */\n username: z.string().optional(),\n /** Login password. CONSUMERS MUST NOT log or event-bus this value. */\n password: z.string().optional(),\n /** ONVIF profile hint advertised by the camera (`T`, `Q`, `G`, `S`). */\n onvifProfile: z.string().optional()\n});\nconst CameraCredentialsStatusSchema = z.object({\n host: z.string(),\n port: z.number().int().positive().nullable(),\n onvifPort: z.number().int().positive().nullable(),\n rtspPort: z.number().int().positive().nullable(),\n https: z.boolean().nullable(),\n hasUsername: z.boolean(),\n hasPassword: z.boolean(),\n onvifProfile: z.string().nullable()\n});\nconst cameraCredentialsCapability = {\n name: \"camera-credentials\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {\n /**\n * Return the camera's full credential bundle for admin consumers.\n * Each provider implementation returns a snapshot of its persisted\n * config — no I/O to the camera. Returns null when the device is\n * not owned by this addon (deviceId mismatch).\n */\n getCredentials: method(\n z.object({ deviceId: z.number() }),\n CameraCredentialsSchema.nullable(),\n { kind: \"query\", auth: \"admin\" }\n )\n },\n status: {\n schema: CameraCredentialsStatusSchema,\n kind: \"command-driven\"\n }\n};\nconst rebootCapability = {\n name: \"reboot\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch],\n methods: {\n reboot: method(\n z.object({ deviceId: z.number().int().nonnegative() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst OsdOverlayKindEnum = z.enum([\"text\", \"timestamp\", \"watermark\"]);\nconst OsdPositionEnum = z.enum([\n \"top-left\",\n \"top-center\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-center\",\n \"bottom-right\",\n \"custom\"\n]);\nconst OsdOverlaySchema = z.object({\n /** Stable driver-assigned id. Reolink uses `'channel'`, `'time'`, `'watermark'`. */\n id: z.string(),\n kind: OsdOverlayKindEnum,\n enabled: z.boolean(),\n /** Active text (text/watermark). Undefined for 'timestamp' (firmware-generated). */\n text: z.string().optional(),\n position: OsdPositionEnum.optional(),\n /**\n * Positions the firmware accepts for this specific overlay. Populated\n * by the driver at register time. Empty array → positioning not\n * configurable; the UI hides the position field.\n */\n availablePositions: z.array(OsdPositionEnum).readonly(),\n /** Firmware does not allow editing the `text` field (e.g. timestamp). */\n readOnly: z.boolean().optional()\n});\nconst OsdStatusSchema = z.object({\n overlays: z.array(OsdOverlaySchema).readonly()\n});\nconst OsdOverlayPatchSchema = z.object({\n enabled: z.boolean().optional(),\n text: z.string().optional(),\n position: OsdPositionEnum.optional()\n}).partial();\nconst osdCapability = {\n name: \"osd\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {\n /**\n * Patch a single overlay by id. Provider handles read-modify-write\n * against firmware APIs that require the full object (Reolink\n * `SetOsd`). Omitted patch keys are preserved. Successful\n * completion triggers `onStatusChanged`.\n */\n setOverlay: method(\n z.object({\n deviceId: z.number(),\n overlayId: z.string(),\n patch: OsdOverlayPatchSchema\n }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n )\n },\n events: {\n onStatusChanged: { data: z.object({\n deviceId: z.number(),\n status: OsdStatusSchema\n }) }\n },\n status: {\n schema: OsdStatusSchema,\n kind: \"command-driven\"\n },\n settings: {\n bindings: [{\n kind: \"array\",\n statusPath: \"overlays\",\n idField: \"id\",\n method: \"setOverlay\",\n idArg: \"overlayId\",\n patchArg: \"patch\",\n sectionId: \"osd\",\n sectionTitle: \"Video overlays\",\n itemFields: {\n enabled: {\n label: (o) => `${String(o.id)} enabled`,\n kind: \"boolean\"\n },\n text: {\n label: (o) => `${String(o.id)} text`,\n kind: \"text\",\n when: (o) => o.kind !== \"timestamp\" && !o.readOnly\n },\n position: {\n label: (o) => `${String(o.id)} position`,\n kind: \"select\",\n options: (o) => o.availablePositions ?? [],\n when: (o) => Array.isArray(o.availablePositions) && o.availablePositions.length > 0\n }\n }\n }]\n }\n};\nconst AccessoriesStatusSchema = z.object({\n childDeviceIds: z.array(z.number()).readonly()\n});\nconst accessoriesCapability = {\n name: \"accessories\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera, DeviceType.Hub],\n methods: {},\n events: {\n /**\n * Emitted when a child device is created, removed, or its parent\n * assignment changes. Payload carries the fresh list.\n */\n onAccessoriesChanged: { data: z.object({\n deviceId: z.number(),\n childDeviceIds: z.array(z.number()).readonly()\n }) }\n },\n status: {\n schema: AccessoriesStatusSchema,\n kind: \"command-driven\"\n }\n};\nconst IntercomAbilitySchema = z.object({\n /** Codecs accepted by firmware, in preference order. Driver-authored strings. */\n codecs: z.array(z.string()),\n /** Sample rate (Hz) the firmware expects. Reolink typical: 16000. */\n sampleRate: z.number(),\n duplex: z.enum([\"half\", \"full\"]),\n /** Max in-flight audio backlog before drop (ms). Server uses this to bound latency. */\n maxBacklogMs: z.number()\n});\nconst IntercomStatusSchema = z.object({\n /** True while a talk session is open. */\n talking: z.boolean(),\n /** Ms epoch of the most recent session start. Null if never opened. */\n lastSessionAt: z.number().nullable(),\n /** Firmware ability cached at first session creation. Null until probed. */\n ability: IntercomAbilitySchema.nullable()\n});\nconst intercomCapability = {\n name: \"intercom\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {\n /**\n * Open a server-side WebRTC audio-only session. Returns an SDP\n * offer with a single sendonly audio m-line the client answers\n * (client → server direction). The server wakes battery cams\n * transparently before opening the upstream talk channel.\n */\n startSession: method(\n z.object({ deviceId: z.number() }),\n z.object({ sessionId: z.string(), sdpOffer: z.string() }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n handleAnswer: method(\n z.object({\n deviceId: z.number(),\n sessionId: z.string(),\n sdpAnswer: z.string()\n }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Close explicitly. Server also auto-closes on 30s idle. */\n stopSession: method(\n z.object({ deviceId: z.number(), sessionId: z.string() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Open a raw-PCM talk session (no WebRTC SDP plumbing). Used by\n * non-WebRTC consumers (HomeKit export, Alexa raw audio, test\n * harnesses) that already have decoded PCM frames and just need a\n * direct path onto the camera's talk channel. Mutually exclusive\n * with `startSession` (an active WebRTC session must be stopped\n * before a raw-PCM session can be opened on the same device, and\n * vice versa).\n */\n startTalkSession: method(\n z.object({ deviceId: z.number() }),\n z.object({ sessionId: z.string() }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Push a chunk of PCM s16le mono onto the active raw-PCM talk\n * session. Frames are encoded to the firmware's expected codec\n * (Reolink: IMA ADPCM @ camera sample rate; Hikvision: G.711 @\n * 8 kHz) inside the provider — callers must resample upstream to\n * the rate the camera negotiated (typical: 16 kHz Reolink,\n * 8 kHz Hikvision). PCM is shipped base64-encoded so the payload\n * survives JSON serialization across tRPC.\n */\n pushTalkPcm: method(\n z.object({\n deviceId: z.number(),\n /** PCM frames as little-endian s16, mono. Base64-encoded so\n * the payload survives tRPC JSON serialization. */\n pcmBase64: z.string(),\n /** Sequence number for ordering / dropping out-of-order frames. */\n sequenceNumber: z.number().int()\n }),\n z.object({ accepted: z.boolean() }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /** Close the raw-PCM talk session. Idempotent. */\n endTalkSession: method(\n z.object({ deviceId: z.number() }),\n z.void(),\n { kind: \"mutation\", auth: \"admin\" }\n )\n },\n events: {\n onStatusChanged: { data: z.object({\n deviceId: z.number(),\n status: IntercomStatusSchema\n }) }\n },\n status: {\n schema: IntercomStatusSchema,\n kind: \"command-driven\"\n }\n};\nconst NativeObjectClassEnum = z.enum([\n \"person\",\n \"vehicle\",\n \"animal\",\n \"face\",\n \"package\",\n \"other\"\n]);\nconst NativeDetectionSchema = z.object({\n class: NativeObjectClassEnum,\n timestamp: z.number(),\n /** Firmware-provided confidence [0..1]. Reolink pushes don't carry it → undefined. */\n confidence: z.number().min(0).max(1).optional()\n});\nconst NativeObjectDetectionStatusSchema = z.object({\n /**\n * Last observed instance per class. Undefined entries mean the class\n * is supported but nothing has been seen since the provider started.\n */\n lastByClass: z.record(NativeObjectClassEnum, NativeDetectionSchema.nullable()),\n /** Classes the firmware is capable of detecting — enumerated at device register. */\n supportedClasses: z.array(NativeObjectClassEnum).readonly()\n});\nconst nativeObjectDetectionCapability = {\n name: \"native-object-detection\",\n scope: \"device\",\n mode: \"singleton\",\n deviceTypes: [DeviceType.Camera],\n methods: {},\n events: {\n onDetected: { data: z.object({\n deviceId: z.number(),\n detection: NativeDetectionSchema\n }) }\n },\n status: {\n schema: NativeObjectDetectionStatusSchema,\n kind: \"push\"\n }\n};\nconst ModelFormatSchema = z.enum(MODEL_FORMATS);\nconst HwAccelBackendInputSchema = z.enum([\n \"videotoolbox\",\n \"cuda\",\n \"nvdec\",\n \"vaapi\",\n \"qsv\",\n \"d3d11va\",\n \"dxva2\",\n \"amf\",\n \"vdpau\",\n \"drm\",\n \"coreml\",\n \"tensorrt\",\n \"openvino\",\n \"directml\",\n \"webgpu\",\n \"none\"\n]).nullable().optional();\nconst HwAccelResolutionSchema = z.object({\n preferred: z.array(z.string()).readonly()\n});\nconst HardwareEncoderIdSchema = z.enum([\n \"h264_videotoolbox\",\n \"hevc_videotoolbox\",\n \"h264_vaapi\",\n \"hevc_vaapi\",\n \"h264_nvenc\",\n \"hevc_nvenc\",\n \"h264_qsv\",\n \"hevc_qsv\",\n \"h264_amf\",\n \"hevc_amf\",\n \"libx264\",\n \"libx265\"\n]);\nconst HardwareEncoderProbeSchema = z.object({\n encoder: HardwareEncoderIdSchema,\n codec: z.enum([\"H264\", \"H265\"]),\n family: z.enum([\"videotoolbox\", \"vaapi\", \"nvenc\", \"qsv\", \"amf\", \"software\"]),\n available: z.boolean(),\n reason: z.string().optional()\n});\nconst HardwareEncodersSchema = z.object({\n encoders: z.array(HardwareEncoderProbeSchema).readonly(),\n defaultH264: HardwareEncoderIdSchema,\n defaultH265: HardwareEncoderIdSchema,\n probedAt: z.number()\n});\nconst HardwarePlatformSchema = z.enum([\"darwin\", \"linux\", \"win32\"]);\nconst HardwareArchSchema = z.enum([\"arm64\", \"x64\"]);\nconst GpuInfoSchema = z.object({\n type: z.enum([\"nvidia\", \"amd\", \"intel\", \"apple\"]),\n name: z.string(),\n memoryMB: z.number().optional()\n});\nconst NpuInfoSchema = z.object({\n type: z.enum([\"apple-ane\", \"intel-npu\"])\n});\nconst HardwareInfoSchema = z.object({\n platform: HardwarePlatformSchema,\n arch: HardwareArchSchema,\n cpuModel: z.string(),\n cpuCores: z.number(),\n totalRAM_MB: z.number(),\n availableRAM_MB: z.number(),\n gpu: GpuInfoSchema.nullable(),\n npu: NpuInfoSchema.nullable()\n});\nconst PlatformScoreSchema = z.object({\n runtime: z.enum([\"node\", \"python\"]),\n backend: z.string(),\n format: z.enum([\"onnx\", \"coreml\", \"openvino\"]),\n score: z.number(),\n reason: z.string(),\n available: z.boolean()\n});\nconst PlatformCapabilitiesSchema = z.object({\n hardware: HardwareInfoSchema,\n scores: z.array(PlatformScoreSchema).readonly(),\n bestScore: PlatformScoreSchema,\n pythonPath: z.string().nullable()\n});\nconst ModelRequirementSchema = z.object({\n modelId: z.string(),\n name: z.string(),\n minRAM_MB: z.number(),\n accuracyScore: z.number(),\n formats: z.array(z.string()).readonly()\n});\nconst ResolvedInferenceConfigSchema = z.object({\n modelId: z.string(),\n runtime: z.enum([\"node\", \"python\"]),\n backend: z.string(),\n format: ModelFormatSchema,\n reason: z.string()\n});\nconst platformProbeCapability = {\n name: \"platform-probe\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n getCapabilities: method(z.void(), PlatformCapabilitiesSchema),\n getHardware: method(z.void(), HardwareInfoSchema),\n resolveInferenceConfig: method(\n z.object({ requirements: z.array(ModelRequirementSchema).readonly() }),\n ResolvedInferenceConfigSchema\n ),\n resolveHwAccel: method(\n z.object({ prefer: HwAccelBackendInputSchema, nodeId: z.string().optional() }),\n HwAccelResolutionSchema\n ),\n /**\n * Hardware-encoder probe — see Task #185. Cached after first call.\n */\n getHardwareEncoders: method(z.void(), HardwareEncodersSchema),\n refreshHardwareEncoders: method(\n z.void(),\n HardwareEncodersSchema,\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst InterfaceKindEnum = z.enum([\n \"lan\",\n // wired ethernet (en0, eth0, ...)\n \"wifi\",\n // wireless (en1, wlan*, ...)\n \"docker\",\n // docker0 / br-* / veth*\n \"vpn\",\n // tun*, utun*, wg*, tap*\n \"loopback\",\n // lo, lo0\n \"other\"\n // anything we can't classify confidently\n]);\nconst LocalInterfaceSchema = z.object({\n /** Interface name as reported by the OS (e.g. `en0`, `eth0`, `lo0`). */\n name: z.string(),\n family: z.enum([\"IPv4\", \"IPv6\"]),\n address: z.string(),\n /** CIDR shorthand (e.g. `192.168.1.10/24`). Empty when OS doesn't expose. */\n cidr: z.string(),\n /** OS netmask. Stable across calls so the SDK can hash on it. */\n netmask: z.string(),\n /** True for `127.0.0.1`/`::1`. Returned for completeness but never preferred. */\n internal: z.boolean(),\n /** Hardware MAC (empty for loopback / virtual interfaces). */\n mac: z.string(),\n /** Derived classification — see `InterfaceKindEnum`. */\n kind: InterfaceKindEnum,\n /**\n * `true` for the auto-selected outbound interface. Exactly zero or\n * one entry has this set per call; the SDK picks this one for the\n * first connection attempt.\n */\n preferred: z.boolean(),\n /**\n * Heuristic flag: `true` when the address looks usable for clients\n * (RFC 1918 / public IPv4, IPv6 ULA / GUA), `false` for link-local\n * / loopback / multicast / docker / vpn / unknown ranges. Same\n * heuristic that drives `autoSeedAllowlist`.\n */\n plausible: z.boolean(),\n /**\n * Human-readable rationale for non-plausible entries (e.g. \"IPv6\n * link-local — only reachable on the same link\"). Empty string for\n * plausible entries. The UI surfaces this verbatim as the tooltip\n * on the \"Unlikely usable\" badge so the backend stays the single\n * source of truth — front-end consumers don't re-derive the reason.\n */\n plausibleReason: z.string()\n});\nconst ListResultSchema = z.object({\n interfaces: z.array(LocalInterfaceSchema).readonly(),\n /** Wall-clock timestamp at which the snapshot was probed. */\n probedAt: z.number()\n});\nconst PreferredSchema = LocalInterfaceSchema.nullable();\nconst ConnectionEndpointSchema = z.object({\n /** Operator-facing label (e.g. \"LAN — en0\", \"Public tunnel\"). */\n label: z.string(),\n /** Fully-formed base URL with scheme + host + port. */\n baseUrl: z.string(),\n /** Network-level hint for the SDK — picks a small icon, sorts within\n * a tier. Coarse categorisation (LAN vs public vs loopback). */\n kind: z.enum([\n \"lan-ipv4\",\n // private RFC1918 / link-local IPv4\n \"lan-ipv6\",\n // private IPv6\n \"public\",\n // tunnel / external FQDN\n \"loopback\"\n // 127.0.0.1 — last-resort fallback\n ]),\n /**\n * Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/\n * `loopback`/`public`. Lets the UI render an accurate badge (e.g. a\n * VPN address gets a \"VPN\" tag instead of being lumped under\n * \"lan-ipv4\"). `'public'` for the tunnel hostname.\n */\n interfaceKind: z.enum([\"lan\", \"wifi\", \"docker\", \"vpn\", \"other\", \"loopback\", \"public\"]),\n /**\n * Mirrors `LocalInterface.plausible` — false for endpoints derived\n * from non-plausible interfaces (VPN, docker, link-local, …). The\n * UI uses it to mark \"Unlikely usable\" without re-deriving from\n * the address shape.\n */\n plausible: z.boolean(),\n /** Same as `LocalInterface.plausibleReason` — empty when plausible. */\n plausibleReason: z.string(),\n /**\n * Suggested priority for racing — lower = try first. Stable across\n * calls so the client can sort even if the cap returns a new\n * ordering between polls.\n */\n priority: z.number()\n});\nconst GetConnectionEndpointsResultSchema = z.object({\n endpoints: z.array(ConnectionEndpointSchema).readonly()\n});\nconst AllowedAddressesSchema = z.object({\n /**\n * Allowlist of interface addresses operators have explicitly opted\n * into for the connection-endpoint race. Empty array = \"auto\" — every\n * non-loopback / non-link-local interface participates. Set by the\n * Network Addresses admin page and persisted by the addon.\n */\n addresses: z.array(z.string()).readonly()\n});\nconst localNetworkCapability = {\n name: \"local-network\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n /** Return the current interface snapshot. */\n list: method(z.void(), ListResultSchema),\n /**\n * Auto-selected outbound interface. Heuristic:\n * 1. Skip internal / link-local / 169.254.*.\n * 2. Prefer LAN/wifi (real Ethernet) over docker/vpn.\n * 3. IPv4 wins over IPv6 (compat with legacy consumers).\n * 4. Tie-break on lowest CIDR mask (most-specific subnet).\n * Returns `null` only when the host has zero non-loopback addresses.\n * Honours `getAllowedAddresses()` — if the operator pinned an\n * allowlist, only those addresses are candidates.\n */\n getPreferred: method(z.void(), PreferredSchema),\n /**\n * Ordered candidate base URLs the SDK should try on connect.\n * Includes LAN IPs (one per non-internal interface), the public\n * tunnel hostname (when active), and loopback as a last-resort\n * fallback. Filterable by `includeLoopback` / `ipv4Only`.\n * Honours `getAllowedAddresses()` when set — addresses outside\n * the allowlist are dropped (the public tunnel + loopback are\n * always included as escape hatches).\n */\n getConnectionEndpoints: method(\n z.object({\n /** Local hub HTTP port to use in base URLs. */\n port: z.number().int().min(1).max(65535),\n /** Include `http(s)://127.0.0.1:<port>` as the lowest-priority\n * candidate. Default `true`. */\n includeLoopback: z.boolean().optional(),\n /** Skip IPv6 entries. Some legacy clients can't parse them.\n * Default `false`. */\n ipv4Only: z.boolean().optional(),\n /** Scheme to emit for LAN/loopback URLs. Default `'http'`.\n * Pass `'https'` when the caller is itself loaded over HTTPS\n * to avoid mixed-content blocks in the browser. The public\n * tunnel always emits `https://` regardless. */\n scheme: z.enum([\"http\", \"https\"]).optional()\n }),\n GetConnectionEndpointsResultSchema\n ),\n /**\n * Read the operator's allowlist. Empty = \"auto\" (no filter). Used\n * by the admin UI's address selector to seed its checkbox state.\n */\n getAllowedAddresses: method(z.void(), AllowedAddressesSchema),\n /**\n * Replace the allowlist atomically. Persisted via the addon store\n * (kernel-managed) so it survives restarts. Pass `[]` to revert to\n * auto mode.\n */\n setAllowedAddresses: method(\n AllowedAddressesSchema,\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\" }\n ),\n /**\n * Re-run the boot heuristic over the current interface snapshot\n * and atomically replace the allowlist with the result. Useful\n * after a major network change (new dock, new VPN, IP rebound)\n * when the operator wants to wipe their manual edits and start\n * over from the auto-detected best matches.\n */\n resetAllowlistToBestMatch: method(\n z.void(),\n AllowedAddressesSchema,\n { kind: \"mutation\" }\n )\n }\n};\nconst MeshEndpointSchema$1 = z.object({\n /** Stable identifier within the provider (e.g. `mesh-ipv4`, `magicdns`, `funnel`). */\n id: z.string(),\n /** Operator-facing label (e.g. \"Mesh IPv4\", \"MagicDNS\"). */\n label: z.string(),\n /**\n * Where the endpoint is reachable from:\n * - `mesh`: only peers on the same mesh (Tailscale tailnet, …)\n * - `public`: open internet (Funnel, public-tunnel pass-through)\n */\n scope: z.enum([\"mesh\", \"public\"]),\n /** Full base URL (e.g. `https://camstack.tail-abc.ts.net`). */\n url: z.string(),\n /** Hostname portion (for SAN cert checks + display). */\n hostname: z.string(),\n /** Port (`443` for Funnel/Serve, anything for raw mesh IP). */\n port: z.number(),\n /** Always `http` or `https`. */\n protocol: z.enum([\"http\", \"https\"])\n});\nconst MeshPeerSchema = z.object({\n /** Stable peer id assigned by the mesh control plane. */\n id: z.string(),\n /** Hostname / device name as shown in the mesh dashboard. */\n hostname: z.string(),\n /** MagicDNS / mesh DNS name (e.g. `peer-foo.tail-abc.ts.net`). Empty when the provider doesn't support DNS or peer-side resolution is disabled. */\n magicDns: z.string(),\n /** Mesh IPv4 / IPv6 addresses combined. Multiple when dual-stacked. */\n addresses: z.array(z.string()).readonly(),\n /** Operating system reported by the peer (informational). */\n os: z.string().optional(),\n /** Whether this peer is currently reachable. */\n online: z.boolean(),\n /** Last-seen timestamp (epoch ms). 0 when never seen. */\n lastSeenMs: z.number(),\n /** True for the row representing the current host. */\n isSelf: z.boolean(),\n /**\n * Connection mode to this peer:\n * - `direct`: NAT-traversed P2P (UDP punched)\n * - `relay`: traffic relayed through provider edge (Tailscale DERP)\n * - `idle`: peer reachable but no recent traffic / handshake\n */\n connection: z.enum([\"direct\", \"relay\", \"idle\"]),\n /** DERP region / relay node identifier when `connection: relay`. Null otherwise. */\n relay: z.string().nullable(),\n /** Last successful handshake timestamp (epoch ms). 0 when never. */\n lastHandshakeMs: z.number(),\n /** Bytes received from this peer since the daemon started. */\n rxBytes: z.number(),\n /** Bytes transmitted to this peer since the daemon started. */\n txBytes: z.number(),\n /** ACL tags this peer carries (e.g. `[\"tag:server\"]`). Empty when human-owned. */\n tags: z.array(z.string()).readonly(),\n /** True when the peer advertises itself as an exit-node candidate. */\n exitNodeOption: z.boolean(),\n /** Subnet routes the peer advertises (e.g. `[\"192.168.1.0/24\"]`). */\n advertisedRoutes: z.array(z.string()).readonly(),\n /** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */\n userLogin: z.string().nullable(),\n /** Pre-auth key / machine-key expiry (epoch ms). Null when keys don't expire. */\n keyExpiry: z.number().nullable()\n});\nconst MeshStatusSchema = z.object({\n /** True when the host is joined and the daemon reports healthy. */\n joined: z.boolean(),\n /** Local mesh IPv4 (e.g. `100.x.x.x` for Tailscale). Empty when not joined. */\n meshIp: z.string(),\n /** MagicDNS / mesh hostname (e.g. `camstack.tail-abc.ts.net`). Empty if not configured. */\n magicDnsHostname: z.string(),\n /** Number of peers visible to this host (excluding self). */\n peerCount: z.number(),\n /** Every endpoint this provider exposes for the current host. */\n endpoints: z.array(MeshEndpointSchema$1).readonly(),\n /** Last error from the daemon, when not joined. */\n error: z.string().optional(),\n // ── Account / tenant identity (generic across providers) ────────\n /**\n * Tenant / tailnet / network display name (Tailscale = tailnet\n * domain, Headscale = namespace, ZeroTier = network name). Empty\n * pre-join. Per-provider semantics, common slot.\n */\n tenantName: z.string(),\n /**\n * Mesh DNS suffix when the provider exposes peer-resolvable DNS\n * (Tailscale MagicDNS, Headscale MagicDNS, …). Empty when the\n * provider doesn't ship DNS (e.g. ZeroTier).\n */\n magicDnsSuffix: z.string(),\n /**\n * Authenticated user / account login bound to this host. Null when\n * the provider authenticates with a long-lived network token rather\n * than a user account (e.g. ZeroTier API token).\n */\n userLogin: z.string().nullable(),\n /**\n * Provider control-plane URL (Tailscale SaaS `https://login.tailscale.com`,\n * self-hosted Headscale, ZeroTier Central, …). Empty when not\n * applicable (rare).\n */\n controlPlaneUrl: z.string(),\n /**\n * Machine-key / node-key expiry (epoch ms). Null when the provider\n * doesn't rotate keys for the bound host. Operator-facing surface\n * for \"your access expires on …\" banners.\n */\n keyExpiry: z.number().nullable()\n});\nconst meshNetworkCapability = {\n name: \"mesh-network\",\n scope: \"system\",\n mode: \"collection\",\n providerKind: \"mesh\",\n methods: {\n /** Return the current join state + endpoints + peer count. Cheap\n * poll-target — admin UI hits this every few seconds. */\n getStatus: method(z.void(), MeshStatusSchema),\n /**\n * Join the host to the provider's mesh using a one-time auth key\n * (generated by the operator in the provider's admin dashboard).\n * Implementations should be idempotent — re-calling with the same\n * key while already joined is a no-op + success.\n */\n join: method(\n z.object({\n /** Provider-specific auth key. For Tailscale this is the\n * `tskey-auth-*` token from admin.tailscale.com. */\n authKey: z.string().min(8),\n /** Optional hostname override the host should advertise. */\n hostname: z.string().optional()\n }),\n z.object({ joined: z.literal(true) }),\n { kind: \"mutation\" }\n ),\n /**\n * Start an interactive browser-redirect login flow.\n *\n * The provider spawns its daemon's join command without a pre-auth\n * key, captures the verification URL the daemon prints, and returns\n * it. The admin UI opens the URL in a new tab; the user completes\n * authentication in the provider's web console and the background\n * process self-terminates. The caller then polls `getStatus()` until\n * `joined: true`.\n *\n * Mirrors the `tailscale up` (no `--auth-key`) flow.\n */\n startLogin: method(\n z.object({\n /** Optional hostname override the host should advertise once joined. */\n hostname: z.string().optional()\n }),\n z.object({\n /** Authentication URL the operator should open in a browser. */\n loginUrl: z.string()\n }),\n { kind: \"mutation\" }\n ),\n /** Leave the mesh. After this the meshIp/magicDnsHostname/etc.\n * vanish until the next `join`. The bound account stays — a\n * subsequent `join` reuses it without prompting for a new login. */\n leave: method(\n z.void(),\n z.object({ left: z.literal(true) }),\n { kind: \"mutation\" }\n ),\n /**\n * Sign out of the mesh account entirely. Distinct from `leave`:\n * `leave` only takes the host off-mesh (`tailscale down`) while the\n * account binding survives, so the next `join` reconnects silently.\n * `logout` (`tailscale logout`) wipes the daemon's stored\n * credentials — the next `startLogin` MUST go through a fresh\n * browser-redirect flow to bind a new account.\n */\n logout: method(\n z.void(),\n z.object({ loggedOut: z.literal(true) }),\n { kind: \"mutation\" }\n ),\n /** Enumerate every peer the daemon currently knows about. */\n listPeers: method(z.void(), z.object({\n peers: z.array(MeshPeerSchema).readonly()\n })),\n /**\n * Probe the mesh daemon / API for a sanity check WITHOUT joining.\n * Operator-facing \"test connection\" button: validates the auth key\n * + reaches the control plane and reports back what would happen\n * on join.\n *\n * Tailscale: dry-runs `tailscale up --auth-key=… --reset` against\n * an idempotency probe; for an already-joined node it just returns\n * the current status.\n */\n testConnection: method(\n z.object({\n /** Optional auth key — when provided, probes the key validity\n * against the provider's API. Omit when already joined to\n * just ping the daemon. */\n authKey: z.string().optional()\n }),\n z.object({\n ok: z.boolean(),\n /** Provider-side identifier resolved by the probe (tailnet\n * name for Tailscale, network id for ZeroTier, etc.). */\n tenant: z.string().optional(),\n /** Daemon binary version, when reachable. */\n daemonVersion: z.string().optional(),\n /** Human-readable error when `ok: false`. */\n error: z.string().optional()\n }),\n { kind: \"mutation\" }\n )\n // Provider-specific runtime knobs (accept-routes / advertise-routes /\n // shields-up / ssh / exit-node, …) live on the addon's own\n // `getSettingsUISchema` (form-builder), NOT here. Different mesh\n // providers (Tailscale, Headscale, ZeroTier, Nebula) have very\n // different config surfaces — picking one shape and forcing all\n // implementations to honour it would either lose options or\n // misrepresent them. The Mesh page renders the addon's settings\n // schema as a \"Settings\" tab next to the generic Status / Peers\n // tabs driven by this cap.\n }\n};\nconst MeshEndpointSchema = z.object({\n id: z.string(),\n label: z.string(),\n scope: z.enum([\"mesh\", \"public\"]),\n url: z.string(),\n hostname: z.string(),\n port: z.number(),\n protocol: z.enum([\"http\", \"https\"])\n});\nconst MeshProviderInfoSchema = z.object({\n /** Stable id matching the addon id. */\n addonId: z.string(),\n /** Display label shown on the admin row — sourced from the addon manifest. */\n displayName: z.string(),\n /** True when the host is joined to this provider's mesh. */\n joined: z.boolean(),\n /** Local mesh IP (empty when not joined). */\n meshIp: z.string(),\n /** MagicDNS / mesh hostname (empty when not configured). */\n magicDnsHostname: z.string(),\n /** Peer count (excluding self). */\n peerCount: z.number(),\n /** Active endpoints (mesh IP + MagicDNS + optional public Funnel). */\n endpoints: z.array(MeshEndpointSchema).readonly(),\n /** Last error reported by the provider. */\n error: z.string().optional(),\n // ── Generic identity fields mirrored from MeshStatus ─────────────\n /** Tenant / tailnet / network display name. Empty pre-join. */\n tenantName: z.string(),\n /** Mesh DNS suffix (e.g. tailXXXX.ts.net). Empty when not configured. */\n magicDnsSuffix: z.string(),\n /** Authenticated user / account login. Null for token-only providers. */\n userLogin: z.string().nullable(),\n /** Provider control-plane URL. */\n controlPlaneUrl: z.string(),\n /** Machine-key expiry (epoch ms). Null when keys don't rotate. */\n keyExpiry: z.number().nullable()\n});\nconst meshOrchestratorCapability = {\n name: \"mesh-orchestrator\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n /** All registered mesh-network providers + live status. */\n listProviders: method(z.void(), z.array(MeshProviderInfoSchema).readonly()),\n /**\n * Join the mesh of a specific provider. Per-provider config still\n * lives on its settings panel; the orchestrator forwards.\n */\n joinProvider: method(\n z.object({\n addonId: z.string(),\n authKey: z.string().min(8),\n hostname: z.string().optional()\n }),\n z.object({ joined: z.literal(true) }),\n { kind: \"mutation\" }\n ),\n leaveProvider: method(\n z.object({ addonId: z.string() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\" }\n ),\n /**\n * Browser-redirect login flow. Forwards to the named provider's\n * `mesh-network.startLogin` and returns the URL the daemon\n * prints. UI opens it in a new tab, then polls `listProviders`\n * for `joined: true`.\n */\n startLoginProvider: method(\n z.object({\n addonId: z.string(),\n hostname: z.string().optional()\n }),\n z.object({ loginUrl: z.string() }),\n { kind: \"mutation\" }\n ),\n /**\n * Sign out of the provider's account entirely (`mesh-network.logout`).\n * Distinct from `leaveProvider` which only takes the host off-mesh;\n * `logoutProvider` wipes credentials so the next start requires a\n * fresh login.\n */\n logoutProvider: method(\n z.object({ addonId: z.string() }),\n z.object({ loggedOut: z.literal(true) }),\n { kind: \"mutation\" }\n ),\n /**\n * Per-provider peer list. Forwards to `mesh-network.listPeers` on\n * the addressed provider. Separate from `listProviders` because\n * peer payloads can be large on a heavily-populated tailnet —\n * fetch only when the operator opens the Peers tab.\n */\n listProviderPeers: method(\n z.object({ addonId: z.string() }),\n z.object({\n peers: z.array(MeshPeerSchema).readonly()\n })\n )\n }\n};\nconst MethodAccessSchema = z.enum([\"view\", \"create\", \"delete\"]);\nconst AllowedProviderSchema = z.union([z.literal(\"*\"), z.array(z.string())]);\nconst AllowedDevicesSchema = z.record(z.string(), z.union([z.literal(\"*\"), z.array(z.string())]));\nconst CapScopeSchema = z.enum([\"device\", \"system\"]);\nconst TokenScopeSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"category\"),\n target: CapScopeSchema,\n access: z.array(MethodAccessSchema).min(1)\n }),\n z.object({\n type: z.literal(\"capability\"),\n target: z.string(),\n access: z.array(MethodAccessSchema).min(1)\n }),\n z.object({\n type: z.literal(\"addon\"),\n target: z.string(),\n access: z.array(MethodAccessSchema).min(1)\n }),\n z.object({\n type: z.literal(\"device\"),\n /**\n * One or more deviceIds (serialised as strings for wire-format\n * consistency with the rest of the union). Matcher accepts if\n * `input.deviceId` ∈ `targets`. Array shape avoids the row-explosion\n * of one scope-per-device when granting access to a set of cameras.\n */\n targets: z.array(z.string()).min(1),\n access: z.array(MethodAccessSchema).min(1)\n })\n]);\nconst UserRecordSchema = z.object({\n id: z.string(),\n username: z.string(),\n passwordHash: z.string(),\n /**\n * Admin bypass. When true, the middleware skips the scope-access\n * check entirely. There is no other axis of privilege; the legacy\n * role enum collapsed onto this boolean in v2.\n */\n isAdmin: z.boolean().default(false),\n allowedProviders: AllowedProviderSchema,\n allowedDevices: AllowedDevicesSchema,\n /**\n * Scopes granted to this user. Admins bypass; their `scopes` is\n * ignored. Non-admins without scopes are locked out of every\n * protected call.\n */\n scopes: z.array(TokenScopeSchema).default([]),\n createdAt: z.number(),\n updatedAt: z.number()\n});\nconst ApiKeyRecordSchema = z.object({\n id: z.string(),\n label: z.string(),\n isAdmin: z.boolean().default(false),\n allowedProviders: AllowedProviderSchema,\n allowedDevices: AllowedDevicesSchema,\n tokenHash: z.string(),\n tokenPrefix: z.string(),\n createdAt: z.number(),\n lastUsedAt: z.number().optional()\n});\nconst ScopedTokenSchema = z.object({\n id: z.string(),\n userId: z.string(),\n name: z.string(),\n tokenHash: z.string(),\n tokenPrefix: z.string(),\n scopes: z.array(TokenScopeSchema),\n // SQLite/JSON storage round-trips undefined → null. Use `nullish` so the\n // schema accepts both `null` (read from disk) and `undefined` (in-memory).\n expiresAt: z.number().nullish(),\n lastUsedAt: z.number().nullish(),\n createdAt: z.number()\n});\nconst UserSummarySchema = z.object({\n id: z.string(),\n username: z.string(),\n isAdmin: z.boolean().default(false),\n allowedProviders: z.union([z.array(z.string()), z.literal(\"*\")]),\n allowedDevices: z.record(z.string(), z.union([z.array(z.string()), z.literal(\"*\")])),\n scopes: z.array(TokenScopeSchema).default([]),\n /**\n * True iff this user has a CONFIRMED TOTP enrollment. Surfaced on\n * `listUsers` so the admin Users page can render the \"Remove 2FA\"\n * action conditionally without firing one `getTotpStatus` query per\n * row. Self-service enrollment lives on the user's profile page.\n */\n totpEnabled: z.boolean().default(false),\n createdAt: z.number(),\n updatedAt: z.number()\n});\nconst CreateUserInputSchema = z.object({\n username: z.string(),\n password: z.string().min(6),\n isAdmin: z.boolean().default(false),\n allowedProviders: z.union([z.array(z.string()), z.literal(\"*\")]).optional(),\n allowedDevices: z.record(z.string(), z.union([z.array(z.string()), z.literal(\"*\")])).optional(),\n scopes: z.array(TokenScopeSchema).optional()\n});\nconst UpdateUserInputSchema = z.object({\n id: z.string(),\n isAdmin: z.boolean().optional(),\n allowedProviders: z.union([z.array(z.string()), z.literal(\"*\")]).optional(),\n allowedDevices: z.record(z.string(), z.union([z.array(z.string()), z.literal(\"*\")])).optional(),\n scopes: z.array(TokenScopeSchema).optional()\n});\nconst ApiKeySummarySchema = z.object({\n id: z.string(),\n label: z.string(),\n isAdmin: z.boolean().default(false),\n allowedProviders: z.union([z.array(z.string()), z.literal(\"*\")]).optional(),\n allowedDevices: z.record(z.string(), z.union([z.array(z.string()), z.literal(\"*\")])).optional(),\n tokenPrefix: z.string(),\n createdAt: z.number(),\n lastUsedAt: z.number().optional()\n});\nconst CreateApiKeyInputSchema = z.object({\n label: z.string(),\n isAdmin: z.boolean().default(false),\n allowedProviders: z.union([z.array(z.string()), z.literal(\"*\")]).optional(),\n allowedDevices: z.record(z.string(), z.union([z.array(z.string()), z.literal(\"*\")])).optional()\n});\nconst CreateApiKeyResultSchema = z.object({\n token: z.string(),\n record: ApiKeySummarySchema\n});\nconst ScopedTokenSummarySchema = z.object({\n id: z.string(),\n userId: z.string(),\n name: z.string(),\n tokenPrefix: z.string(),\n scopes: z.array(TokenScopeSchema),\n expiresAt: z.number().nullish(),\n lastUsedAt: z.number().nullish(),\n createdAt: z.number()\n});\nconst CreateScopedTokenInputSchema = z.object({\n userId: z.string(),\n name: z.string(),\n scopes: z.array(TokenScopeSchema),\n expiresAt: z.number().optional()\n});\nconst CreateScopedTokenResultSchema = z.object({\n token: z.string(),\n record: ScopedTokenSummarySchema\n});\nconst TotpSetupResultSchema = z.object({\n secret: z.string(),\n otpauthUrl: z.string()\n});\nconst TotpStatusSchema = z.object({\n /** True iff `confirmedAt != null` — a pending half-enrollment is reported as `enabled: false`. */\n enabled: z.boolean(),\n /** Null when no row exists OR the row is still pending confirmation. */\n confirmedAt: z.number().nullable()\n});\nconst userManagementCapability = {\n name: \"user-management\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n listUsers: method(z.void(), z.array(UserSummarySchema), { auth: \"admin\" }),\n createUser: method(CreateUserInputSchema, UserSummarySchema, { kind: \"mutation\", auth: \"admin\", access: \"create\" }),\n updateUser: method(UpdateUserInputSchema, z.object({ success: z.literal(true) }), { kind: \"mutation\", auth: \"admin\", access: \"create\" }),\n deleteUser: method(z.object({ id: z.string() }), z.object({ success: z.literal(true) }), { kind: \"mutation\", auth: \"admin\", access: \"delete\" }),\n resetPassword: method(\n z.object({ id: z.string(), newPassword: z.string().min(6) }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\", access: \"create\" }\n ),\n setUserScopes: method(\n z.object({ userId: z.string(), scopes: z.array(TokenScopeSchema) }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\", access: \"create\" }\n ),\n validateCredentials: method(\n z.object({ username: z.string(), password: z.string() }),\n UserSummarySchema.extend({ passwordHash: z.string() }).nullable(),\n { kind: \"mutation\", access: \"view\" }\n ),\n listApiKeys: method(z.void(), z.array(ApiKeySummarySchema), { auth: \"admin\" }),\n createApiKey: method(CreateApiKeyInputSchema, CreateApiKeyResultSchema, { kind: \"mutation\", auth: \"admin\", access: \"create\" }),\n revokeApiKey: method(z.object({ id: z.string() }), z.object({ success: z.literal(true) }), { kind: \"mutation\", auth: \"admin\", access: \"delete\" }),\n validateApiKey: method(z.object({ token: z.string() }), ApiKeySummarySchema.nullable(), { kind: \"mutation\", access: \"view\" }),\n createScopedToken: method(CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, { kind: \"mutation\", auth: \"admin\", access: \"create\" }),\n revokeScopedToken: method(z.object({ id: z.string() }), z.object({ success: z.literal(true) }), { kind: \"mutation\", auth: \"admin\", access: \"delete\" }),\n validateScopedToken: method(z.object({ token: z.string() }), ScopedTokenSummarySchema.nullable(), { access: \"view\" }),\n listScopedTokens: method(z.object({ userId: z.string() }), z.array(ScopedTokenSummarySchema), { auth: \"admin\" }),\n // ── TOTP / 2FA ─────────────────────────────────────────────────\n //\n // Setup → Confirm → (Verify on login) → Disable.\n //\n // Admin-only for now: operator enrolls TOTP on a user's behalf by\n // pairing their authenticator with the returned QR. Self-service\n // enrollment is a follow-up (needs the cap framework to expose the\n // caller's identity to the provider so the provider can enforce\n // self-or-admin).\n setupTotp: method(\n z.object({ userId: z.string() }),\n TotpSetupResultSchema,\n { kind: \"mutation\", auth: \"admin\", access: \"create\" }\n ),\n confirmTotp: method(\n z.object({ userId: z.string(), code: z.string() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\", access: \"create\" }\n ),\n disableTotp: method(\n z.object({ userId: z.string() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\", access: \"delete\" }\n ),\n getTotpStatus: method(\n z.object({ userId: z.string() }),\n TotpStatusSchema,\n { auth: \"admin\" }\n ),\n // Public (no `auth`) — used by the login flow's second-step\n // challenge endpoint. The userId comes from the password-validation\n // step (signed bridge token), so this method is not a free oracle.\n verifyTotp: method(\n z.object({ userId: z.string(), code: z.string() }),\n z.object({ valid: z.boolean() }),\n { kind: \"mutation\", access: \"view\" }\n )\n }\n};\nconst FeatureManifestSchema = z.object({\n streaming: z.boolean(),\n notifications: z.boolean(),\n objectDetection: z.boolean(),\n remoteAccess: z.boolean(),\n agentCluster: z.boolean(),\n smartHome: z.boolean(),\n recordings: z.boolean(),\n backup: z.boolean(),\n repl: z.boolean()\n});\nconst HealthStatusSchema = z.object({\n status: z.literal(\"ok\"),\n uptime: z.number()\n});\nconst NetworkAddressSchema = z.object({\n name: z.string(),\n address: z.string(),\n family: z.string(),\n internal: z.boolean()\n});\nconst systemCapability = {\n name: \"system\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n info: method(z.void(), FeatureManifestSchema),\n health: method(z.void(), HealthStatusSchema),\n featureFlags: method(z.void(), FeatureManifestSchema),\n networkAddresses: method(z.void(), z.array(NetworkAddressSchema).readonly()),\n // Retention config is opaque on the wire — the analytics-suite owns the\n // schema. `getRetentionConfig` returns null when the analytics addon\n // is not loaded; `setRetentionConfig` accepts a partial patch.\n getRetentionConfig: method(z.void(), z.unknown().nullable(), { auth: \"admin\" }),\n setRetentionConfig: method(\n z.record(z.string(), z.unknown()),\n z.null(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n forceRetentionCleanup: method(z.void(), z.void(), { kind: \"mutation\", auth: \"admin\" })\n }\n};\nconst StreamNetworkStatsSchema = z.object({\n nominalBitrateKbps: z.number(),\n observedBitrateKbps: z.number(),\n peakBitrateKbps: z.number(),\n packetLossPercent: z.number(),\n lastUpdated: z.number()\n});\nconst ClientNetworkStatsSchema = z.object({\n rttMs: z.number(),\n jitterMs: z.number(),\n estimatedBandwidthKbps: z.number(),\n lastUpdated: z.number()\n});\nconst DeviceNetworkStatsSchema = z.object({\n deviceId: z.number(),\n streams: z.record(z.string(), StreamNetworkStatsSchema),\n client: ClientNetworkStatsSchema.optional()\n});\nconst networkQualityCapability = {\n name: \"network-quality\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n getDeviceStats: method(\n z.object({ deviceId: z.number() }),\n DeviceNetworkStatsSchema.nullable()\n ),\n getAllStats: method(\n z.void(),\n z.array(DeviceNetworkStatsSchema).readonly()\n ),\n reportClientStats: method(\n z.object({\n deviceId: z.number(),\n rttMs: z.number().min(0).max(6e4),\n jitterMs: z.number().min(0).max(1e4),\n estimatedBandwidthKbps: z.number().min(0).max(1e6)\n }),\n z.void(),\n { kind: \"mutation\" }\n )\n }\n};\nconst ToastSchema = z.object({\n title: z.string(),\n message: z.string(),\n severity: z.enum([\"info\", \"warning\", \"critical\"]),\n duration: z.number().optional(),\n action: z.object({\n label: z.string(),\n url: z.string()\n }).optional()\n});\nconst toastCapability = {\n name: \"toast\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n onToast: method(z.void(), ToastSchema, { kind: \"subscription\" })\n }\n};\nconst TopologyServiceSchema = z.object({\n addonId: z.string(),\n capabilities: z.array(z.string()).readonly(),\n status: z.string()\n});\nconst TopologyProcessSchema = z.object({\n pid: z.number(),\n name: z.string(),\n state: z.string(),\n cpuPercent: z.number(),\n memoryRss: z.number(),\n uptimeSeconds: z.number(),\n services: z.array(TopologyServiceSchema).readonly(),\n groupId: z.string().optional()\n});\nconst TopologyNodeSchema = z.object({\n id: z.string(),\n name: z.string(),\n hostname: z.string(),\n platform: z.string(),\n arch: z.string(),\n cpuModel: z.string().nullable(),\n cpuCores: z.number(),\n memoryMB: z.number(),\n engines: z.array(z.string()).readonly(),\n isHub: z.boolean(),\n isOnline: z.boolean(),\n cpuPercent: z.number(),\n memoryPercent: z.number(),\n uptime: z.number(),\n lastSeen: z.string(),\n localIps: z.array(z.string()).readonly(),\n addons: z.array(\n z.object({\n id: z.string(),\n capabilities: z.array(z.string()).readonly(),\n status: z.string()\n })\n ).readonly(),\n processes: z.array(TopologyProcessSchema).readonly()\n});\nconst ClusterAddonNodeDeploymentSchema = z.object({\n nodeId: z.string(),\n name: z.string(),\n version: z.string(),\n status: z.string(),\n synced: z.boolean()\n});\nconst ClusterAddonStatusEntrySchema = z.object({\n hubVersion: z.string(),\n nodes: z.array(ClusterAddonNodeDeploymentSchema)\n});\nconst NodeAddonInputSchema = z.object({\n nodeId: z.string(),\n addonId: z.string()\n});\nconst NodeAddonEntrySchema = z.object({\n id: z.string(),\n status: z.string(),\n version: z.string().optional(),\n packageName: z.string().optional()\n});\nconst SuccessSchema = z.object({ success: z.boolean() });\nconst RestartProcessResultSchema = z.object({\n success: z.boolean(),\n reason: z.string().optional()\n});\nconst RestartNodeResultSchema = z.object({\n restarted: z.array(z.string()).readonly(),\n failed: z.array(z.string()).readonly()\n});\nconst RenameNodeResultSchema = z.object({\n nodeId: z.string(),\n name: z.string()\n});\nconst nodesCapability = {\n name: \"nodes\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n topology: method(\n z.void(),\n z.array(TopologyNodeSchema).readonly(),\n { auth: \"admin\" }\n ),\n deployAddon: method(NodeAddonInputSchema, SuccessSchema, {\n kind: \"mutation\",\n auth: \"admin\"\n }),\n undeployAddon: method(NodeAddonInputSchema, SuccessSchema, {\n kind: \"mutation\",\n auth: \"admin\"\n }),\n restartAddon: method(NodeAddonInputSchema, SuccessSchema, {\n kind: \"mutation\",\n auth: \"admin\"\n }),\n restartProcess: method(\n z.object({ nodeId: z.string(), processName: z.string() }),\n RestartProcessResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n restartNode: method(\n z.object({ nodeId: z.string() }),\n RestartNodeResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n shutdownNode: method(\n z.object({ nodeId: z.string() }),\n SuccessSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n renameNode: method(\n z.object({ nodeId: z.string(), name: z.string().min(1).max(64) }),\n RenameNodeResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n clusterAddonStatus: method(\n z.void(),\n z.record(z.string(), ClusterAddonStatusEntrySchema),\n { auth: \"admin\" }\n ),\n /**\n * Direct per-node addon listing — calls `$agent.status` on the target\n * node (or returns the hub registry for `nodeId === 'hub'`) and surfaces\n * the full addon roster including `version` + `packageName`. The\n * `topology` cap also includes addons but strips them down to\n * `{id, capabilities, status}` for the cluster diagram; this method\n * is the one the per-node \"Addons\" tab should call.\n */\n getNodeAddons: method(\n z.object({ nodeId: z.string() }),\n z.array(NodeAddonEntrySchema).readonly(),\n { auth: \"admin\" }\n ),\n setProcessLogLevel: method(\n z.object({ nodeId: z.string(), level: z.string() }),\n SuccessSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n executeQuery: method(\n z.object({\n nodeId: z.string(),\n addonId: z.string(),\n queryName: z.string(),\n params: z.record(z.string(), z.unknown()).optional()\n }),\n z.unknown(),\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst IntegrationWithStateSchema = z.object({\n id: z.string(),\n addonId: z.string(),\n name: z.string(),\n enabled: z.boolean(),\n info: z.record(z.string(), z.unknown()).readonly(),\n createdAt: z.number(),\n updatedAt: z.number(),\n processState: z.string()\n});\nconst IntegrationLiteSchema = z.object({\n id: z.string(),\n addonId: z.string(),\n name: z.string(),\n enabled: z.boolean(),\n info: z.record(z.string(), z.unknown()).readonly(),\n createdAt: z.number(),\n updatedAt: z.number()\n});\nconst AvailableIntegrationTypeSchema = z.object({\n addonId: z.string(),\n name: z.string(),\n description: z.string(),\n iconUrl: z.string().nullable(),\n color: z.string(),\n instanceMode: z.string(),\n discoveryMode: z.string(),\n existingInstances: z.array(z.object({ id: z.string(), name: z.string() })),\n canAdd: z.boolean()\n});\nconst TestConnectionResultSchema = z.object({\n success: z.boolean(),\n error: z.string().optional()\n});\nconst CreateIntegrationInputSchema = z.object({\n addonId: z.string(),\n name: z.string(),\n enabled: z.boolean().optional(),\n info: z.record(z.string(), z.unknown()).optional(),\n settings: z.record(z.string(), z.unknown()).optional(),\n skipRestart: z.boolean().optional()\n});\nconst UpdateIntegrationInputSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n enabled: z.boolean().optional(),\n info: z.record(z.string(), z.unknown()).optional()\n});\nconst DeleteIntegrationResultSchema = z.object({\n success: z.boolean(),\n deletedId: z.string()\n});\nconst integrationsCapability = {\n name: \"integrations\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n list: method(z.void(), z.array(IntegrationWithStateSchema)),\n get: method(z.object({ id: z.string() }), IntegrationWithStateSchema),\n getByAddonId: method(\n z.object({ addonId: z.string() }),\n IntegrationLiteSchema.nullable()\n ),\n create: method(\n CreateIntegrationInputSchema,\n IntegrationLiteSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n update: method(\n UpdateIntegrationInputSchema,\n IntegrationLiteSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n delete: method(\n z.object({ id: z.string() }),\n DeleteIntegrationResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n getSettings: method(\n z.object({ id: z.string() }),\n z.record(z.string(), z.unknown()),\n { auth: \"admin\" }\n ),\n setSettings: method(\n z.object({\n id: z.string(),\n settings: z.record(z.string(), z.unknown())\n }),\n z.object({ success: z.boolean() }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n getAvailableTypes: method(\n z.void(),\n z.array(AvailableIntegrationTypeSchema),\n { auth: \"admin\" }\n ),\n testConnection: method(\n z.object({\n addonId: z.string(),\n settings: z.record(z.string(), z.unknown())\n }),\n TestConnectionResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n )\n }\n};\nconst LogLevelSchema = z.enum([\"debug\", \"info\", \"warn\", \"error\"]);\nconst ChannelSchema = z.enum([\"off\", \"latest\", \"beta\"]);\nconst ChannelWithInheritSchema = z.enum([\"off\", \"latest\", \"beta\", \"inherit\"]);\nconst ManifestShapeSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n version: z.string().optional(),\n description: z.string().optional(),\n icon: z.string().optional(),\n color: z.string().optional(),\n // Loose schema for `manifest.capabilities` — runtime entries are\n // either kebab-case strings (legacy form) or `CapabilityDeclaration`\n // objects. The cap output schema deliberately keeps it as\n // `readonly unknown[]` so admin-ui consumers cast to the canonical\n // `AddonListItem` (from `@camstack/types`) before reading fields.\n capabilities: z.array(z.unknown()).readonly().optional(),\n packageName: z.string(),\n packageVersion: z.string(),\n packageDisplayName: z.string().optional(),\n /**\n * Bundle metadata when the npm package ships multiple addon entries\n * (mirror of `AddonPackageManifest.bundle` in @camstack/types). When\n * present, the admin UI groups all entries with the same packageName\n * under a collapsible bundle card. Single-entry packages omit this.\n */\n bundle: z.object({\n displayName: z.string(),\n description: z.string().optional(),\n icon: z.string().optional()\n }).optional(),\n protected: z.boolean().optional(),\n removable: z.boolean().optional()\n});\nconst AddonProcessSchema = z.object({\n pid: z.number().optional(),\n mode: z.string(),\n state: z.string()\n});\nconst AddonHealthSchema = z.object({\n phase: z.enum([\"pending\", \"healthy\", \"failed\"]),\n retryCount: z.number(),\n firstFailureAt: z.number().nullable(),\n lastAttemptAt: z.number().nullable(),\n lastError: z.object({ message: z.string(), stack: z.string().optional() }).nullable(),\n nextRetryAt: z.number().nullable(),\n alertEmitted: z.boolean(),\n retrying: z.boolean(),\n inGracePeriod: z.boolean()\n});\nconst AddonListItemSchema = z.object({\n manifest: ManifestShapeSchema,\n declaration: z.unknown().optional(),\n source: z.string(),\n installSource: z.string().optional(),\n process: AddonProcessSchema.optional(),\n /**\n * True when `applyUpdate` last ran for this package and a pre-update\n * backup is still on disk (post-update health-check hasn't cleared\n * it yet, or the user hasn't called `clearBackup`). Drives the\n * Rollback button visibility in admin-ui's AddonCard.\n */\n hasBackup: z.boolean().optional(),\n /** Kernel health snapshot — null when monitor doesn't track this package. */\n health: AddonHealthSchema.nullable().optional()\n});\nconst InstalledPackageSchema = z.object({\n name: z.string(),\n version: z.string(),\n dir: z.string(),\n installSource: z.string().optional()\n});\nconst PackageUpdateSchema = z.object({\n name: z.string(),\n currentVersion: z.string(),\n latestVersion: z.string(),\n category: z.enum([\"addon\", \"core\"]),\n requiresRestart: z.boolean()\n});\nconst PackageVersionInfoSchema = z.object({\n version: z.string(),\n publishedAt: z.string(),\n deprecated: z.string().optional(),\n distTags: z.array(z.string()).readonly()\n});\nconst SearchResultSchema = z.object({\n name: z.string(),\n version: z.string(),\n description: z.string(),\n keywords: z.array(z.string()).readonly(),\n publishedAt: z.string(),\n author: z.string(),\n installed: z.boolean(),\n installedVersion: z.string().optional()\n});\nconst AutoUpdateSettingsSchema = z.object({\n channel: ChannelSchema,\n intervalSeconds: z.number()\n});\nconst AddonAutoUpdateSchema = ChannelWithInheritSchema;\nconst RestartAddonResultSchema = z.unknown();\nconst InstallPackageResultSchema = z.unknown();\nconst ReloadPackagesResultSchema = z.unknown();\nconst LogStreamEntrySchema = z.object({\n timestamp: z.string(),\n level: z.string(),\n message: z.string(),\n scope: z.string().optional()\n});\nconst LogQueryEntrySchema = z.unknown();\nconst CustomActionInputSchema = z.object({\n addonId: z.string().min(1),\n action: z.string().min(1),\n input: z.unknown()\n});\nconst addonsCapability = {\n name: \"addons\",\n scope: \"system\",\n mode: \"singleton\",\n methods: {\n // ── Listing ──────────────────────────────────────────────────────\n list: method(z.void(), z.array(AddonListItemSchema).readonly()),\n // ── Logs (query) ────────────────────────────────────────────────\n // Default auth (`protected`): authenticated users — including scoped\n // tokens with the right route-prefix scope. Reading logs isn't an\n // administrative action; install/restart/uninstall stay admin-only.\n getLogs: method(\n z.object({\n addonId: z.string(),\n limit: z.number().min(1).max(500).default(100),\n level: LogLevelSchema.optional()\n }),\n z.array(LogQueryEntrySchema)\n ),\n // ── Packages ────────────────────────────────────────────────────\n listPackages: method(z.void(), z.array(InstalledPackageSchema).readonly()),\n installPackage: method(\n z.object({ packageName: z.string(), version: z.string().optional() }),\n InstallPackageResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n installFromWorkspace: method(\n z.object({ packageName: z.string() }),\n InstallPackageResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n isWorkspaceAvailable: method(z.void(), z.boolean()),\n listWorkspacePackages: method(z.void(), z.array(z.unknown()).readonly()),\n uninstallPackage: method(\n z.object({ packageName: z.string() }),\n z.unknown(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n reloadPackages: method(z.void(), ReloadPackagesResultSchema, {\n kind: \"mutation\",\n auth: \"admin\"\n }),\n // Note: original router declared `searchAvailable` input as optional\n // outer object. The cap codegen requires a stable input shape — we\n // make `query` optional inside a required object to preserve client\n // call shape (`{ query?: string }`).\n searchAvailable: method(\n z.object({ query: z.string().optional() }),\n z.array(SearchResultSchema)\n ),\n listUpdates: method(\n z.void(),\n z.array(PackageUpdateSchema).readonly(),\n { auth: \"admin\" }\n ),\n updatePackage: method(\n z.object({ name: z.string().min(1), version: z.string().optional() }),\n z.unknown(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Roll back an addon to the version it had before the most recent\n * `updatePackage` call. The backup directory pointer is kept in the\n * central addon manifest until the post-update health-check\n * confirms the new install works (then it's cleared automatically),\n * so this only succeeds when the most recent update either failed\n * its restart or the user explicitly wants to revert.\n *\n * Returns `{ rolledBackTo: <version> }` on success, or\n * `{ rolledBackTo: null }` when there's no backup to roll back to\n * (caller can show a \"no backup available\" UI).\n */\n rollbackPackage: method(\n z.object({ name: z.string().min(1) }),\n z.object({ rolledBackTo: z.string().nullable() }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n forceRefresh: method(z.void(), z.unknown(), { kind: \"mutation\", auth: \"admin\" }),\n restartServer: method(\n z.object({ confirm: z.literal(true) }),\n z.unknown(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n getVersions: method(\n z.object({ name: z.string() }),\n z.array(PackageVersionInfoSchema).readonly()\n ),\n restartAddon: method(\n z.object({ addonId: z.string() }),\n RestartAddonResultSchema,\n { kind: \"mutation\", auth: \"admin\" }\n ),\n /**\n * Force-retry a failed addon NOW. Resets the retry counter so the\n * next failure starts from the 60s interval again. Used by the\n * \"Retry now\" button in the Addons admin page row + AlertCenter\n * alert action. Idempotent on healthy addons (no-op).\n */\n retryLoad: method(\n z.object({ packageName: z.string() }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n // ── Auto-update ─────────────────────────────────────────────────\n getAutoUpdateSettings: method(\n z.void(),\n AutoUpdateSettingsSchema,\n { auth: \"admin\" }\n ),\n setAutoUpdateSettings: method(\n z.object({\n channel: ChannelSchema,\n intervalSeconds: z.number().min(300).max(86400).optional()\n }),\n z.unknown(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n getAddonAutoUpdate: method(\n z.object({ addonId: z.string() }),\n AddonAutoUpdateSchema,\n { auth: \"admin\" }\n ),\n setAddonAutoUpdate: method(\n z.object({ addonId: z.string(), channel: ChannelWithInheritSchema }),\n z.unknown(),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n applyAutoUpdateToAll: method(\n z.object({ channel: ChannelSchema }),\n z.object({ success: z.literal(true) }),\n { kind: \"mutation\", auth: \"admin\" }\n ),\n // ── Custom action dispatcher ────────────────────────────────────\n // Generic dispatcher used by `bindAddonActions`. Per-action auth\n // is enforced inside the provider; the outer cap auth is\n // `protected` (any authenticated user) so individual addons can\n // gate their own actions to public/protected/admin/superAdmin.\n custom: method(CustomActionInputSchema, z.unknown(), { kind: \"mutation\" }),\n // ── Log streaming ───────────────────────────────────────────────\n onAddonLogs: method(\n z.object({\n addonId: z.string(),\n level: LogLevelSchema.optional()\n }),\n LogStreamEntrySchema,\n { kind: \"subscription\" }\n )\n }\n};\nconst PIPELINE_FLOW_CAPABILITY_NAMES = [\n \"decoder\",\n \"motion-detection\",\n \"pipeline-executor\",\n \"audio-analyzer\",\n \"pipeline-analytics\",\n \"notification-output\"\n];\nconst PIPELINE_OWNER_CAPABILITY_NAMES = [\n ...PIPELINE_FLOW_CAPABILITY_NAMES,\n \"pipeline-orchestrator\",\n \"pipeline-runner\"\n];\nexport {\n nativeObjectDetectionCapability as $,\n adminUiCapability as A,\n advancedNotifierCapability as B,\n alertsCapability as C,\n audioAnalysisCapability as D,\n audioAnalyzerCapability as E,\n audioCodecCapability as F,\n authProviderCapability as G,\n authenticationCapability as H,\n backupCapability as I,\n cameraCredentialsCapability as J,\n decoderCapability as K,\n detectionPipelineCapability as L,\n deviceExportCapability as M,\n deviceManagerCapability as N,\n deviceOpsCapability as O,\n deviceStateCapability as P,\n embeddingEncoderCapability as Q,\n eventsCapability as R,\n integrationsCapability as S,\n intercomCapability as T,\n localNetworkCapability as U,\n logDestinationCapability as V,\n meshNetworkCapability as W,\n meshOrchestratorCapability as X,\n metricsProviderCapability as Y,\n motionDetectionCapability as Z,\n mqttBrokerCapability as _,\n zoneRulesCapability as a,\n AudioEventSchema as a$,\n networkAccessCapability as a0,\n networkQualityCapability as a1,\n nodesCapability as a2,\n notificationOutputCapability as a3,\n osdCapability as a4,\n pipelineAnalyticsCapability as a5,\n pipelineExecutorCapability as a6,\n pipelineOrchestratorCapability as a7,\n pipelineRunnerCapability as a8,\n platformProbeCapability as a9,\n AUDIO_MACRO_LABELS as aA,\n AccessoriesStatusSchema as aB,\n AccessoryKind as aC,\n AddBrokerInputSchema as aD,\n AddonAutoUpdateSchema as aE,\n AddonListItemSchema as aF,\n AddonPageDeclarationSchema as aG,\n AddonPageInfoSchema as aH,\n AgentLoadSummarySchema as aI,\n AlertSchema as aJ,\n AlertSeveritySchema as aK,\n AlertSourceSchema as aL,\n AlertStatusSchema as aM,\n ApiKeyRecordSchema as aN,\n ApiKeySummarySchema as aO,\n ArchiveEntrySchema as aP,\n ArchiveManifestSchema as aQ,\n AudioAnalysisResultSchema as aR,\n AudioAnalysisSettingsSchema as aS,\n AudioChunkInputSchema as aT,\n AudioClassSummarySchema as aU,\n AudioClassificationLabelSchema as aV,\n AudioClassificationResultSchema as aW,\n AudioCodecInfoSchema as aX,\n AudioDecodeSessionConfigSchema as aY,\n AudioEncodeSessionConfigSchema as aZ,\n AudioEncodedChunkSchema as a_,\n ptzCapability as aa,\n rebootCapability as ab,\n recordingCapability as ac,\n recordingEngineCapability as ad,\n remoteAccessCapability as ae,\n restreamerCapability as af,\n settingsStoreCapability as ag,\n smtpProviderCapability as ah,\n snapshotCapability as ai,\n snapshotProviderCapability as aj,\n ssoBridgeCapability as ak,\n storageCapability as al,\n storageProviderCapability as am,\n streamBrokerCapability as an,\n streamingEngineCapability as ao,\n systemCapability as ap,\n toastCapability as aq,\n turnOrchestratorCapability as ar,\n turnProviderCapability as as,\n userManagementCapability as at,\n userPasskeysCapability as au,\n webrtcCapability as av,\n webrtcSessionCapability as aw,\n ACCESSORY_LABEL as ax,\n APPLE_SA_TO_MACRO as ay,\n AUDIO_BACKEND_CHOICES as az,\n zoneAnalyticsCapability as b,\n DeviceExportStatusSchema as b$,\n AudioLevelSchema as b0,\n AudioMetricsHistoryPointSchema as b1,\n AudioMetricsHistorySchema as b2,\n AudioMetricsSnapshotSchema as b3,\n AudioPcmChunkSchema as b4,\n AuthProviderInfoSchema as b5,\n AuthResultSchema as b6,\n AutoUpdateSettingsSchema as b7,\n AvailableIntegrationTypeSchema as b8,\n BATTERY_DEVICE_PROFILE as b9,\n ClusterAddonNodeDeploymentSchema as bA,\n ClusterAddonStatusEntrySchema as bB,\n CollectionColumnSchema as bC,\n CollectionIndexSchema as bD,\n ConfigEntrySchema$1 as bE,\n ConfigSectionWithValuesSchema as bF,\n ConfigTabDeclarationSchema as bG,\n CreateApiKeyInputSchema as bH,\n CreateApiKeyResultSchema as bI,\n CreateIntegrationInputSchema as bJ,\n CreateScopedTokenInputSchema as bK,\n CreateScopedTokenResultSchema as bL,\n CreateUserInputSchema as bM,\n CustomActionInputSchema as bN,\n DEFAULT_AUDIO_ANALYZER_CONFIG as bO,\n DEFAULT_DECODER_HWACCEL_CONFIG as bP,\n DEVICE_PROFILES as bQ,\n DEVICE_SETTINGS_CONTRIBUTION_METHODS as bR,\n DEVICE_STATUS_METHOD as bS,\n DecodedFrameSchema as bT,\n DecoderAssignmentSchema as bU,\n DecoderSessionConfigSchema as bV,\n DecoderStatsSchema as bW,\n DeleteIntegrationResultSchema as bX,\n DetectorOutputSchema as bY,\n DeviceDiscoveryStatusSchema as bZ,\n ExposeInputSchema as b_,\n BackupDestinationInfoSchema as ba,\n BackupEntrySchema as bb,\n BatteryStatusSchema as bc,\n BoundingBoxSchema as bd,\n BrightnessStatusSchema as be,\n BrokerAudioClientSchema as bf,\n BrokerClientsSchema as bg,\n BrokerConnectionDetailsSchema as bh,\n BrokerDecodedClientSchema as bi,\n BrokerInfoSchema as bj,\n BrokerRtspClientSchema as bk,\n BrokerStatsSchema as bl,\n BrokerStatusSchema$1 as bm,\n CAM_PROFILE_ORDER as bn,\n CamProfileSchema as bo,\n CamStreamKindSchema as bp,\n CamStreamResolutionSchema as bq,\n CameraCredentialsSchema as br,\n CameraCredentialsStatusSchema as bs,\n CameraMetricsSchema as bt,\n CameraMetricsWithDeviceIdSchema as bu,\n CameraStreamSchema as bv,\n CapScopeSchema as bw,\n CapabilityBindingsSchema as bx,\n ChargingStatus as by,\n ClientNetworkStatsSchema as bz,\n motionCapability as c,\n OsdOverlayPatchSchema as c$,\n UnexposeInputSchema as c0,\n DeviceFeature as c1,\n DeviceInfoSchema as c2,\n DeviceNetworkStatsSchema as c3,\n DeviceRole as c4,\n DeviceStatusSchema as c5,\n DeviceType as c6,\n DiscoveredChildDeviceSchema as c7,\n DiscoveredChildStatusSchema as c8,\n DiscoveredDeviceSchema as c9,\n LogLevelSchema$1 as cA,\n LogStreamEntrySchema as cB,\n MODEL_FORMATS as cC,\n MediaFileSchema as cD,\n MethodAccessSchema as cE,\n MotionAnalysisResultSchema as cF,\n MotionEventSchema as cG,\n MotionOnMotionChangedDataSchema as cH,\n MotionRegionSchema as cI,\n MotionSourceEnum as cJ,\n MotionSourcesSchema as cK,\n MotionStatusSchema as cL,\n MotionTriggerRuntimeStateSchema as cM,\n MotionTriggerStatusSchema as cN,\n StatusSchema as cO,\n NativeDetectionSchema as cP,\n NativeObjectClassEnum as cQ,\n NativeObjectDetectionStatusSchema as cR,\n NetworkAccessStatusSchema as cS,\n NetworkAddressSchema as cT,\n NetworkEndpointSchema as cU,\n NotificationHistoryEntrySchema as cV,\n NotificationRuleSchema as cW,\n NotificationSchema as cX,\n ObjectEventSchema as cY,\n OrchestratorMetricsSchema as cZ,\n OsdOverlayKindEnum as c_,\n DoorbellPressEventSchema as ca,\n DoorbellStatusSchema as cb,\n EmbeddingInfoSchema as cc,\n EmbeddingResultSchema as cd,\n EncodedPacketSchema as ce,\n EnrichedWidgetMetadataSchema as cf,\n EventItemSchema as cg,\n EventKindSchema as ch,\n ExposedDeviceSchema as ci,\n ExposedResourceSchema as cj,\n FeatureManifestSchema as ck,\n FeatureProbeStatusSchema as cl,\n FrameInputSchema as cm,\n GetStreamWithCodecInputSchema as cn,\n GlobalMetricsSchema as co,\n HWACCEL_OPTIONS as cp,\n HealthStatusSchema as cq,\n HistoryPointSchema as cr,\n HistoryResolutionEnum as cs,\n InstalledPackageSchema as ct,\n IntegrationLiteSchema as cu,\n IntegrationWithStateSchema as cv,\n IntercomAbilitySchema as cw,\n IntercomStatusSchema as cx,\n LocationStatSchema as cy,\n LogEntrySchema as cz,\n doorbellCapability as d,\n StorageLocationSchema as d$,\n OsdOverlaySchema as d0,\n OsdPositionEnum as d1,\n OsdStatusSchema as d2,\n PIPELINE_FLOW_CAPABILITY_NAMES as d3,\n PIPELINE_OWNER_CAPABILITY_NAMES as d4,\n PackageUpdateSchema as d5,\n PackageVersionInfoSchema as d6,\n PasskeySummarySchema as d7,\n PcmSampleFormatSchema as d8,\n PerScopeBreakdownSchema as d9,\n RunnerCameraDeviceUIFields as dA,\n RunnerLocalLoadSchema as dB,\n RunnerLocalMetricsSchema as dC,\n STORAGE_LOCATION_CARDINALITY as dD,\n ScopedTokenSchema as dE,\n ScopedTokenSummarySchema as dF,\n SearchResultSchema as dG,\n SegmentSchema as dH,\n SendEmailInputSchema as dI,\n SendEmailResultSchema as dJ,\n SettingsPatchSchema as dK,\n SettingsRecordSchema as dL,\n SettingsSchemaWithValuesSchema as dM,\n SettingsUpdateResultSchema as dN,\n SmtpStatusSchema as dO,\n SnapshotImageSchema as dP,\n SpatialDetectionSchema as dQ,\n SsoBridgeClaimsSchema as dR,\n StartEmbeddedInputSchema as dS,\n AbortUploadInputSchema as dT,\n BeginDownloadInputSchema as dU,\n BeginDownloadResultSchema as dV,\n BeginUploadInputSchema as dW,\n BeginUploadResultSchema as dX,\n EndDownloadInputSchema as dY,\n FinalizeUploadInputSchema as dZ,\n StorageLocationRefSchema as d_,\n PipelineAssignmentSchema as da,\n PipelineDefaultStepSchema as db,\n PipelineEngineChoiceSchema as dc,\n PipelineRunResultBridge as dd,\n PipelineStepInputSchema as de,\n PlaceholderReasonSchema as df,\n PolygonPointSchema as dg,\n ProfileSlotSchema as dh,\n ProfileSlotStatusSchema as di,\n ProviderStatusSchema as dj,\n PtzAutotrackRuntimeStateSchema as dk,\n PtzAutotrackSettingsSchema as dl,\n PtzAutotrackStatusSchema as dm,\n PtzAutotrackTargetOptionSchema as dn,\n PtzMoveCommandSchema as dp,\n PtzPositionSchema as dq,\n PtzPresetSchema as dr,\n QueryFilterSchema as ds,\n RegisteredStreamSchema as dt,\n RemoteAccessEndpointSchema as du,\n RemoteAccessProviderInfoSchema as dv,\n ReportMotionInputSchema as dw,\n RtpSourceSchema as dx,\n RtspRestreamEntrySchema as dy,\n RunnerCameraConfigSchema as dz,\n errMsg as e,\n StorageLocationTypeSchema as e0,\n ProviderInfoSchema as e1,\n ReadChunkInputSchema as e2,\n TestLocationResultSchema as e3,\n WriteChunkInputSchema as e4,\n StreamFormatSchema as e5,\n StreamInfoSchema as e6,\n StreamNetworkStatsSchema as e7,\n StreamSourceEntrySchema$1 as e8,\n StreamSourceSchema as e9,\n ZoneRuleModeEnum as eA,\n ZoneRuleSchema as eB,\n ZoneRuleStageEnum as eC,\n ZoneRulesArraySchema as eD,\n ZoneSchema as eE,\n ZoneScopeBreakdownSchema as eF,\n accessoryStableId as eG,\n deviceMatchesProfile as eH,\n event as eI,\n expandCapMethods as eJ,\n getAudioMacroClassIds as eK,\n mapAudioLabelToMacro as eL,\n method as eM,\n resolveDeviceProfile as eN,\n webrtcClientHintsSchema as eO,\n SwitchStatusSchema as ea,\n SystemMetricsSchema as eb,\n TestConnectionResultSchema as ec,\n ToastSchema as ed,\n TokenScopeSchema as ee,\n TopologyNodeSchema as ef,\n TopologyProcessSchema as eg,\n TopologyServiceSchema as eh,\n TrackSchema as ei,\n TrackStateSchema as ej,\n TrackedDetectionSchema as ek,\n TurnProviderInfoSchema as el,\n TurnServerSchema as em,\n UpdateIntegrationInputSchema as en,\n UpdateUserInputSchema as eo,\n UserRecordSchema as ep,\n UserSummarySchema as eq,\n WELL_KNOWN_TABS as er,\n WELL_KNOWN_TAB_MAP as es,\n WebrtcStreamChoiceSchema as et,\n WebrtcStreamTargetSchema as eu,\n WidgetHostEnum as ev,\n WidgetMetadataSchema as ew,\n WidgetSizeEnum as ex,\n YAMNET_TO_MACRO as ey,\n ZoneKindEnum as ez,\n featureProbeCapability as f,\n deviceStatusCapability as g,\n hydrateSchema as h,\n deviceDiscoveryCapability as i,\n cameraStreamsCapability as j,\n brightnessCapability as k,\n batteryCapability as l,\n motionTriggerCapability as m,\n audioMetricsCapability as n,\n deviceProviderCapability as o,\n ptzAutotrackCapability as p,\n accessoriesCapability as q,\n addonPagesCapability as r,\n switchCapability as s,\n addonPagesSourceCapability as t,\n addonRoutesCapability as u,\n addonSettingsCapability as v,\n addonWidgetsCapability as w,\n addonWidgetsSourceCapability as x,\n addonsCapability as y,\n zonesCapability as z\n};\n//# sourceMappingURL=index-YnRVILXN.mjs.map\n","import { h as hydrateSchema, e as errMsg, z as zonesCapability, a as zoneRulesCapability, b as zoneAnalyticsCapability, s as switchCapability, p as ptzAutotrackCapability, m as motionTriggerCapability, c as motionCapability, f as featureProbeCapability, d as doorbellCapability, g as deviceStatusCapability, i as deviceDiscoveryCapability, j as cameraStreamsCapability, k as brightnessCapability, l as batteryCapability, n as audioMetricsCapability, o as deviceProviderCapability, q as accessoriesCapability, r as addonPagesCapability, t as addonPagesSourceCapability, u as addonRoutesCapability, v as addonSettingsCapability, w as addonWidgetsCapability, x as addonWidgetsSourceCapability, y as addonsCapability, A as adminUiCapability, B as advancedNotifierCapability, C as alertsCapability, D as audioAnalysisCapability, E as audioAnalyzerCapability, F as audioCodecCapability, G as authProviderCapability, H as authenticationCapability, I as backupCapability, J as cameraCredentialsCapability, K as decoderCapability, L as detectionPipelineCapability, M as deviceExportCapability, N as deviceManagerCapability, O as deviceOpsCapability, P as deviceStateCapability, Q as embeddingEncoderCapability, R as eventsCapability, S as integrationsCapability, T as intercomCapability, U as localNetworkCapability, V as logDestinationCapability, W as meshNetworkCapability, X as meshOrchestratorCapability, Y as metricsProviderCapability, Z as motionDetectionCapability, _ as mqttBrokerCapability, $ as nativeObjectDetectionCapability, a0 as networkAccessCapability, a1 as networkQualityCapability, a2 as nodesCapability, a3 as notificationOutputCapability, a4 as osdCapability, a5 as pipelineAnalyticsCapability, a6 as pipelineExecutorCapability, a7 as pipelineOrchestratorCapability, a8 as pipelineRunnerCapability, a9 as platformProbeCapability, aa as ptzCapability, ab as rebootCapability, ac as recordingCapability, ad as recordingEngineCapability, ae as remoteAccessCapability, af as restreamerCapability, ag as settingsStoreCapability, ah as smtpProviderCapability, ai as snapshotCapability, aj as snapshotProviderCapability, ak as ssoBridgeCapability, al as storageCapability, am as storageProviderCapability, an as streamBrokerCapability, ao as streamingEngineCapability, ap as systemCapability, aq as toastCapability, ar as turnOrchestratorCapability, as as turnProviderCapability, at as userManagementCapability, au as userPasskeysCapability, av as webrtcCapability, aw as webrtcSessionCapability } from \"./index-YnRVILXN.mjs\";\nimport { ax, ay, az, aA, aB, aC, aD, aE, aF, aG, aH, aI, aJ, aK, aL, aM, aN, aO, aP, aQ, aR, aS, aT, aU, aV, aW, aX, aY, aZ, a_, a$, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk, bl, bm, bn, bo, bp, bq, br, bs, bt, bu, bv, bw, bx, by, bz, bA, bB, bC, bD, bE, bF, bG, bH, bI, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bS, bT, bU, bV, bW, bX, bY, bZ, b_, b$, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf, cg, ch, ci, cj, ck, cl, cm, cn, co, cp, cq, cr, cs, ct, cu, cv, cw, cx, cy, cz, cA, cB, cC, cD, cE, cF, cG, cH, cI, cJ, cK, cL, cM, cN, cO, cP, cQ, cR, cS, cT, cU, cV, cW, cX, cY, cZ, c_, c$, d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df, dg, dh, di, dj, dk, dl, dm, dn, dp, dq, dr, ds, dt, du, dv, dw, dx, dy, dz, dA, dB, dC, dD, dE, dF, dG, dH, dI, dJ, dK, dL, dM, dN, dO, dP, dQ, dR, dS, dT, dU, dV, dW, dX, dY, dZ, d_, d$, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef, eg, eh, ei, ej, ek, el, em, en, eo, ep, eq, er, es, et, eu, ev, ew, ex, ey, ez, eA, eB, eC, eD, eE, eF, eG, eH, eI, eJ, eK, eL, eM, eN, eO } from \"./index-YnRVILXN.mjs\";\nimport { z } from \"zod\";\nclass DisposerChain {\n disposers = [];\n disposed = false;\n onError;\n constructor(opts = {}) {\n this.onError = opts.onError ?? ((err, index) => {\n console.error(`[DisposerChain] disposer #${index} threw`, err);\n });\n }\n /**\n * Register a teardown callback. Returns an unregister function so\n * callers can drop a single disposer without disposing the whole\n * chain.\n *\n * If the chain has already been disposed, the callback runs immediately\n * (sync) — this matches the “register-after-shutdown” edge case where\n * an addon's late initialization races with kernel restart.\n */\n add(fn) {\n if (this.disposed) {\n try {\n const result = fn();\n if (result && typeof result.then === \"function\") {\n ;\n result.catch((err) => this.onError(err, -1));\n }\n } catch (err) {\n this.onError(err, -1);\n }\n return () => void 0;\n }\n this.disposers.push(fn);\n return () => {\n const idx = this.disposers.indexOf(fn);\n if (idx >= 0) this.disposers.splice(idx, 1);\n };\n }\n /** True after `dispose()` has been called at least once. */\n get isDisposed() {\n return this.disposed;\n }\n /** Number of disposers currently registered. */\n get size() {\n return this.disposers.length;\n }\n /**\n * Run every registered disposer in LIFO order. Idempotent: subsequent\n * calls do nothing. Awaits async disposers so callers can sequence\n * shutdown → restart correctly.\n */\n async dispose() {\n if (this.disposed) return;\n this.disposed = true;\n const drain = this.disposers.slice().reverse();\n this.disposers = [];\n for (let i = 0; i < drain.length; i++) {\n const fn = drain[i];\n try {\n const result = fn();\n if (result && typeof result.then === \"function\") {\n await result;\n }\n } catch (err) {\n this.onError(err, drain.length - 1 - i);\n }\n }\n }\n}\nconst DEFAULT_ADDON_GROUP = \"main-group\";\nconst DEFAULT_ADDON_PLACEMENT = \"hub-only\";\nfunction resolveAddonExecution(decl) {\n return {\n placement: decl.execution?.placement ?? DEFAULT_ADDON_PLACEMENT,\n group: decl.execution?.group ?? DEFAULT_ADDON_GROUP\n };\n}\nfunction isDeployableToAgent(decl) {\n const placement = resolveAddonExecution(decl).placement;\n return placement === \"any-node\" || placement === \"agent-only\";\n}\nfunction isAgentOnlyPlacement(decl) {\n return resolveAddonExecution(decl).placement === \"agent-only\";\n}\nfunction resolveAddonGroup(decl) {\n return resolveAddonExecution(decl).group;\n}\nfunction resolveAddonPlacement(decl) {\n return resolveAddonExecution(decl).placement;\n}\nvar EventCategory = /* @__PURE__ */ ((EventCategory2) => {\n EventCategory2[\"SystemBoot\"] = \"system.boot\";\n EventCategory2[\"SystemAddonsReady\"] = \"system.addons-ready\";\n EventCategory2[\"SystemRestarting\"] = \"system.restarting\";\n EventCategory2[\"SystemReadyState\"] = \"system.ready-state\";\n EventCategory2[\"AddonStarted\"] = \"addon.started\";\n EventCategory2[\"AddonStopped\"] = \"addon.stopped\";\n EventCategory2[\"AddonRestarted\"] = \"addon.restarted\";\n EventCategory2[\"AddonUpdated\"] = \"addon.updated\";\n EventCategory2[\"AddonInstalled\"] = \"addon.installed\";\n EventCategory2[\"AddonUninstalled\"] = \"addon.uninstalled\";\n EventCategory2[\"AddonCrashed\"] = \"addon.crashed\";\n EventCategory2[\"AddonError\"] = \"addon.error\";\n EventCategory2[\"AddonPageReady\"] = \"addon.page-ready\";\n EventCategory2[\"AddonWidgetReady\"] = \"addon.widget-ready\";\n EventCategory2[\"AddonLoadFailed\"] = \"addon.load-failed\";\n EventCategory2[\"AddonLoadRecovered\"] = \"addon.load-recovered\";\n EventCategory2[\"AddonRetryScheduled\"] = \"addon.retry-scheduled\";\n EventCategory2[\"AddonRetryAttempting\"] = \"addon.retry-attempting\";\n EventCategory2[\"DeviceRegistered\"] = \"device.registered\";\n EventCategory2[\"DeviceUnregistered\"] = \"device.unregistered\";\n EventCategory2[\"DeviceEnabled\"] = \"device.enabled\";\n EventCategory2[\"DeviceDisabled\"] = \"device.disabled\";\n EventCategory2[\"DeviceSettingsUpdated\"] = \"device.settings-updated\";\n EventCategory2[\"DeviceBindingsChanged\"] = \"device.bindings-changed\";\n EventCategory2[\"DeviceMetaChanged\"] = \"device.meta-changed\";\n EventCategory2[\"DeviceStreamsRegistered\"] = \"device.streams-registered\";\n EventCategory2[\"IntegrationEnabled\"] = \"integration.enabled\";\n EventCategory2[\"IntegrationDisabled\"] = \"integration.disabled\";\n EventCategory2[\"IntegrationDeleted\"] = \"integration.deleted\";\n EventCategory2[\"ProviderStarted\"] = \"provider.started\";\n EventCategory2[\"ProviderStopped\"] = \"provider.stopped\";\n EventCategory2[\"ProcessCrashed\"] = \"process.crashed\";\n EventCategory2[\"ProcessRestartScheduled\"] = \"process.restart_scheduled\";\n EventCategory2[\"ProcessRestarted\"] = \"process.restarted\";\n EventCategory2[\"RecordingStarted\"] = \"recording.started\";\n EventCategory2[\"RecordingStopped\"] = \"recording.stopped\";\n EventCategory2[\"RecordingError\"] = \"recording.error\";\n EventCategory2[\"RecordingHealthDegraded\"] = \"recording.health.degraded\";\n EventCategory2[\"RecordingStorageCritical\"] = \"recording.storage.critical\";\n EventCategory2[\"RecordingSegmentWritten\"] = \"recording.segment.written\";\n EventCategory2[\"RecordingPolicyFallback\"] = \"recording.policy.fallback\";\n EventCategory2[\"RecordingRetentionCompleted\"] = \"recording.retention.completed\";\n EventCategory2[\"DetectionEvent\"] = \"detection.event\";\n EventCategory2[\"SessionTrackNew\"] = \"session.track.new\";\n EventCategory2[\"SessionTrackExpired\"] = \"session.track.expired\";\n EventCategory2[\"BenchmarkProgress\"] = \"benchmark.progress\";\n EventCategory2[\"PlatformProbePhase\"] = \"platform-probe.phase\";\n EventCategory2[\"PipelineProgress\"] = \"pipeline.progress\";\n EventCategory2[\"PipelineTrace\"] = \"pipeline.trace\";\n EventCategory2[\"PipelineInferenceResult\"] = \"pipeline.inference-result\";\n EventCategory2[\"PipelineCameraAssigned\"] = \"pipeline.camera-assigned\";\n EventCategory2[\"PipelineCameraUnassigned\"] = \"pipeline.camera-unassigned\";\n EventCategory2[\"PipelineCameraUpdated\"] = \"pipeline.camera-updated\";\n EventCategory2[\"PipelineRunnerLoadSnapshot\"] = \"pipeline.runner-load-snapshot\";\n EventCategory2[\"PipelineCameraMetricsSnapshot\"] = \"pipeline.camera-metrics-snapshot\";\n EventCategory2[\"StreamBrokerMetricsSnapshot\"] = \"stream-broker.metrics-snapshot\";\n EventCategory2[\"StreamBrokerOnCamStreamDemand\"] = \"stream-broker.onCamStreamDemand\";\n EventCategory2[\"StreamBrokerOnCamStreamIdle\"] = \"stream-broker.onCamStreamIdle\";\n EventCategory2[\"StreamBrokerOnRequestStreamSourceRefresh\"] = \"stream-broker.onRequestStreamSourceRefresh\";\n EventCategory2[\"DeviceStateChanged\"] = \"device.state-changed\";\n EventCategory2[\"BatteryOnStatusChanged\"] = \"battery.onStatusChanged\";\n EventCategory2[\"DoorbellOnPressed\"] = \"doorbell.onPressed\";\n EventCategory2[\"PipelineEngineMetricsSnapshot\"] = \"pipeline.engine-metrics-snapshot\";\n EventCategory2[\"ClusterTopologySnapshot\"] = \"cluster.topology-snapshot\";\n EventCategory2[\"MetricsNodeResourcesSnapshot\"] = \"metrics.node-resources-snapshot\";\n EventCategory2[\"MetricsNodeProcessesSnapshot\"] = \"metrics.node-processes-snapshot\";\n EventCategory2[\"CapabilityBindingChanged\"] = \"capability.binding-changed\";\n EventCategory2[\"ModelDownloadProgress\"] = \"model.download.progress\";\n EventCategory2[\"AgentRegistered\"] = \"agent.registered\";\n EventCategory2[\"AgentUnregistered\"] = \"agent.unregistered\";\n EventCategory2[\"AgentOnline\"] = \"agent.online\";\n EventCategory2[\"AgentOffline\"] = \"agent.offline\";\n EventCategory2[\"WorkerOnline\"] = \"worker.online\";\n EventCategory2[\"WorkerOffline\"] = \"worker.offline\";\n EventCategory2[\"AgentTaskDispatched\"] = \"agent.task.dispatched\";\n EventCategory2[\"AgentTaskAssigned\"] = \"agent.task.assigned\";\n EventCategory2[\"AgentTrpcConnected\"] = \"agent.trpc.connected\";\n EventCategory2[\"AgentWsConnected\"] = \"agent.ws.connected\";\n EventCategory2[\"AgentWsDisconnected\"] = \"agent.ws.disconnected\";\n EventCategory2[\"AgentBackupActivated\"] = \"agent.backup.activated\";\n EventCategory2[\"OrchestrationSettingsUpdated\"] = \"orchestration.settings-updated\";\n EventCategory2[\"PipelineAgentHwaccelChanged\"] = \"pipeline.agent-hwaccel-changed\";\n EventCategory2[\"MotionAnalysis\"] = \"detection.motion-analysis\";\n EventCategory2[\"MotionZonesRaw\"] = \"detection.motion-zones-raw\";\n EventCategory2[\"MotionOnMotionChanged\"] = \"motion.on-motion-changed\";\n EventCategory2[\"DetectionResult\"] = \"detection.result\";\n EventCategory2[\"DetectionRaw\"] = \"detection.raw\";\n EventCategory2[\"DetectionCameraNative\"] = \"detection.camera-native\";\n EventCategory2[\"PipelineAudioInferenceResult\"] = \"pipeline.audio-inference-result\";\n EventCategory2[\"DetectionPhaseTransition\"] = \"detection.phase-transition\";\n EventCategory2[\"ProviderMotion\"] = \"provider.motion\";\n EventCategory2[\"ProviderDetection\"] = \"provider.detection\";\n EventCategory2[\"EnrichmentEmbeddingStored\"] = \"enrichment.embedding.stored\";\n EventCategory2[\"EnrichmentSceneStateChanged\"] = \"enrichment.scene.state-changed\";\n EventCategory2[\"EnrichmentActivitySummary\"] = \"enrichment.activity.summary\";\n EventCategory2[\"PipelineAnalyticsTrackStarted\"] = \"pipeline-analytics.track-started\";\n EventCategory2[\"PipelineAnalyticsTrackEnded\"] = \"pipeline-analytics.track-ended\";\n EventCategory2[\"PipelineAnalyticsDetectionEvent\"] = \"pipeline-analytics.detection-event\";\n EventCategory2[\"PipelineAnalyticsFrameTracked\"] = \"pipeline-analytics.frame-tracked\";\n EventCategory2[\"FrigateLiveEvent\"] = \"frigate.live-event\";\n EventCategory2[\"CameraStreamsProfileSlotsChanged\"] = \"camera-streams.onProfileSlotsChanged\";\n EventCategory2[\"StreamOnline\"] = \"stream.online\";\n EventCategory2[\"StreamOffline\"] = \"stream.offline\";\n EventCategory2[\"NetworkTunnelStarted\"] = \"network.tunnel.started\";\n EventCategory2[\"NetworkTunnelStopped\"] = \"network.tunnel.stopped\";\n EventCategory2[\"LocalNetworkChanged\"] = \"network.local.changed\";\n EventCategory2[\"BackupCompleted\"] = \"backup.completed\";\n EventCategory2[\"BackupRestored\"] = \"backup.restored\";\n EventCategory2[\"NotificationDispatched\"] = \"notification.dispatched\";\n EventCategory2[\"NotificationFailed\"] = \"notification.failed\";\n EventCategory2[\"DeviceUpdated\"] = \"device.updated\";\n EventCategory2[\"DeviceOnline\"] = \"device.online\";\n EventCategory2[\"DeviceOffline\"] = \"device.offline\";\n EventCategory2[\"DeviceAwake\"] = \"device.awake\";\n EventCategory2[\"DeviceSleeping\"] = \"device.sleeping\";\n EventCategory2[\"RetentionCleanup\"] = \"retention.cleanup\";\n return EventCategory2;\n})(EventCategory || {});\nfunction isEvent(event, category) {\n return event.category === category;\n}\nfunction createEvent(category, source, data) {\n return {\n id: typeof crypto !== \"undefined\" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).slice(2),\n timestamp: /* @__PURE__ */ new Date(),\n source,\n category,\n data\n };\n}\nfunction emitReadiness(bus, params) {\n const ts = params.ts ?? Date.now();\n bus.emit(createEvent(\n \"system.ready-state\",\n { type: \"capability\", id: params.capName, nodeId: params.sourceNodeId },\n {\n capName: params.capName,\n scope: params.scope,\n state: params.state,\n generation: params.generation,\n sourceNodeId: params.sourceNodeId,\n ts\n }\n ));\n}\nclass BaseAddon {\n _ctx = null;\n _config;\n /**\n * Per-process random id used as the `generation` stamp on every\n * `system.ready-state` event this addon emits. Constant for the\n * lifetime of this addon instance (== one process boot); consumer-\n * side registries derive a monotonic `epoch` by watching for\n * generation transitions.\n */\n _readinessGeneration = typeof crypto !== \"undefined\" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).slice(2, 14);\n /** Capability names this addon registered at init — used to emit matching `down` events on shutdown. */\n _registeredCapNames = [];\n /** Default config values. Provided via constructor. */\n defaults;\n constructor(defaults) {\n this.defaults = defaults;\n this._config = { ...defaults };\n }\n /**\n * Override to opt out of the automatic `system.ready-state` emission.\n * Returns `true` by default — addons that don't map cleanly to the\n * readiness protocol (e.g. pure collection providers whose readiness\n * is already reported per-device by upstream) can override to `false`\n * and emit manually.\n */\n get autoEmitReadiness() {\n return true;\n }\n // ── Public accessors ──────────────────────────────────────────────────\n /** The AddonContext, available after initialize(). */\n get ctx() {\n if (!this._ctx) throw new Error(`${this.constructor.name}: ctx accessed before initialize()`);\n return this._ctx;\n }\n /**\n * Non-throwing ctx accessor for code paths that can legitimately run\n * before `initialize()` has resolved — most commonly cap handlers the\n * hub invokes eagerly at page load (device-details aggregator pings\n * every addon's `getDeviceSettingsContribution` as soon as the page\n * mounts). Prefer `ctx` for the normal case; reach for this only in\n * capability methods that may be queried before the addon is wired up.\n */\n get ctxIfReady() {\n return this._ctx;\n }\n /** Current resolved config (defaults merged with persisted store values). */\n get config() {\n return this._config;\n }\n // ── ICamstackAddon lifecycle ──────────────────────────────────────────\n async initialize(context) {\n this._ctx = context;\n await this.resolveConfig();\n const result = await this.onInitialize();\n this.emitLifecycle(EventCategory.AddonStarted);\n const normalized = normalizeAddonInitResult(result);\n const providers = normalized && \"providers\" in normalized && normalized.providers ? normalized.providers : [];\n this._registeredCapNames = providers.map((p) => p.capability.name);\n return normalized;\n }\n /**\n * Called by the isolated-process runner AFTER `broker.start()`.\n * In-process addons never need this because the hub broker is already\n * running when `initialize()` fires. For forked children the broker\n * starts AFTER `initialize()`, so the readiness emit inside initialize()\n * fires before the broker can broadcast it. This method re-emits the\n * ready state once the transport is live.\n */\n postBrokerStart() {\n if (this.autoEmitReadiness && this._registeredCapNames.length > 0) {\n this.emitReadinessForProviders(\"ready\");\n }\n }\n /**\n * Called by the isolated-process runner / agent bootstrap once the broker\n * has started AND the hub node is connected — the moment `ctx.api.*` calls\n * to hub-provided capabilities become safe. Wrap any bootstrap work that\n * must query the hub (device restore, settings fetch, initial sync) in\n * `onHubConnected()` rather than `onInitialize()` — during `initialize()`\n * on a worker the broker is not yet connected and remote cap calls either\n * time out or throw \"Service not found\".\n *\n * Default implementation is a no-op. Override in subclasses that need it.\n * Never fires on hub-local in-process addons (the hub is its own node).\n */\n async onHubReachable() {\n }\n async shutdown() {\n this.emitLifecycle(EventCategory.AddonStopped);\n if (this.autoEmitReadiness) this.emitReadinessForProviders(\"down\");\n await this.onShutdown();\n for (const unsub of this._subscriptions) unsub();\n this._subscriptions = [];\n this._ctx = null;\n }\n /** Addon-specific cleanup. Override if needed. */\n async onShutdown() {\n }\n /**\n * Called after config is resolved during updateGlobalSettings/updateAddonSettings.\n * Override to react to config changes (e.g. restart a sampler, reconnect a service).\n * Not called during initialize() — use onInitialize() for initial setup.\n */\n async onConfigChanged() {\n }\n // ── Schema helpers (typed) ────────────────────────────────────────────\n /**\n * Create a ConfigField with `key` constrained to keys of TConfig.\n * Provides autocomplete and compile-time validation.\n */\n field(field) {\n return field;\n }\n /**\n * Create a full ConfigUISchema with typed sections.\n * Fields created via `this.field()` get key validation automatically.\n */\n schema(schema) {\n return schema;\n }\n // ── Settings schemas (override to provide UI) ─────────────────────────\n /** Override to provide global-level settings UI schema. */\n globalSettingsSchema() {\n return null;\n }\n /** Override to provide device-level settings UI schema. */\n deviceSettingsSchema() {\n return null;\n }\n // ── Two-level settings API (auto-implemented) ────────────────────────\n //\n // Note: the former three-level split (addon / global / device) collapsed\n // to two. `addon` and `global` both wrote to the same `writeAddonStore`\n // blob and every addon used exactly one of them; the distinction was\n // never semantically load-bearing. `global` won because it was the\n // widely-used one and the name reads naturally (per-node addon config).\n async getGlobalSettings(overlay) {\n const schema = this.globalSettingsSchema();\n if (!schema) return { sections: [] };\n const raw = await this._ctx?.settings?.readAddonStore() ?? {};\n return hydrateSchema(schema, overlay ? { ...raw, ...overlay } : raw);\n }\n async updateGlobalSettings(patch) {\n await this._ctx?.settings?.writeAddonStore(patch);\n await this.resolveConfig();\n await this.onConfigChanged();\n this.emitLifecycle(EventCategory.AddonUpdated, { level: \"global\" });\n this.maybeAutoRestart(patch, this.globalSettingsSchema());\n }\n /**\n * If any field in `patch` is marked `requiresRestart` in `schema`,\n * schedule an addon restart for the next tick. Deferred via\n * `setImmediate` so the tRPC mutation that triggered the write has\n * time to return its response before the addon is torn down and\n * re-initialised by `AddonRegistryService.restartAddon`.\n */\n maybeAutoRestart(patch, schema) {\n if (!schema) return;\n const restartKeys = /* @__PURE__ */ new Set();\n for (const section of schema.sections) {\n for (const field of section.fields) {\n if (field.type === \"separator\" || field.type === \"info\") continue;\n if (field.requiresRestart) {\n restartKeys.add(field.key);\n }\n }\n }\n if (restartKeys.size === 0) return;\n const changed = Object.keys(patch).some((k) => restartKeys.has(k));\n if (!changed) return;\n const ctx = this._ctx;\n if (!ctx) return;\n const addonId = ctx.id;\n setImmediate(() => {\n const api = ctx.api;\n api.addons?.restartAddon?.mutate({ addonId }).then(() => {\n ctx.logger.info(\"addon auto-restart triggered by restart-required setting change\", {\n meta: { changedFields: Object.keys(patch).filter((k) => restartKeys.has(k)) }\n });\n }).catch((err) => {\n ctx.logger.error(\"addon auto-restart failed\", {\n meta: { error: err instanceof Error ? err.message : String(err) }\n });\n });\n });\n }\n async getDeviceSettings(deviceId) {\n const schema = this.deviceSettingsSchema();\n if (!schema) return { sections: [] };\n const raw = await this._ctx?.settings?.readDeviceStore(deviceId) ?? {};\n return hydrateSchema(schema, raw);\n }\n async updateDeviceSettings(deviceId, patch) {\n await this._ctx?.settings?.writeDeviceStore(deviceId, patch);\n }\n // ── Event subscriptions (auto-cleanup on shutdown) ────────────────────\n _subscriptions = [];\n /**\n * Subscribe to an event bus category. The subscription is automatically\n * unsubscribed on shutdown — no manual cleanup needed.\n *\n * @example\n * ```ts\n * this.subscribe({ category: EventCategory.DeviceRegistered }, (event) => {\n * void this.handleDevice(event)\n * })\n * ```\n */\n /**\n * Subscribe to `system.ready-state` events for one or more capabilities.\n * Abstracts the boilerplate type-narrowing + nodeId extraction that every\n * resilience subscription duplicates. Cleanup is automatic (registered on\n * `_subscriptions` like a normal `subscribe` call).\n */\n watchCapability(capNames, handlers) {\n const names = Array.isArray(capNames) ? capNames : [capNames];\n const nameSet = new Set(names);\n this.subscribe(\n { category: \"system.ready-state\" },\n (event) => {\n const data = event.data;\n if (typeof data.capName !== \"string\") return;\n if (!nameSet.has(data.capName)) return;\n if (data.scope?.type !== \"node\") return;\n const nodeId = data.scope.nodeId;\n if (typeof nodeId !== \"string\" || nodeId.length === 0) return;\n const capName = data.capName;\n if (data.state === \"down\") {\n handlers.onDown?.(nodeId, capName);\n } else if (data.state === \"ready\") {\n handlers.onReady?.(nodeId, capName);\n }\n }\n );\n }\n subscribe(filter, handler) {\n const unsub = this.ctx.eventBus.subscribe(filter, handler);\n this._subscriptions.push(unsub);\n }\n // ── Lifecycle event emission ────────────────────────────────────────────\n emitLifecycle(category, data) {\n try {\n this._ctx?.eventBus.emit({\n id: `${this._ctx.id}-${Date.now()}`,\n timestamp: /* @__PURE__ */ new Date(),\n source: { type: \"addon\", id: this._ctx.id, nodeId: this._ctx.kernel.localNodeId ?? \"hub\" },\n category,\n data: data ?? {}\n });\n } catch {\n }\n }\n /**\n * Emit a `system.ready-state` event for every capability this addon\n * registered at init. Scope is `{type:'node', nodeId}` — readiness is\n * tied to the node that hosts the provider. Consumers that care about\n * per-device readiness can subscribe with `{type:'device', ...}` if\n * the provider emits at finer granularity (collection addons may\n * opt-out via `autoEmitReadiness` and emit manually).\n */\n emitReadinessForProviders(state) {\n const ctx = this._ctx;\n if (!ctx) return;\n if (this._registeredCapNames.length === 0) return;\n const rawNodeId = ctx.kernel?.localNodeId ?? \"hub\";\n const nodeId = rawNodeId.includes(\"/\") ? rawNodeId.split(\"/\")[0] : rawNodeId;\n for (const capName of this._registeredCapNames) {\n try {\n emitReadiness(ctx.eventBus, {\n capName,\n scope: { type: \"node\", nodeId },\n state,\n generation: this._readinessGeneration,\n sourceNodeId: nodeId\n });\n } catch {\n }\n }\n }\n // ── Common helpers ─────────────────────────────────────────────────────\n /**\n * Resolve the shared models directory path via the storage capability.\n * Falls back to `camstack-data/models` if storage is unavailable.\n * Used by inference addons (detection-pipeline, audio-classifier, embedding-encoder).\n */\n async resolveModelsDir() {\n return this.ctx.api.storage.resolve.query({ location: \"models\", relativePath: \"\" }).catch(() => \"camstack-data/models\");\n }\n /**\n * Access the runtime capability registry for in-process provider lookups.\n * Returns null if the registry is not available (e.g. on agents).\n * Used by addons that consume other capabilities directly (snapshot, stream-broker, enrichment).\n */\n get capabilities() {\n const capCtx = this.ctx;\n return capCtx.capabilities ?? null;\n }\n // ── Config resolution ─────────────────────────────────────────────────\n /**\n * Resolve config by merging defaults with persisted store values.\n * Called automatically during initialize() and after every updateSettings().\n *\n * The merge is shallow: each key in `defaults` is checked against the store.\n * Only keys present in defaults are read — the store can contain extra keys\n * (e.g. from older versions) without polluting the typed config.\n */\n async resolveConfig() {\n const stored = await this.readAddonStoreWithRetry();\n const resolved = { ...this.defaults };\n for (const key of Object.keys(this.defaults)) {\n const storedValue = stored[key];\n if (storedValue !== void 0 && storedValue !== null) {\n const defaultType = typeof this.defaults[key];\n if (typeof storedValue === defaultType) {\n resolved[key] = storedValue;\n }\n }\n }\n this._config = resolved;\n }\n /**\n * Wrap `ctx.settings.readAddonStore()` with a short retry budget so a\n * transient settings-store outage (mid-restart of sqlite-settings, tsx-watch\n * swap, or any race where the SqliteSettingsBackend is between shutdown and\n * re-initialize) doesn't propagate up into `initialize()` and leave the\n * addon permanently broken.\n *\n * Retry only the two known infra fingerprints. Anything else propagates so\n * real bugs surface immediately. After the budget expires we fall back to\n * `{}` (defaults) — the addon's first successful patch will rehydrate.\n */\n async readAddonStoreWithRetry() {\n const settings = this._ctx?.settings;\n if (!settings) return {};\n const delaysMs = [150, 350, 600, 900];\n let lastErr;\n for (let attempt = 0; attempt <= delaysMs.length; attempt++) {\n try {\n return await settings.readAddonStore() ?? {};\n } catch (err) {\n lastErr = err;\n const msg = err instanceof Error ? err.message : String(err);\n const transient = msg.includes(\"SqliteSettingsBackend not initialized\") || msg.includes(\"provider not available\");\n if (!transient) throw err;\n if (attempt === delaysMs.length) break;\n await new Promise((r) => setTimeout(r, delaysMs[attempt]));\n }\n }\n this._ctx?.logger?.warn?.(\"readAddonStore: settings-store unavailable after retries — using defaults\", {\n meta: { error: lastErr instanceof Error ? lastErr.message : String(lastErr) }\n });\n return {};\n }\n}\nfunction normalizeAddonInitResult(result) {\n if (result == null) return;\n if (Array.isArray(result)) return { providers: result };\n return result;\n}\nfunction buildAddonRouteProvider(id, routes) {\n return {\n id,\n getRoutes: () => routes,\n invoke: async (input) => {\n const match = matchRoute(routes, input.method, input.path);\n if (!match) {\n return {\n status: 404,\n headers: {},\n redirectUrl: null,\n body: { error: `No route matches ${input.method} ${input.path}` }\n };\n }\n const envelope = {\n status: 200,\n headers: {},\n redirectUrl: null\n };\n const reply = buildCapturingReply(envelope);\n const request = {\n params: { ...input.params, ...match.params },\n query: input.query,\n body: input.body,\n headers: input.headers,\n ...input.user ? { user: input.user } : {},\n // The scopedToken shape is intentionally `unknown` on the wire\n // (it includes nested `TokenScope` discriminated unions that\n // wouldn't gain from re-validation across the bridge).\n ...input.scopedToken !== void 0 ? { scopedToken: input.scopedToken } : {}\n };\n await match.route.handler(request, reply);\n return envelope;\n }\n };\n}\nfunction matchRoute(routes, method, path) {\n const normalizedMethod = method.toUpperCase();\n for (const route of routes) {\n if (route.method !== normalizedMethod) continue;\n const params = matchPath(route.path, path);\n if (params !== null) return { route, params };\n }\n return null;\n}\nfunction matchPath(pattern, p) {\n const patternParts = pattern.split(\"/\").filter(Boolean);\n const pathParts = p.split(\"/\").filter(Boolean);\n if (patternParts.length !== pathParts.length) return null;\n const params = {};\n for (let i = 0; i < patternParts.length; i++) {\n const a = patternParts[i];\n const b = pathParts[i];\n if (a.startsWith(\":\")) params[a.slice(1)] = b;\n else if (a !== b) return null;\n }\n return params;\n}\nfunction buildCapturingReply(envelope) {\n const wrapper = {\n status(code) {\n envelope.status = code;\n return wrapper;\n },\n code(code) {\n envelope.status = code;\n return wrapper;\n },\n send(data) {\n envelope.body = data;\n },\n redirect(url) {\n envelope.redirectUrl = url;\n if (envelope.status === 200) envelope.status = 302;\n },\n header(name, value) {\n envelope.headers[name.toLowerCase()] = value;\n return wrapper;\n },\n type(mime) {\n envelope.contentType = mime;\n return wrapper;\n }\n };\n return wrapper;\n}\nclass ReadinessTimeoutError extends Error {\n capName;\n scope;\n waitedMs;\n constructor(capName, scope, waitedMs) {\n super(`Timed out waiting for ${capName} (${scopeKey(scope)}) to become ready after ${waitedMs}ms`);\n this.name = \"ReadinessTimeoutError\";\n this.capName = capName;\n this.scope = scope;\n this.waitedMs = waitedMs;\n }\n}\nfunction readinessKey(capName, scope) {\n return `${capName}|${scopeKey(scope)}`;\n}\nfunction scopeKey(scope) {\n switch (scope.type) {\n case \"global\":\n return \"global\";\n case \"node\":\n return `node:${scope.nodeId}`;\n case \"device\":\n return `device:${scope.deviceId}`;\n }\n}\nfunction scopesEqual(a, b) {\n if (a.type !== b.type) return false;\n if (a.type === \"global\" || b.type === \"global\") return true;\n if (a.type === \"node\" && b.type === \"node\") return a.nodeId === b.nodeId;\n if (a.type === \"device\" && b.type === \"device\") return a.deviceId === b.deviceId;\n return false;\n}\nclass ReadinessRegistry {\n bus;\n sourceNodeId;\n logger;\n now;\n generation;\n snapshot = /* @__PURE__ */ new Map();\n subscriptions = /* @__PURE__ */ new Set();\n unsubscribeBus;\n unsubscribeAgentOffline;\n constructor(options) {\n this.bus = options.eventBus;\n this.sourceNodeId = options.sourceNodeId;\n this.logger = options.logger;\n this.now = options.now ?? (() => Date.now());\n this.generation = options.generation ?? randomGeneration();\n this.unsubscribeBus = this.bus.subscribe(\n { category: \"system.ready-state\" },\n (event) => this.ingest(event.data)\n );\n this.unsubscribeAgentOffline = this.bus.subscribe(\n { category: \"agent.offline\" },\n (event) => this.synthesizeDownForNode(event.data.agentId)\n );\n if (typeof this.bus.getRecent === \"function\") {\n try {\n const recent = this.bus.getRecent({ category: \"system.ready-state\" });\n for (const event of recent) {\n this.ingest(event.data);\n }\n } catch {\n }\n }\n }\n /** Release the event-bus subscription. Idempotent. */\n close() {\n this.unsubscribeBus();\n this.unsubscribeAgentOffline();\n this.subscriptions.clear();\n }\n /** Current snapshot for a `(capName, scope)` pair, or `null` if never seen. */\n get(capName, scope) {\n return this.snapshot.get(readinessKey(capName, scope)) ?? null;\n }\n /**\n * Serializable snapshot for cross-process transport. Returns an array\n * of `ReadinessRecord` plain objects — safe for MsgPack / JSON\n * transport. Used by the hub's `$readiness.getSnapshot` Moleculer\n * action; consumers hydrate their local registry from the result.\n */\n getSnapshotForTransport() {\n return Array.from(this.snapshot.values());\n }\n /**\n * Hydrate the snapshot from an authoritative source. Entries already\n * present locally are skipped — live deltas (received via the event\n * bus subscription) always take precedence over the snapshot. For\n * each newly hydrated entry, a one-shot transition is dispatched to\n * matching subscriptions so pending `awaitReady` callers unblock\n * without having to wait for a fresh event.\n *\n * Local `epoch` is reset to 1 per entry — consumer-side epoch is\n * derived from observed generation transitions, so this mirrors the\n * value that would have been assigned had the consumer observed the\n * first `ready` event directly.\n */\n hydrate(records) {\n const now = this.now();\n for (const record of records) {\n const key = readinessKey(record.capName, record.scope);\n if (this.snapshot.has(key)) continue;\n const hydrated = {\n capName: record.capName,\n scope: record.scope,\n state: record.state,\n generation: record.generation,\n epoch: 1,\n lastChange: now,\n sourceNodeId: record.sourceNodeId\n };\n this.snapshot.set(key, hydrated);\n if (this.logger) {\n this.logger.debug(\n `readiness: ${record.capName} (${scopeKey(record.scope)}) → ${record.state} (hydrated, gen=${record.generation.slice(0, 6)})`\n );\n }\n const transition = {\n capName: record.capName,\n scope: record.scope,\n state: record.state,\n epoch: 1,\n generation: record.generation,\n sourceNodeId: \"hydrated\",\n ts: now,\n durationInPrevState: 0\n };\n for (const sub of this.subscriptions) {\n if (sub.capName !== record.capName) continue;\n if (!scopesEqual(sub.scope, record.scope)) continue;\n try {\n sub.handler(transition);\n } catch (err) {\n this.logger?.warn(\n `readiness hydrate handler threw for ${record.capName}: ${err.message ?? String(err)}`\n );\n }\n }\n }\n }\n /** Shallow copy of the full snapshot — mainly for diagnostics/tests. */\n getAll() {\n return new Map(this.snapshot);\n }\n /**\n * Emit a `ready` transition for a locally-owned capability. The\n * payload carries this registry's `generation` so remote registries\n * can derive their own `epoch`.\n */\n emitReady(capName, scope) {\n this.emitTransition(capName, scope, \"ready\");\n }\n emitStarting(capName, scope) {\n this.emitTransition(capName, scope, \"starting\");\n }\n emitDown(capName, scope) {\n this.emitTransition(capName, scope, \"down\");\n }\n /**\n * One-shot: resolve once the cap is `ready`. Reads the snapshot\n * first — if already ready, resolves synchronously on the next tick.\n *\n * Default behaviour is **wait indefinitely** (timeoutMs = `Infinity`):\n * the orchestrator and other callers never want to attach a camera\n * with empty steps just because a cap took longer than 30s to come\n * up. Pass an explicit finite `timeoutMs` to bound the wait, or an\n * `AbortSignal` to cancel externally. `Infinity` is honoured natively\n * — no `setTimeout` is registered (Node's setTimeout silently clamps\n * values above ~24.8d, so we must skip the timer entirely).\n */\n awaitReady(capName, scope, opts = {}) {\n const timeoutMs = opts.timeoutMs ?? Number.POSITIVE_INFINITY;\n const start = this.now();\n const current = this.get(capName, scope);\n if (current?.state === \"ready\") {\n return Promise.resolve();\n }\n if (opts.signal?.aborted) {\n return Promise.reject(opts.signal.reason ?? new Error(\"aborted\"));\n }\n return new Promise((resolve, reject) => {\n let settled = false;\n const unsubscribe = this.onReadyState(capName, scope, (t) => {\n if (t.state !== \"ready\") return;\n if (settled) return;\n settled = true;\n cleanup();\n resolve();\n });\n const isInfinite = !Number.isFinite(timeoutMs);\n const timer = isInfinite ? null : setTimeout(() => {\n if (settled) return;\n settled = true;\n cleanup();\n reject(new ReadinessTimeoutError(capName, scope, this.now() - start));\n }, timeoutMs);\n const onAbort = () => {\n if (settled) return;\n settled = true;\n cleanup();\n reject(opts.signal?.reason ?? new Error(\"aborted\"));\n };\n opts.signal?.addEventListener(\"abort\", onAbort, { once: true });\n function cleanup() {\n unsubscribe();\n if (timer !== null) clearTimeout(timer);\n opts.signal?.removeEventListener(\"abort\", onAbort);\n }\n });\n }\n /**\n * Observable: every transition (starting/ready/down) dispatches to\n * `handler`. On subscription, if the snapshot has a current state,\n * the handler fires ONCE asynchronously with that state as the\n * initial transition (duration = 0) so late subscribers can pick up\n * current state without racing the next transition.\n *\n * Returns an unsubscribe function.\n */\n onReadyState(capName, scope, handler) {\n const sub = { capName, scope, handler };\n this.subscriptions.add(sub);\n const current = this.get(capName, scope);\n if (current !== null) {\n queueMicrotask(() => {\n if (!this.subscriptions.has(sub)) return;\n handler({\n capName,\n scope,\n state: current.state,\n epoch: current.epoch,\n generation: current.generation,\n sourceNodeId: this.sourceNodeId,\n ts: current.lastChange,\n durationInPrevState: 0\n });\n });\n }\n return () => {\n this.subscriptions.delete(sub);\n };\n }\n // ── Internals ─────────────────────────────────────────────────────────\n emitTransition(capName, scope, state) {\n const ts = this.now();\n this.bus.emit(createEvent(\n \"system.ready-state\",\n { type: \"capability\", id: capName, nodeId: this.sourceNodeId },\n {\n capName,\n scope,\n state,\n generation: this.generation,\n sourceNodeId: this.sourceNodeId,\n ts\n }\n ));\n }\n /**\n * Update snapshot + dispatch to subscribers. Idempotent: same\n * `generation + state` replay is a no-op for both snapshot and\n * subscribers.\n *\n * Defensive against malformed payloads (legal reason: a mock bus's\n * `getRecent` may ignore the category filter and replay unrelated\n * events when we hydrate at construction time).\n */\n ingest(payload) {\n if (typeof payload?.capName !== \"string\") return;\n if (payload.state !== \"ready\" && payload.state !== \"starting\" && payload.state !== \"down\") return;\n if (typeof payload.generation !== \"string\") return;\n if (payload.scope?.type !== \"global\" && payload.scope?.type !== \"node\" && payload.scope?.type !== \"device\") return;\n const key = readinessKey(payload.capName, payload.scope);\n const prev = this.snapshot.get(key) ?? null;\n const now = this.now();\n let epoch;\n if (prev === null) {\n epoch = payload.state === \"ready\" ? 1 : 0;\n } else if (prev.generation !== payload.generation && payload.state === \"ready\") {\n epoch = prev.epoch + 1;\n } else {\n epoch = prev.epoch;\n }\n if (prev !== null && prev.generation === payload.generation && prev.state === payload.state) {\n return;\n }\n const durationInPrevState = prev === null ? 0 : Math.max(0, now - prev.lastChange);\n const next = {\n capName: payload.capName,\n scope: payload.scope,\n state: payload.state,\n generation: payload.generation,\n epoch,\n lastChange: now,\n sourceNodeId: payload.sourceNodeId\n };\n this.snapshot.set(key, next);\n const transition = {\n capName: payload.capName,\n scope: payload.scope,\n state: payload.state,\n epoch,\n generation: payload.generation,\n sourceNodeId: payload.sourceNodeId,\n ts: payload.ts,\n durationInPrevState\n };\n if (this.logger) {\n this.logger.debug(\n `readiness: ${payload.capName} (${scopeKey(payload.scope)}) → ${payload.state} epoch=${epoch} gen=${payload.generation.slice(0, 6)} (prev ${durationInPrevState}ms)`\n );\n }\n for (const sub of this.subscriptions) {\n if (sub.capName !== payload.capName) continue;\n if (!scopesEqual(sub.scope, payload.scope)) continue;\n try {\n sub.handler(transition);\n } catch (err) {\n this.logger?.warn(`readiness handler threw for ${payload.capName}: ${err.message ?? String(err)}`);\n }\n }\n }\n /**\n * `agent.offline` demux. When an agent disconnects ungracefully,\n * its BaseAddon's shutdown hook doesn't fire — consumers would\n * otherwise keep waiting on a stale `ready`. Walk the snapshot and\n * synthesize a `down` transition for every node-scoped record bound\n * to the disconnected `nodeId`, skipping records already `down`.\n *\n * Synthesis is LOCAL: we don't re-emit on the bus. Every registry\n * (one per process) receives the same `agent.offline` and reacts\n * independently, which means no duplicated downs and no central\n * supervisor required.\n */\n synthesizeDownForNode(offlineNodeId) {\n const now = this.now();\n for (const [key, record] of this.snapshot) {\n if (record.state === \"down\") continue;\n const matchesOfflineNode = record.scope.type === \"node\" && record.scope.nodeId === offlineNodeId || record.scope.type === \"device\" && record.sourceNodeId === offlineNodeId;\n if (!matchesOfflineNode) continue;\n const durationInPrevState = Math.max(0, now - record.lastChange);\n const next = {\n ...record,\n state: \"down\",\n lastChange: now\n };\n this.snapshot.set(key, next);\n const transition = {\n capName: record.capName,\n scope: record.scope,\n state: \"down\",\n epoch: record.epoch,\n generation: record.generation,\n sourceNodeId: this.sourceNodeId,\n ts: now,\n durationInPrevState\n };\n if (this.logger) {\n this.logger.debug(\n `readiness: ${record.capName} (${scopeKey(record.scope)}) → down (synthesized from agent.offline ${offlineNodeId})`\n );\n }\n for (const sub of this.subscriptions) {\n if (sub.capName !== record.capName) continue;\n if (!scopesEqual(sub.scope, record.scope)) continue;\n try {\n sub.handler(transition);\n } catch (err) {\n this.logger?.warn(`readiness handler threw during agent.offline demux for ${record.capName}: ${err.message ?? String(err)}`);\n }\n }\n }\n }\n}\nfunction randomGeneration() {\n if (typeof crypto !== \"undefined\" && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return Math.random().toString(36).slice(2, 14);\n}\nfunction emitDownForOwnedCaps(registry, owned) {\n for (const { capName, scope } of owned) {\n registry.emitDown(capName, scope);\n }\n}\nconst STORAGE_LOCATION_TYPES = [\n \"data\",\n \"media\",\n \"recordings\",\n \"recordings-high\",\n \"recordings-low\",\n \"recordings-clips\",\n \"event-images\",\n \"models\",\n \"addons-data\",\n \"cache\",\n \"logs\",\n \"backups\"\n];\nconst DEFAULT_LOCATION_SUBDIRS = {\n \"data\": \"db\",\n \"media\": \"media\",\n \"recordings\": \"recordings\",\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 \"backups\": \"backups\"\n};\nconst STREAM_QUALITY_LABELS = {\n high: \"High\",\n mid: \"Mid\",\n low: \"Low\"\n};\nfunction streamQualityLabel(id) {\n return STREAM_QUALITY_LABELS[id] ?? id.charAt(0).toUpperCase() + id.slice(1);\n}\nfunction streamPixels(meta) {\n return (meta.width ?? 0) * (meta.height ?? 0);\n}\nfunction classifyStreams(streams) {\n if (streams.length === 0) return [];\n const sorted = streams.map((s, i) => ({ s, i, px: streamPixels(s.metadata ?? {}) })).sort((a, b) => b.px - a.px);\n const result = Array.from({ length: streams.length });\n for (let rank = 0; rank < sorted.length; rank++) {\n const { s, i } = sorted[rank];\n let quality;\n if (rank === 0) quality = \"high\";\n else if (rank === sorted.length - 1) quality = \"low\";\n else quality = \"mid\";\n result[i] = { ...s, quality };\n }\n return result;\n}\nfunction classifyStream(meta) {\n const h = meta.height ?? 0;\n const w = meta.width ?? 0;\n if (h >= 1080 || w >= 1920) return \"high\";\n if (h >= 480 || w >= 640) return \"mid\";\n return \"low\";\n}\nfunction toStreamSourceEntry(stream) {\n const urlProto = stream.protocols.find((p) => p.type === \"rtsp\" && p.url) ?? stream.protocols.find((p) => p.url);\n const protocolRaw = urlProto?.type;\n const protocol = protocolRaw === \"rtsp\" ? \"rtsp\" : protocolRaw === \"http\" || protocolRaw === \"flv\" ? \"http-mjpeg\" : \"custom\";\n return {\n id: stream.id,\n label: stream.label ?? stream.id,\n protocol,\n url: urlProto?.url,\n profileHint: stream.quality\n };\n}\nfunction isString(v) {\n return typeof v === \"string\";\n}\nfunction isRecord(v) {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\nfunction parseStreamEntry(v) {\n if (isString(v) && v.trim()) return { url: v };\n if (isRecord(v) && isString(v[\"url\"]) && v[\"url\"].trim()) {\n return {\n url: v[\"url\"],\n label: isString(v[\"label\"]) ? v[\"label\"] : void 0\n };\n }\n return null;\n}\nfunction parseCameraStreamConfig(raw) {\n const snapshotUrl = isString(raw[\"snapshot_url\"]) ? raw[\"snapshot_url\"] : void 0;\n if (Array.isArray(raw[\"streams\"])) {\n const streams2 = [];\n for (const item of raw[\"streams\"]) {\n const entry = parseStreamEntry(item);\n if (entry) streams2.push(entry);\n }\n return { streams: streams2, snapshot_url: snapshotUrl };\n }\n const streams = [];\n const mainUrl = isString(raw[\"main_stream_url\"]) ? raw[\"main_stream_url\"] : void 0;\n if (mainUrl) streams.push({ url: mainUrl, label: isString(raw[\"main_stream_name\"]) ? raw[\"main_stream_name\"] : void 0 });\n const subUrl = isString(raw[\"sub_stream_url\"]) ? raw[\"sub_stream_url\"] : void 0;\n if (subUrl) streams.push({ url: subUrl, label: isString(raw[\"sub_stream_name\"]) ? raw[\"sub_stream_name\"] : void 0 });\n const thirdUrl = isString(raw[\"third_stream_url\"]) ? raw[\"third_stream_url\"] : void 0;\n if (thirdUrl) streams.push({ url: thirdUrl, label: isString(raw[\"third_stream_name\"]) ? raw[\"third_stream_name\"] : void 0 });\n return {\n streams,\n snapshot_url: snapshotUrl\n };\n}\nfunction autoAssignProfiles(streams) {\n if (streams.length === 0) return {};\n const classified = classifyStreams(streams);\n const map = {};\n const high = classified.find((s) => s.quality === \"high\");\n const mid = classified.find((s) => s.quality === \"mid\");\n const low = classified.find((s) => s.quality === \"low\");\n if (high) map.high = high.id;\n if (mid) map.mid = mid.id;\n if (low) map.low = low.id;\n const fallback = high ?? mid ?? low ?? classified[0];\n if (fallback) {\n if (!map.high) map.high = fallback.id;\n if (!map.mid) map.mid = fallback.id;\n if (!map.low) map.low = fallback.id;\n }\n return map;\n}\nconst DEFAULT_FEATURES = {\n streaming: true,\n notifications: true,\n objectDetection: false,\n remoteAccess: true,\n agentCluster: false,\n smartHome: true,\n recordings: true,\n backup: true,\n repl: true\n};\nconst SUB_DETECTION_TYPES = [\"face\", \"plate\"];\nconst RECOGNITION_TYPES = [\"face\", \"plate\", \"clip\", \"custom\"];\nconst DEFAULT_RETENTION = {\n cleanupIntervalMs: 60 * 60 * 1e3,\n detectionEventsDays: 30,\n audioLevelsDays: 7,\n snapshotsDays: 14\n};\nvar EventSourceType = /* @__PURE__ */ ((EventSourceType2) => {\n EventSourceType2[\"Addon\"] = \"addon\";\n EventSourceType2[\"Core\"] = \"core\";\n EventSourceType2[\"Device\"] = \"device\";\n EventSourceType2[\"Provider\"] = \"provider\";\n EventSourceType2[\"System\"] = \"system\";\n return EventSourceType2;\n})(EventSourceType || {});\nconst HF_REPO = \"camstack/camstack-models\";\nconst HF_BASE_URL = `https://huggingface.co/${HF_REPO}/resolve/main`;\nconst RUNTIME_DEFAULTS = {\n \"features.streaming\": true,\n \"features.notifications\": true,\n \"features.objectDetection\": false,\n \"features.remoteAccess\": true,\n \"features.agentCluster\": false,\n \"features.smartHome\": true,\n \"features.recordings\": true,\n \"features.backup\": true,\n \"features.repl\": true,\n \"retention.detectionEventsDays\": 30,\n \"retention.audioLevelsDays\": 7,\n \"logging.level\": \"info\",\n \"logging.retentionDays\": 30,\n \"eventBus.ringBufferSize\": 1e4,\n \"storage.provider\": \"sqlite-storage\",\n \"storage.locations\": {\n data: \"camstack-data/data\",\n media: \"camstack-data/media\",\n recordings: \"camstack-data/recordings\",\n cache: \"/tmp/camstack-cache\",\n logs: \"camstack-data/logs\",\n models: \"camstack-data/models\"\n },\n \"providers\": [],\n // Recording\n \"recording.segmentDurationSeconds\": 4,\n \"recording.defaultRetentionDays\": 30,\n // Streaming ports are addon-specific (go2rtc owns its defaults)\n // FFmpeg\n \"ffmpeg.binaryPath\": \"ffmpeg\",\n \"ffmpeg.hwAccel\": \"auto\",\n \"ffmpeg.threadCount\": 0,\n // Detection / motion / audio settings are owned by their respective addons\n // (pipeline-orchestrator, motion-wasm, audio-analyzer/classifier, detection-pipeline\n // step schemas). No detection defaults at this level.\n // Backup retention is addon-specific (local-backup owns its default)\n // Auth (runtime)\n \"auth.tokenExpiry\": \"24h\"\n};\nfunction parseJsonUnknown(text) {\n const parsed = JSON.parse(text);\n return parsed;\n}\nfunction asJsonObject(value) {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n return { ...value };\n}\nfunction asJsonArray(value) {\n return Array.isArray(value) ? value : [];\n}\nfunction asString(value, fallback = \"\") {\n return typeof value === \"string\" ? value : fallback;\n}\nfunction asNumber(value, fallback = 0) {\n return typeof value === \"number\" ? value : fallback;\n}\nfunction asBoolean(value, fallback = false) {\n return typeof value === \"boolean\" ? value : fallback;\n}\nfunction parseJsonObject(text) {\n try {\n return asJsonObject(parseJsonUnknown(text));\n } catch {\n return null;\n }\n}\nfunction parseJsonArray(text) {\n try {\n const parsed = parseJsonUnknown(text);\n return Array.isArray(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\nfunction hfModelUrl(repo, path) {\n return `https://huggingface.co/${repo}/resolve/main/${path}`;\n}\nfunction cosineSimilarity(a, b) {\n if (a.length !== b.length) return 0;\n let dotProduct = 0;\n let normA = 0;\n let normB = 0;\n for (let i = 0; i < a.length; i++) {\n dotProduct += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n const denom = Math.sqrt(normA) * Math.sqrt(normB);\n return denom === 0 ? 0 : dotProduct / denom;\n}\nclass ElementConfigStore {\n constructor(elementId, settingsBackend) {\n this.elementId = elementId;\n this.getBackend = typeof settingsBackend === \"function\" ? settingsBackend : () => settingsBackend;\n }\n cache = {};\n listeners = /* @__PURE__ */ new Set();\n loaded = false;\n getBackend;\n /** Load config from storage into cache. Called once on first access. */\n async ensureLoaded() {\n if (this.loaded) return;\n const backend = this.getBackend();\n if (!backend) {\n throw new Error(`ElementConfigStore(${this.elementId}): settings backend not available`);\n }\n const records = await backend.query({ collection: \"config\", filter: {\n where: { id: this.elementId },\n limit: 1\n } });\n if (records.length > 0) {\n this.cache = records[0].data ?? {};\n }\n this.loaded = true;\n }\n getAll() {\n return { ...this.cache };\n }\n get(key) {\n const parts = key.split(\".\");\n let current = this.cache;\n for (const part of parts) {\n if (current === null || typeof current !== \"object\" || Array.isArray(current)) return void 0;\n current = Reflect.get(current, part);\n }\n return current;\n }\n async set(key, value) {\n await this.ensureLoaded();\n setNestedValue(this.cache, key, value);\n await this.persist();\n this.notifyListeners();\n }\n async setAll(config) {\n await this.ensureLoaded();\n this.cache = { ...config };\n await this.persist();\n this.notifyListeners();\n }\n onChange(callback) {\n this.listeners.add(callback);\n return () => {\n this.listeners.delete(callback);\n };\n }\n /** Initialize from storage — called by ContextFactory after creation */\n async load() {\n await this.ensureLoaded();\n }\n /** Initialize with default values (doesn't overwrite existing) */\n async loadDefaults(defaults) {\n await this.ensureLoaded();\n if (Object.keys(this.cache).length === 0) {\n this.cache = { ...defaults };\n await this.persist();\n }\n }\n async persist() {\n const backend = this.getBackend();\n if (!backend) {\n throw new Error(`ElementConfigStore(${this.elementId}): settings backend not available — cannot persist config`);\n }\n await backend.set({ collection: \"config\", key: this.elementId, value: this.cache });\n }\n notifyListeners() {\n const snapshot = this.getAll();\n for (const listener of this.listeners) {\n try {\n listener(snapshot);\n } catch {\n }\n }\n }\n}\nfunction setNestedValue(obj, path, value) {\n const parts = path.split(\".\");\n let current = obj;\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n const existing = current[part];\n if (existing === null || typeof existing !== \"object\" || Array.isArray(existing)) {\n const fresh = {};\n current[part] = fresh;\n current = fresh;\n } else {\n current = existing;\n }\n }\n current[parts[parts.length - 1]] = value;\n}\nconst BACKEND_TO_FORMAT = {\n // Node.js backends — all ONNX (onnxruntime-node execution providers)\n cpu: \"onnx\",\n coreml: \"onnx\",\n // onnxruntime CoreML EP loads .onnx, not .mlpackage\n cuda: \"onnx\",\n tensorrt: \"onnx\",\n \"onnx-py\": \"onnx\",\n // Python native backends\n pytorch: \"pt\",\n openvino: \"openvino\"\n};\nconst RUNTIME_TO_FORMAT = {\n onnx: \"onnx\",\n coreml: \"coreml\",\n openvino: \"openvino\",\n tflite: \"tflite\",\n pytorch: \"pt\"\n};\nconst PYTHON_SCRIPT = {\n coreml: \"coreml_inference.py\",\n pytorch: \"pytorch_inference.py\",\n openvino: \"openvino_inference.py\"\n};\nfunction resolveDetectionRuntime(pipelineRuntime, backend) {\n if (pipelineRuntime === \"node\") return \"onnx\";\n const map = {\n coreml: \"coreml\",\n openvino: \"openvino\",\n pytorch: \"pytorch\",\n \"onnx-py\": \"onnx\",\n cpu: \"onnx\"\n };\n return map[backend] ?? backend;\n}\nfunction resolveModelFormat(pipelineRuntime, backend) {\n if (pipelineRuntime === \"node\") {\n return BACKEND_TO_FORMAT[backend] ?? \"onnx\";\n }\n const map = {\n coreml: \"coreml\",\n openvino: \"openvino\",\n pytorch: \"pt\",\n \"onnx-py\": \"onnx\",\n cpu: \"onnx\"\n };\n return map[backend] ?? \"onnx\";\n}\nfunction resolveAddonRuntime(pipelineRuntime, backend) {\n if (!pipelineRuntime || pipelineRuntime === \"auto\") return \"auto\";\n return resolveDetectionRuntime(pipelineRuntime, backend ?? \"cpu\");\n}\nfunction formatForBackend(backend) {\n return BACKEND_TO_FORMAT[backend] ?? \"onnx\";\n}\nfunction formatForRuntime(runtime) {\n return RUNTIME_TO_FORMAT[runtime];\n}\nfunction pythonScriptForBackend(backend) {\n return PYTHON_SCRIPT[backend];\n}\nfunction requiresPython(runtime) {\n return runtime === \"coreml\" || runtime === \"pytorch\" || runtime === \"openvino\";\n}\nasync function runInferenceStep(fn, timeoutMs) {\n const t0 = performance.now();\n try {\n const output = timeoutMs !== void 0 ? await withTimeout(fn(), timeoutMs) : await fn();\n return {\n output,\n durationMs: roundMs(performance.now() - t0),\n ok: true\n };\n } catch (err) {\n return {\n output: void 0,\n durationMs: roundMs(performance.now() - t0),\n ok: false,\n error: errMsg(err)\n };\n }\n}\nfunction roundMs(ms) {\n return Math.round(ms * 100) / 100;\n}\nfunction withTimeout(promise, ms) {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => reject(new Error(`Inference timeout after ${ms}ms`)), ms);\n promise.then((v) => {\n clearTimeout(timer);\n resolve(v);\n }).catch((e) => {\n clearTimeout(timer);\n reject(e);\n });\n });\n}\nconst COCO_80_LABELS = [\n { id: \"person\", name: \"Person\" },\n { id: \"bicycle\", name: \"Bicycle\" },\n { id: \"car\", name: \"Car\" },\n { id: \"motorcycle\", name: \"Motorcycle\" },\n { id: \"airplane\", name: \"Airplane\" },\n { id: \"bus\", name: \"Bus\" },\n { id: \"train\", name: \"Train\" },\n { id: \"truck\", name: \"Truck\" },\n { id: \"boat\", name: \"Boat\" },\n { id: \"traffic light\", name: \"Traffic Light\" },\n { id: \"fire hydrant\", name: \"Fire Hydrant\" },\n { id: \"stop sign\", name: \"Stop Sign\" },\n { id: \"parking meter\", name: \"Parking Meter\" },\n { id: \"bench\", name: \"Bench\" },\n { id: \"bird\", name: \"Bird\" },\n { id: \"cat\", name: \"Cat\" },\n { id: \"dog\", name: \"Dog\" },\n { id: \"horse\", name: \"Horse\" },\n { id: \"sheep\", name: \"Sheep\" },\n { id: \"cow\", name: \"Cow\" },\n { id: \"elephant\", name: \"Elephant\" },\n { id: \"bear\", name: \"Bear\" },\n { id: \"zebra\", name: \"Zebra\" },\n { id: \"giraffe\", name: \"Giraffe\" },\n { id: \"backpack\", name: \"Backpack\" },\n { id: \"umbrella\", name: \"Umbrella\" },\n { id: \"handbag\", name: \"Handbag\" },\n { id: \"tie\", name: \"Tie\" },\n { id: \"suitcase\", name: \"Suitcase\" },\n { id: \"frisbee\", name: \"Frisbee\" },\n { id: \"skis\", name: \"Skis\" },\n { id: \"snowboard\", name: \"Snowboard\" },\n { id: \"sports ball\", name: \"Sports Ball\" },\n { id: \"kite\", name: \"Kite\" },\n { id: \"baseball bat\", name: \"Baseball Bat\" },\n { id: \"baseball glove\", name: \"Baseball Glove\" },\n { id: \"skateboard\", name: \"Skateboard\" },\n { id: \"surfboard\", name: \"Surfboard\" },\n { id: \"tennis racket\", name: \"Tennis Racket\" },\n { id: \"bottle\", name: \"Bottle\" },\n { id: \"wine glass\", name: \"Wine Glass\" },\n { id: \"cup\", name: \"Cup\" },\n { id: \"fork\", name: \"Fork\" },\n { id: \"knife\", name: \"Knife\" },\n { id: \"spoon\", name: \"Spoon\" },\n { id: \"bowl\", name: \"Bowl\" },\n { id: \"banana\", name: \"Banana\" },\n { id: \"apple\", name: \"Apple\" },\n { id: \"sandwich\", name: \"Sandwich\" },\n { id: \"orange\", name: \"Orange\" },\n { id: \"broccoli\", name: \"Broccoli\" },\n { id: \"carrot\", name: \"Carrot\" },\n { id: \"hot dog\", name: \"Hot Dog\" },\n { id: \"pizza\", name: \"Pizza\" },\n { id: \"donut\", name: \"Donut\" },\n { id: \"cake\", name: \"Cake\" },\n { id: \"chair\", name: \"Chair\" },\n { id: \"couch\", name: \"Couch\" },\n { id: \"potted plant\", name: \"Potted Plant\" },\n { id: \"bed\", name: \"Bed\" },\n { id: \"dining table\", name: \"Dining Table\" },\n { id: \"toilet\", name: \"Toilet\" },\n { id: \"tv\", name: \"TV\" },\n { id: \"laptop\", name: \"Laptop\" },\n { id: \"mouse\", name: \"Mouse\" },\n { id: \"remote\", name: \"Remote\" },\n { id: \"keyboard\", name: \"Keyboard\" },\n { id: \"cell phone\", name: \"Cell Phone\" },\n { id: \"microwave\", name: \"Microwave\" },\n { id: \"oven\", name: \"Oven\" },\n { id: \"toaster\", name: \"Toaster\" },\n { id: \"sink\", name: \"Sink\" },\n { id: \"refrigerator\", name: \"Refrigerator\" },\n { id: \"book\", name: \"Book\" },\n { id: \"clock\", name: \"Clock\" },\n { id: \"vase\", name: \"Vase\" },\n { id: \"scissors\", name: \"Scissors\" },\n { id: \"teddy bear\", name: \"Teddy Bear\" },\n { id: \"hair drier\", name: \"Hair Drier\" },\n { id: \"toothbrush\", name: \"Toothbrush\" }\n];\nconst MACRO_LABELS = [\n { id: \"person\", name: \"Person\" },\n { id: \"vehicle\", name: \"Vehicle\" },\n { id: \"animal\", name: \"Animal\" }\n];\nconst COCO_TO_MACRO = {\n mapping: {\n person: \"person\",\n bicycle: \"vehicle\",\n car: \"vehicle\",\n motorcycle: \"vehicle\",\n airplane: \"vehicle\",\n bus: \"vehicle\",\n train: \"vehicle\",\n truck: \"vehicle\",\n boat: \"vehicle\",\n bird: \"animal\",\n cat: \"animal\",\n dog: \"animal\",\n horse: \"animal\",\n sheep: \"animal\",\n cow: \"animal\",\n elephant: \"animal\",\n bear: \"animal\",\n zebra: \"animal\",\n giraffe: \"animal\"\n },\n // Today the pipeline only supports the three macro classes. Any other\n // COCO class (carrot, umbrella, spoon, …) is dropped upstream in the\n // executor instead of leaking through as a `macroClass: \"carrot\"`\n // detection with no child routing. When support for additional COCO\n // classes lands, either add them to `mapping` (mapped to a new macro)\n // or flip this back to `true` and teach `matchesMacroFilter` to handle\n // the raw-COCO case.\n preserveOriginal: false\n};\nconst DEVICE_TYPE_INFO = {\n [\n \"camera\"\n /* Camera */\n ]: { type: \"camera\", label: \"Camera\", icon: \"camera\" }\n};\nclass DeviceConfig {\n schema;\n data;\n persistFn;\n constructor(schema, data, persist) {\n this.schema = schema;\n this.data = data;\n this.persistFn = persist;\n }\n /**\n * Build a `DeviceConfig` from a persisted blob, with automatic\n * recovery from schema-validation failures. Boot must never be\n * blocked by stale persisted values: if Zod rejects the blob,\n * we drop every offending top-level field, retry, and persist\n * the cleaned blob so the bad value is healed in the DB on next\n * write. The most common trigger is a tightened range constraint\n * (e.g. `max(100) → max(50)`) on a field that already has an\n * out-of-range value persisted from the previous schema. Without\n * this safety net, the device would fail to instantiate and end\n * up with no caps registered — exactly the failure mode that\n * stranded device 15 when `motionSensitivity: 90` no longer fit\n * the new `1..50` schema.\n *\n * Recovery rules:\n * 1. Try `safeParse(initialData)`. If it succeeds, done.\n * 2. On failure, walk `error.issues`, collect the top-level path\n * of each issue, and drop those keys from `initialData`.\n * 3. Re-run `safeParse`. If the cleaned blob now passes (Zod\n * fills the missing keys with schema defaults / undefined for\n * `.optional()`), persist it via `persist()` so the bad\n * values disappear from the DB, and return the device.\n * 4. If the cleaned blob STILL fails (very rare — would require\n * a non-recoverable required field), fall back to\n * `schema.parse({})` so the device still boots with pure\n * schema defaults. Persist nothing in that path so the next\n * successful `setAll` still writes a coherent blob.\n */\n static fromSchema(schema, persist, initialData = {}, onRecover) {\n const first = schema.safeParse(initialData);\n if (first.success) {\n return new DeviceConfig(schema, first.data, persist);\n }\n const droppedKeys = /* @__PURE__ */ new Set();\n for (const issue of first.error.issues) {\n const top = issue.path[0];\n if (typeof top === \"string\") droppedKeys.add(top);\n }\n const cleaned = { ...initialData };\n for (const k of droppedKeys) delete cleaned[k];\n const second = schema.safeParse(cleaned);\n onRecover?.({\n droppedKeys: [...droppedKeys],\n issues: first.error.issues\n });\n if (second.success) {\n void persist(second.data).catch(() => {\n });\n return new DeviceConfig(schema, second.data, persist);\n }\n const defaults = schema.parse({});\n return new DeviceConfig(schema, defaults, persist);\n }\n get values() {\n return this.data;\n }\n get(key) {\n return this.data[key];\n }\n async set(key, value) {\n const next = this.schema.parse({ ...this.data, [key]: value });\n this.data = next;\n await this.persistFn(this.data);\n }\n /**\n * Merge an untyped patch onto the current config and persist. Accepts\n * `Record<string, unknown>` because the patch typically comes from the\n * UI form layer (a `ConfigField.key → value` map) where the caller\n * doesn't hold the Zod schema's static type. Runtime validation is\n * authoritative: `this.schema.parse` rejects unknown keys or invalid\n * shapes before touching storage.\n */\n async setAll(partial) {\n const next = this.schema.parse({ ...this.data, ...partial });\n this.data = next;\n await this.persistFn(this.data);\n }\n async deleteKey(key) {\n const { [key]: _, ...rest } = this.data;\n const next = this.schema.parse(rest);\n this.data = next;\n await this.persistFn(this.data);\n }\n entries() {\n const shape = this.schema.shape;\n return Object.entries(shape).map(([key, fieldSchema]) => ({\n key,\n schema: fieldSchema,\n value: this.data[key],\n description: fieldSchema.description\n }));\n }\n}\nclass DeviceRuntimeState {\n writer;\n /** In-flight writer promises tracked so `flush()` can await them. */\n pendingWrites = /* @__PURE__ */ new Set();\n /** Per-cap committed slice — after schema validation when known. */\n slices;\n /** Per-cap registered schema (set by `installCapSchema`). */\n schemas = /* @__PURE__ */ new Map();\n listeners = /* @__PURE__ */ new Set();\n capListeners = /* @__PURE__ */ new Map();\n constructor(initial, writer) {\n this.writer = writer;\n this.slices = /* @__PURE__ */ new Map();\n for (const [k, v] of Object.entries(initial)) {\n if (v && typeof v === \"object\" && !Array.isArray(v)) {\n this.slices.set(k, { ...v });\n }\n }\n }\n static fromInitial(initial, writer) {\n return new DeviceRuntimeState(initial, writer);\n }\n installCapSchema(capName, schema) {\n const existing = this.schemas.get(capName);\n if (existing) {\n if (existing !== schema) {\n throw new Error(\n `[DeviceRuntimeState] capability \"${capName}\" registered a different runtime-state schema; each cap must declare ONE shape across every provider`\n );\n }\n return;\n }\n this.schemas.set(capName, schema);\n const stored = this.slices.get(capName);\n if (stored) {\n const result = schema.safeParse(stored);\n if (result.success) {\n this.slices.set(capName, result.data);\n } else {\n this.slices.delete(capName);\n }\n }\n }\n getCapState(capName) {\n const slice = this.slices.get(capName);\n if (!slice) return void 0;\n return Object.freeze({ ...slice });\n }\n getCapField(capName, key) {\n return this.slices.get(capName)?.[key];\n }\n setCapState(capName, value) {\n this.applyCapWrite(\n capName,\n value,\n /* merge */\n false\n );\n }\n patchCapState(capName, partial) {\n this.applyCapWrite(\n capName,\n partial,\n /* merge */\n true\n );\n }\n /**\n * Internal worker. `merge` controls whether `value` replaces or\n * shallow-merges into the existing slice. Schema validation runs\n * on the FINAL composed object regardless.\n */\n applyCapWrite(capName, value, merge) {\n const schema = this.schemas.get(capName);\n if (!schema) {\n throw new Error(\n `[DeviceRuntimeState] no schema registered for cap \"${capName}\" — did the device register it via ctx.registerNativeCap before writing?`\n );\n }\n const current = this.slices.get(capName) ?? {};\n const next = merge ? { ...current, ...value } : { ...value };\n const parsed = schema.parse(next);\n if (shallowEqual(current, parsed)) return;\n this.slices.set(capName, parsed);\n this.fireListeners([capName]);\n const writePromise = this.writer(capName, { ...parsed }).catch(() => {\n });\n this.pendingWrites.add(writePromise);\n void writePromise.finally(() => {\n this.pendingWrites.delete(writePromise);\n });\n }\n fireListeners(changed) {\n const snap = this.snapshot();\n for (const cb2 of this.listeners) {\n try {\n cb2(changed, snap);\n } catch {\n }\n }\n for (const capName of changed) {\n const subs = this.capListeners.get(capName);\n if (!subs) continue;\n const slice = this.getCapState(capName);\n for (const cb2 of subs) {\n try {\n cb2(slice);\n } catch {\n }\n }\n }\n }\n subscribe(cb2) {\n this.listeners.add(cb2);\n return () => {\n this.listeners.delete(cb2);\n };\n }\n subscribeCap(capName, cb2) {\n let subs = this.capListeners.get(capName);\n if (!subs) {\n subs = /* @__PURE__ */ new Set();\n this.capListeners.set(capName, subs);\n }\n const adapter = (slice) => {\n cb2(slice);\n };\n subs.add(adapter);\n return () => {\n const set = this.capListeners.get(capName);\n if (!set) return;\n set.delete(adapter);\n if (set.size === 0) this.capListeners.delete(capName);\n };\n }\n snapshot() {\n const out = {};\n for (const [k, v] of this.slices) out[k] = Object.freeze({ ...v });\n return Object.freeze(out);\n }\n async flush() {\n if (this.pendingWrites.size === 0) return;\n const inflight = [...this.pendingWrites];\n await Promise.allSettled(inflight);\n }\n}\nfunction shallowEqual(a, b) {\n const ak = Object.keys(a);\n const bk2 = Object.keys(b);\n if (ak.length !== bk2.length) return false;\n for (const k of ak) {\n if (a[k] !== b[k]) return false;\n }\n return true;\n}\nconst LAST_FETCHED_FIELD = \"lastFetchedAt\";\nfunction createRuntimeStateBridge(params) {\n const { runtimeState, cap, ownDeviceId, refresh, staleMs, empty } = params;\n const ensureFresh = async () => {\n const slice = runtimeState.getCapState(cap.name);\n const fetchedAt = typeof slice?.[LAST_FETCHED_FIELD] === \"number\" ? slice[LAST_FETCHED_FIELD] : 0;\n if (!slice || Date.now() - fetchedAt > staleMs) await refresh();\n };\n const projectStatus = () => {\n const slice = runtimeState.getCapState(cap.name);\n if (!slice) return empty();\n const { [LAST_FETCHED_FIELD]: _omit, ...rest } = slice;\n return rest;\n };\n const getStatus = async ({ deviceId }) => {\n if (deviceId !== ownDeviceId) {\n throw new Error(`${cap.name}: deviceId mismatch, expected ${ownDeviceId}, got ${deviceId}`);\n }\n await ensureFresh();\n return projectStatus();\n };\n return { ensureFresh, getStatus };\n}\nconst DEVICE_LOCAL_STATE_CAPS = {\n audioMetrics: audioMetricsCapability,\n battery: batteryCapability,\n brightness: brightnessCapability,\n cameraStreams: cameraStreamsCapability,\n deviceDiscovery: deviceDiscoveryCapability,\n deviceStatus: deviceStatusCapability,\n doorbell: doorbellCapability,\n featureProbe: featureProbeCapability,\n motion: motionCapability,\n motionTrigger: motionTriggerCapability,\n ptzAutotrack: ptzAutotrackCapability,\n switch: switchCapability,\n zoneAnalytics: zoneAnalyticsCapability,\n zoneRules: zoneRulesCapability,\n zones: zonesCapability\n};\nclass BaseDevice {\n id;\n stableId;\n type;\n name;\n parentDeviceId;\n role;\n /**\n * Cap-keyed runtime-state slice is the single source of truth for\n * `online`. Both getter and setter proxy to the slice — drivers can\n * write `this.online = true` ergonomically, and the cap event fires\n * automatically through the runtime-state writer. `markOnline()` is\n * kept as the explicit method form mandated by `IDevice`.\n */\n get online() {\n const slice = this.runtimeState.getCapState(\"device-status\");\n return slice?.online ?? false;\n }\n set online(value) {\n this.markOnline(value);\n }\n /**\n * Generic per-cap runtime-state namespace. One entry per cap with\n * `runtimeState:` declared, auto-generated by codegen — see\n * `device-local-state.ts`. Drivers access via:\n *\n * `this.state.battery.sleeping = true` // patches the battery slice\n * `const pct = this.state.battery.percentage` // reads the battery slice\n * `this.state.deviceStatus.online = true` // mirrors `markOnline(true)`\n *\n * Adding a new cap with `runtimeState:` automatically extends this\n * namespace — drivers don't have to declare proxies. Reads return\n * `undefined` when the slice hasn't been seeded; writes patch via\n * `runtimeState.patchCapState` and validate against the cap's schema\n * (so partial writes need the slice to be seeded with the required\n * fields first — drivers do this on cap registration).\n *\n * For caps not exposed in `DeviceLocalState`, drivers can build their\n * own typed proxy via `this.sliceProxy(cap)`.\n */\n get state() {\n if (!this._stateProxyCache) {\n const cache = {};\n const handler = {\n get: (_target, key) => {\n const k = key;\n if (k in cache) return cache[k];\n const cap = DEVICE_LOCAL_STATE_CAPS[k];\n if (!cap) return void 0;\n const proxy = this.sliceProxy(cap);\n cache[k] = proxy;\n return proxy;\n }\n };\n this._stateProxyCache = new Proxy(cache, handler);\n }\n return this._stateProxyCache;\n }\n _stateProxyCache;\n config;\n /**\n * Per-device runtime state, cap-keyed. Always installed — slices\n * for individual caps materialise as those caps register their\n * native providers (`ctx.registerNativeCap`). The cap's own\n * `runtimeState` schema is the source of truth for the slice\n * shape; drivers don't redeclare it, they just write through.\n *\n * Read: `this.runtimeState.getCapState('battery')` →\n * `{percentage, charging, sleeping, lastUpdated}` for any\n * provider that registers `batteryCapability`.\n * Write: `this.runtimeState.setCapState('battery', { … })`.\n *\n * Cross-process consumers reach this state through the\n * `deviceState` cap router (or via cap-specific events the driver\n * emits — e.g. `battery.onStatusChanged`). The local handle is\n * accessed in-process by the driver to avoid roundtrips.\n */\n runtimeState;\n ctx;\n /**\n * Operator-organisational location label (room / area / zone).\n * Read from `ctx.deviceMeta.location`; mutated via\n * `kernel.devices.setLocation(id, value)`. Free-text — providers\n * don't interpret it; the UI groups devices by this for filters\n * like \"show me all cameras in Kitchen\". `null` when unset.\n */\n location;\n /**\n * Soft-disabled flag. When `true`, the device class is still\n * instantiated and visible in the UI (so the operator can flip\n * back on without re-adding) but lifecycle hooks (publishToBroker,\n * alarm-stream subscribe, …) MUST be gated by the driver to skip\n * work. The `BaseDevice` enforces this by exposing the flag here;\n * it does NOT mutate cap behaviour automatically — drivers consult\n * `this.disabled` at the top of their lifecycle methods. Read from\n * `ctx.deviceMeta.disabled`; mutated via\n * `kernel.devices.setDisabled(id, value)`.\n */\n disabled;\n constructor(ctx, schema, options) {\n this.ctx = ctx;\n this.id = ctx.id;\n this.stableId = ctx.stableId;\n this.type = options.type;\n if (!ctx.deviceMeta) {\n throw new Error(\n `BaseDevice constructor: ctx.deviceMeta is required (id=${ctx.id} stableId=${ctx.stableId})`\n );\n }\n this.name = ctx.deviceMeta.name;\n this.location = ctx.deviceMeta.location;\n this.disabled = ctx.deviceMeta.disabled;\n this.role = options.role;\n this.parentDeviceId = ctx.parentDeviceId;\n const seedData = ctx.persistedConfig ?? {};\n this.config = DeviceConfig.fromSchema(\n schema,\n (data) => ctx.persistConfig(data),\n seedData,\n ({ droppedKeys, issues }) => {\n ctx.logger.warn(\"Device config recovery: dropping invalid persisted fields\", {\n tags: { deviceId: ctx.id, stableId: ctx.stableId },\n meta: {\n droppedKeys: [...droppedKeys],\n firstIssue: issues[0]?.message ?? null\n }\n });\n }\n );\n let cachedProxy = null;\n const writer = async (capName, slice) => {\n if (!cachedProxy) cachedProxy = ctx.fetchDevice(ctx.id);\n const dev = await cachedProxy;\n await dev.deviceState.setCapSlice({ capName, slice });\n };\n const initial = ctx.initialRuntimeState ?? {};\n this.runtimeState = DeviceRuntimeState.fromInitial(initial, writer);\n ctx.bindRuntimeState?.(this.runtimeState);\n ctx.registerNativeCap?.(deviceStatusCapability, {});\n const seed = { online: false, lastChangedAt: Date.now() };\n this.runtimeState.setCapState(\"device-status\", seed);\n ctx.registerNativeCap?.(featureProbeCapability, {});\n const probeSeed = {\n flags: {},\n deviceType: null,\n model: null,\n channelCount: null,\n lastProbedAt: 0,\n lastFetchedAt: 0\n };\n this.runtimeState.setCapState(\"feature-probe\", probeSeed);\n }\n async removeDevice() {\n }\n /**\n * Set the device's online flag. Called by `BaseDeviceProvider` after\n * aggregating per-profile stream-broker health, or directly by drivers\n * that have provider-side liveness signals (e.g. ONVIF heartbeats,\n * Reolink Baichuan firmware push events). Mirrors the new value into\n * the `device-status` runtime-state slice so cross-process consumers\n * pick it up via the standard cap-state channel. Subclasses can\n * override to gate side effects on the transition.\n */\n markOnline(online) {\n if (this.online === online) return;\n const next = { online, lastChangedAt: Date.now() };\n this.runtimeState.setCapState(\"device-status\", next);\n }\n /**\n * Re-publish the device's current `features` array to the persisted\n * meta blob. Drivers call this after a probe finishes when the live\n * `features` getter has gained new flags (e.g. `hasIntercom` flips\n * to true → `DeviceFeature.TwoWayAudio` joins the list).\n *\n * Without this, only the construction-time snapshot is written —\n * `deviceManager.registerDevice` is invoked once per boot, so probe-\n * driven additions don't reach the persisted index until the next\n * server restart, and `getDevice` / `listAll` keep returning the\n * stale list for forked-worker devices (whose live IDevice instance\n * is invisible to the hub registry).\n *\n * Idempotent: re-calling with the same features just no-ops on the\n * persisted meta. Best-effort: lookup or write failures are logged\n * at debug and swallowed — the live `device.features` getter is\n * still authoritative within this process, so callers never block\n * device boot on a meta refresh.\n */\n async refreshFeatures() {\n const api = this.ctx.api;\n const action = api?.deviceManager?.registerDevice;\n if (!action) return;\n try {\n await action.mutate({\n addonId: this.ctx.deviceMeta.addonId,\n stableId: this.stableId,\n id: this.id,\n type: this.type,\n name: this.name,\n parentDeviceId: this.parentDeviceId,\n features: [...this.features],\n // Empty config — the kernel's registerDevice ignores the field\n // when there's no payload (the per-device store is the\n // canonical source after construction).\n config: {}\n });\n } catch (err) {\n }\n }\n /**\n * Typed read-through to a cap-keyed runtime-state slice. Drivers\n * call `this.getCapSlice(batteryCapability)` and the return type\n * is inferred from the cap's `runtimeState` Zod schema — no string\n * key, no manual generic. Returns `null` when the slice hasn't\n * been written yet (e.g. driver hasn't seeded battery yet).\n */\n getCapSlice(cap) {\n const slice = this.runtimeState.getCapState(cap.name);\n return slice ?? null;\n }\n /**\n * Typed writer to a cap-keyed runtime-state slice. Routes through\n * the runtime-state writer (validate → persist → emit cap event).\n * Equivalent to `this.runtimeState.setCapState(cap.name, value)`\n * but with the cap's `runtimeState` schema enforcing the value\n * shape at compile time. Mirrors the symmetry of\n * `getCapSlice` / `setCapSlice` for cross-cap consistency.\n */\n setCapSlice(cap, value) {\n this.runtimeState.setCapState(cap.name, value);\n }\n /**\n * Field-level read/write proxy over a cap's runtime-state slice.\n * Drivers that want ergonomic per-field access declare:\n *\n * ```ts\n * protected battery = this.sliceProxy(batteryCapability)\n * // …\n * this.battery.sleeping = true // patches the slice\n * const charging = this.battery.charging // reads the slice\n * ```\n *\n * Reads return `undefined` when the slice hasn't been seeded yet\n * (cap not registered, or seeded but the field is absent). Writes\n * route through `runtimeState.patchCapState` so the cap's `runtimeState`\n * schema validates the merged result and the cap event fires.\n *\n * Pattern is generic — same shape works for `battery`, `device-status`,\n * `motion`, `doorbell`, anything with a `runtimeState:` schema. Drivers\n * declare one proxy per cap they read/write directly.\n */\n sliceProxy(cap) {\n const target = {};\n const handler = {\n get: (_, key) => {\n const slice = this.runtimeState.getCapState(cap.name);\n return slice?.[key];\n },\n set: (_, key, value) => {\n this.runtimeState.patchCapState(cap.name, { [key]: value });\n return true;\n },\n has: (_, key) => {\n const slice = this.runtimeState.getCapState(cap.name);\n return slice ? key in slice : false;\n },\n ownKeys: () => {\n const slice = this.runtimeState.getCapState(cap.name);\n return slice ? Object.keys(slice) : [];\n },\n getOwnPropertyDescriptor: (_, key) => {\n const slice = this.runtimeState.getCapState(cap.name);\n if (!slice || !(key in slice)) return void 0;\n return { configurable: true, enumerable: true, value: slice[key] };\n }\n };\n return new Proxy(target, handler);\n }\n /**\n * Default empty settings UI. Drivers override this to expose an\n * editable form in the device-details page. Returning an empty sections\n * array signals \"nothing to contribute\" — the aggregator drops the\n * contribution entirely rather than rendering a blank panel.\n */\n getSettingsUISchema() {\n return { sections: [] };\n }\n /**\n * Default write path: forward the flat patch directly to storage.\n * Drivers that project a UI shape different from storage (e.g. `RtspCamera`\n * exposing `mainStreamUrl`/`subStreamUrl` over `streams[]`) override this\n * to reshape before `config.setAll`.\n */\n async applySettingsPatch(patch) {\n await this.config.setAll(patch);\n }\n // ── Lifecycle hooks ────────────────────────────────────────────────\n //\n // The kernel orchestrates the device lifecycle in distinct phases.\n // Drivers override only the hooks they need:\n //\n // 1. Construct — `new DeviceClass(ctx)` (sync)\n // 2. RegisterIdentity — kernel writes meta + id to device-manager\n // 3. Probe — `onProbe()` populates `feature-probe` slice\n // 4. ReconcileAccessories — kernel calls `getAccessoryChildren()`\n // (sees post-probe flags), spawns missing,\n // removes orphans, refreshes meta features\n // 5. Activate — `onActivate()` does \"device is live\" work:\n // broker publish, snapshot tabs, watchdogs\n //\n // Failures in `onProbe` / `onActivate` are logged and swallowed — the\n // device IS already registered; partial init shouldn't unwind the\n // create the caller succeeded at.\n /**\n * Phase 3 — populate device-scoped state needed by downstream phases\n * (accessory reconciliation, public `features` array, optional cap\n * registration). Called ONCE per construction, after register but\n * before `getAccessoryChildren()`.\n *\n * Drivers write the `feature-probe` runtime-state slice via\n * `this.runtimeState.setCapState('feature-probe', {...})` — flag bag\n * is open (Reolink writes `hasPtz/hasIntercom`, Hikvision writes\n * `hasSupplementalLight/hasAlarmIo`, etc).\n *\n * Default: no-op (driver had no probe to run).\n */\n async onProbe() {\n }\n /**\n * Phase 5 — fired after the device + its accessories are registered.\n * Drivers publish streams to the broker, kick off background tasks,\n * or subscribe to lib events that need a fully-registered device id.\n *\n * Default: no-op.\n *\n * RENAMED FROM `onCreated` (which still exists for back-compat in this\n * pass). The new name reflects the post-probe, post-accessory contract.\n */\n async onActivate() {\n }\n /**\n * Re-run the probe + reconcile accessories + refresh features meta.\n * Drivers call this when device-side state changes (battery cam wakes,\n * firmware update, manual operator trigger).\n *\n * The kernel injects `_kernelReprobe` on registration so this method\n * delegates to the same orchestrator that runs the boot-time phase\n * 3 + 4 sequence. Drivers should NOT override this — they override\n * `onProbe()` instead.\n */\n async reprobe() {\n if (this._kernelReprobe) await this._kernelReprobe();\n else await this.onProbe();\n }\n /**\n * Kernel-injected callback that runs the full post-probe orchestration\n * (onProbe → registerDevice meta refresh → accessory reconciliation).\n * Set by `device-cap-proxy.register()`. Drivers should not touch this\n * directly — call `reprobe()` instead.\n */\n _kernelReprobe;\n /**\n * Declare accessory child devices the kernel should auto-spawn\n * after `onProbe()` resolves. Each spec fully describes one child\n * — stableId suffix (deterministic per kind for restore-safety),\n * meta (type / name / location), config (initial blob the child\n * self-hydrates), and a factory that constructs the concrete\n * class with whatever closure-captured refs it needs (typically\n * `this` for the parent reference).\n *\n * The kernel handles the rest: allocateDeviceId, persistInitialConfig\n * (skipped on restore when the row already exists),\n * persistInitialMeta, createContext, factory invocation, register,\n * and recursive lifecycle (probe + accessories + activate).\n *\n * Implementations should derive children from\n * `this.runtimeState.getCapState('feature-probe')` (post-probe truth).\n * Drivers can use the `getProbeFlags()` helper to read the flag bag\n * with a typed cast.\n *\n * Default: no children.\n */\n getAccessoryChildren() {\n return [];\n }\n /**\n * Read the current feature-probe flag bag with a typed cast. Helper\n * for `getAccessoryChildren()` and `features` getters that derive\n * outputs from the probe results.\n */\n getProbeFlags() {\n const slice = this.runtimeState.getCapState(\"feature-probe\");\n return slice?.flags ?? {};\n }\n /**\n * Returns true once `onProbe` has completed at least once\n * (`lastProbedAt > 0`). Drivers gate `getAccessoryChildren()` on this\n * to avoid spawning stale accessories on a fresh device whose probe\n * hasn't landed yet.\n */\n hasProbed() {\n const slice = this.runtimeState.getCapState(\"feature-probe\");\n return (slice?.lastProbedAt ?? 0) > 0;\n }\n}\nfunction toDeviceSummary(device, addonId) {\n const config = {};\n for (const entry of device.config.entries()) {\n config[entry.key] = entry.value;\n }\n return {\n id: device.id,\n stableId: device.stableId,\n addonId,\n type: String(device.type),\n name: device.name,\n parentDeviceId: device.parentDeviceId,\n online: device.online,\n features: [...device.features],\n config\n };\n}\nclass BaseDeviceProvider extends BaseAddon {\n // ── Lifecycle (BaseAddon hooks) ─────────────────────────────────────\n async onInitialize() {\n this.ctx.logger.info(`${this.providerName} Provider initialized`);\n return [{ capability: deviceProviderCapability, provider: this }];\n }\n async onShutdown() {\n const devices = await this.ctx.kernel.devices?.getAll() ?? [];\n for (const device of devices) {\n try {\n await this.ctx.kernel.devices?.decommission(device.id);\n } catch (err) {\n this.ctx.logger.warn(`${this.providerName}: decommission failed`, {\n tags: { deviceId: device.id, stableId: device.stableId },\n meta: { error: err instanceof Error ? err.message : String(err) }\n });\n }\n }\n this.ctx.logger.info(`${this.providerName} Provider shut down`, {\n meta: { decommissionedCount: devices.length }\n });\n }\n // ── device-provider cap — lifecycle + introspection ─────────────────\n // Default implementations. Override in subclass if needed.\n async start() {\n }\n async stop() {\n }\n async getStatus() {\n const all = await this.ctx.kernel.devices?.getAll() ?? [];\n return { connected: true, deviceCount: all.length };\n }\n async getDevices() {\n const all = await this.ctx.kernel.devices?.getAll() ?? [];\n return all.map((d) => ({ id: d.stableId, name: d.name, type: String(d.type) }));\n }\n // ── device-provider cap — discovery ─────────────────────────────────\n // Default: no discovery. Override in providers that support it (ONVIF).\n async supportsDiscovery() {\n return false;\n }\n async discoverDevices() {\n return [];\n }\n async adoptDiscoveredDevice(_input) {\n throw new Error(`${this.providerName} provider does not support discovery-based adoption`);\n }\n // ── device-provider cap — manual creation ───────────────────────────\n // Default: supports manual creation. Subclass must implement\n // onGetCreationSchema and onCreateDevice.\n async supportsManualCreation() {\n return true;\n }\n async getChildCreationSchema(input) {\n return this.onGetCreationSchema(input.type);\n }\n /**\n * Default kernel-orchestrated `createDevice` implementation. The\n * subclass's `onCreateDevice` returns a declarative\n * `CreateDeviceSpec` (`{meta, config}`) — this method handles\n * stableId generation, class lookup, kernel.devices.create\n * dispatch, and DeviceSummary mapping. Subclasses should NOT\n * override this method; override `onCreateDevice` and\n * `deviceClasses` instead.\n */\n async createDevice(input) {\n const spec = await this.onCreateDevice(input.type, input.config);\n const Class = this.deviceClasses[spec.meta.type];\n if (!Class) {\n throw new Error(\n `${this.providerName} provider: no device class registered for type \"${spec.meta.type}\" — add it to the deviceClasses map`\n );\n }\n const stableId = this.generateStableId(spec.meta.type, spec.config);\n const device = await this.ctx.kernel.devices.create(\n stableId,\n Class,\n spec.config,\n null,\n spec.meta\n );\n if (spec.onAfterCreate) {\n try {\n await spec.onAfterCreate(device);\n } catch (err) {\n this.ctx.logger.warn(\"createDevice: onAfterCreate hook threw — device is already registered\", {\n tags: { deviceId: device.id, stableId },\n meta: { error: err instanceof Error ? err.message : String(err) }\n });\n }\n }\n return this.toSummary(device);\n }\n /**\n * Generate a stableId for a newly-created device. Default uses the\n * `${addonId}-${Date.now()}` pattern as a unique-but-opaque\n * fallback; any provider that has access to durable hardware\n * identity (UID, MAC, serial) should override and derive from it\n * so re-adding the same physical device reuses its persisted row.\n *\n * `config` is the parsed CreateDeviceSpec.config the subclass\n * returned from `onCreateDevice` — the override has access to\n * every operator-supplied + autodetect-resolved field. Optional\n * for back-compat: existing overrides that take only `type`\n * keep working unchanged.\n */\n generateStableId(_type, _config) {\n return `${this.addonId}-${Date.now()}`;\n }\n async testCreationField(_input) {\n return { status: \"ok\", labels: [\"probe not implemented\"] };\n }\n // ── Boot restore ────────────────────────────────────────────────────\n async restoreDevices(savedDevices) {\n await this.onRestoreDevices(savedDevices);\n if (savedDevices.length > 0) {\n this.ctx.logger.info(`Restored ${savedDevices.length} ${this.providerName} device(s)`);\n }\n }\n /**\n * Restore devices from persisted state. Two-pass:\n *\n * 1. **Top-level pass** — invokes `kernel.devices.create()` for every\n * `parentDeviceId === null` row using the `deviceClasses` map.\n * The kernel's register flow handles `getAccessoryChildren()` for\n * each parent (siren / floodlight / PIR / etc).\n *\n * 2. **Hub-adopted children pass** — for rows with\n * `parentDeviceId !== null` whose `type` IS in `deviceClasses`\n * (e.g. Reolink hub-adopted cameras under an NVR), spawn them\n * explicitly with the persisted `parentDeviceId`. These are\n * NOT accessory children — they're first-class adopted devices\n * that just happen to have a parent. Without this pass, every\n * server restart would lose hub-adopted cameras (their type is\n * in `deviceClasses` but parent's `getAccessoryChildren` doesn't\n * spawn them — that callback is only for purpose-built\n * accessory roles).\n *\n * Rows whose `type` is NOT in `deviceClasses` are skipped — those\n * are accessory children (siren/light/sensor) that the kernel's\n * accessory-spawn flow handles via the parent's\n * `getAccessoryChildren()`. Override only when the default doesn't\n * fit.\n */\n async onRestoreDevices(savedDevices) {\n const restored = /* @__PURE__ */ new Set();\n for (const saved of savedDevices) {\n if (saved.parentDeviceId !== null) continue;\n const Class = this.deviceClasses[saved.type];\n if (!Class) {\n this.ctx.logger.warn(\"No device class registered for restored type — skipping\", {\n tags: { stableId: saved.stableId },\n meta: { type: saved.type }\n });\n continue;\n }\n try {\n await this.ctx.kernel.devices.create(saved.stableId, Class, {});\n restored.add(saved.id);\n } catch (err) {\n this.ctx.logger.warn(\"Failed to restore device\", {\n tags: { stableId: saved.stableId },\n meta: { type: saved.type, error: err instanceof Error ? err.message : String(err) }\n });\n }\n }\n const childRows = savedDevices.filter((s) => s.parentDeviceId !== null);\n for (const saved of childRows) {\n const Class = this.deviceClasses[saved.type];\n if (!Class) continue;\n if (saved.parentDeviceId === null) continue;\n if (!restored.has(saved.parentDeviceId)) {\n continue;\n }\n try {\n await this.ctx.kernel.devices.create(\n saved.stableId,\n Class,\n {},\n saved.parentDeviceId\n );\n restored.add(saved.id);\n } catch (err) {\n this.ctx.logger.warn(\"Failed to restore hub-adopted child\", {\n tags: { stableId: saved.stableId, parentDeviceId: saved.parentDeviceId },\n meta: { type: saved.type, error: err instanceof Error ? err.message : String(err) }\n });\n }\n }\n }\n // ── Utility ─────────────────────────────────────────────────────────\n /** Convert an IDevice to the flat DeviceSummary for the cap router. */\n toSummary(device) {\n return toDeviceSummary(device, this.addonId);\n }\n}\nfunction zodDef(schema) {\n return schema.def;\n}\nfunction zodInternals(schema) {\n return schema;\n}\nfunction zodEntriesToConfigUI(entries, sectionTitle = \"Configuration\", sectionId = \"main\") {\n const fields = entries.map(\n (entry) => zodToConfigField(entry.key, entry.schema, entry.description)\n );\n return {\n sections: [\n {\n id: sectionId,\n title: sectionTitle,\n fields\n }\n ]\n };\n}\nfunction zodToConfigField(key, schema, description) {\n const inner = unwrapZod(schema);\n const defaultValue = getZodDefault(schema);\n const label = description ?? humanizeKey(key);\n const base = {\n key,\n label,\n description,\n default: defaultValue\n };\n if (inner instanceof z.ZodString) {\n return buildStringField(key, base);\n }\n if (inner instanceof z.ZodNumber) {\n return buildNumberField(inner, base);\n }\n if (inner instanceof z.ZodBoolean) {\n const field = { ...base, type: \"boolean\" };\n return field;\n }\n if (inner instanceof z.ZodEnum) {\n return buildEnumField(inner, base);\n }\n if (inner instanceof z.ZodArray || inner instanceof z.ZodObject) {\n const field = { ...base, type: \"textarea\", rows: 6, isJson: true };\n return field;\n }\n const fallback = { ...base, type: \"text\" };\n return fallback;\n}\nfunction buildStringField(key, base) {\n const lowerKey = key.toLowerCase();\n const isSecret = lowerKey.includes(\"password\") || lowerKey.includes(\"secret\") || lowerKey.includes(\"token\") || lowerKey.includes(\"apikey\") || lowerKey.includes(\"api_key\");\n if (isSecret) {\n const field2 = { ...base, type: \"password\", showToggle: true };\n return field2;\n }\n const field = { ...base, type: \"text\" };\n return field;\n}\nfunction buildNumberField(inner, base) {\n const anyInner = zodInternals(inner);\n const rawMin = anyInner.minValue;\n const rawMax = anyInner.maxValue;\n const min = rawMin != null && isFinite(rawMin) ? rawMin : void 0;\n const max = rawMax != null && isFinite(rawMax) ? rawMax : void 0;\n const step = getMultipleOfStep(inner);\n const field = {\n ...base,\n type: \"number\",\n ...min !== void 0 ? { min } : {},\n ...max !== void 0 ? { max } : {},\n ...step !== void 0 ? { step } : {}\n };\n return field;\n}\nfunction getMultipleOfStep(inner) {\n const def = zodDef(inner);\n const checks = def.checks ?? [];\n for (const check of checks) {\n if (check._zod?.def?.check === \"multiple_of\" && check._zod.def.value !== void 0) {\n return check._zod.def.value;\n }\n }\n return void 0;\n}\nfunction buildEnumField(inner, base) {\n const values = inner.options.map((v) => String(v));\n const field = {\n ...base,\n type: \"select\",\n options: values.map((v) => ({ label: humanizeKey(v), value: v }))\n };\n return field;\n}\nfunction unwrapZod(schema) {\n if (schema instanceof z.ZodDefault) return unwrapZod(zodDef(schema).innerType);\n if (schema instanceof z.ZodOptional) return unwrapZod(zodDef(schema).innerType);\n if (schema instanceof z.ZodNullable) return unwrapZod(zodDef(schema).innerType);\n return schema;\n}\nfunction getZodDefault(schema) {\n if (schema instanceof z.ZodDefault) {\n return zodDef(schema).defaultValue;\n }\n return void 0;\n}\nfunction humanizeKey(key) {\n return key.replace(/([A-Z])/g, \" $1\").replace(/[_-]/g, \" \").replace(/^\\w/, (c) => c.toUpperCase()).trim();\n}\nconst DEVICE_STATE_EVENT_CATEGORY = \"device.state-changed\";\nfunction createLazyTrpcSource(api) {\n const cache = /* @__PURE__ */ new Map();\n const listeners = /* @__PURE__ */ new Map();\n let bridge = null;\n const keyOf = (deviceId, capName) => `${deviceId}:${capName}`;\n const ensureBridge = () => {\n if (bridge) return;\n if (!api.live?.onEvent) return;\n bridge = api.live.onEvent.subscribe(\n { category: DEVICE_STATE_EVENT_CATEGORY },\n {\n onData: (evt) => {\n const data = evt.data;\n if (!data || typeof data.deviceId !== \"number\" || typeof data.capName !== \"string\") return;\n const k = keyOf(data.deviceId, data.capName);\n cache.set(k, data.slice);\n const set = listeners.get(k);\n if (!set) return;\n for (const cb2 of set) {\n try {\n cb2(data.slice);\n } catch {\n }\n }\n }\n }\n );\n };\n const closeBridgeIfIdle = () => {\n if (!bridge) return;\n if (listeners.size > 0) return;\n bridge.unsubscribe();\n bridge = null;\n };\n return {\n read(deviceId, capName) {\n return cache.get(keyOf(deviceId, capName));\n },\n async refresh(deviceId, capName) {\n const slice = await api.deviceState.getCapSlice.query({ deviceId, capName });\n const k = keyOf(deviceId, capName);\n cache.set(k, slice ?? void 0);\n const set = listeners.get(k);\n if (set) {\n for (const cb2 of set) {\n try {\n cb2(slice ?? void 0);\n } catch {\n }\n }\n }\n },\n watch(deviceId, capName, cb2) {\n const k = keyOf(deviceId, capName);\n let set = listeners.get(k);\n if (!set) {\n set = /* @__PURE__ */ new Set();\n listeners.set(k, set);\n }\n set.add(cb2);\n ensureBridge();\n return () => {\n set.delete(cb2);\n if (set.size === 0) listeners.delete(k);\n closeBridgeIfIdle();\n };\n },\n async write(deviceId, capName, slice) {\n await api.deviceState.setCapSlice.mutate({ deviceId, capName, slice });\n }\n };\n}\nfunction createMirrorSource(mirror, listeners, api) {\n const keyOf = (deviceId, capName) => `${deviceId}:${capName}`;\n return {\n read(deviceId, capName) {\n return mirror.get(deviceId)?.get(capName);\n },\n async refresh() {\n },\n watch(deviceId, capName, cb2) {\n const k = keyOf(deviceId, capName);\n let set = listeners.get(k);\n if (!set) {\n set = /* @__PURE__ */ new Set();\n listeners.set(k, set);\n }\n set.add(cb2);\n return () => {\n set.delete(cb2);\n if (set.size === 0) listeners.delete(k);\n };\n },\n async write(deviceId, capName, slice) {\n if (!api) {\n throw new Error(\"createMirrorSource: write requires an api reference — pass it as the third argument when constructing the source\");\n }\n await api.deviceState.setCapSlice.mutate({ deviceId, capName, slice });\n }\n };\n}\nfunction createSliceHandle(source, deviceId, capName) {\n const src = isSource(source) ? source : createLazyTrpcSource(source);\n return {\n get value() {\n return src.read(deviceId, capName);\n },\n refresh() {\n return src.refresh(deviceId, capName);\n },\n subscribe(cb2) {\n const unwatch = src.watch(deviceId, capName, (slice) => {\n try {\n cb2(slice);\n } catch {\n }\n });\n try {\n cb2(src.read(deviceId, capName));\n } catch {\n }\n if (src.read(deviceId, capName) === void 0) {\n void src.refresh(deviceId, capName).catch(() => void 0);\n }\n return unwatch;\n },\n async set(slice) {\n await src.write(deviceId, capName, slice);\n },\n async patch(partial) {\n const current = src.read(deviceId, capName);\n const next = { ...current ?? {}, ...partial };\n await src.write(deviceId, capName, next);\n }\n };\n}\nfunction isSource(x) {\n return typeof x.read === \"function\" && typeof x.watch === \"function\";\n}\nfunction createDeviceProxy(api, binding, opts) {\n const typedApi = api;\n const stateSource = opts?.stateSource ?? createLazyTrpcSource(api);\n function mergeInput(input, nodeId) {\n const base = typeof input === \"object\" && input !== null ? input : {};\n return nodeId !== void 0 ? { ...base, deviceId: binding.deviceId, nodeId } : { ...base, deviceId: binding.deviceId };\n }\n function callLeaf(capProp, method, kind, merged, push) {\n const leaf = typedApi[capProp]?.[method];\n if (!leaf) throw new Error(`DeviceProxy: api has no '${capProp}.${method}'`);\n const fn = leaf;\n if (kind === \"mutation\") return fn.mutate(merged);\n if (kind === \"subscription\") return fn.subscribe(merged, push);\n return fn.query(merged);\n }\n function dispatch(capName, capProp, method, kind, input, push) {\n const entry = binding.entries.find((e) => e.capName === capName);\n return callLeaf(capProp, method, kind, mergeInput(input, entry?.providerNodeId), push);\n }\n function dispatchSystem(capProp, method, kind, input, push) {\n return callLeaf(capProp, method, kind, mergeInput(input, void 0), push);\n }\n const accessoriesInterface = {\n getStatus: (input) => dispatch(\"accessories\", \"accessories\", \"getStatus\", \"query\", input)\n };\n const audioAnalysisInterface = {\n resolveDeviceSettings: (input) => dispatch(\"audio-analysis\", \"audioAnalysis\", \"resolveDeviceSettings\", \"query\", input),\n getDeviceSettingsContribution: (input) => dispatch(\"audio-analysis\", \"audioAnalysis\", \"getDeviceSettingsContribution\", \"query\", input),\n getDeviceLiveContribution: (input) => dispatch(\"audio-analysis\", \"audioAnalysis\", \"getDeviceLiveContribution\", \"query\", input),\n applyDeviceSettingsPatch: (input) => dispatch(\"audio-analysis\", \"audioAnalysis\", \"applyDeviceSettingsPatch\", \"mutation\", input)\n };\n const audioMetricsInterface = {\n getCurrentSnapshot: (input) => dispatch(\"audio-metrics\", \"audioMetrics\", \"getCurrentSnapshot\", \"query\", input),\n getHistory: (input) => dispatch(\"audio-metrics\", \"audioMetrics\", \"getHistory\", \"query\", input)\n };\n const batteryInterface = {\n getStatus: (input) => dispatch(\"battery\", \"battery\", \"getStatus\", \"query\", input)\n };\n const brightnessInterface = {\n setBrightness: (input) => dispatch(\"brightness\", \"brightness\", \"setBrightness\", \"mutation\", input),\n getStatus: (input) => dispatch(\"brightness\", \"brightness\", \"getStatus\", \"query\", input)\n };\n const cameraCredentialsInterface = {\n getCredentials: (input) => dispatch(\"camera-credentials\", \"cameraCredentials\", \"getCredentials\", \"query\", input),\n getStatus: (input) => dispatch(\"camera-credentials\", \"cameraCredentials\", \"getStatus\", \"query\", input)\n };\n const cameraStreamsInterface = {\n getCameraStreams: (input) => dispatch(\"camera-streams\", \"cameraStreams\", \"getCameraStreams\", \"query\", input),\n getBrokerStreams: (input) => dispatch(\"camera-streams\", \"cameraStreams\", \"getBrokerStreams\", \"query\", input),\n getRtspEntries: (input) => dispatch(\"camera-streams\", \"cameraStreams\", \"getRtspEntries\", \"query\", input)\n };\n const detectionPipelineInterface = {\n getDeviceSettingsContribution: (input) => dispatch(\"detection-pipeline\", \"detectionPipeline\", \"getDeviceSettingsContribution\", \"query\", input),\n getDeviceLiveContribution: (input) => dispatch(\"detection-pipeline\", \"detectionPipeline\", \"getDeviceLiveContribution\", \"query\", input),\n applyDeviceSettingsPatch: (input) => dispatch(\"detection-pipeline\", \"detectionPipeline\", \"applyDeviceSettingsPatch\", \"mutation\", input)\n };\n const deviceDiscoveryInterface = {\n listDiscovered: (input) => dispatch(\"device-discovery\", \"deviceDiscovery\", \"listDiscovered\", \"query\", input),\n refreshDiscovery: (input) => dispatch(\"device-discovery\", \"deviceDiscovery\", \"refreshDiscovery\", \"mutation\", input),\n adoptDevice: (input) => dispatch(\"device-discovery\", \"deviceDiscovery\", \"adoptDevice\", \"mutation\", input),\n releaseDevice: (input) => dispatch(\"device-discovery\", \"deviceDiscovery\", \"releaseDevice\", \"mutation\", input),\n getStatus: (input) => dispatch(\"device-discovery\", \"deviceDiscovery\", \"getStatus\", \"query\", input)\n };\n const deviceOpsInterface = {\n getStreamSources: (input) => dispatch(\"device-ops\", \"deviceOps\", \"getStreamSources\", \"query\", input),\n getConfigEntries: (input) => dispatch(\"device-ops\", \"deviceOps\", \"getConfigEntries\", \"query\", input),\n setConfig: (input) => dispatch(\"device-ops\", \"deviceOps\", \"setConfig\", \"mutation\", input),\n removeDevice: (input) => dispatch(\"device-ops\", \"deviceOps\", \"removeDevice\", \"mutation\", input),\n getSettingsSchema: (input) => dispatch(\"device-ops\", \"deviceOps\", \"getSettingsSchema\", \"query\", input)\n };\n const deviceStatusInterface = {\n getStatus: (input) => dispatch(\"device-status\", \"deviceStatus\", \"getStatus\", \"query\", input)\n };\n const doorbellInterface = {\n getStatus: (input) => dispatch(\"doorbell\", \"doorbell\", \"getStatus\", \"query\", input)\n };\n const eventsInterface = {\n getEvents: (input) => dispatch(\"events\", \"events\", \"getEvents\", \"query\", input),\n getEventThumbnail: (input) => dispatch(\"events\", \"events\", \"getEventThumbnail\", \"query\", input),\n getEventClipUrl: (input) => dispatch(\"events\", \"events\", \"getEventClipUrl\", \"query\", input)\n };\n const featureProbeInterface = {\n getStatus: (input) => dispatch(\"feature-probe\", \"featureProbe\", \"getStatus\", \"query\", input)\n };\n const intercomInterface = {\n startSession: (input) => dispatch(\"intercom\", \"intercom\", \"startSession\", \"mutation\", input),\n handleAnswer: (input) => dispatch(\"intercom\", \"intercom\", \"handleAnswer\", \"mutation\", input),\n stopSession: (input) => dispatch(\"intercom\", \"intercom\", \"stopSession\", \"mutation\", input),\n startTalkSession: (input) => dispatch(\"intercom\", \"intercom\", \"startTalkSession\", \"mutation\", input),\n pushTalkPcm: (input) => dispatch(\"intercom\", \"intercom\", \"pushTalkPcm\", \"mutation\", input),\n endTalkSession: (input) => dispatch(\"intercom\", \"intercom\", \"endTalkSession\", \"mutation\", input),\n getStatus: (input) => dispatch(\"intercom\", \"intercom\", \"getStatus\", \"query\", input)\n };\n const motionInterface = {\n isDetected: (input) => dispatch(\"motion\", \"motion\", \"isDetected\", \"query\", input),\n getStatus: (input) => dispatch(\"motion\", \"motion\", \"getStatus\", \"query\", input)\n };\n const motionDetectionInterface = {\n analyze: (input) => dispatch(\"motion-detection\", \"motionDetection\", \"analyze\", \"mutation\", input),\n removeCamera: (input) => dispatch(\"motion-detection\", \"motionDetection\", \"removeCamera\", \"mutation\", input),\n reset: (input) => dispatch(\"motion-detection\", \"motionDetection\", \"reset\", \"mutation\", input),\n getDeviceSettingsContribution: (input) => dispatch(\"motion-detection\", \"motionDetection\", \"getDeviceSettingsContribution\", \"query\", input),\n getDeviceLiveContribution: (input) => dispatch(\"motion-detection\", \"motionDetection\", \"getDeviceLiveContribution\", \"query\", input),\n applyDeviceSettingsPatch: (input) => dispatch(\"motion-detection\", \"motionDetection\", \"applyDeviceSettingsPatch\", \"mutation\", input)\n };\n const motionTriggerInterface = {\n setMotionTrigger: (input) => dispatch(\"motion-trigger\", \"motionTrigger\", \"setMotionTrigger\", \"mutation\", input),\n getStatus: (input) => dispatch(\"motion-trigger\", \"motionTrigger\", \"getStatus\", \"query\", input)\n };\n const nativeObjectDetectionInterface = {\n getStatus: (input) => dispatch(\"native-object-detection\", \"nativeObjectDetection\", \"getStatus\", \"query\", input)\n };\n const osdInterface = {\n setOverlay: (input) => dispatch(\"osd\", \"osd\", \"setOverlay\", \"mutation\", input),\n getStatus: (input) => dispatch(\"osd\", \"osd\", \"getStatus\", \"query\", input)\n };\n const pipelineAnalyticsInterface = {\n getActiveTracks: (input) => dispatch(\"pipeline-analytics\", \"pipelineAnalytics\", \"getActiveTracks\", \"query\", input),\n getTrack: (input) => dispatch(\"pipeline-analytics\", \"pipelineAnalytics\", \"getTrack\", \"query\", input),\n listTracks: (input) => dispatch(\"pipeline-analytics\", \"pipelineAnalytics\", \"listTracks\", \"query\", input),\n clearTracks: (input) => dispatch(\"pipeline-analytics\", \"pipelineAnalytics\", \"clearTracks\", \"mutation\", input),\n getMotionEvents: (input) => dispatch(\"pipeline-analytics\", \"pipelineAnalytics\", \"getMotionEvents\", \"query\", input),\n getObjectEvents: (input) => dispatch(\"pipeline-analytics\", \"pipelineAnalytics\", \"getObjectEvents\", \"query\", input),\n getAudioEvents: (input) => dispatch(\"pipeline-analytics\", \"pipelineAnalytics\", \"getAudioEvents\", \"query\", input),\n getEventMedia: (input) => dispatch(\"pipeline-analytics\", \"pipelineAnalytics\", \"getEventMedia\", \"query\", input),\n getTrackMedia: (input) => dispatch(\"pipeline-analytics\", \"pipelineAnalytics\", \"getTrackMedia\", \"query\", input),\n getDeviceSettingsContribution: (input) => dispatch(\"pipeline-analytics\", \"pipelineAnalytics\", \"getDeviceSettingsContribution\", \"query\", input),\n getDeviceLiveContribution: (input) => dispatch(\"pipeline-analytics\", \"pipelineAnalytics\", \"getDeviceLiveContribution\", \"query\", input),\n applyDeviceSettingsPatch: (input) => dispatch(\"pipeline-analytics\", \"pipelineAnalytics\", \"applyDeviceSettingsPatch\", \"mutation\", input)\n };\n const ptzInterface = {\n move: (input) => dispatch(\"ptz\", \"ptz\", \"move\", \"mutation\", input),\n continuousMove: (input) => dispatch(\"ptz\", \"ptz\", \"continuousMove\", \"mutation\", input),\n stop: (input) => dispatch(\"ptz\", \"ptz\", \"stop\", \"mutation\", input),\n getPresets: (input) => dispatch(\"ptz\", \"ptz\", \"getPresets\", \"query\", input),\n goToPreset: (input) => dispatch(\"ptz\", \"ptz\", \"goToPreset\", \"mutation\", input),\n goHome: (input) => dispatch(\"ptz\", \"ptz\", \"goHome\", \"mutation\", input),\n getPosition: (input) => dispatch(\"ptz\", \"ptz\", \"getPosition\", \"query\", input),\n getStatus: (input) => dispatch(\"ptz\", \"ptz\", \"getStatus\", \"query\", input)\n };\n const ptzAutotrackInterface = {\n getStatus: (input) => dispatch(\"ptz-autotrack\", \"ptzAutotrack\", \"getStatus\", \"query\", input),\n setEnabled: (input) => dispatch(\"ptz-autotrack\", \"ptzAutotrack\", \"setEnabled\", \"mutation\", input),\n getSettings: (input) => dispatch(\"ptz-autotrack\", \"ptzAutotrack\", \"getSettings\", \"query\", input),\n setSettings: (input) => dispatch(\"ptz-autotrack\", \"ptzAutotrack\", \"setSettings\", \"mutation\", input)\n };\n const rebootInterface = {\n reboot: (input) => dispatch(\"reboot\", \"reboot\", \"reboot\", \"mutation\", input)\n };\n const recordingInterface = {\n getSegments: (input) => dispatch(\"recording\", \"recording\", \"getSegments\", \"query\", input),\n getPlaybackUrl: (input) => dispatch(\"recording\", \"recording\", \"getPlaybackUrl\", \"query\", input),\n getThumbnailAt: (input) => dispatch(\"recording\", \"recording\", \"getThumbnailAt\", \"query\", input)\n };\n const snapshotInterface = {\n getSnapshot: (input) => dispatch(\"snapshot\", \"snapshot\", \"getSnapshot\", \"query\", input),\n invalidateCache: (input) => dispatch(\"snapshot\", \"snapshot\", \"invalidateCache\", \"mutation\", input),\n getStatus: (input) => dispatch(\"snapshot\", \"snapshot\", \"getStatus\", \"query\", input),\n getDeviceSettingsContribution: (input) => dispatch(\"snapshot\", \"snapshot\", \"getDeviceSettingsContribution\", \"query\", input),\n getDeviceLiveContribution: (input) => dispatch(\"snapshot\", \"snapshot\", \"getDeviceLiveContribution\", \"query\", input),\n applyDeviceSettingsPatch: (input) => dispatch(\"snapshot\", \"snapshot\", \"applyDeviceSettingsPatch\", \"mutation\", input)\n };\n const switchInterface = {\n setState: (input) => dispatch(\"switch\", \"switch\", \"setState\", \"mutation\", input),\n getStatus: (input) => dispatch(\"switch\", \"switch\", \"getStatus\", \"query\", input)\n };\n const webrtcSessionInterface = {\n listStreams: (input) => dispatch(\"webrtc-session\", \"webrtcSession\", \"listStreams\", \"query\", input),\n createSession: (input) => dispatch(\"webrtc-session\", \"webrtcSession\", \"createSession\", \"mutation\", input),\n handleOffer: (input) => dispatch(\"webrtc-session\", \"webrtcSession\", \"handleOffer\", \"mutation\", input),\n handleAnswer: (input) => dispatch(\"webrtc-session\", \"webrtcSession\", \"handleAnswer\", \"mutation\", input),\n closeSession: (input) => dispatch(\"webrtc-session\", \"webrtcSession\", \"closeSession\", \"mutation\", input),\n hasAdaptiveBitrate: (input) => dispatch(\"webrtc-session\", \"webrtcSession\", \"hasAdaptiveBitrate\", \"query\", input)\n };\n const zoneAnalyticsInterface = {\n getCurrentSnapshot: (input) => dispatch(\"zone-analytics\", \"zoneAnalytics\", \"getCurrentSnapshot\", \"query\", input),\n getZoneHistory: (input) => dispatch(\"zone-analytics\", \"zoneAnalytics\", \"getZoneHistory\", \"query\", input),\n getCameraHistory: (input) => dispatch(\"zone-analytics\", \"zoneAnalytics\", \"getCameraHistory\", \"query\", input),\n getUnzonedHistory: (input) => dispatch(\"zone-analytics\", \"zoneAnalytics\", \"getUnzonedHistory\", \"query\", input)\n };\n const zoneRulesInterface = {\n listRules: (input) => dispatch(\"zone-rules\", \"zoneRules\", \"listRules\", \"query\", input),\n setRules: (input) => dispatch(\"zone-rules\", \"zoneRules\", \"setRules\", \"mutation\", input)\n };\n const zonesInterface = {\n listZones: (input) => dispatch(\"zones\", \"zones\", \"listZones\", \"query\", input),\n addZone: (input) => dispatch(\"zones\", \"zones\", \"addZone\", \"mutation\", input),\n removeZone: (input) => dispatch(\"zones\", \"zones\", \"removeZone\", \"mutation\", input),\n updateZone: (input) => dispatch(\"zones\", \"zones\", \"updateZone\", \"mutation\", input)\n };\n const addonSettingsInterface = {\n getDeviceSettings: (input) => dispatchSystem(\"addonSettings\", \"getDeviceSettings\", \"query\", input),\n updateDeviceSettings: (input) => dispatchSystem(\"addonSettings\", \"updateDeviceSettings\", \"mutation\", input)\n };\n const deviceExportInterface = {\n getDeviceSettingsContribution: (input) => dispatchSystem(\"deviceExport\", \"getDeviceSettingsContribution\", \"query\", input),\n getDeviceLiveContribution: (input) => dispatchSystem(\"deviceExport\", \"getDeviceLiveContribution\", \"query\", input),\n applyDeviceSettingsPatch: (input) => dispatchSystem(\"deviceExport\", \"applyDeviceSettingsPatch\", \"mutation\", input)\n };\n const deviceManagerInterface = {\n loadConfig: (input) => dispatchSystem(\"deviceManager\", \"loadConfig\", \"query\", input),\n loadRuntimeState: (input) => dispatchSystem(\"deviceManager\", \"loadRuntimeState\", \"query\", input),\n loadMeta: (input) => dispatchSystem(\"deviceManager\", \"loadMeta\", \"query\", input),\n setName: (input) => dispatchSystem(\"deviceManager\", \"setName\", \"mutation\", input),\n setLocation: (input) => dispatchSystem(\"deviceManager\", \"setLocation\", \"mutation\", input),\n setMetadata: (input) => dispatchSystem(\"deviceManager\", \"setMetadata\", \"mutation\", input),\n setDisabled: (input) => dispatchSystem(\"deviceManager\", \"setDisabled\", \"mutation\", input),\n getDevice: (input) => dispatchSystem(\"deviceManager\", \"getDevice\", \"query\", input),\n getStreamSources: (input) => dispatchSystem(\"deviceManager\", \"getStreamSources\", \"query\", input),\n getConfigSchema: (input) => dispatchSystem(\"deviceManager\", \"getConfigSchema\", \"query\", input),\n getSettingsSchema: (input) => dispatchSystem(\"deviceManager\", \"getSettingsSchema\", \"query\", input),\n updateConfig: (input) => dispatchSystem(\"deviceManager\", \"updateConfig\", \"mutation\", input),\n enable: (input) => dispatchSystem(\"deviceManager\", \"enable\", \"mutation\", input),\n disable: (input) => dispatchSystem(\"deviceManager\", \"disable\", \"mutation\", input),\n remove: (input) => dispatchSystem(\"deviceManager\", \"remove\", \"mutation\", input),\n getStreamProfileMap: (input) => dispatchSystem(\"deviceManager\", \"getStreamProfileMap\", \"query\", input),\n setStreamProfileMap: (input) => dispatchSystem(\"deviceManager\", \"setStreamProfileMap\", \"mutation\", input),\n probeStreams: (input) => dispatchSystem(\"deviceManager\", \"probeStreams\", \"mutation\", input),\n getBindings: (input) => dispatchSystem(\"deviceManager\", \"getBindings\", \"query\", input),\n getAllBindings: (input) => dispatchSystem(\"deviceManager\", \"getAllBindings\", \"query\", input),\n setWrapperActive: (input) => dispatchSystem(\"deviceManager\", \"setWrapperActive\", \"mutation\", input),\n getDeviceSettingsAggregate: (input) => dispatchSystem(\"deviceManager\", \"getDeviceSettingsAggregate\", \"query\", input),\n getDeviceLiveInfoAggregate: (input) => dispatchSystem(\"deviceManager\", \"getDeviceLiveInfoAggregate\", \"query\", input),\n getDeviceAggregate: (input) => dispatchSystem(\"deviceManager\", \"getDeviceAggregate\", \"query\", input),\n updateDeviceField: (input) => dispatchSystem(\"deviceManager\", \"updateDeviceField\", \"mutation\", input),\n updateDeviceFieldsBatch: (input) => dispatchSystem(\"deviceManager\", \"updateDeviceFieldsBatch\", \"mutation\", input),\n testField: (input) => dispatchSystem(\"deviceManager\", \"testField\", \"mutation\", input),\n getDeviceStatusAggregate: (input) => dispatchSystem(\"deviceManager\", \"getDeviceStatusAggregate\", \"query\", input)\n };\n const deviceStateInterface = {\n getSnapshot: (input) => dispatchSystem(\"deviceState\", \"getSnapshot\", \"query\", input),\n getCapSlice: (input) => dispatchSystem(\"deviceState\", \"getCapSlice\", \"query\", input),\n setCapSlice: (input) => dispatchSystem(\"deviceState\", \"setCapSlice\", \"mutation\", input)\n };\n const networkQualityInterface = {\n getDeviceStats: (input) => dispatchSystem(\"networkQuality\", \"getDeviceStats\", \"query\", input),\n reportClientStats: (input) => dispatchSystem(\"networkQuality\", \"reportClientStats\", \"mutation\", input)\n };\n const pipelineExecutorInterface = {\n runPipeline: (input) => dispatchSystem(\"pipelineExecutor\", \"runPipeline\", \"mutation\", input),\n runPipelineBatch: (input) => dispatchSystem(\"pipelineExecutor\", \"runPipelineBatch\", \"mutation\", input)\n };\n const pipelineOrchestratorInterface = {\n assignPipeline: (input) => dispatchSystem(\"pipelineOrchestrator\", \"assignPipeline\", \"mutation\", input),\n unassignPipeline: (input) => dispatchSystem(\"pipelineOrchestrator\", \"unassignPipeline\", \"mutation\", input),\n getPipelineAssignment: (input) => dispatchSystem(\"pipelineOrchestrator\", \"getPipelineAssignment\", \"query\", input),\n getCameraMetrics: (input) => dispatchSystem(\"pipelineOrchestrator\", \"getCameraMetrics\", \"query\", input),\n assignDecoder: (input) => dispatchSystem(\"pipelineOrchestrator\", \"assignDecoder\", \"mutation\", input),\n unassignDecoder: (input) => dispatchSystem(\"pipelineOrchestrator\", \"unassignDecoder\", \"mutation\", input),\n assignAudio: (input) => dispatchSystem(\"pipelineOrchestrator\", \"assignAudio\", \"mutation\", input),\n unassignAudio: (input) => dispatchSystem(\"pipelineOrchestrator\", \"unassignAudio\", \"mutation\", input),\n getAudioAssignment: (input) => dispatchSystem(\"pipelineOrchestrator\", \"getAudioAssignment\", \"query\", input),\n getAudioAssignments: (input) => dispatchSystem(\"pipelineOrchestrator\", \"getAudioAssignments\", \"query\", input),\n getDecoderAssignment: (input) => dispatchSystem(\"pipelineOrchestrator\", \"getDecoderAssignment\", \"query\", input),\n getCameraSettings: (input) => dispatchSystem(\"pipelineOrchestrator\", \"getCameraSettings\", \"query\", input),\n setCameraStepToggle: (input) => dispatchSystem(\"pipelineOrchestrator\", \"setCameraStepToggle\", \"mutation\", input),\n getCameraStepOverrides: (input) => dispatchSystem(\"pipelineOrchestrator\", \"getCameraStepOverrides\", \"query\", input),\n setCameraStepOverride: (input) => dispatchSystem(\"pipelineOrchestrator\", \"setCameraStepOverride\", \"mutation\", input),\n setCameraPipelineForAgent: (input) => dispatchSystem(\"pipelineOrchestrator\", \"setCameraPipelineForAgent\", \"mutation\", input),\n resolvePipeline: (input) => dispatchSystem(\"pipelineOrchestrator\", \"resolvePipeline\", \"query\", input),\n getDeviceSettingsContribution: (input) => dispatchSystem(\"pipelineOrchestrator\", \"getDeviceSettingsContribution\", \"query\", input),\n getDeviceLiveContribution: (input) => dispatchSystem(\"pipelineOrchestrator\", \"getDeviceLiveContribution\", \"query\", input),\n applyDeviceSettingsPatch: (input) => dispatchSystem(\"pipelineOrchestrator\", \"applyDeviceSettingsPatch\", \"mutation\", input)\n };\n const pipelineRunnerInterface = {\n detachCamera: (input) => dispatchSystem(\"pipelineRunner\", \"detachCamera\", \"mutation\", input),\n getCameraMetrics: (input) => dispatchSystem(\"pipelineRunner\", \"getCameraMetrics\", \"query\", input)\n };\n const recordingEngineInterface = {\n getPolicyStatus: (input) => dispatchSystem(\"recordingEngine\", \"getPolicyStatus\", \"query\", input)\n };\n const snapshotProviderInterface = {\n supportsDevice: (input) => dispatchSystem(\"snapshotProvider\", \"supportsDevice\", \"query\", input),\n getSnapshot: (input) => dispatchSystem(\"snapshotProvider\", \"getSnapshot\", \"query\", input)\n };\n const streamBrokerInterface = {\n publishCameraStream: (input) => dispatchSystem(\"streamBroker\", \"publishCameraStream\", \"mutation\", input),\n retractCameraStream: (input) => dispatchSystem(\"streamBroker\", \"retractCameraStream\", \"mutation\", input),\n assignProfile: (input) => dispatchSystem(\"streamBroker\", \"assignProfile\", \"mutation\", input),\n unassignProfile: (input) => dispatchSystem(\"streamBroker\", \"unassignProfile\", \"mutation\", input),\n restartProfile: (input) => dispatchSystem(\"streamBroker\", \"restartProfile\", \"mutation\", input),\n getDeviceSettingsContribution: (input) => dispatchSystem(\"streamBroker\", \"getDeviceSettingsContribution\", \"query\", input),\n getDeviceLiveContribution: (input) => dispatchSystem(\"streamBroker\", \"getDeviceLiveContribution\", \"query\", input),\n applyDeviceSettingsPatch: (input) => dispatchSystem(\"streamBroker\", \"applyDeviceSettingsPatch\", \"mutation\", input)\n };\n return {\n deviceId: binding.deviceId,\n binding,\n state: {\n audioMetrics: createSliceHandle(stateSource, binding.deviceId, \"audio-metrics\"),\n battery: createSliceHandle(stateSource, binding.deviceId, \"battery\"),\n brightness: createSliceHandle(stateSource, binding.deviceId, \"brightness\"),\n cameraStreams: createSliceHandle(stateSource, binding.deviceId, \"camera-streams\"),\n deviceDiscovery: createSliceHandle(stateSource, binding.deviceId, \"device-discovery\"),\n deviceStatus: createSliceHandle(stateSource, binding.deviceId, \"device-status\"),\n doorbell: createSliceHandle(stateSource, binding.deviceId, \"doorbell\"),\n featureProbe: createSliceHandle(stateSource, binding.deviceId, \"feature-probe\"),\n motion: createSliceHandle(stateSource, binding.deviceId, \"motion\"),\n motionTrigger: createSliceHandle(stateSource, binding.deviceId, \"motion-trigger\"),\n ptzAutotrack: createSliceHandle(stateSource, binding.deviceId, \"ptz-autotrack\"),\n switch: createSliceHandle(stateSource, binding.deviceId, \"switch\"),\n zoneAnalytics: createSliceHandle(stateSource, binding.deviceId, \"zone-analytics\"),\n zoneRules: createSliceHandle(stateSource, binding.deviceId, \"zone-rules\"),\n zones: createSliceHandle(stateSource, binding.deviceId, \"zones\")\n },\n accessories: accessoriesInterface,\n audioAnalysis: audioAnalysisInterface,\n audioMetrics: audioMetricsInterface,\n battery: batteryInterface,\n brightness: brightnessInterface,\n cameraCredentials: cameraCredentialsInterface,\n cameraStreams: cameraStreamsInterface,\n detectionPipeline: detectionPipelineInterface,\n deviceDiscovery: deviceDiscoveryInterface,\n deviceOps: deviceOpsInterface,\n deviceStatus: deviceStatusInterface,\n doorbell: doorbellInterface,\n events: eventsInterface,\n featureProbe: featureProbeInterface,\n intercom: intercomInterface,\n motion: motionInterface,\n motionDetection: motionDetectionInterface,\n motionTrigger: motionTriggerInterface,\n nativeObjectDetection: nativeObjectDetectionInterface,\n osd: osdInterface,\n pipelineAnalytics: pipelineAnalyticsInterface,\n ptz: ptzInterface,\n ptzAutotrack: ptzAutotrackInterface,\n reboot: rebootInterface,\n recording: recordingInterface,\n snapshot: snapshotInterface,\n switch: switchInterface,\n webrtcSession: webrtcSessionInterface,\n zoneAnalytics: zoneAnalyticsInterface,\n zoneRules: zoneRulesInterface,\n zones: zonesInterface,\n addonSettings: addonSettingsInterface,\n deviceExport: deviceExportInterface,\n deviceManager: deviceManagerInterface,\n deviceState: deviceStateInterface,\n networkQuality: networkQualityInterface,\n pipelineExecutor: pipelineExecutorInterface,\n pipelineOrchestrator: pipelineOrchestratorInterface,\n pipelineRunner: pipelineRunnerInterface,\n recordingEngine: recordingEngineInterface,\n snapshotProvider: snapshotProviderInterface,\n streamBroker: streamBrokerInterface\n };\n}\nfunction evaluateZoneRules(items, zones, rules, getCenter, getClassName) {\n if (rules.length === 0 || zones.length === 0) {\n return { passed: items, excluded: [] };\n }\n const activeRules = rules.filter((r) => r.enabled !== false);\n const includeRules = activeRules.filter((r) => r.mode === \"include\");\n const excludeRules = activeRules.filter((r) => r.mode === \"exclude\");\n const whitelistMode = includeRules.length > 0;\n const zonesById = new Map(zones.map((z2) => [z2.id, z2]));\n const passed = [];\n const excluded = [];\n for (const item of items) {\n const center = getCenter(item);\n const className = getClassName?.(item);\n const inInclude = includeRules.some((r) => ruleApplies(r, center, className, zonesById));\n const inExclude = excludeRules.some((r) => ruleApplies(r, center, className, zonesById));\n if (whitelistMode) {\n if (inInclude && !inExclude) passed.push(item);\n else excluded.push(item);\n } else {\n if (inExclude) excluded.push(item);\n else passed.push(item);\n }\n }\n return { passed, excluded };\n}\nfunction ruleApplies(rule, center, className, zonesById) {\n if (rule.classFilter && rule.classFilter.length > 0) {\n if (className !== void 0 && !rule.classFilter.includes(className)) return false;\n }\n for (const zoneId of rule.zoneIds) {\n const zone = zonesById.get(zoneId);\n if (!zone) continue;\n if (pointInPolygon(center, zone.polygon)) return true;\n }\n return false;\n}\nfunction pointInPolygon(point, polygon) {\n if (polygon.length < 3) return false;\n let inside = false;\n const { x, y } = point;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const a = polygon[i];\n const b = polygon[j];\n const intersect = a.y > y !== b.y > y && x < (b.x - a.x) * (y - a.y) / (b.y - a.y || Number.EPSILON) + a.x;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction createSystemProxy(api) {\n const typedApi = api;\n function dispatch(capProp, method, kind, input, push) {\n const leaf = typedApi[capProp]?.[method];\n if (!leaf) throw new Error(`SystemProxy: api has no '${capProp}.${method}'`);\n const fn = leaf;\n if (kind === \"mutation\") return fn.mutate(input);\n if (kind === \"subscription\") return fn.subscribe(input, push);\n return fn.query(input);\n }\n const addonPagesInterface = {\n listPages: (input) => dispatch(\"addonPages\", \"listPages\", \"query\", input)\n };\n const addonsInterface = {\n list: (input) => dispatch(\"addons\", \"list\", \"query\", input),\n getLogs: (input) => dispatch(\"addons\", \"getLogs\", \"query\", input),\n listPackages: (input) => dispatch(\"addons\", \"listPackages\", \"query\", input),\n installPackage: (input) => dispatch(\"addons\", \"installPackage\", \"mutation\", input),\n installFromWorkspace: (input) => dispatch(\"addons\", \"installFromWorkspace\", \"mutation\", input),\n isWorkspaceAvailable: (input) => dispatch(\"addons\", \"isWorkspaceAvailable\", \"query\", input),\n listWorkspacePackages: (input) => dispatch(\"addons\", \"listWorkspacePackages\", \"query\", input),\n uninstallPackage: (input) => dispatch(\"addons\", \"uninstallPackage\", \"mutation\", input),\n reloadPackages: (input) => dispatch(\"addons\", \"reloadPackages\", \"mutation\", input),\n searchAvailable: (input) => dispatch(\"addons\", \"searchAvailable\", \"query\", input),\n listUpdates: (input) => dispatch(\"addons\", \"listUpdates\", \"query\", input),\n updatePackage: (input) => dispatch(\"addons\", \"updatePackage\", \"mutation\", input),\n rollbackPackage: (input) => dispatch(\"addons\", \"rollbackPackage\", \"mutation\", input),\n forceRefresh: (input) => dispatch(\"addons\", \"forceRefresh\", \"mutation\", input),\n restartServer: (input) => dispatch(\"addons\", \"restartServer\", \"mutation\", input),\n getVersions: (input) => dispatch(\"addons\", \"getVersions\", \"query\", input),\n restartAddon: (input) => dispatch(\"addons\", \"restartAddon\", \"mutation\", input),\n retryLoad: (input) => dispatch(\"addons\", \"retryLoad\", \"mutation\", input),\n getAutoUpdateSettings: (input) => dispatch(\"addons\", \"getAutoUpdateSettings\", \"query\", input),\n setAutoUpdateSettings: (input) => dispatch(\"addons\", \"setAutoUpdateSettings\", \"mutation\", input),\n getAddonAutoUpdate: (input) => dispatch(\"addons\", \"getAddonAutoUpdate\", \"query\", input),\n setAddonAutoUpdate: (input) => dispatch(\"addons\", \"setAddonAutoUpdate\", \"mutation\", input),\n applyAutoUpdateToAll: (input) => dispatch(\"addons\", \"applyAutoUpdateToAll\", \"mutation\", input),\n custom: (input) => dispatch(\"addons\", \"custom\", \"mutation\", input),\n onAddonLogs: (input, push) => dispatch(\"addons\", \"onAddonLogs\", \"subscription\", input, push)\n };\n const addonSettingsInterface = {\n getGlobalSettings: (input) => dispatch(\"addonSettings\", \"getGlobalSettings\", \"query\", input),\n updateGlobalSettings: (input) => dispatch(\"addonSettings\", \"updateGlobalSettings\", \"mutation\", input)\n };\n const addonWidgetsInterface = {\n listWidgets: (input) => dispatch(\"addonWidgets\", \"listWidgets\", \"query\", input)\n };\n const alertsInterface = {\n emit: (input) => dispatch(\"alerts\", \"emit\", \"mutation\", input),\n update: (input) => dispatch(\"alerts\", \"update\", \"mutation\", input),\n list: (input) => dispatch(\"alerts\", \"list\", \"query\", input),\n getUnreadCount: (input) => dispatch(\"alerts\", \"getUnreadCount\", \"query\", input),\n markRead: (input) => dispatch(\"alerts\", \"markRead\", \"mutation\", input),\n markAllRead: (input) => dispatch(\"alerts\", \"markAllRead\", \"mutation\", input),\n dismiss: (input) => dispatch(\"alerts\", \"dismiss\", \"mutation\", input)\n };\n const audioAnalyzerInterface = {\n analyseChunk: (input) => dispatch(\"audioAnalyzer\", \"analyseChunk\", \"mutation\", input),\n classify: (input) => dispatch(\"audioAnalyzer\", \"classify\", \"query\", input),\n isReady: (input) => dispatch(\"audioAnalyzer\", \"isReady\", \"query\", input),\n dispose: (input) => dispatch(\"audioAnalyzer\", \"dispose\", \"mutation\", input),\n reprobeAudioEngine: (input) => dispatch(\"audioAnalyzer\", \"reprobeAudioEngine\", \"mutation\", input)\n };\n const audioCodecInterface = {\n listSupportedCodecs: (input) => dispatch(\"audioCodec\", \"listSupportedCodecs\", \"query\", input),\n canHandle: (input) => dispatch(\"audioCodec\", \"canHandle\", \"query\", input),\n createDecodeSession: (input) => dispatch(\"audioCodec\", \"createDecodeSession\", \"mutation\", input),\n createEncodeSession: (input) => dispatch(\"audioCodec\", \"createEncodeSession\", \"mutation\", input),\n closeSession: (input) => dispatch(\"audioCodec\", \"closeSession\", \"mutation\", input),\n pushEncodedFrame: (input) => dispatch(\"audioCodec\", \"pushEncodedFrame\", \"mutation\", input),\n pullPcm: (input) => dispatch(\"audioCodec\", \"pullPcm\", \"query\", input),\n pushPcm: (input) => dispatch(\"audioCodec\", \"pushPcm\", \"mutation\", input),\n pullEncoded: (input) => dispatch(\"audioCodec\", \"pullEncoded\", \"query\", input),\n flushEncode: (input) => dispatch(\"audioCodec\", \"flushEncode\", \"mutation\", input),\n listActiveSessions: (input) => dispatch(\"audioCodec\", \"listActiveSessions\", \"query\", input)\n };\n const authenticationInterface = {\n listProviders: (input) => dispatch(\"authentication\", \"listProviders\", \"query\", input),\n setProviderEnabled: (input) => dispatch(\"authentication\", \"setProviderEnabled\", \"mutation\", input)\n };\n const backupInterface = {\n listDestinations: (input) => dispatch(\"backup\", \"listDestinations\", \"query\", input),\n trigger: (input) => dispatch(\"backup\", \"trigger\", \"mutation\", input),\n list: (input) => dispatch(\"backup\", \"list\", \"query\", input),\n listLocations: (input) => dispatch(\"backup\", \"listLocations\", \"query\", input),\n getEntries: (input) => dispatch(\"backup\", \"getEntries\", \"query\", input),\n restore: (input) => dispatch(\"backup\", \"restore\", \"mutation\", input),\n delete: (input) => dispatch(\"backup\", \"delete\", \"mutation\", input),\n listArchives: (input) => dispatch(\"backup\", \"listArchives\", \"query\", input),\n upsertDestinationPolicy: (input) => dispatch(\"backup\", \"upsertDestinationPolicy\", \"mutation\", input),\n previewSchedule: (input) => dispatch(\"backup\", \"previewSchedule\", \"query\", input)\n };\n const decoderInterface = {\n supportsCodec: (input) => dispatch(\"decoder\", \"supportsCodec\", \"query\", input),\n getInfo: (input) => dispatch(\"decoder\", \"getInfo\", \"query\", input),\n createSession: (input) => dispatch(\"decoder\", \"createSession\", \"query\", input),\n destroySession: (input) => dispatch(\"decoder\", \"destroySession\", \"query\", input),\n pushPacket: (input) => dispatch(\"decoder\", \"pushPacket\", \"query\", input),\n openStream: (input) => dispatch(\"decoder\", \"openStream\", \"query\", input),\n pullFrames: (input) => dispatch(\"decoder\", \"pullFrames\", \"query\", input),\n updateConfig: (input) => dispatch(\"decoder\", \"updateConfig\", \"query\", input),\n getStats: (input) => dispatch(\"decoder\", \"getStats\", \"query\", input),\n listActiveSessions: (input) => dispatch(\"decoder\", \"listActiveSessions\", \"query\", input),\n reprobeHwaccel: (input) => dispatch(\"decoder\", \"reprobeHwaccel\", \"mutation\", input)\n };\n const deviceExportInterface = {\n getStatus: (input) => dispatch(\"deviceExport\", \"getStatus\", \"query\", input),\n listSupportedDeviceKinds: (input) => dispatch(\"deviceExport\", \"listSupportedDeviceKinds\", \"query\", input),\n listExposedDevices: (input) => dispatch(\"deviceExport\", \"listExposedDevices\", \"query\", input),\n exposeDevice: (input) => dispatch(\"deviceExport\", \"exposeDevice\", \"mutation\", input),\n unexposeDevice: (input) => dispatch(\"deviceExport\", \"unexposeDevice\", \"mutation\", input)\n };\n const deviceManagerInterface = {\n allocateDeviceId: (input) => dispatch(\"deviceManager\", \"allocateDeviceId\", \"mutation\", input),\n registerDevice: (input) => dispatch(\"deviceManager\", \"registerDevice\", \"mutation\", input),\n removeDevice: (input) => dispatch(\"deviceManager\", \"removeDevice\", \"mutation\", input),\n persistConfig: (input) => dispatch(\"deviceManager\", \"persistConfig\", \"mutation\", input),\n listLocations: (input) => dispatch(\"deviceManager\", \"listLocations\", \"query\", input),\n addLocation: (input) => dispatch(\"deviceManager\", \"addLocation\", \"mutation\", input),\n removeLocation: (input) => dispatch(\"deviceManager\", \"removeLocation\", \"mutation\", input),\n listPersistedByAddon: (input) => dispatch(\"deviceManager\", \"listPersistedByAddon\", \"query\", input),\n listAll: (input) => dispatch(\"deviceManager\", \"listAll\", \"query\", input),\n getChildren: (input) => dispatch(\"deviceManager\", \"getChildren\", \"query\", input),\n listWrappersForCap: (input) => dispatch(\"deviceManager\", \"listWrappersForCap\", \"query\", input),\n listBindableCapsForDeviceType: (input) => dispatch(\"deviceManager\", \"listBindableCapsForDeviceType\", \"query\", input),\n discoverDevices: (input) => dispatch(\"deviceManager\", \"discoverDevices\", \"mutation\", input),\n adoptDevice: (input) => dispatch(\"deviceManager\", \"adoptDevice\", \"mutation\", input),\n getCreationSchema: (input) => dispatch(\"deviceManager\", \"getCreationSchema\", \"query\", input),\n createDevice: (input) => dispatch(\"deviceManager\", \"createDevice\", \"mutation\", input),\n testCreationField: (input) => dispatch(\"deviceManager\", \"testCreationField\", \"mutation\", input)\n };\n const deviceProviderInterface = {\n start: (input) => dispatch(\"deviceProvider\", \"start\", \"mutation\", input),\n stop: (input) => dispatch(\"deviceProvider\", \"stop\", \"mutation\", input),\n getStatus: (input) => dispatch(\"deviceProvider\", \"getStatus\", \"query\", input),\n getDevices: (input) => dispatch(\"deviceProvider\", \"getDevices\", \"query\", input),\n supportsDiscovery: (input) => dispatch(\"deviceProvider\", \"supportsDiscovery\", \"query\", input),\n discoverDevices: (input) => dispatch(\"deviceProvider\", \"discoverDevices\", \"mutation\", input),\n adoptDiscoveredDevice: (input) => dispatch(\"deviceProvider\", \"adoptDiscoveredDevice\", \"mutation\", input),\n supportsManualCreation: (input) => dispatch(\"deviceProvider\", \"supportsManualCreation\", \"query\", input),\n getChildCreationSchema: (input) => dispatch(\"deviceProvider\", \"getChildCreationSchema\", \"query\", input),\n createDevice: (input) => dispatch(\"deviceProvider\", \"createDevice\", \"mutation\", input),\n testCreationField: (input) => dispatch(\"deviceProvider\", \"testCreationField\", \"mutation\", input)\n };\n const deviceStateInterface = {\n getAllSnapshots: (input) => dispatch(\"deviceState\", \"getAllSnapshots\", \"query\", input)\n };\n const integrationsInterface = {\n list: (input) => dispatch(\"integrations\", \"list\", \"query\", input),\n get: (input) => dispatch(\"integrations\", \"get\", \"query\", input),\n getByAddonId: (input) => dispatch(\"integrations\", \"getByAddonId\", \"query\", input),\n create: (input) => dispatch(\"integrations\", \"create\", \"mutation\", input),\n update: (input) => dispatch(\"integrations\", \"update\", \"mutation\", input),\n delete: (input) => dispatch(\"integrations\", \"delete\", \"mutation\", input),\n getSettings: (input) => dispatch(\"integrations\", \"getSettings\", \"query\", input),\n setSettings: (input) => dispatch(\"integrations\", \"setSettings\", \"mutation\", input),\n getAvailableTypes: (input) => dispatch(\"integrations\", \"getAvailableTypes\", \"query\", input),\n testConnection: (input) => dispatch(\"integrations\", \"testConnection\", \"mutation\", input)\n };\n const localNetworkInterface = {\n list: (input) => dispatch(\"localNetwork\", \"list\", \"query\", input),\n getPreferred: (input) => dispatch(\"localNetwork\", \"getPreferred\", \"query\", input),\n getConnectionEndpoints: (input) => dispatch(\"localNetwork\", \"getConnectionEndpoints\", \"query\", input),\n getAllowedAddresses: (input) => dispatch(\"localNetwork\", \"getAllowedAddresses\", \"query\", input),\n setAllowedAddresses: (input) => dispatch(\"localNetwork\", \"setAllowedAddresses\", \"mutation\", input),\n resetAllowlistToBestMatch: (input) => dispatch(\"localNetwork\", \"resetAllowlistToBestMatch\", \"mutation\", input)\n };\n const meshNetworkInterface = {\n getStatus: (input) => dispatch(\"meshNetwork\", \"getStatus\", \"query\", input),\n join: (input) => dispatch(\"meshNetwork\", \"join\", \"mutation\", input),\n startLogin: (input) => dispatch(\"meshNetwork\", \"startLogin\", \"mutation\", input),\n leave: (input) => dispatch(\"meshNetwork\", \"leave\", \"mutation\", input),\n logout: (input) => dispatch(\"meshNetwork\", \"logout\", \"mutation\", input),\n listPeers: (input) => dispatch(\"meshNetwork\", \"listPeers\", \"query\", input),\n testConnection: (input) => dispatch(\"meshNetwork\", \"testConnection\", \"mutation\", input)\n };\n const meshOrchestratorInterface = {\n listProviders: (input) => dispatch(\"meshOrchestrator\", \"listProviders\", \"query\", input),\n joinProvider: (input) => dispatch(\"meshOrchestrator\", \"joinProvider\", \"mutation\", input),\n leaveProvider: (input) => dispatch(\"meshOrchestrator\", \"leaveProvider\", \"mutation\", input),\n startLoginProvider: (input) => dispatch(\"meshOrchestrator\", \"startLoginProvider\", \"mutation\", input),\n logoutProvider: (input) => dispatch(\"meshOrchestrator\", \"logoutProvider\", \"mutation\", input),\n listProviderPeers: (input) => dispatch(\"meshOrchestrator\", \"listProviderPeers\", \"query\", input)\n };\n const metricsProviderInterface = {\n collectSnapshot: (input) => dispatch(\"metricsProvider\", \"collectSnapshot\", \"query\", input),\n getCached: (input) => dispatch(\"metricsProvider\", \"getCached\", \"query\", input),\n getCurrent: (input) => dispatch(\"metricsProvider\", \"getCurrent\", \"query\", input),\n getDiskSpace: (input) => dispatch(\"metricsProvider\", \"getDiskSpace\", \"query\", input),\n getGpuInfo: (input) => dispatch(\"metricsProvider\", \"getGpuInfo\", \"query\", input),\n getCpuTemperature: (input) => dispatch(\"metricsProvider\", \"getCpuTemperature\", \"query\", input),\n getProcessStats: (input) => dispatch(\"metricsProvider\", \"getProcessStats\", \"query\", input),\n listAddonInstances: (input) => dispatch(\"metricsProvider\", \"listAddonInstances\", \"query\", input),\n getAddonStats: (input) => dispatch(\"metricsProvider\", \"getAddonStats\", \"query\", input),\n listNodeProcesses: (input) => dispatch(\"metricsProvider\", \"listNodeProcesses\", \"query\", input),\n killProcess: (input) => dispatch(\"metricsProvider\", \"killProcess\", \"mutation\", input)\n };\n const mqttBrokerInterface = {\n listBrokers: (input) => dispatch(\"mqttBroker\", \"listBrokers\", \"query\", input),\n getBrokerConfig: (input) => dispatch(\"mqttBroker\", \"getBrokerConfig\", \"query\", input),\n addBroker: (input) => dispatch(\"mqttBroker\", \"addBroker\", \"mutation\", input),\n removeBroker: (input) => dispatch(\"mqttBroker\", \"removeBroker\", \"mutation\", input),\n testConnection: (input) => dispatch(\"mqttBroker\", \"testConnection\", \"mutation\", input),\n startEmbeddedBroker: (input) => dispatch(\"mqttBroker\", \"startEmbeddedBroker\", \"mutation\", input),\n stopEmbeddedBroker: (input) => dispatch(\"mqttBroker\", \"stopEmbeddedBroker\", \"mutation\", input),\n getStatus: (input) => dispatch(\"mqttBroker\", \"getStatus\", \"query\", input)\n };\n const networkQualityInterface = {\n getAllStats: (input) => dispatch(\"networkQuality\", \"getAllStats\", \"query\", input)\n };\n const nodesInterface = {\n topology: (input) => dispatch(\"nodes\", \"topology\", \"query\", input),\n deployAddon: (input) => dispatch(\"nodes\", \"deployAddon\", \"mutation\", input),\n undeployAddon: (input) => dispatch(\"nodes\", \"undeployAddon\", \"mutation\", input),\n restartAddon: (input) => dispatch(\"nodes\", \"restartAddon\", \"mutation\", input),\n restartProcess: (input) => dispatch(\"nodes\", \"restartProcess\", \"mutation\", input),\n restartNode: (input) => dispatch(\"nodes\", \"restartNode\", \"mutation\", input),\n shutdownNode: (input) => dispatch(\"nodes\", \"shutdownNode\", \"mutation\", input),\n renameNode: (input) => dispatch(\"nodes\", \"renameNode\", \"mutation\", input),\n clusterAddonStatus: (input) => dispatch(\"nodes\", \"clusterAddonStatus\", \"query\", input),\n getNodeAddons: (input) => dispatch(\"nodes\", \"getNodeAddons\", \"query\", input),\n setProcessLogLevel: (input) => dispatch(\"nodes\", \"setProcessLogLevel\", \"mutation\", input),\n executeQuery: (input) => dispatch(\"nodes\", \"executeQuery\", \"mutation\", input)\n };\n const notificationOutputInterface = {\n send: (input) => dispatch(\"notificationOutput\", \"send\", \"mutation\", input),\n sendTest: (input) => dispatch(\"notificationOutput\", \"sendTest\", \"mutation\", input)\n };\n const pipelineExecutorInterface = {\n getAvailableEngines: (input) => dispatch(\"pipelineExecutor\", \"getAvailableEngines\", \"query\", input),\n getSelectedEngine: (input) => dispatch(\"pipelineExecutor\", \"getSelectedEngine\", \"query\", input),\n getDefaultSteps: (input) => dispatch(\"pipelineExecutor\", \"getDefaultSteps\", \"query\", input),\n reprobeEngine: (input) => dispatch(\"pipelineExecutor\", \"reprobeEngine\", \"mutation\", input),\n getVideoPipelineSteps: (input) => dispatch(\"pipelineExecutor\", \"getVideoPipelineSteps\", \"query\", input),\n setVideoPipelineSteps: (input) => dispatch(\"pipelineExecutor\", \"setVideoPipelineSteps\", \"mutation\", input),\n getSchema: (input) => dispatch(\"pipelineExecutor\", \"getSchema\", \"query\", input),\n getGlobalSteps: (input) => dispatch(\"pipelineExecutor\", \"getGlobalSteps\", \"query\", input),\n getGlobalPipelineConfig: (input) => dispatch(\"pipelineExecutor\", \"getGlobalPipelineConfig\", \"query\", input),\n getOrchestratorConfigSchema: (input) => dispatch(\"pipelineExecutor\", \"getOrchestratorConfigSchema\", \"query\", input),\n listTemplates: (input) => dispatch(\"pipelineExecutor\", \"listTemplates\", \"query\", input),\n saveTemplate: (input) => dispatch(\"pipelineExecutor\", \"saveTemplate\", \"mutation\", input),\n updateTemplate: (input) => dispatch(\"pipelineExecutor\", \"updateTemplate\", \"mutation\", input),\n deleteTemplate: (input) => dispatch(\"pipelineExecutor\", \"deleteTemplate\", \"mutation\", input),\n getCapabilities: (input) => dispatch(\"pipelineExecutor\", \"getCapabilities\", \"query\", input),\n getAddonModels: (input) => dispatch(\"pipelineExecutor\", \"getAddonModels\", \"query\", input),\n downloadModel: (input) => dispatch(\"pipelineExecutor\", \"downloadModel\", \"mutation\", input),\n deleteModel: (input) => dispatch(\"pipelineExecutor\", \"deleteModel\", \"mutation\", input),\n detect: (input) => dispatch(\"pipelineExecutor\", \"detect\", \"query\", input),\n cacheFrameInPool: (input) => dispatch(\"pipelineExecutor\", \"cacheFrameInPool\", \"mutation\", input),\n inferCached: (input) => dispatch(\"pipelineExecutor\", \"inferCached\", \"mutation\", input),\n uncacheFrame: (input) => dispatch(\"pipelineExecutor\", \"uncacheFrame\", \"mutation\", input),\n getEffectiveTuning: (input) => dispatch(\"pipelineExecutor\", \"getEffectiveTuning\", \"query\", input),\n listLoadedEngines: (input) => dispatch(\"pipelineExecutor\", \"listLoadedEngines\", \"query\", input),\n spinEngine: (input) => dispatch(\"pipelineExecutor\", \"spinEngine\", \"mutation\", input),\n killEngine: (input) => dispatch(\"pipelineExecutor\", \"killEngine\", \"mutation\", input),\n listReferenceImages: (input) => dispatch(\"pipelineExecutor\", \"listReferenceImages\", \"query\", input),\n getReferenceImage: (input) => dispatch(\"pipelineExecutor\", \"getReferenceImage\", \"query\", input),\n getReferenceAudioFiles: (input) => dispatch(\"pipelineExecutor\", \"getReferenceAudioFiles\", \"query\", input),\n getReferenceAudio: (input) => dispatch(\"pipelineExecutor\", \"getReferenceAudio\", \"query\", input),\n getAudioCapabilities: (input) => dispatch(\"pipelineExecutor\", \"getAudioCapabilities\", \"query\", input),\n runAudioTest: (input) => dispatch(\"pipelineExecutor\", \"runAudioTest\", \"mutation\", input),\n getDetectionConfigSchema: (input) => dispatch(\"pipelineExecutor\", \"getDetectionConfigSchema\", \"query\", input)\n };\n const pipelineOrchestratorInterface = {\n rebalance: (input) => dispatch(\"pipelineOrchestrator\", \"rebalance\", \"mutation\", input),\n getPipelineAssignments: (input) => dispatch(\"pipelineOrchestrator\", \"getPipelineAssignments\", \"query\", input),\n getAgentLoad: (input) => dispatch(\"pipelineOrchestrator\", \"getAgentLoad\", \"query\", input),\n getGlobalMetrics: (input) => dispatch(\"pipelineOrchestrator\", \"getGlobalMetrics\", \"query\", input),\n getCapabilityBindings: (input) => dispatch(\"pipelineOrchestrator\", \"getCapabilityBindings\", \"query\", input),\n setCapabilityBinding: (input) => dispatch(\"pipelineOrchestrator\", \"setCapabilityBinding\", \"mutation\", input),\n getDecoderAssignments: (input) => dispatch(\"pipelineOrchestrator\", \"getDecoderAssignments\", \"query\", input),\n getAudioNodeLoad: (input) => dispatch(\"pipelineOrchestrator\", \"getAudioNodeLoad\", \"query\", input),\n getAgentSettings: (input) => dispatch(\"pipelineOrchestrator\", \"getAgentSettings\", \"query\", input),\n listAgentSettings: (input) => dispatch(\"pipelineOrchestrator\", \"listAgentSettings\", \"query\", input),\n setAgentAddonDefaults: (input) => dispatch(\"pipelineOrchestrator\", \"setAgentAddonDefaults\", \"mutation\", input),\n removeAgentSettings: (input) => dispatch(\"pipelineOrchestrator\", \"removeAgentSettings\", \"mutation\", input),\n listTemplates: (input) => dispatch(\"pipelineOrchestrator\", \"listTemplates\", \"query\", input),\n saveTemplate: (input) => dispatch(\"pipelineOrchestrator\", \"saveTemplate\", \"mutation\", input),\n updateTemplate: (input) => dispatch(\"pipelineOrchestrator\", \"updateTemplate\", \"mutation\", input),\n deleteTemplate: (input) => dispatch(\"pipelineOrchestrator\", \"deleteTemplate\", \"mutation\", input)\n };\n const pipelineRunnerInterface = {\n attachCamera: (input) => dispatch(\"pipelineRunner\", \"attachCamera\", \"mutation\", input),\n reportMotion: (input) => dispatch(\"pipelineRunner\", \"reportMotion\", \"mutation\", input),\n getLocalLoad: (input) => dispatch(\"pipelineRunner\", \"getLocalLoad\", \"query\", input),\n getLocalMetrics: (input) => dispatch(\"pipelineRunner\", \"getLocalMetrics\", \"query\", input),\n getAllCameraMetrics: (input) => dispatch(\"pipelineRunner\", \"getAllCameraMetrics\", \"query\", input),\n getLocalCameras: (input) => dispatch(\"pipelineRunner\", \"getLocalCameras\", \"query\", input)\n };\n const platformProbeInterface = {\n getCapabilities: (input) => dispatch(\"platformProbe\", \"getCapabilities\", \"query\", input),\n getHardware: (input) => dispatch(\"platformProbe\", \"getHardware\", \"query\", input),\n resolveInferenceConfig: (input) => dispatch(\"platformProbe\", \"resolveInferenceConfig\", \"query\", input),\n resolveHwAccel: (input) => dispatch(\"platformProbe\", \"resolveHwAccel\", \"query\", input),\n getHardwareEncoders: (input) => dispatch(\"platformProbe\", \"getHardwareEncoders\", \"query\", input),\n refreshHardwareEncoders: (input) => dispatch(\"platformProbe\", \"refreshHardwareEncoders\", \"mutation\", input)\n };\n const recordingEngineInterface = {\n getStatus: (input) => dispatch(\"recordingEngine\", \"getStatus\", \"query\", input),\n enable: (input) => dispatch(\"recordingEngine\", \"enable\", \"mutation\", input),\n disable: (input) => dispatch(\"recordingEngine\", \"disable\", \"mutation\", input),\n getConfig: (input) => dispatch(\"recordingEngine\", \"getConfig\", \"query\", input),\n updateConfig: (input) => dispatch(\"recordingEngine\", \"updateConfig\", \"mutation\", input),\n getPlaylist: (input) => dispatch(\"recordingEngine\", \"getPlaylist\", \"query\", input),\n getThumbnail: (input) => dispatch(\"recordingEngine\", \"getThumbnail\", \"query\", input),\n getSegments: (input) => dispatch(\"recordingEngine\", \"getSegments\", \"query\", input),\n getAvailability: (input) => dispatch(\"recordingEngine\", \"getAvailability\", \"query\", input),\n estimateStorage: (input) => dispatch(\"recordingEngine\", \"estimateStorage\", \"query\", input),\n estimateGlobalStorage: (input) => dispatch(\"recordingEngine\", \"estimateGlobalStorage\", \"query\", input),\n getStorageUsage: (input) => dispatch(\"recordingEngine\", \"getStorageUsage\", \"query\", input),\n setPolicy: (input) => dispatch(\"recordingEngine\", \"setPolicy\", \"mutation\", input),\n getPolicy: (input) => dispatch(\"recordingEngine\", \"getPolicy\", \"query\", input),\n getRetentionConfig: (input) => dispatch(\"recordingEngine\", \"getRetentionConfig\", \"query\", input),\n updateRetentionConfig: (input) => dispatch(\"recordingEngine\", \"updateRetentionConfig\", \"mutation\", input),\n getMotionStats: (input) => dispatch(\"recordingEngine\", \"getMotionStats\", \"query\", input)\n };\n const remoteAccessInterface = {\n listProviders: (input) => dispatch(\"remoteAccess\", \"listProviders\", \"query\", input),\n startProvider: (input) => dispatch(\"remoteAccess\", \"startProvider\", \"mutation\", input),\n stopProvider: (input) => dispatch(\"remoteAccess\", \"stopProvider\", \"mutation\", input)\n };\n const settingsStoreInterface = {\n get: (input) => dispatch(\"settingsStore\", \"get\", \"query\", input),\n set: (input) => dispatch(\"settingsStore\", \"set\", \"mutation\", input),\n query: (input) => dispatch(\"settingsStore\", \"query\", \"query\", input),\n insert: (input) => dispatch(\"settingsStore\", \"insert\", \"mutation\", input),\n update: (input) => dispatch(\"settingsStore\", \"update\", \"mutation\", input),\n delete: (input) => dispatch(\"settingsStore\", \"delete\", \"mutation\", input),\n count: (input) => dispatch(\"settingsStore\", \"count\", \"query\", input),\n isEmpty: (input) => dispatch(\"settingsStore\", \"isEmpty\", \"query\", input),\n declareCollection: (input) => dispatch(\"settingsStore\", \"declareCollection\", \"mutation\", input)\n };\n const storageInterface = {\n resolve: (input) => dispatch(\"storage\", \"resolve\", \"query\", input),\n write: (input) => dispatch(\"storage\", \"write\", \"mutation\", input),\n read: (input) => dispatch(\"storage\", \"read\", \"query\", input),\n exists: (input) => dispatch(\"storage\", \"exists\", \"query\", input),\n list: (input) => dispatch(\"storage\", \"list\", \"query\", input),\n delete: (input) => dispatch(\"storage\", \"delete\", \"mutation\", input),\n getAvailableSpace: (input) => dispatch(\"storage\", \"getAvailableSpace\", \"query\", input),\n beginUpload: (input) => dispatch(\"storage\", \"beginUpload\", \"mutation\", input),\n writeChunk: (input) => dispatch(\"storage\", \"writeChunk\", \"mutation\", input),\n finalizeUpload: (input) => dispatch(\"storage\", \"finalizeUpload\", \"mutation\", input),\n abortUpload: (input) => dispatch(\"storage\", \"abortUpload\", \"mutation\", input),\n beginDownload: (input) => dispatch(\"storage\", \"beginDownload\", \"mutation\", input),\n readChunk: (input) => dispatch(\"storage\", \"readChunk\", \"query\", input),\n endDownload: (input) => dispatch(\"storage\", \"endDownload\", \"mutation\", input),\n listLocations: (input) => dispatch(\"storage\", \"listLocations\", \"query\", input),\n getDefaultLocation: (input) => dispatch(\"storage\", \"getDefaultLocation\", \"query\", input),\n upsertLocation: (input) => dispatch(\"storage\", \"upsertLocation\", \"mutation\", input),\n deleteLocation: (input) => dispatch(\"storage\", \"deleteLocation\", \"mutation\", input),\n testLocation: (input) => dispatch(\"storage\", \"testLocation\", \"query\", input),\n listProviders: (input) => dispatch(\"storage\", \"listProviders\", \"query\", input),\n testConfig: (input) => dispatch(\"storage\", \"testConfig\", \"query\", input)\n };\n const streamBrokerInterface = {\n listAllCameraStreams: (input) => dispatch(\"streamBroker\", \"listAllCameraStreams\", \"query\", input),\n listAllProfileSlots: (input) => dispatch(\"streamBroker\", \"listAllProfileSlots\", \"query\", input),\n getBrokerStats: (input) => dispatch(\"streamBroker\", \"getBrokerStats\", \"query\", input),\n listClients: (input) => dispatch(\"streamBroker\", \"listClients\", \"query\", input),\n killClient: (input) => dispatch(\"streamBroker\", \"killClient\", \"mutation\", input),\n getStreamUrl: (input) => dispatch(\"streamBroker\", \"getStreamUrl\", \"query\", input),\n getStreamWithCodec: (input) => dispatch(\"streamBroker\", \"getStreamWithCodec\", \"mutation\", input),\n releaseStreamWithCodec: (input) => dispatch(\"streamBroker\", \"releaseStreamWithCodec\", \"mutation\", input),\n getBroker: (input) => dispatch(\"streamBroker\", \"getBroker\", \"query\", input),\n setPreBufferDuration: (input) => dispatch(\"streamBroker\", \"setPreBufferDuration\", \"mutation\", input),\n getPreBufferInfo: (input) => dispatch(\"streamBroker\", \"getPreBufferInfo\", \"query\", input),\n getRtspPort: (input) => dispatch(\"streamBroker\", \"getRtspPort\", \"query\", input),\n getAllRtspEntries: (input) => dispatch(\"streamBroker\", \"getAllRtspEntries\", \"query\", input),\n getRtspEntry: (input) => dispatch(\"streamBroker\", \"getRtspEntry\", \"query\", input),\n regenerateRtspToken: (input) => dispatch(\"streamBroker\", \"regenerateRtspToken\", \"mutation\", input),\n setRtspEnabled: (input) => dispatch(\"streamBroker\", \"setRtspEnabled\", \"mutation\", input),\n isRtspEnabled: (input) => dispatch(\"streamBroker\", \"isRtspEnabled\", \"query\", input)\n };\n const systemInterface = {\n info: (input) => dispatch(\"system\", \"info\", \"query\", input),\n health: (input) => dispatch(\"system\", \"health\", \"query\", input),\n featureFlags: (input) => dispatch(\"system\", \"featureFlags\", \"query\", input),\n networkAddresses: (input) => dispatch(\"system\", \"networkAddresses\", \"query\", input),\n getRetentionConfig: (input) => dispatch(\"system\", \"getRetentionConfig\", \"query\", input),\n setRetentionConfig: (input) => dispatch(\"system\", \"setRetentionConfig\", \"mutation\", input),\n forceRetentionCleanup: (input) => dispatch(\"system\", \"forceRetentionCleanup\", \"mutation\", input)\n };\n const toastInterface = {\n onToast: (input, push) => dispatch(\"toast\", \"onToast\", \"subscription\", input, push)\n };\n const turnOrchestratorInterface = {\n listProviders: (input) => dispatch(\"turnOrchestrator\", \"listProviders\", \"query\", input),\n getAllServers: (input) => dispatch(\"turnOrchestrator\", \"getAllServers\", \"query\", input),\n setProviderEnabled: (input) => dispatch(\"turnOrchestrator\", \"setProviderEnabled\", \"mutation\", input)\n };\n const turnProviderInterface = {\n getTurnServers: (input) => dispatch(\"turnProvider\", \"getTurnServers\", \"query\", input)\n };\n const userManagementInterface = {\n listUsers: (input) => dispatch(\"userManagement\", \"listUsers\", \"query\", input),\n createUser: (input) => dispatch(\"userManagement\", \"createUser\", \"mutation\", input),\n updateUser: (input) => dispatch(\"userManagement\", \"updateUser\", \"mutation\", input),\n deleteUser: (input) => dispatch(\"userManagement\", \"deleteUser\", \"mutation\", input),\n resetPassword: (input) => dispatch(\"userManagement\", \"resetPassword\", \"mutation\", input),\n setUserScopes: (input) => dispatch(\"userManagement\", \"setUserScopes\", \"mutation\", input),\n validateCredentials: (input) => dispatch(\"userManagement\", \"validateCredentials\", \"mutation\", input),\n listApiKeys: (input) => dispatch(\"userManagement\", \"listApiKeys\", \"query\", input),\n createApiKey: (input) => dispatch(\"userManagement\", \"createApiKey\", \"mutation\", input),\n revokeApiKey: (input) => dispatch(\"userManagement\", \"revokeApiKey\", \"mutation\", input),\n validateApiKey: (input) => dispatch(\"userManagement\", \"validateApiKey\", \"mutation\", input),\n createScopedToken: (input) => dispatch(\"userManagement\", \"createScopedToken\", \"mutation\", input),\n revokeScopedToken: (input) => dispatch(\"userManagement\", \"revokeScopedToken\", \"mutation\", input),\n validateScopedToken: (input) => dispatch(\"userManagement\", \"validateScopedToken\", \"query\", input),\n listScopedTokens: (input) => dispatch(\"userManagement\", \"listScopedTokens\", \"query\", input),\n setupTotp: (input) => dispatch(\"userManagement\", \"setupTotp\", \"mutation\", input),\n confirmTotp: (input) => dispatch(\"userManagement\", \"confirmTotp\", \"mutation\", input),\n disableTotp: (input) => dispatch(\"userManagement\", \"disableTotp\", \"mutation\", input),\n getTotpStatus: (input) => dispatch(\"userManagement\", \"getTotpStatus\", \"query\", input),\n verifyTotp: (input) => dispatch(\"userManagement\", \"verifyTotp\", \"mutation\", input)\n };\n return {\n addonPages: addonPagesInterface,\n addons: addonsInterface,\n addonSettings: addonSettingsInterface,\n addonWidgets: addonWidgetsInterface,\n alerts: alertsInterface,\n audioAnalyzer: audioAnalyzerInterface,\n audioCodec: audioCodecInterface,\n authentication: authenticationInterface,\n backup: backupInterface,\n decoder: decoderInterface,\n deviceExport: deviceExportInterface,\n deviceManager: deviceManagerInterface,\n deviceProvider: deviceProviderInterface,\n deviceState: deviceStateInterface,\n integrations: integrationsInterface,\n localNetwork: localNetworkInterface,\n meshNetwork: meshNetworkInterface,\n meshOrchestrator: meshOrchestratorInterface,\n metricsProvider: metricsProviderInterface,\n mqttBroker: mqttBrokerInterface,\n networkQuality: networkQualityInterface,\n nodes: nodesInterface,\n notificationOutput: notificationOutputInterface,\n pipelineExecutor: pipelineExecutorInterface,\n pipelineOrchestrator: pipelineOrchestratorInterface,\n pipelineRunner: pipelineRunnerInterface,\n platformProbe: platformProbeInterface,\n recordingEngine: recordingEngineInterface,\n remoteAccess: remoteAccessInterface,\n settingsStore: settingsStoreInterface,\n storage: storageInterface,\n streamBroker: streamBrokerInterface,\n system: systemInterface,\n toast: toastInterface,\n turnOrchestrator: turnOrchestratorInterface,\n turnProvider: turnProviderInterface,\n userManagement: userManagementInterface\n };\n}\nconst STATE_CHANGED_CATEGORY = \"device.state-changed\";\nconst BINDING_CHANGED_CATEGORY = \"capability.binding-changed\";\nconst DEVICE_REGISTERED_CATEGORY = \"device.registered\";\nconst DEVICE_UNREGISTERED_CATEGORY = \"device.unregistered\";\nconst DEVICE_UPDATED_CATEGORY = \"device.updated\";\nclass SystemMirror {\n constructor(api) {\n this.api = api;\n this.stateSource = createMirrorSource(this.stateMirror, this.handleListeners, this.api);\n }\n /** deviceId → capName → slice (push-driven mirror). */\n stateMirror = /* @__PURE__ */ new Map();\n /** deviceId → binding (warm-boot + binding-changed events). */\n bindings = /* @__PURE__ */ new Map();\n /** deviceId → metadata (warm-boot + lifecycle events). */\n devices = /* @__PURE__ */ new Map();\n /** Listener map for individual `(deviceId, capName)` watches —\n * shared with every `MirrorSource` we hand out. */\n handleListeners = /* @__PURE__ */ new Map();\n /** Global state-change listeners registered via `listen()`. */\n globalStateListeners = /* @__PURE__ */ new Set();\n /** Per-cap state listeners registered via `listenCap(capName, …)`. */\n capListeners = /* @__PURE__ */ new Map();\n /** Per-device state listeners registered via `listenDevice(id, …)`. */\n deviceListeners = /* @__PURE__ */ new Map();\n /** Lifecycle listeners. */\n addedListeners = /* @__PURE__ */ new Set();\n removedListeners = /* @__PURE__ */ new Set();\n /** waitForState pending requests — keyed by an internal counter. */\n pendingWaits = /* @__PURE__ */ new Set();\n /** Memoised state source — every proxy shares it. */\n stateSource;\n /** Live event bridges — closed in `dispose()`. */\n bridges = [];\n initialized = false;\n initPromise = null;\n // ── Lifecycle ──────────────────────────────────────────────────────\n /**\n * Warm-boot: three round-trips (bindings + snapshots + listAll) and\n * then the live event subscriptions. Idempotent — concurrent callers\n * await the same in-flight Promise.\n *\n * Each warm-boot query is wrapped in a 15s timeout so a missing\n * endpoint or stuck broker poll surfaces as a clear error instead\n * of silently hanging the caller forever. The default is generous\n * enough for cluster-wide setups but short enough for ops to\n * notice and fix the underlying transport issue.\n */\n async init(timeoutMs = 15e3) {\n if (this.initialized) return;\n if (this.initPromise) return this.initPromise;\n this.initPromise = (async () => {\n const withTimeout2 = (p, label) => {\n if (!Number.isFinite(timeoutMs)) return p;\n return new Promise((resolve, reject) => {\n const timer = setTimeout(\n () => reject(new Error(`SystemMirror.init: '${label}' timed out after ${timeoutMs}ms`)),\n timeoutMs\n );\n p.then(\n (v) => {\n clearTimeout(timer);\n resolve(v);\n },\n (err) => {\n clearTimeout(timer);\n reject(err);\n }\n );\n });\n };\n const [allBindings, allSnapshots, allDevices] = await Promise.all([\n withTimeout2(this.api.deviceManager.getAllBindings.query({}), \"deviceManager.getAllBindings\"),\n withTimeout2(this.api.deviceState.getAllSnapshots.query({}), \"deviceState.getAllSnapshots\"),\n withTimeout2(this.api.deviceManager.listAll.query({}), \"deviceManager.listAll\")\n ]);\n for (const b of allBindings) this.bindings.set(b.deviceId, b);\n for (const [deviceIdStr, perCap] of Object.entries(allSnapshots)) {\n const deviceId = Number(deviceIdStr);\n if (!Number.isFinite(deviceId)) continue;\n const capMap = /* @__PURE__ */ new Map();\n for (const [capName, slice] of Object.entries(perCap)) capMap.set(capName, slice);\n this.stateMirror.set(deviceId, capMap);\n }\n for (const info of allDevices) this.devices.set(info.id, info);\n try {\n this.subscribeBus();\n } catch (err) {\n }\n this.initialized = true;\n })();\n try {\n await this.initPromise;\n } finally {\n this.initPromise = null;\n }\n }\n /** True after `init()` resolves. */\n isReady() {\n return this.initialized;\n }\n /** Promise that resolves once `init()` has completed. */\n async awaitReady() {\n if (this.initialized) return;\n if (this.initPromise) return this.initPromise;\n return this.init();\n }\n /**\n * Tear down the event bridges + clear listener registries. Existing\n * proxy references become inert (slice reads keep working off the\n * stale mirror, but no further updates arrive).\n */\n dispose() {\n for (const b of this.bridges) {\n try {\n b.unsubscribe();\n } catch {\n }\n }\n this.bridges = [];\n this.handleListeners.clear();\n this.globalStateListeners.clear();\n this.capListeners.clear();\n this.deviceListeners.clear();\n this.addedListeners.clear();\n this.removedListeners.clear();\n this.pendingWaits.clear();\n this.initialized = false;\n }\n // ── Lookup ─────────────────────────────────────────────────────────\n /** Sync lookup by numeric id. `null` if unknown. */\n getDeviceById(deviceId) {\n const binding = this.bindings.get(deviceId);\n if (!binding) return null;\n return createDeviceProxy(this.api, binding, { stateSource: this.stateSource });\n }\n /** Sync lookup by display name (exact match). `null` if unknown. */\n getDeviceByName(name) {\n for (const info of this.devices.values()) {\n if (info.name === name) return this.getDeviceById(info.id);\n }\n return null;\n }\n /** Sync lookup by stableId (the addon-scoped external id). */\n getDeviceByStableId(stableId) {\n for (const info of this.devices.values()) {\n if (info.stableId === stableId) return this.getDeviceById(info.id);\n }\n return null;\n }\n /** All devices owned by an addon. */\n getDevicesByAddon(addonId) {\n return this.query({ addonId });\n }\n /** All devices of a given `DeviceType`. */\n getDevicesByType(type) {\n return this.query({ type });\n }\n /**\n * Live metadata snapshot for a device. Same shape as\n * `deviceManager.getDevice(id)`; sync from the mirror.\n */\n getDeviceInfo(deviceId) {\n return this.devices.get(deviceId) ?? null;\n }\n /** Snapshot of every known device as a typed proxy. */\n getAllDevices() {\n const out = [];\n for (const id of this.bindings.keys()) {\n const proxy = this.getDeviceById(id);\n if (proxy) out.push(proxy);\n }\n return out;\n }\n /** Filter devices by cap presence — shorthand for `query({caps: capName})`. */\n filterByCap(capName) {\n return this.query({ caps: capName });\n }\n // ── Unified query ──────────────────────────────────────────────────\n /**\n * Filter the fleet against a structured filter set. All fields ANDed,\n * arrays ORed within a single field. Returns proxies — chain with\n * cap-method calls or state reads as needed.\n *\n * Examples:\n *\n * sm.query({ addonId: 'reolink', online: true })\n * sm.query({ type: DeviceType.Camera, caps: ['snapshot', 'motion'] })\n * sm.query({ id: [1, 2, 3] })\n * sm.query({ name: { contains: 'sala' } })\n * sm.query({ name: /^cam-\\d+$/ })\n * sm.query({ parentDeviceId: 8 }) // accessories of cam 8\n * sm.query({ where: (info, dev) => dev.state.battery.value?.sleeping })\n */\n query(filters = {}) {\n const out = [];\n for (const [deviceId, binding] of this.bindings) {\n const info = this.devices.get(deviceId);\n if (filters.id !== void 0 && !inSet(deviceId, filters.id)) continue;\n if (filters.stableId !== void 0) {\n if (!info) continue;\n if (!inSet(info.stableId, filters.stableId)) continue;\n }\n if (filters.addonId !== void 0) {\n if (!info) continue;\n if (!inSet(info.addonId, filters.addonId)) continue;\n }\n if (filters.type !== void 0) {\n if (!info) continue;\n if (!inSet(info.type, filters.type)) continue;\n }\n if (filters.caps !== void 0) {\n const required = toArray(filters.caps);\n const bound = new Set(binding.entries.map((e) => e.capName));\n if (!required.every((c) => bound.has(c))) continue;\n }\n if (filters.anyCap !== void 0) {\n const wanted = toArray(filters.anyCap);\n const bound = new Set(binding.entries.map((e) => e.capName));\n if (!wanted.some((c) => bound.has(c))) continue;\n }\n if (filters.name !== void 0) {\n if (!info) continue;\n if (!matchesString(info.name, filters.name)) continue;\n }\n if (filters.online !== void 0) {\n if (!info) continue;\n if (info.online !== filters.online) continue;\n }\n if (filters.parentDeviceId !== void 0) {\n if (!info) continue;\n const want = filters.parentDeviceId;\n const got = info.parentDeviceId ?? null;\n if (got !== want) continue;\n }\n if (filters.feature !== void 0) {\n if (!info) continue;\n const want = toArray(filters.feature);\n if (!want.every((f) => info.features.includes(f))) continue;\n }\n if (filters.isCamera !== void 0) {\n if (!info) continue;\n if (info.isCamera !== filters.isCamera) continue;\n }\n const proxy = this.getDeviceById(deviceId);\n if (!proxy) continue;\n if (filters.where && info) {\n if (!filters.where(info, proxy)) continue;\n } else if (filters.where && !info) {\n continue;\n }\n out.push(proxy);\n }\n return out;\n }\n // ── State-driven queries ───────────────────────────────────────────\n /**\n * Return every proxy whose runtime-state slice for `capName` matches\n * `predicate`. Devices without the cap or without a slice are\n * skipped. The predicate receives a typed slice reference — pass\n * the typed cap (e.g. `'battery'`) and TypeScript widens to\n * `Record<string, unknown>`; cast inside the predicate body if the\n * caller knows the cap shape.\n */\n whereState(capName, predicate) {\n const out = [];\n for (const [deviceId, perCap] of this.stateMirror) {\n const slice = perCap.get(capName);\n if (!slice) continue;\n if (!predicate(slice, deviceId)) continue;\n const proxy = this.getDeviceById(deviceId);\n if (proxy) out.push(proxy);\n }\n return out;\n }\n /** Map every device's slice for `capName` to a derived value. Devices\n * without the cap or without a slice are skipped. */\n mapState(capName, mapper) {\n const out = [];\n for (const [deviceId, perCap] of this.stateMirror) {\n const slice = perCap.get(capName);\n if (!slice) continue;\n out.push(mapper(slice, deviceId));\n }\n return out;\n }\n /** First device whose slice matches `predicate`, or null. */\n findState(capName, predicate) {\n for (const [deviceId, perCap] of this.stateMirror) {\n const slice = perCap.get(capName);\n if (!slice) continue;\n if (!predicate(slice, deviceId)) continue;\n return this.getDeviceById(deviceId);\n }\n return null;\n }\n /** Count devices that bind a cap. Faster than `filterByCap(...).length`. */\n countByCap(capName) {\n let n = 0;\n for (const binding of this.bindings.values()) {\n if (binding.entries.some((e) => e.capName === capName)) n++;\n }\n return n;\n }\n /** Count devices whose slice for `capName` matches `predicate`. */\n countByState(capName, predicate) {\n let n = 0;\n for (const [deviceId, perCap] of this.stateMirror) {\n const slice = perCap.get(capName);\n if (!slice) continue;\n if (predicate(slice, deviceId)) n++;\n }\n return n;\n }\n // ── Listeners ──────────────────────────────────────────────────────\n /**\n * Global listener — fires for every `device.state-changed` event the\n * mirror absorbs.\n */\n listen(cb2) {\n this.globalStateListeners.add(cb2);\n return () => {\n this.globalStateListeners.delete(cb2);\n };\n }\n /**\n * Per-cap listener — fires only for state changes on `capName`,\n * across every device. The callback receives the deviceId so the\n * caller can route.\n */\n listenCap(capName, cb2) {\n let set = this.capListeners.get(capName);\n if (!set) {\n set = /* @__PURE__ */ new Set();\n this.capListeners.set(capName, set);\n }\n set.add(cb2);\n return () => {\n set.delete(cb2);\n if (set.size === 0) this.capListeners.delete(capName);\n };\n }\n /**\n * Per-device listener — fires for every cap change on `deviceId`.\n */\n listenDevice(deviceId, cb2) {\n let set = this.deviceListeners.get(deviceId);\n if (!set) {\n set = /* @__PURE__ */ new Set();\n this.deviceListeners.set(deviceId, set);\n }\n set.add(cb2);\n return () => {\n set.delete(cb2);\n if (set.size === 0) this.deviceListeners.delete(deviceId);\n };\n }\n /** Fires when `device.registered` lands. Receives the new metadata. */\n onDeviceAdded(cb2) {\n this.addedListeners.add(cb2);\n return () => {\n this.addedListeners.delete(cb2);\n };\n }\n /** Fires when `device.unregistered` lands. `info` is the LAST-known\n * metadata (or null if the device was never seen). */\n onDeviceRemoved(cb2) {\n this.removedListeners.add(cb2);\n return () => {\n this.removedListeners.delete(cb2);\n };\n }\n // ── Wait primitives ────────────────────────────────────────────────\n /**\n * Resolve when `predicate` over the runtime-state slice for\n * `(deviceId, capName)` becomes true. Resolves immediately if the\n * current slice already matches. Rejects with `Error('timeout')`\n * after `timeoutMs` (default 30s; pass `Infinity` to wait forever).\n *\n * Returns the matching slice — caller can read it directly without\n * a second mirror lookup.\n */\n waitForState(deviceId, capName, predicate, timeoutMs = 3e4) {\n return new Promise((resolve, reject) => {\n const check = () => {\n const slice = this.stateMirror.get(deviceId)?.get(capName);\n if (slice && predicate(slice)) return slice;\n return null;\n };\n const initial = check();\n if (initial) {\n resolve(initial);\n return;\n }\n let timer = null;\n const off = this.listenDevice(deviceId, (_id, cap, slice) => {\n if (cap !== capName) return;\n if (!slice) return;\n if (predicate(slice)) {\n if (timer) clearTimeout(timer);\n off();\n resolve(slice);\n }\n });\n if (Number.isFinite(timeoutMs)) {\n timer = setTimeout(() => {\n off();\n reject(new Error(`waitForState timed out after ${timeoutMs}ms (deviceId=${deviceId}, capName=${capName})`));\n }, timeoutMs);\n }\n });\n }\n /**\n * Resolve when a device with `deviceId` becomes available (a\n * binding exists). Resolves immediately if already known. Rejects\n * with timeout.\n */\n waitForDevice(deviceId, timeoutMs = 3e4) {\n return new Promise((resolve, reject) => {\n const existing = this.getDeviceById(deviceId);\n if (existing) {\n resolve(existing);\n return;\n }\n let timer = null;\n const off = this.onDeviceAdded((id) => {\n if (id !== deviceId) return;\n const proxy = this.getDeviceById(id);\n if (!proxy) return;\n if (timer) clearTimeout(timer);\n off();\n resolve(proxy);\n });\n if (Number.isFinite(timeoutMs)) {\n timer = setTimeout(() => {\n off();\n reject(new Error(`waitForDevice timed out after ${timeoutMs}ms (deviceId=${deviceId})`));\n }, timeoutMs);\n }\n });\n }\n // ── Batch actions ──────────────────────────────────────────────────\n /**\n * Iterate every device that binds `capName`. Awaits each callback\n * sequentially — for parallel use `invokeCap` with explicit\n * parallelism.\n */\n async forEachCap(capName, cb2) {\n for (const proxy of this.filterByCap(capName)) {\n await cb2(proxy);\n }\n }\n /**\n * Invoke a cap method on every device that binds the cap. Returns\n * one result per device, success or failure isolated. Optional\n * parallelism cap — useful for \"snapshot all cameras but only 4\n * at a time so battery cams don't all wake at once\".\n *\n * Example:\n *\n * const results = await sm.invokeCap('snapshot', 'getSnapshot', {}, { parallelism: 4 })\n * const failed = results.filter(r => !r.ok)\n */\n async invokeCap(capName, methodName, args, opts = {}) {\n const targets = this.filterByCap(capName);\n const parallelism = Math.max(1, opts.parallelism ?? targets.length);\n const out = [];\n for (let i = 0; i < targets.length; i += parallelism) {\n const chunk = targets.slice(i, i + parallelism);\n const settled = await Promise.allSettled(\n chunk.map(async (proxy) => {\n const cap = proxy[capName];\n if (!cap || typeof cap[methodName] !== \"function\") {\n throw new Error(`device '${proxy.deviceId}' does not expose '${capName}.${methodName}'`);\n }\n return await cap[methodName](args);\n })\n );\n for (let j = 0; j < settled.length; j++) {\n const proxy = chunk[j];\n const r = settled[j];\n if (r.status === \"fulfilled\") {\n out.push({ deviceId: proxy.deviceId, ok: true, result: r.value });\n } else {\n out.push({ deviceId: proxy.deviceId, ok: false, error: r.reason });\n }\n }\n }\n return out;\n }\n // ── Diagnostics ────────────────────────────────────────────────────\n /**\n * One-shot summary — fleet size, breakdown by cap / addon / type.\n * Designed for REPL inspection (`sm.summary()`).\n */\n summary() {\n const byCap = {};\n const byAddon = {};\n const byType = {};\n let online = 0;\n let offline = 0;\n for (const binding of this.bindings.values()) {\n for (const entry of binding.entries) {\n byCap[entry.capName] = (byCap[entry.capName] ?? 0) + 1;\n }\n }\n for (const info of this.devices.values()) {\n byAddon[info.addonId] = (byAddon[info.addonId] ?? 0) + 1;\n byType[info.type] = (byType[info.type] ?? 0) + 1;\n if (info.online) online++;\n else offline++;\n }\n return {\n totalDevices: this.bindings.size,\n online,\n offline,\n byCap,\n byAddon,\n byType,\n statedDevices: this.stateMirror.size\n };\n }\n /**\n * Debug-friendly dump — full state + binding + metadata for one\n * device or all devices. Cheap deep clone so caller mutations don't\n * leak into the mirror.\n */\n dump(deviceId) {\n const dumpOne = (id) => {\n const info = this.devices.get(id) ?? null;\n const binding = this.bindings.get(id) ?? null;\n const state = {};\n const perCap = this.stateMirror.get(id);\n if (perCap) {\n for (const [cap, slice] of perCap) state[cap] = { ...slice };\n }\n return {\n deviceId: id,\n info,\n binding: binding ? { ...binding, entries: binding.entries.map((e) => ({ ...e })) } : null,\n state\n };\n };\n if (deviceId !== void 0) return dumpOne(deviceId);\n const out = [];\n for (const id of this.bindings.keys()) out.push(dumpOne(id));\n return out;\n }\n /**\n * Direct read-only access to the underlying state mirror. Use\n * sparingly — `getSystemState` returns a deep copy that's safer for\n * exploratory work; this avoids the clone cost when iterating\n * thousands of slices.\n */\n getRawMirror() {\n return this.stateMirror;\n }\n /**\n * Snapshot of the full state mirror — same shape as the warm-boot\n * payload. Deep-cloned; safe to mutate.\n */\n getSystemState() {\n const copy = /* @__PURE__ */ new Map();\n for (const [id, perCap] of this.stateMirror) {\n const dup = /* @__PURE__ */ new Map();\n for (const [k, v] of perCap) dup.set(k, { ...v });\n copy.set(id, dup);\n }\n return copy;\n }\n // ── Internals ──────────────────────────────────────────────────────\n subscribeBus() {\n if (!this.api.live?.onEvent) return;\n const sub = this.api.live.onEvent;\n this.bridges.push(\n sub.subscribe(\n { category: STATE_CHANGED_CATEGORY },\n {\n onData: (evt) => {\n const data = evt.data;\n if (!data || typeof data.deviceId !== \"number\" || typeof data.capName !== \"string\") return;\n this.applyStateUpdate(data.deviceId, data.capName, data.slice);\n }\n }\n )\n );\n this.bridges.push(\n sub.subscribe(\n { category: BINDING_CHANGED_CATEGORY },\n {\n onData: (evt) => {\n const data = evt.data;\n const deviceId = typeof data?.deviceId === \"number\" ? data.deviceId : data?.source?.type === \"device\" && typeof data.source.id === \"number\" ? data.source.id : null;\n if (deviceId === null) return;\n void this.refreshBinding(deviceId);\n }\n }\n )\n );\n this.bridges.push(\n sub.subscribe(\n { category: DEVICE_REGISTERED_CATEGORY },\n {\n onData: (evt) => {\n const data = evt.data;\n if (typeof data?.deviceId !== \"number\") return;\n void this.refreshDeviceMetadata(data.deviceId, \"added\");\n }\n }\n )\n );\n this.bridges.push(\n sub.subscribe(\n { category: DEVICE_UNREGISTERED_CATEGORY },\n {\n onData: (evt) => {\n const data = evt.data;\n if (typeof data?.deviceId !== \"number\") return;\n this.applyDeviceRemoval(data.deviceId);\n }\n }\n )\n );\n this.bridges.push(\n sub.subscribe(\n { category: DEVICE_UPDATED_CATEGORY },\n {\n onData: (evt) => {\n const data = evt.data;\n if (typeof data?.deviceId !== \"number\") return;\n void this.refreshDeviceMetadata(data.deviceId, \"updated\");\n }\n }\n )\n );\n }\n applyStateUpdate(deviceId, capName, slice) {\n let perCap = this.stateMirror.get(deviceId);\n if (!perCap) {\n perCap = /* @__PURE__ */ new Map();\n this.stateMirror.set(deviceId, perCap);\n }\n if (slice === void 0) {\n perCap.delete(capName);\n } else {\n perCap.set(capName, slice);\n }\n const handleKey = `${deviceId}:${capName}`;\n const handleSet = this.handleListeners.get(handleKey);\n if (handleSet) {\n for (const cb2 of handleSet) {\n try {\n cb2(slice);\n } catch {\n }\n }\n }\n for (const cb2 of this.globalStateListeners) {\n try {\n cb2(deviceId, capName, slice);\n } catch {\n }\n }\n const capSet = this.capListeners.get(capName);\n if (capSet) {\n for (const cb2 of capSet) {\n try {\n cb2(deviceId, slice);\n } catch {\n }\n }\n }\n const devSet = this.deviceListeners.get(deviceId);\n if (devSet) {\n for (const cb2 of devSet) {\n try {\n cb2(deviceId, capName, slice);\n } catch {\n }\n }\n }\n }\n applyDeviceRemoval(deviceId) {\n const lastInfo = this.devices.get(deviceId) ?? null;\n this.bindings.delete(deviceId);\n this.devices.delete(deviceId);\n this.stateMirror.delete(deviceId);\n for (const cb2 of this.removedListeners) {\n try {\n cb2(deviceId, lastInfo);\n } catch {\n }\n }\n }\n async refreshBinding(deviceId) {\n try {\n const all = await this.api.deviceManager.getAllBindings.query({});\n const fresh = all.find((b) => b.deviceId === deviceId);\n if (fresh) {\n this.bindings.set(deviceId, fresh);\n } else {\n this.applyDeviceRemoval(deviceId);\n }\n } catch {\n }\n }\n async refreshDeviceMetadata(deviceId, kind) {\n try {\n const all = await this.api.deviceManager.listAll.query({});\n const info = all.find((d) => d.id === deviceId);\n if (!info) return;\n const wasNew = !this.devices.has(deviceId);\n this.devices.set(deviceId, info);\n if (kind === \"added\" && wasNew) {\n await this.refreshBinding(deviceId);\n for (const cb2 of this.addedListeners) {\n try {\n cb2(deviceId, info);\n } catch {\n }\n }\n }\n } catch {\n }\n }\n}\nfunction inSet(value, set) {\n if (Array.isArray(set)) return set.includes(value);\n return value === set;\n}\nfunction toArray(value) {\n return Array.isArray(value) ? value : [value];\n}\nfunction matchesString(haystack, match) {\n if (typeof match === \"string\") return haystack === match;\n if (match instanceof RegExp) return match.test(haystack);\n if (\"exact\" in match) return haystack === match.exact;\n if (\"contains\" in match) return haystack.toLowerCase().includes(match.contains.toLowerCase());\n return false;\n}\nfunction defineCustomActions(spec) {\n return spec;\n}\nfunction customAction(input, output, options) {\n return {\n input,\n output,\n kind: options?.kind ?? \"query\",\n auth: options?.auth ?? \"protected\",\n scope: options?.scope ?? { kind: \"system\" }\n };\n}\nconst CAPABILITY_NAMES = {\n accessories: \"accessories\",\n addonPages: \"addon-pages\",\n addonPagesSource: \"addon-pages-source\",\n addonRoutes: \"addon-routes\",\n addonSettings: \"addon-settings\",\n addonWidgets: \"addon-widgets\",\n addonWidgetsSource: \"addon-widgets-source\",\n addons: \"addons\",\n adminUi: \"admin-ui\",\n advancedNotifier: \"advanced-notifier\",\n alerts: \"alerts\",\n audioAnalysis: \"audio-analysis\",\n audioAnalyzer: \"audio-analyzer\",\n audioCodec: \"audio-codec\",\n audioMetrics: \"audio-metrics\",\n authProvider: \"auth-provider\",\n authentication: \"authentication\",\n backup: \"backup\",\n battery: \"battery\",\n brightness: \"brightness\",\n cameraCredentials: \"camera-credentials\",\n cameraStreams: \"camera-streams\",\n decoder: \"decoder\",\n detectionPipeline: \"detection-pipeline\",\n deviceDiscovery: \"device-discovery\",\n deviceExport: \"device-export\",\n deviceManager: \"device-manager\",\n deviceOps: \"device-ops\",\n deviceProvider: \"device-provider\",\n deviceState: \"device-state\",\n deviceStatus: \"device-status\",\n doorbell: \"doorbell\",\n embeddingEncoder: \"embedding-encoder\",\n events: \"events\",\n featureProbe: \"feature-probe\",\n integrations: \"integrations\",\n intercom: \"intercom\",\n localNetwork: \"local-network\",\n logDestination: \"log-destination\",\n meshNetwork: \"mesh-network\",\n meshOrchestrator: \"mesh-orchestrator\",\n metricsProvider: \"metrics-provider\",\n motion: \"motion\",\n motionDetection: \"motion-detection\",\n motionTrigger: \"motion-trigger\",\n mqttBroker: \"mqtt-broker\",\n nativeObjectDetection: \"native-object-detection\",\n networkAccess: \"network-access\",\n networkQuality: \"network-quality\",\n nodes: \"nodes\",\n notificationOutput: \"notification-output\",\n osd: \"osd\",\n pipelineAnalytics: \"pipeline-analytics\",\n pipelineExecutor: \"pipeline-executor\",\n pipelineOrchestrator: \"pipeline-orchestrator\",\n pipelineRunner: \"pipeline-runner\",\n platformProbe: \"platform-probe\",\n ptz: \"ptz\",\n ptzAutotrack: \"ptz-autotrack\",\n reboot: \"reboot\",\n recording: \"recording\",\n recordingEngine: \"recording-engine\",\n remoteAccess: \"remote-access\",\n restreamer: \"restreamer\",\n settingsStore: \"settings-store\",\n smtpProvider: \"smtp-provider\",\n snapshot: \"snapshot\",\n snapshotProvider: \"snapshot-provider\",\n ssoBridge: \"sso-bridge\",\n storage: \"storage\",\n storageProvider: \"storage-provider\",\n streamBroker: \"stream-broker\",\n streamingEngine: \"streaming-engine\",\n switch: \"switch\",\n system: \"system\",\n toast: \"toast\",\n turnOrchestrator: \"turn-orchestrator\",\n turnProvider: \"turn-provider\",\n userManagement: \"user-management\",\n userPasskeys: \"user-passkeys\",\n webrtc: \"webrtc\",\n webrtcSession: \"webrtc-session\",\n zoneAnalytics: \"zone-analytics\",\n zoneRules: \"zone-rules\",\n zones: \"zones\"\n};\nconst CAPABILITY_ROUTER_KEYS = [\n { key: \"accessories\", name: \"accessories\" },\n { key: \"addonPages\", name: \"addon-pages\" },\n { key: \"addonPagesSource\", name: \"addon-pages-source\" },\n { key: \"addonRoutes\", name: \"addon-routes\" },\n { key: \"addonSettings\", name: \"addon-settings\" },\n { key: \"addonWidgets\", name: \"addon-widgets\" },\n { key: \"addonWidgetsSource\", name: \"addon-widgets-source\" },\n { key: \"addons\", name: \"addons\" },\n { key: \"adminUi\", name: \"admin-ui\" },\n { key: \"advancedNotifier\", name: \"advanced-notifier\" },\n { key: \"alerts\", name: \"alerts\" },\n { key: \"audioAnalysis\", name: \"audio-analysis\" },\n { key: \"audioAnalyzer\", name: \"audio-analyzer\" },\n { key: \"audioCodec\", name: \"audio-codec\" },\n { key: \"audioMetrics\", name: \"audio-metrics\" },\n { key: \"authProvider\", name: \"auth-provider\" },\n { key: \"authentication\", name: \"authentication\" },\n { key: \"backup\", name: \"backup\" },\n { key: \"battery\", name: \"battery\" },\n { key: \"brightness\", name: \"brightness\" },\n { key: \"cameraCredentials\", name: \"camera-credentials\" },\n { key: \"cameraStreams\", name: \"camera-streams\" },\n { key: \"decoder\", name: \"decoder\" },\n { key: \"detectionPipeline\", name: \"detection-pipeline\" },\n { key: \"deviceDiscovery\", name: \"device-discovery\" },\n { key: \"deviceExport\", name: \"device-export\" },\n { key: \"deviceManager\", name: \"device-manager\" },\n { key: \"deviceOps\", name: \"device-ops\" },\n { key: \"deviceProvider\", name: \"device-provider\" },\n { key: \"deviceState\", name: \"device-state\" },\n { key: \"deviceStatus\", name: \"device-status\" },\n { key: \"doorbell\", name: \"doorbell\" },\n { key: \"embeddingEncoder\", name: \"embedding-encoder\" },\n { key: \"events\", name: \"events\" },\n { key: \"featureProbe\", name: \"feature-probe\" },\n { key: \"integrations\", name: \"integrations\" },\n { key: \"intercom\", name: \"intercom\" },\n { key: \"localNetwork\", name: \"local-network\" },\n { key: \"logDestination\", name: \"log-destination\" },\n { key: \"meshNetwork\", name: \"mesh-network\" },\n { key: \"meshOrchestrator\", name: \"mesh-orchestrator\" },\n { key: \"metricsProvider\", name: \"metrics-provider\" },\n { key: \"motion\", name: \"motion\" },\n { key: \"motionDetection\", name: \"motion-detection\" },\n { key: \"motionTrigger\", name: \"motion-trigger\" },\n { key: \"mqttBroker\", name: \"mqtt-broker\" },\n { key: \"nativeObjectDetection\", name: \"native-object-detection\" },\n { key: \"networkAccess\", name: \"network-access\" },\n { key: \"networkQuality\", name: \"network-quality\" },\n { key: \"nodes\", name: \"nodes\" },\n { key: \"notificationOutput\", name: \"notification-output\" },\n { key: \"osd\", name: \"osd\" },\n { key: \"pipelineAnalytics\", name: \"pipeline-analytics\" },\n { key: \"pipelineExecutor\", name: \"pipeline-executor\" },\n { key: \"pipelineOrchestrator\", name: \"pipeline-orchestrator\" },\n { key: \"pipelineRunner\", name: \"pipeline-runner\" },\n { key: \"platformProbe\", name: \"platform-probe\" },\n { key: \"ptz\", name: \"ptz\" },\n { key: \"ptzAutotrack\", name: \"ptz-autotrack\" },\n { key: \"reboot\", name: \"reboot\" },\n { key: \"recording\", name: \"recording\" },\n { key: \"recordingEngine\", name: \"recording-engine\" },\n { key: \"remoteAccess\", name: \"remote-access\" },\n { key: \"restreamer\", name: \"restreamer\" },\n { key: \"settingsStore\", name: \"settings-store\" },\n { key: \"smtpProvider\", name: \"smtp-provider\" },\n { key: \"snapshot\", name: \"snapshot\" },\n { key: \"snapshotProvider\", name: \"snapshot-provider\" },\n { key: \"ssoBridge\", name: \"sso-bridge\" },\n { key: \"storage\", name: \"storage\" },\n { key: \"storageProvider\", name: \"storage-provider\" },\n { key: \"streamBroker\", name: \"stream-broker\" },\n { key: \"streamingEngine\", name: \"streaming-engine\" },\n { key: \"switch\", name: \"switch\" },\n { key: \"system\", name: \"system\" },\n { key: \"toast\", name: \"toast\" },\n { key: \"turnOrchestrator\", name: \"turn-orchestrator\" },\n { key: \"turnProvider\", name: \"turn-provider\" },\n { key: \"userManagement\", name: \"user-management\" },\n { key: \"userPasskeys\", name: \"user-passkeys\" },\n { key: \"webrtc\", name: \"webrtc\" },\n { key: \"webrtcSession\", name: \"webrtc-session\" },\n { key: \"zoneAnalytics\", name: \"zone-analytics\" },\n { key: \"zoneRules\", name: \"zone-rules\" },\n { key: \"zones\", name: \"zones\" }\n];\nconst ALL_CAPABILITY_DEFINITIONS = [\n accessoriesCapability,\n addonPagesCapability,\n addonPagesSourceCapability,\n addonRoutesCapability,\n addonSettingsCapability,\n addonWidgetsCapability,\n addonWidgetsSourceCapability,\n addonsCapability,\n adminUiCapability,\n advancedNotifierCapability,\n alertsCapability,\n audioAnalysisCapability,\n audioAnalyzerCapability,\n audioCodecCapability,\n audioMetricsCapability,\n authProviderCapability,\n authenticationCapability,\n backupCapability,\n batteryCapability,\n brightnessCapability,\n cameraCredentialsCapability,\n cameraStreamsCapability,\n decoderCapability,\n detectionPipelineCapability,\n deviceDiscoveryCapability,\n deviceExportCapability,\n deviceManagerCapability,\n deviceOpsCapability,\n deviceProviderCapability,\n deviceStateCapability,\n deviceStatusCapability,\n doorbellCapability,\n embeddingEncoderCapability,\n eventsCapability,\n featureProbeCapability,\n integrationsCapability,\n intercomCapability,\n localNetworkCapability,\n logDestinationCapability,\n meshNetworkCapability,\n meshOrchestratorCapability,\n metricsProviderCapability,\n motionCapability,\n motionDetectionCapability,\n motionTriggerCapability,\n mqttBrokerCapability,\n nativeObjectDetectionCapability,\n networkAccessCapability,\n networkQualityCapability,\n nodesCapability,\n notificationOutputCapability,\n osdCapability,\n pipelineAnalyticsCapability,\n pipelineExecutorCapability,\n pipelineOrchestratorCapability,\n pipelineRunnerCapability,\n platformProbeCapability,\n ptzCapability,\n ptzAutotrackCapability,\n rebootCapability,\n recordingCapability,\n recordingEngineCapability,\n remoteAccessCapability,\n restreamerCapability,\n settingsStoreCapability,\n smtpProviderCapability,\n snapshotCapability,\n snapshotProviderCapability,\n ssoBridgeCapability,\n storageCapability,\n storageProviderCapability,\n streamBrokerCapability,\n streamingEngineCapability,\n switchCapability,\n systemCapability,\n toastCapability,\n turnOrchestratorCapability,\n turnProviderCapability,\n userManagementCapability,\n userPasskeysCapability,\n webrtcCapability,\n webrtcSessionCapability,\n zoneAnalyticsCapability,\n zoneRulesCapability,\n zonesCapability\n];\nconst CAP_NAMES_WITH_STATUS = [\n \"accessories\",\n \"battery\",\n \"brightness\",\n \"camera-credentials\",\n \"device-discovery\",\n \"device-export\",\n \"device-status\",\n \"doorbell\",\n \"feature-probe\",\n \"intercom\",\n \"motion\",\n \"motion-trigger\",\n \"mqtt-broker\",\n \"native-object-detection\",\n \"osd\",\n \"ptz\",\n \"ptz-autotrack\",\n \"snapshot\",\n \"switch\"\n];\nconst METHOD_ACCESS_MAP = Object.freeze({\n \"addonPages.listPages\": { capName: \"addon-pages\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addonPagesSource.listPages\": { capName: \"addon-pages-source\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addonRoutes.getRoutes\": { capName: \"addon-routes\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addonRoutes.invoke\": { capName: \"addon-routes\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addons.applyAutoUpdateToAll\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addons.custom\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addons.forceRefresh\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addons.getAddonAutoUpdate\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addons.getAutoUpdateSettings\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addons.getLogs\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addons.getVersions\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addons.installFromWorkspace\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addons.installPackage\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addons.isWorkspaceAvailable\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addons.list\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addons.listPackages\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addons.listUpdates\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addons.listWorkspacePackages\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addons.onAddonLogs\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addons.reloadPackages\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addons.restartAddon\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addons.restartServer\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addons.retryLoad\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addons.rollbackPackage\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addons.searchAvailable\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addons.setAddonAutoUpdate\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addons.setAutoUpdateSettings\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addons.uninstallPackage\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"addons.updatePackage\": { capName: \"addons\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addonSettings.getDeviceSettings\": { capName: \"addon-settings\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addonSettings.getGlobalSettings\": { capName: \"addon-settings\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addonSettings.updateDeviceSettings\": { capName: \"addon-settings\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addonSettings.updateGlobalSettings\": { capName: \"addon-settings\", capScope: \"system\", addonId: null, access: \"create\" },\n \"addonWidgets.listWidgets\": { capName: \"addon-widgets\", capScope: \"system\", addonId: null, access: \"view\" },\n \"addonWidgetsSource.listWidgets\": { capName: \"addon-widgets-source\", capScope: \"system\", addonId: null, access: \"view\" },\n \"adminUi.getStaticDir\": { capName: \"admin-ui\", capScope: \"system\", addonId: null, access: \"view\" },\n \"adminUi.getVersion\": { capName: \"admin-ui\", capScope: \"system\", addonId: null, access: \"view\" },\n \"advancedNotifier.deleteRule\": { capName: \"advanced-notifier\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"advancedNotifier.getHistory\": { capName: \"advanced-notifier\", capScope: \"system\", addonId: null, access: \"view\" },\n \"advancedNotifier.getRules\": { capName: \"advanced-notifier\", capScope: \"system\", addonId: null, access: \"view\" },\n \"advancedNotifier.testRule\": { capName: \"advanced-notifier\", capScope: \"system\", addonId: null, access: \"create\" },\n \"advancedNotifier.upsertRule\": { capName: \"advanced-notifier\", capScope: \"system\", addonId: null, access: \"create\" },\n \"alerts.dismiss\": { capName: \"alerts\", capScope: \"system\", addonId: null, access: \"create\" },\n \"alerts.emit\": { capName: \"alerts\", capScope: \"system\", addonId: null, access: \"create\" },\n \"alerts.getUnreadCount\": { capName: \"alerts\", capScope: \"system\", addonId: null, access: \"view\" },\n \"alerts.list\": { capName: \"alerts\", capScope: \"system\", addonId: null, access: \"view\" },\n \"alerts.markAllRead\": { capName: \"alerts\", capScope: \"system\", addonId: null, access: \"create\" },\n \"alerts.markRead\": { capName: \"alerts\", capScope: \"system\", addonId: null, access: \"create\" },\n \"alerts.update\": { capName: \"alerts\", capScope: \"system\", addonId: null, access: \"create\" },\n \"audioAnalysis.resolveDeviceSettings\": { capName: \"audio-analysis\", capScope: \"device\", addonId: null, access: \"view\" },\n \"audioAnalyzer.analyseChunk\": { capName: \"audio-analyzer\", capScope: \"system\", addonId: null, access: \"create\" },\n \"audioAnalyzer.classify\": { capName: \"audio-analyzer\", capScope: \"system\", addonId: null, access: \"view\" },\n \"audioAnalyzer.dispose\": { capName: \"audio-analyzer\", capScope: \"system\", addonId: null, access: \"create\" },\n \"audioAnalyzer.isReady\": { capName: \"audio-analyzer\", capScope: \"system\", addonId: null, access: \"view\" },\n \"audioAnalyzer.reprobeAudioEngine\": { capName: \"audio-analyzer\", capScope: \"system\", addonId: null, access: \"create\" },\n \"audioCodec.canHandle\": { capName: \"audio-codec\", capScope: \"system\", addonId: null, access: \"view\" },\n \"audioCodec.closeSession\": { capName: \"audio-codec\", capScope: \"system\", addonId: null, access: \"create\" },\n \"audioCodec.createDecodeSession\": { capName: \"audio-codec\", capScope: \"system\", addonId: null, access: \"create\" },\n \"audioCodec.createEncodeSession\": { capName: \"audio-codec\", capScope: \"system\", addonId: null, access: \"create\" },\n \"audioCodec.flushEncode\": { capName: \"audio-codec\", capScope: \"system\", addonId: null, access: \"create\" },\n \"audioCodec.listActiveSessions\": { capName: \"audio-codec\", capScope: \"system\", addonId: null, access: \"view\" },\n \"audioCodec.listSupportedCodecs\": { capName: \"audio-codec\", capScope: \"system\", addonId: null, access: \"view\" },\n \"audioCodec.pullEncoded\": { capName: \"audio-codec\", capScope: \"system\", addonId: null, access: \"view\" },\n \"audioCodec.pullPcm\": { capName: \"audio-codec\", capScope: \"system\", addonId: null, access: \"view\" },\n \"audioCodec.pushEncodedFrame\": { capName: \"audio-codec\", capScope: \"system\", addonId: null, access: \"create\" },\n \"audioCodec.pushPcm\": { capName: \"audio-codec\", capScope: \"system\", addonId: null, access: \"create\" },\n \"audioMetrics.getCurrentSnapshot\": { capName: \"audio-metrics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"audioMetrics.getHistory\": { capName: \"audio-metrics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"authentication.listProviders\": { capName: \"authentication\", capScope: \"system\", addonId: null, access: \"view\" },\n \"authentication.setProviderEnabled\": { capName: \"authentication\", capScope: \"system\", addonId: null, access: \"create\" },\n \"authProvider.getLoginUrl\": { capName: \"auth-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"authProvider.handleCallback\": { capName: \"auth-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"authProvider.validateCredentials\": { capName: \"auth-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"authProvider.validateToken\": { capName: \"auth-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"backup.delete\": { capName: \"backup\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"backup.getEntries\": { capName: \"backup\", capScope: \"system\", addonId: null, access: \"view\" },\n \"backup.list\": { capName: \"backup\", capScope: \"system\", addonId: null, access: \"view\" },\n \"backup.listArchives\": { capName: \"backup\", capScope: \"system\", addonId: null, access: \"view\" },\n \"backup.listDestinations\": { capName: \"backup\", capScope: \"system\", addonId: null, access: \"view\" },\n \"backup.listLocations\": { capName: \"backup\", capScope: \"system\", addonId: null, access: \"view\" },\n \"backup.previewSchedule\": { capName: \"backup\", capScope: \"system\", addonId: null, access: \"view\" },\n \"backup.restore\": { capName: \"backup\", capScope: \"system\", addonId: null, access: \"create\" },\n \"backup.trigger\": { capName: \"backup\", capScope: \"system\", addonId: null, access: \"create\" },\n \"backup.upsertDestinationPolicy\": { capName: \"backup\", capScope: \"system\", addonId: null, access: \"create\" },\n \"brightness.setBrightness\": { capName: \"brightness\", capScope: \"device\", addonId: null, access: \"create\" },\n \"cameraCredentials.getCredentials\": { capName: \"camera-credentials\", capScope: \"device\", addonId: null, access: \"view\" },\n \"cameraStreams.getBrokerStreams\": { capName: \"camera-streams\", capScope: \"device\", addonId: null, access: \"view\" },\n \"cameraStreams.getCameraStreams\": { capName: \"camera-streams\", capScope: \"device\", addonId: null, access: \"view\" },\n \"cameraStreams.getRtspEntries\": { capName: \"camera-streams\", capScope: \"device\", addonId: null, access: \"view\" },\n \"decoder.createSession\": { capName: \"decoder\", capScope: \"system\", addonId: null, access: \"view\" },\n \"decoder.destroySession\": { capName: \"decoder\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"decoder.getInfo\": { capName: \"decoder\", capScope: \"system\", addonId: null, access: \"view\" },\n \"decoder.getStats\": { capName: \"decoder\", capScope: \"system\", addonId: null, access: \"view\" },\n \"decoder.listActiveSessions\": { capName: \"decoder\", capScope: \"system\", addonId: null, access: \"view\" },\n \"decoder.openStream\": { capName: \"decoder\", capScope: \"system\", addonId: null, access: \"view\" },\n \"decoder.pullFrames\": { capName: \"decoder\", capScope: \"system\", addonId: null, access: \"view\" },\n \"decoder.pushPacket\": { capName: \"decoder\", capScope: \"system\", addonId: null, access: \"view\" },\n \"decoder.reprobeHwaccel\": { capName: \"decoder\", capScope: \"system\", addonId: null, access: \"create\" },\n \"decoder.supportsCodec\": { capName: \"decoder\", capScope: \"system\", addonId: null, access: \"view\" },\n \"decoder.updateConfig\": { capName: \"decoder\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceDiscovery.adoptDevice\": { capName: \"device-discovery\", capScope: \"device\", addonId: null, access: \"create\" },\n \"deviceDiscovery.listDiscovered\": { capName: \"device-discovery\", capScope: \"device\", addonId: null, access: \"view\" },\n \"deviceDiscovery.refreshDiscovery\": { capName: \"device-discovery\", capScope: \"device\", addonId: null, access: \"create\" },\n \"deviceDiscovery.releaseDevice\": { capName: \"device-discovery\", capScope: \"device\", addonId: null, access: \"create\" },\n \"deviceExport.exposeDevice\": { capName: \"device-export\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceExport.getStatus\": { capName: \"device-export\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceExport.listExposedDevices\": { capName: \"device-export\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceExport.listSupportedDeviceKinds\": { capName: \"device-export\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceExport.unexposeDevice\": { capName: \"device-export\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.addLocation\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.adoptDevice\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.allocateDeviceId\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.createDevice\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.disable\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.discoverDevices\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.enable\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.getAllBindings\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.getBindings\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.getChildren\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.getConfigSchema\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.getCreationSchema\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.getDevice\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.getDeviceAggregate\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.getDeviceLiveInfoAggregate\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.getDeviceSettingsAggregate\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.getDeviceStatusAggregate\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.getSettingsSchema\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.getStreamProfileMap\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.getStreamSources\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.listAll\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.listBindableCapsForDeviceType\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.listLocations\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.listPersistedByAddon\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.listWrappersForCap\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.loadConfig\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.loadMeta\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.loadRuntimeState\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceManager.persistConfig\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.probeStreams\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.registerDevice\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.remove\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"deviceManager.removeDevice\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"deviceManager.removeLocation\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"deviceManager.setDisabled\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.setLocation\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.setMetadata\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.setName\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.setStreamProfileMap\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.setWrapperActive\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.testCreationField\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.testField\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.updateConfig\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.updateDeviceField\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceManager.updateDeviceFieldsBatch\": { capName: \"device-manager\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceOps.getConfigEntries\": { capName: \"device-ops\", capScope: \"device\", addonId: null, access: \"view\" },\n \"deviceOps.getSettingsSchema\": { capName: \"device-ops\", capScope: \"device\", addonId: null, access: \"view\" },\n \"deviceOps.getStreamSources\": { capName: \"device-ops\", capScope: \"device\", addonId: null, access: \"view\" },\n \"deviceOps.removeDevice\": { capName: \"device-ops\", capScope: \"device\", addonId: null, access: \"delete\" },\n \"deviceOps.setConfig\": { capName: \"device-ops\", capScope: \"device\", addonId: null, access: \"create\" },\n \"deviceProvider.adoptDiscoveredDevice\": { capName: \"device-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceProvider.createDevice\": { capName: \"device-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceProvider.discoverDevices\": { capName: \"device-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceProvider.getChildCreationSchema\": { capName: \"device-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceProvider.getDevices\": { capName: \"device-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceProvider.getStatus\": { capName: \"device-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceProvider.start\": { capName: \"device-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceProvider.stop\": { capName: \"device-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceProvider.supportsDiscovery\": { capName: \"device-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceProvider.supportsManualCreation\": { capName: \"device-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceProvider.testCreationField\": { capName: \"device-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"deviceState.getAllSnapshots\": { capName: \"device-state\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceState.getCapSlice\": { capName: \"device-state\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceState.getSnapshot\": { capName: \"device-state\", capScope: \"system\", addonId: null, access: \"view\" },\n \"deviceState.setCapSlice\": { capName: \"device-state\", capScope: \"system\", addonId: null, access: \"create\" },\n \"embeddingEncoder.encode\": { capName: \"embedding-encoder\", capScope: \"system\", addonId: null, access: \"view\" },\n \"embeddingEncoder.encodeText\": { capName: \"embedding-encoder\", capScope: \"system\", addonId: null, access: \"view\" },\n \"embeddingEncoder.getInfo\": { capName: \"embedding-encoder\", capScope: \"system\", addonId: null, access: \"view\" },\n \"events.getEventClipUrl\": { capName: \"events\", capScope: \"device\", addonId: null, access: \"view\" },\n \"events.getEvents\": { capName: \"events\", capScope: \"device\", addonId: null, access: \"view\" },\n \"events.getEventThumbnail\": { capName: \"events\", capScope: \"device\", addonId: null, access: \"view\" },\n \"integrations.create\": { capName: \"integrations\", capScope: \"system\", addonId: null, access: \"create\" },\n \"integrations.delete\": { capName: \"integrations\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"integrations.get\": { capName: \"integrations\", capScope: \"system\", addonId: null, access: \"view\" },\n \"integrations.getAvailableTypes\": { capName: \"integrations\", capScope: \"system\", addonId: null, access: \"view\" },\n \"integrations.getByAddonId\": { capName: \"integrations\", capScope: \"system\", addonId: null, access: \"view\" },\n \"integrations.getSettings\": { capName: \"integrations\", capScope: \"system\", addonId: null, access: \"view\" },\n \"integrations.list\": { capName: \"integrations\", capScope: \"system\", addonId: null, access: \"view\" },\n \"integrations.setSettings\": { capName: \"integrations\", capScope: \"system\", addonId: null, access: \"create\" },\n \"integrations.testConnection\": { capName: \"integrations\", capScope: \"system\", addonId: null, access: \"create\" },\n \"integrations.update\": { capName: \"integrations\", capScope: \"system\", addonId: null, access: \"create\" },\n \"intercom.endTalkSession\": { capName: \"intercom\", capScope: \"device\", addonId: null, access: \"create\" },\n \"intercom.handleAnswer\": { capName: \"intercom\", capScope: \"device\", addonId: null, access: \"create\" },\n \"intercom.pushTalkPcm\": { capName: \"intercom\", capScope: \"device\", addonId: null, access: \"create\" },\n \"intercom.startSession\": { capName: \"intercom\", capScope: \"device\", addonId: null, access: \"create\" },\n \"intercom.startTalkSession\": { capName: \"intercom\", capScope: \"device\", addonId: null, access: \"create\" },\n \"intercom.stopSession\": { capName: \"intercom\", capScope: \"device\", addonId: null, access: \"create\" },\n \"localNetwork.getAllowedAddresses\": { capName: \"local-network\", capScope: \"system\", addonId: null, access: \"view\" },\n \"localNetwork.getConnectionEndpoints\": { capName: \"local-network\", capScope: \"system\", addonId: null, access: \"view\" },\n \"localNetwork.getPreferred\": { capName: \"local-network\", capScope: \"system\", addonId: null, access: \"view\" },\n \"localNetwork.list\": { capName: \"local-network\", capScope: \"system\", addonId: null, access: \"view\" },\n \"localNetwork.resetAllowlistToBestMatch\": { capName: \"local-network\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"localNetwork.setAllowedAddresses\": { capName: \"local-network\", capScope: \"system\", addonId: null, access: \"create\" },\n \"logDestination.query\": { capName: \"log-destination\", capScope: \"system\", addonId: null, access: \"view\" },\n \"logDestination.write\": { capName: \"log-destination\", capScope: \"system\", addonId: null, access: \"create\" },\n \"meshNetwork.getStatus\": { capName: \"mesh-network\", capScope: \"system\", addonId: null, access: \"view\" },\n \"meshNetwork.join\": { capName: \"mesh-network\", capScope: \"system\", addonId: null, access: \"create\" },\n \"meshNetwork.leave\": { capName: \"mesh-network\", capScope: \"system\", addonId: null, access: \"create\" },\n \"meshNetwork.listPeers\": { capName: \"mesh-network\", capScope: \"system\", addonId: null, access: \"view\" },\n \"meshNetwork.logout\": { capName: \"mesh-network\", capScope: \"system\", addonId: null, access: \"create\" },\n \"meshNetwork.startLogin\": { capName: \"mesh-network\", capScope: \"system\", addonId: null, access: \"create\" },\n \"meshNetwork.testConnection\": { capName: \"mesh-network\", capScope: \"system\", addonId: null, access: \"create\" },\n \"meshOrchestrator.joinProvider\": { capName: \"mesh-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"meshOrchestrator.leaveProvider\": { capName: \"mesh-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"meshOrchestrator.listProviderPeers\": { capName: \"mesh-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"meshOrchestrator.listProviders\": { capName: \"mesh-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"meshOrchestrator.logoutProvider\": { capName: \"mesh-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"meshOrchestrator.startLoginProvider\": { capName: \"mesh-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"metricsProvider.collectSnapshot\": { capName: \"metrics-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"metricsProvider.getAddonStats\": { capName: \"metrics-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"metricsProvider.getCached\": { capName: \"metrics-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"metricsProvider.getCpuTemperature\": { capName: \"metrics-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"metricsProvider.getCurrent\": { capName: \"metrics-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"metricsProvider.getDiskSpace\": { capName: \"metrics-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"metricsProvider.getGpuInfo\": { capName: \"metrics-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"metricsProvider.getProcessStats\": { capName: \"metrics-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"metricsProvider.killProcess\": { capName: \"metrics-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"metricsProvider.listAddonInstances\": { capName: \"metrics-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"metricsProvider.listNodeProcesses\": { capName: \"metrics-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"motion.isDetected\": { capName: \"motion\", capScope: \"device\", addonId: null, access: \"view\" },\n \"motionDetection.analyze\": { capName: \"motion-detection\", capScope: \"device\", addonId: null, access: \"create\" },\n \"motionDetection.removeCamera\": { capName: \"motion-detection\", capScope: \"device\", addonId: null, access: \"delete\" },\n \"motionDetection.reset\": { capName: \"motion-detection\", capScope: \"device\", addonId: null, access: \"delete\" },\n \"motionTrigger.setMotionTrigger\": { capName: \"motion-trigger\", capScope: \"device\", addonId: null, access: \"create\" },\n \"mqttBroker.addBroker\": { capName: \"mqtt-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"mqttBroker.getBrokerConfig\": { capName: \"mqtt-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"mqttBroker.getStatus\": { capName: \"mqtt-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"mqttBroker.listBrokers\": { capName: \"mqtt-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"mqttBroker.removeBroker\": { capName: \"mqtt-broker\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"mqttBroker.startEmbeddedBroker\": { capName: \"mqtt-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"mqttBroker.stopEmbeddedBroker\": { capName: \"mqtt-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"mqttBroker.testConnection\": { capName: \"mqtt-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"networkAccess.getEndpoint\": { capName: \"network-access\", capScope: \"system\", addonId: null, access: \"view\" },\n \"networkAccess.getStatus\": { capName: \"network-access\", capScope: \"system\", addonId: null, access: \"view\" },\n \"networkAccess.listEndpoints\": { capName: \"network-access\", capScope: \"system\", addonId: null, access: \"view\" },\n \"networkAccess.start\": { capName: \"network-access\", capScope: \"system\", addonId: null, access: \"create\" },\n \"networkAccess.stop\": { capName: \"network-access\", capScope: \"system\", addonId: null, access: \"create\" },\n \"networkQuality.getAllStats\": { capName: \"network-quality\", capScope: \"system\", addonId: null, access: \"view\" },\n \"networkQuality.getDeviceStats\": { capName: \"network-quality\", capScope: \"system\", addonId: null, access: \"view\" },\n \"networkQuality.reportClientStats\": { capName: \"network-quality\", capScope: \"system\", addonId: null, access: \"create\" },\n \"nodes.clusterAddonStatus\": { capName: \"nodes\", capScope: \"system\", addonId: null, access: \"view\" },\n \"nodes.deployAddon\": { capName: \"nodes\", capScope: \"system\", addonId: null, access: \"create\" },\n \"nodes.executeQuery\": { capName: \"nodes\", capScope: \"system\", addonId: null, access: \"create\" },\n \"nodes.getNodeAddons\": { capName: \"nodes\", capScope: \"system\", addonId: null, access: \"view\" },\n \"nodes.renameNode\": { capName: \"nodes\", capScope: \"system\", addonId: null, access: \"create\" },\n \"nodes.restartAddon\": { capName: \"nodes\", capScope: \"system\", addonId: null, access: \"create\" },\n \"nodes.restartNode\": { capName: \"nodes\", capScope: \"system\", addonId: null, access: \"create\" },\n \"nodes.restartProcess\": { capName: \"nodes\", capScope: \"system\", addonId: null, access: \"create\" },\n \"nodes.setProcessLogLevel\": { capName: \"nodes\", capScope: \"system\", addonId: null, access: \"create\" },\n \"nodes.shutdownNode\": { capName: \"nodes\", capScope: \"system\", addonId: null, access: \"create\" },\n \"nodes.topology\": { capName: \"nodes\", capScope: \"system\", addonId: null, access: \"view\" },\n \"nodes.undeployAddon\": { capName: \"nodes\", capScope: \"system\", addonId: null, access: \"create\" },\n \"notificationOutput.send\": { capName: \"notification-output\", capScope: \"system\", addonId: null, access: \"create\" },\n \"notificationOutput.sendTest\": { capName: \"notification-output\", capScope: \"system\", addonId: null, access: \"create\" },\n \"osd.setOverlay\": { capName: \"osd\", capScope: \"device\", addonId: null, access: \"create\" },\n \"pipelineAnalytics.clearTracks\": { capName: \"pipeline-analytics\", capScope: \"device\", addonId: null, access: \"delete\" },\n \"pipelineAnalytics.getActiveTracks\": { capName: \"pipeline-analytics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"pipelineAnalytics.getAudioEvents\": { capName: \"pipeline-analytics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"pipelineAnalytics.getEventMedia\": { capName: \"pipeline-analytics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"pipelineAnalytics.getMotionEvents\": { capName: \"pipeline-analytics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"pipelineAnalytics.getObjectEvents\": { capName: \"pipeline-analytics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"pipelineAnalytics.getTrack\": { capName: \"pipeline-analytics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"pipelineAnalytics.getTrackMedia\": { capName: \"pipeline-analytics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"pipelineAnalytics.listTracks\": { capName: \"pipeline-analytics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"pipelineExecutor.cacheFrameInPool\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineExecutor.deleteModel\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"pipelineExecutor.deleteTemplate\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"pipelineExecutor.detect\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.downloadModel\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineExecutor.getAddonModels\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getAudioCapabilities\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getAvailableEngines\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getCapabilities\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getDefaultSteps\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getDetectionConfigSchema\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getEffectiveTuning\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getGlobalPipelineConfig\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getGlobalSteps\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getOrchestratorConfigSchema\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getReferenceAudio\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getReferenceAudioFiles\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getReferenceImage\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getSchema\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getSelectedEngine\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.getVideoPipelineSteps\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.inferCached\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineExecutor.killEngine\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineExecutor.listLoadedEngines\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.listReferenceImages\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.listTemplates\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineExecutor.reprobeEngine\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineExecutor.runAudioTest\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineExecutor.runPipeline\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineExecutor.runPipelineBatch\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineExecutor.saveTemplate\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineExecutor.setVideoPipelineSteps\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineExecutor.spinEngine\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineExecutor.uncacheFrame\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineExecutor.updateTemplate\": { capName: \"pipeline-executor\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.assignAudio\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.assignDecoder\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.assignPipeline\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.deleteTemplate\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"pipelineOrchestrator.getAgentLoad\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.getAgentSettings\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.getAudioAssignment\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.getAudioAssignments\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.getAudioNodeLoad\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.getCameraMetrics\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.getCameraSettings\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.getCameraStepOverrides\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.getCapabilityBindings\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.getDecoderAssignment\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.getDecoderAssignments\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.getGlobalMetrics\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.getPipelineAssignment\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.getPipelineAssignments\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.listAgentSettings\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.listTemplates\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.rebalance\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.removeAgentSettings\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"pipelineOrchestrator.resolvePipeline\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineOrchestrator.saveTemplate\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.setAgentAddonDefaults\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.setCameraPipelineForAgent\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.setCameraStepOverride\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.setCameraStepToggle\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.setCapabilityBinding\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.unassignAudio\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.unassignDecoder\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.unassignPipeline\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineOrchestrator.updateTemplate\": { capName: \"pipeline-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineRunner.attachCamera\": { capName: \"pipeline-runner\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineRunner.detachCamera\": { capName: \"pipeline-runner\", capScope: \"system\", addonId: null, access: \"create\" },\n \"pipelineRunner.getAllCameraMetrics\": { capName: \"pipeline-runner\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineRunner.getCameraMetrics\": { capName: \"pipeline-runner\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineRunner.getLocalCameras\": { capName: \"pipeline-runner\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineRunner.getLocalLoad\": { capName: \"pipeline-runner\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineRunner.getLocalMetrics\": { capName: \"pipeline-runner\", capScope: \"system\", addonId: null, access: \"view\" },\n \"pipelineRunner.reportMotion\": { capName: \"pipeline-runner\", capScope: \"system\", addonId: null, access: \"create\" },\n \"platformProbe.getCapabilities\": { capName: \"platform-probe\", capScope: \"system\", addonId: null, access: \"view\" },\n \"platformProbe.getHardware\": { capName: \"platform-probe\", capScope: \"system\", addonId: null, access: \"view\" },\n \"platformProbe.getHardwareEncoders\": { capName: \"platform-probe\", capScope: \"system\", addonId: null, access: \"view\" },\n \"platformProbe.refreshHardwareEncoders\": { capName: \"platform-probe\", capScope: \"system\", addonId: null, access: \"create\" },\n \"platformProbe.resolveHwAccel\": { capName: \"platform-probe\", capScope: \"system\", addonId: null, access: \"view\" },\n \"platformProbe.resolveInferenceConfig\": { capName: \"platform-probe\", capScope: \"system\", addonId: null, access: \"view\" },\n \"ptz.continuousMove\": { capName: \"ptz\", capScope: \"device\", addonId: null, access: \"create\" },\n \"ptz.getPosition\": { capName: \"ptz\", capScope: \"device\", addonId: null, access: \"view\" },\n \"ptz.getPresets\": { capName: \"ptz\", capScope: \"device\", addonId: null, access: \"view\" },\n \"ptz.goHome\": { capName: \"ptz\", capScope: \"device\", addonId: null, access: \"create\" },\n \"ptz.goToPreset\": { capName: \"ptz\", capScope: \"device\", addonId: null, access: \"create\" },\n \"ptz.move\": { capName: \"ptz\", capScope: \"device\", addonId: null, access: \"create\" },\n \"ptz.stop\": { capName: \"ptz\", capScope: \"device\", addonId: null, access: \"create\" },\n \"ptzAutotrack.getSettings\": { capName: \"ptz-autotrack\", capScope: \"device\", addonId: null, access: \"view\" },\n \"ptzAutotrack.getStatus\": { capName: \"ptz-autotrack\", capScope: \"device\", addonId: null, access: \"view\" },\n \"ptzAutotrack.setEnabled\": { capName: \"ptz-autotrack\", capScope: \"device\", addonId: null, access: \"create\" },\n \"ptzAutotrack.setSettings\": { capName: \"ptz-autotrack\", capScope: \"device\", addonId: null, access: \"create\" },\n \"reboot.reboot\": { capName: \"reboot\", capScope: \"device\", addonId: null, access: \"create\" },\n \"recording.getPlaybackUrl\": { capName: \"recording\", capScope: \"device\", addonId: null, access: \"view\" },\n \"recording.getSegments\": { capName: \"recording\", capScope: \"device\", addonId: null, access: \"view\" },\n \"recording.getThumbnailAt\": { capName: \"recording\", capScope: \"device\", addonId: null, access: \"view\" },\n \"recordingEngine.disable\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"create\" },\n \"recordingEngine.enable\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"create\" },\n \"recordingEngine.estimateGlobalStorage\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"recordingEngine.estimateStorage\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"recordingEngine.getAvailability\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"recordingEngine.getConfig\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"recordingEngine.getMotionStats\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"recordingEngine.getPlaylist\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"recordingEngine.getPolicy\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"recordingEngine.getPolicyStatus\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"recordingEngine.getRetentionConfig\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"recordingEngine.getSegments\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"recordingEngine.getStatus\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"recordingEngine.getStorageUsage\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"recordingEngine.getThumbnail\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"recordingEngine.setPolicy\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"create\" },\n \"recordingEngine.updateConfig\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"create\" },\n \"recordingEngine.updateRetentionConfig\": { capName: \"recording-engine\", capScope: \"system\", addonId: null, access: \"create\" },\n \"remoteAccess.listProviders\": { capName: \"remote-access\", capScope: \"system\", addonId: null, access: \"view\" },\n \"remoteAccess.startProvider\": { capName: \"remote-access\", capScope: \"system\", addonId: null, access: \"create\" },\n \"remoteAccess.stopProvider\": { capName: \"remote-access\", capScope: \"system\", addonId: null, access: \"create\" },\n \"restreamer.getExposedResources\": { capName: \"restreamer\", capScope: \"system\", addonId: null, access: \"view\" },\n \"restreamer.registerDevice\": { capName: \"restreamer\", capScope: \"system\", addonId: null, access: \"create\" },\n \"restreamer.unregisterDevice\": { capName: \"restreamer\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"settingsStore.count\": { capName: \"settings-store\", capScope: \"system\", addonId: null, access: \"view\" },\n \"settingsStore.declareCollection\": { capName: \"settings-store\", capScope: \"system\", addonId: null, access: \"create\" },\n \"settingsStore.delete\": { capName: \"settings-store\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"settingsStore.get\": { capName: \"settings-store\", capScope: \"system\", addonId: null, access: \"view\" },\n \"settingsStore.insert\": { capName: \"settings-store\", capScope: \"system\", addonId: null, access: \"create\" },\n \"settingsStore.isEmpty\": { capName: \"settings-store\", capScope: \"system\", addonId: null, access: \"view\" },\n \"settingsStore.query\": { capName: \"settings-store\", capScope: \"system\", addonId: null, access: \"view\" },\n \"settingsStore.set\": { capName: \"settings-store\", capScope: \"system\", addonId: null, access: \"create\" },\n \"settingsStore.update\": { capName: \"settings-store\", capScope: \"system\", addonId: null, access: \"create\" },\n \"smtpProvider.getStatus\": { capName: \"smtp-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"smtpProvider.sendEmail\": { capName: \"smtp-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"smtpProvider.verify\": { capName: \"smtp-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"snapshot.getSnapshot\": { capName: \"snapshot\", capScope: \"device\", addonId: null, access: \"view\" },\n \"snapshot.invalidateCache\": { capName: \"snapshot\", capScope: \"device\", addonId: null, access: \"create\" },\n \"snapshotProvider.getSnapshot\": { capName: \"snapshot-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"snapshotProvider.supportsDevice\": { capName: \"snapshot-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"ssoBridge.signBridgeToken\": { capName: \"sso-bridge\", capScope: \"system\", addonId: null, access: \"view\" },\n \"ssoBridge.verifyBridgeToken\": { capName: \"sso-bridge\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storage.abortUpload\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storage.beginDownload\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storage.beginUpload\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storage.delete\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"storage.deleteLocation\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"storage.endDownload\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storage.exists\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storage.finalizeUpload\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storage.getAvailableSpace\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storage.getDefaultLocation\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storage.list\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storage.listLocations\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storage.listProviders\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storage.read\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storage.readChunk\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storage.resolve\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storage.testConfig\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storage.testLocation\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storage.upsertLocation\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storage.write\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storage.writeChunk\": { capName: \"storage\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storageProvider.abortUpload\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storageProvider.beginDownload\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storageProvider.beginUpload\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storageProvider.delete\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"storageProvider.endDownload\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storageProvider.exists\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storageProvider.finalizeUpload\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storageProvider.getAvailableSpace\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storageProvider.getProviderInfo\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storageProvider.list\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storageProvider.read\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storageProvider.readChunk\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storageProvider.resolve\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storageProvider.testLocation\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"storageProvider.write\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"storageProvider.writeChunk\": { capName: \"storage-provider\", capScope: \"system\", addonId: null, access: \"create\" },\n \"streamBroker.assignProfile\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"streamBroker.getAllRtspEntries\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"streamBroker.getBroker\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"streamBroker.getBrokerStats\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"streamBroker.getPreBufferInfo\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"streamBroker.getRtspEntry\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"streamBroker.getRtspPort\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"streamBroker.getStreamUrl\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"streamBroker.getStreamWithCodec\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"streamBroker.isRtspEnabled\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"streamBroker.killClient\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"streamBroker.listAllCameraStreams\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"streamBroker.listAllProfileSlots\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"streamBroker.listClients\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"view\" },\n \"streamBroker.publishCameraStream\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"streamBroker.regenerateRtspToken\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"streamBroker.releaseStreamWithCodec\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"streamBroker.restartProfile\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"streamBroker.retractCameraStream\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"streamBroker.setPreBufferDuration\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"streamBroker.setRtspEnabled\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"streamBroker.unassignProfile\": { capName: \"stream-broker\", capScope: \"system\", addonId: null, access: \"create\" },\n \"streamingEngine.getStreamUrl\": { capName: \"streaming-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"streamingEngine.listStreams\": { capName: \"streaming-engine\", capScope: \"system\", addonId: null, access: \"view\" },\n \"streamingEngine.registerStream\": { capName: \"streaming-engine\", capScope: \"system\", addonId: null, access: \"create\" },\n \"streamingEngine.unregisterStream\": { capName: \"streaming-engine\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"switch.setState\": { capName: \"switch\", capScope: \"device\", addonId: null, access: \"create\" },\n \"system.featureFlags\": { capName: \"system\", capScope: \"system\", addonId: null, access: \"view\" },\n \"system.forceRetentionCleanup\": { capName: \"system\", capScope: \"system\", addonId: null, access: \"create\" },\n \"system.getRetentionConfig\": { capName: \"system\", capScope: \"system\", addonId: null, access: \"view\" },\n \"system.health\": { capName: \"system\", capScope: \"system\", addonId: null, access: \"view\" },\n \"system.info\": { capName: \"system\", capScope: \"system\", addonId: null, access: \"view\" },\n \"system.networkAddresses\": { capName: \"system\", capScope: \"system\", addonId: null, access: \"view\" },\n \"system.setRetentionConfig\": { capName: \"system\", capScope: \"system\", addonId: null, access: \"create\" },\n \"toast.onToast\": { capName: \"toast\", capScope: \"system\", addonId: null, access: \"view\" },\n \"turnOrchestrator.getAllServers\": { capName: \"turn-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"turnOrchestrator.listProviders\": { capName: \"turn-orchestrator\", capScope: \"system\", addonId: null, access: \"view\" },\n \"turnOrchestrator.setProviderEnabled\": { capName: \"turn-orchestrator\", capScope: \"system\", addonId: null, access: \"create\" },\n \"turnProvider.getTurnServers\": { capName: \"turn-provider\", capScope: \"system\", addonId: null, access: \"view\" },\n \"userManagement.confirmTotp\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"create\" },\n \"userManagement.createApiKey\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"create\" },\n \"userManagement.createScopedToken\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"create\" },\n \"userManagement.createUser\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"create\" },\n \"userManagement.deleteUser\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"userManagement.disableTotp\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"userManagement.getTotpStatus\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"view\" },\n \"userManagement.listApiKeys\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"view\" },\n \"userManagement.listScopedTokens\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"view\" },\n \"userManagement.listUsers\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"view\" },\n \"userManagement.resetPassword\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"create\" },\n \"userManagement.revokeApiKey\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"userManagement.revokeScopedToken\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"userManagement.setupTotp\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"create\" },\n \"userManagement.setUserScopes\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"create\" },\n \"userManagement.updateUser\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"create\" },\n \"userManagement.validateApiKey\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"view\" },\n \"userManagement.validateCredentials\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"view\" },\n \"userManagement.validateScopedToken\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"view\" },\n \"userManagement.verifyTotp\": { capName: \"user-management\", capScope: \"system\", addonId: null, access: \"view\" },\n \"userPasskeys.beginAuthentication\": { capName: \"user-passkeys\", capScope: \"system\", addonId: null, access: \"view\" },\n \"userPasskeys.beginRegistration\": { capName: \"user-passkeys\", capScope: \"system\", addonId: null, access: \"create\" },\n \"userPasskeys.finishAuthentication\": { capName: \"user-passkeys\", capScope: \"system\", addonId: null, access: \"view\" },\n \"userPasskeys.finishRegistration\": { capName: \"user-passkeys\", capScope: \"system\", addonId: null, access: \"create\" },\n \"userPasskeys.listPasskeys\": { capName: \"user-passkeys\", capScope: \"system\", addonId: null, access: \"view\" },\n \"userPasskeys.removePasskey\": { capName: \"user-passkeys\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"webrtc.closeSession\": { capName: \"webrtc\", capScope: \"system\", addonId: null, access: \"create\" },\n \"webrtc.createSession\": { capName: \"webrtc\", capScope: \"system\", addonId: null, access: \"create\" },\n \"webrtc.handleAnswer\": { capName: \"webrtc\", capScope: \"system\", addonId: null, access: \"create\" },\n \"webrtc.handleOffer\": { capName: \"webrtc\", capScope: \"system\", addonId: null, access: \"create\" },\n \"webrtc.hasAdaptiveBitrate\": { capName: \"webrtc\", capScope: \"system\", addonId: null, access: \"view\" },\n \"webrtc.registerStream\": { capName: \"webrtc\", capScope: \"system\", addonId: null, access: \"create\" },\n \"webrtc.supportsStream\": { capName: \"webrtc\", capScope: \"system\", addonId: null, access: \"view\" },\n \"webrtc.unregisterStream\": { capName: \"webrtc\", capScope: \"system\", addonId: null, access: \"delete\" },\n \"webrtcSession.closeSession\": { capName: \"webrtc-session\", capScope: \"device\", addonId: null, access: \"create\" },\n \"webrtcSession.createSession\": { capName: \"webrtc-session\", capScope: \"device\", addonId: null, access: \"create\" },\n \"webrtcSession.handleAnswer\": { capName: \"webrtc-session\", capScope: \"device\", addonId: null, access: \"create\" },\n \"webrtcSession.handleOffer\": { capName: \"webrtc-session\", capScope: \"device\", addonId: null, access: \"create\" },\n \"webrtcSession.hasAdaptiveBitrate\": { capName: \"webrtc-session\", capScope: \"device\", addonId: null, access: \"view\" },\n \"webrtcSession.listStreams\": { capName: \"webrtc-session\", capScope: \"device\", addonId: null, access: \"view\" },\n \"zoneAnalytics.getCameraHistory\": { capName: \"zone-analytics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"zoneAnalytics.getCurrentSnapshot\": { capName: \"zone-analytics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"zoneAnalytics.getUnzonedHistory\": { capName: \"zone-analytics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"zoneAnalytics.getZoneHistory\": { capName: \"zone-analytics\", capScope: \"device\", addonId: null, access: \"view\" },\n \"zoneRules.listRules\": { capName: \"zone-rules\", capScope: \"device\", addonId: null, access: \"view\" },\n \"zoneRules.setRules\": { capName: \"zone-rules\", capScope: \"device\", addonId: null, access: \"create\" },\n \"zones.addZone\": { capName: \"zones\", capScope: \"device\", addonId: null, access: \"create\" },\n \"zones.listZones\": { capName: \"zones\", capScope: \"device\", addonId: null, access: \"view\" },\n \"zones.removeZone\": { capName: \"zones\", capScope: \"device\", addonId: null, access: \"delete\" },\n \"zones.updateZone\": { capName: \"zones\", capScope: \"device\", addonId: null, access: \"create\" }\n});\nconst KNOWN_CAP_NAMES = [\n \"addon-pages\",\n \"addon-pages-source\",\n \"addon-routes\",\n \"addon-settings\",\n \"addon-widgets\",\n \"addon-widgets-source\",\n \"addons\",\n \"admin-ui\",\n \"advanced-notifier\",\n \"alerts\",\n \"audio-analysis\",\n \"audio-analyzer\",\n \"audio-codec\",\n \"audio-metrics\",\n \"auth-provider\",\n \"authentication\",\n \"backup\",\n \"brightness\",\n \"camera-credentials\",\n \"camera-streams\",\n \"decoder\",\n \"device-discovery\",\n \"device-export\",\n \"device-manager\",\n \"device-ops\",\n \"device-provider\",\n \"device-state\",\n \"embedding-encoder\",\n \"events\",\n \"integrations\",\n \"intercom\",\n \"local-network\",\n \"log-destination\",\n \"mesh-network\",\n \"mesh-orchestrator\",\n \"metrics-provider\",\n \"motion\",\n \"motion-detection\",\n \"motion-trigger\",\n \"mqtt-broker\",\n \"network-access\",\n \"network-quality\",\n \"nodes\",\n \"notification-output\",\n \"osd\",\n \"pipeline-analytics\",\n \"pipeline-executor\",\n \"pipeline-orchestrator\",\n \"pipeline-runner\",\n \"platform-probe\",\n \"ptz\",\n \"ptz-autotrack\",\n \"reboot\",\n \"recording\",\n \"recording-engine\",\n \"remote-access\",\n \"restreamer\",\n \"settings-store\",\n \"smtp-provider\",\n \"snapshot\",\n \"snapshot-provider\",\n \"sso-bridge\",\n \"storage\",\n \"storage-provider\",\n \"stream-broker\",\n \"streaming-engine\",\n \"switch\",\n \"system\",\n \"toast\",\n \"turn-orchestrator\",\n \"turn-provider\",\n \"user-management\",\n \"user-passkeys\",\n \"webrtc\",\n \"webrtc-session\",\n \"zone-analytics\",\n \"zone-rules\",\n \"zones\"\n];\nconst DEVICE_CAP_NAMES = [\n \"audio-analysis\",\n \"audio-metrics\",\n \"brightness\",\n \"camera-credentials\",\n \"camera-streams\",\n \"device-discovery\",\n \"device-ops\",\n \"events\",\n \"intercom\",\n \"motion\",\n \"motion-detection\",\n \"motion-trigger\",\n \"osd\",\n \"pipeline-analytics\",\n \"ptz\",\n \"ptz-autotrack\",\n \"reboot\",\n \"recording\",\n \"snapshot\",\n \"switch\",\n \"webrtc-session\",\n \"zone-analytics\",\n \"zone-rules\",\n \"zones\"\n];\nconst SYSTEM_CAP_NAMES = [\n \"addon-pages\",\n \"addon-pages-source\",\n \"addon-routes\",\n \"addon-settings\",\n \"addon-widgets\",\n \"addon-widgets-source\",\n \"addons\",\n \"admin-ui\",\n \"advanced-notifier\",\n \"alerts\",\n \"audio-analyzer\",\n \"audio-codec\",\n \"auth-provider\",\n \"authentication\",\n \"backup\",\n \"decoder\",\n \"device-export\",\n \"device-manager\",\n \"device-provider\",\n \"device-state\",\n \"embedding-encoder\",\n \"integrations\",\n \"local-network\",\n \"log-destination\",\n \"mesh-network\",\n \"mesh-orchestrator\",\n \"metrics-provider\",\n \"mqtt-broker\",\n \"network-access\",\n \"network-quality\",\n \"nodes\",\n \"notification-output\",\n \"pipeline-executor\",\n \"pipeline-orchestrator\",\n \"pipeline-runner\",\n \"platform-probe\",\n \"recording-engine\",\n \"remote-access\",\n \"restreamer\",\n \"settings-store\",\n \"smtp-provider\",\n \"snapshot-provider\",\n \"sso-bridge\",\n \"storage\",\n \"storage-provider\",\n \"stream-broker\",\n \"streaming-engine\",\n \"system\",\n \"toast\",\n \"turn-orchestrator\",\n \"turn-provider\",\n \"user-management\",\n \"user-passkeys\",\n \"webrtc\"\n];\nconst SCOPE_PRESETS = [\n {\n id: \"camera-viewer\",\n label: \"Camera viewer\",\n description: \"Read-only over every device — live streams, recordings, motion events, battery state. Combine with `allowedDevices` to restrict to specific cameras.\",\n rows: [\n { type: \"category\", target: \"device\", access: [\"view\"] }\n ]\n },\n {\n id: \"camera-operator\",\n label: \"Camera operator\",\n description: \"Everything `camera-viewer` does plus PTZ control, intercom, snapshots and recording start/stop. Cannot delete devices or recordings.\",\n rows: [\n { type: \"category\", target: \"device\", access: [\"view\", \"create\"] }\n ]\n },\n {\n id: \"cli-deployer\",\n label: \"CLI deployer\",\n description: \"Push addons to the hub and tail their logs. Used by the `camstack` CLI on dev machines. No delete access — a stolen token cannot uninstall.\",\n rows: [\n { type: \"capability\", target: \"addons\", access: [\"view\", \"create\"] }\n ]\n },\n {\n id: \"event-listener\",\n label: \"Event listener\",\n description: \"Subscribe to motion / audio events. Used by webhook bridges and Home Assistant integrations.\",\n rows: [\n { type: \"capability\", target: \"events\", access: [\"view\"] },\n { type: \"capability\", target: \"motion-detection\", access: [\"view\"] },\n { type: \"capability\", target: \"audio-analysis\", access: [\"view\"] }\n ]\n }\n];\nconst CAP_PROVIDER_KIND_MAP = Object.freeze({\n \"device-export\": \"device-export\",\n \"mesh-network\": \"mesh\",\n \"mqtt-broker\": \"broker\",\n \"network-access\": \"ingress\",\n \"smtp-provider\": \"email\"\n});\nconst PROVIDER_KIND_CAP_NAMES = [\n \"device-export\",\n \"mesh-network\",\n \"mqtt-broker\",\n \"network-access\",\n \"smtp-provider\"\n];\nfunction getCapsByProviderKind(kind) {\n const out = [];\n for (const [capName, capKind] of Object.entries(CAP_PROVIDER_KIND_MAP)) {\n if (capKind === kind) out.push(capName);\n }\n return out;\n}\nfunction maskUrlCredentials(rawUrl) {\n try {\n const u = new URL(rawUrl);\n if (!u.username && !u.password) return rawUrl;\n u.username = \"\";\n u.password = \"\";\n return u.toString();\n } catch {\n return rawUrl;\n }\n}\nclass RingBuffer {\n constructor(capacity) {\n this.capacity = capacity;\n this.items = Array.from({ length: capacity });\n }\n items;\n head = 0;\n tail = 0;\n count = 0;\n get size() {\n return this.count;\n }\n push(item) {\n this.items[this.tail] = item;\n this.tail = (this.tail + 1) % this.capacity;\n if (this.count < this.capacity) {\n this.count++;\n } else {\n this.head = (this.head + 1) % this.capacity;\n }\n }\n drain(maxCount) {\n const result = [];\n const n = Math.min(maxCount, this.count);\n for (let i = 0; i < n; i++) {\n result.push(this.items[this.head]);\n this.items[this.head] = void 0;\n this.head = (this.head + 1) % this.capacity;\n }\n this.count -= n;\n return result;\n }\n}\nfunction bindAddonActions(api, addonId, catalog) {\n const out = {};\n for (const action of Object.keys(catalog)) {\n out[action] = (input) => {\n const dispatcher = api.addons.custom;\n return dispatcher.mutate({ addonId, action, input });\n };\n }\n return out;\n}\nexport {\n ax as ACCESSORY_LABEL,\n ALL_CAPABILITY_DEFINITIONS,\n ay as APPLE_SA_TO_MACRO,\n az as AUDIO_BACKEND_CHOICES,\n aA as AUDIO_MACRO_LABELS,\n aB as AccessoriesStatusSchema,\n aC as AccessoryKind,\n aD as AddBrokerInputSchema,\n aE as AddonAutoUpdateSchema,\n aF as AddonListItemSchema,\n aG as AddonPageDeclarationSchema,\n aH as AddonPageInfoSchema,\n aI as AgentLoadSummarySchema,\n aJ as AlertSchema,\n aK as AlertSeveritySchema,\n aL as AlertSourceSchema,\n aM as AlertStatusSchema,\n aN as ApiKeyRecordSchema,\n aO as ApiKeySummarySchema,\n aP as ArchiveEntrySchema,\n aQ as ArchiveManifestSchema,\n aR as AudioAnalysisResultSchema,\n aS as AudioAnalysisSettingsSchema,\n aT as AudioChunkInputSchema,\n aU as AudioClassSummarySchema,\n aV as AudioClassificationLabelSchema,\n aW as AudioClassificationResultSchema,\n aX as AudioCodecInfoSchema,\n aY as AudioDecodeSessionConfigSchema,\n aZ as AudioEncodeSessionConfigSchema,\n a_ as AudioEncodedChunkSchema,\n a$ as AudioEventSchema,\n b0 as AudioLevelSchema,\n b1 as AudioMetricsHistoryPointSchema,\n b2 as AudioMetricsHistorySchema,\n b3 as AudioMetricsSnapshotSchema,\n b4 as AudioPcmChunkSchema,\n b5 as AuthProviderInfoSchema,\n b6 as AuthResultSchema,\n b7 as AutoUpdateSettingsSchema,\n b8 as AvailableIntegrationTypeSchema,\n BACKEND_TO_FORMAT,\n b9 as BATTERY_DEVICE_PROFILE,\n ba as BackupDestinationInfoSchema,\n bb as BackupEntrySchema,\n BaseAddon,\n BaseDevice,\n BaseDeviceProvider,\n bc as BatteryStatusSchema,\n bd as BoundingBoxSchema,\n be as BrightnessStatusSchema,\n bf as BrokerAudioClientSchema,\n bg as BrokerClientsSchema,\n bh as BrokerConnectionDetailsSchema,\n bi as BrokerDecodedClientSchema,\n bj as BrokerInfoSchema,\n bk as BrokerRtspClientSchema,\n bl as BrokerStatsSchema,\n bm as BrokerStatusSchema,\n bn as CAM_PROFILE_ORDER,\n CAPABILITY_NAMES,\n CAPABILITY_ROUTER_KEYS,\n CAP_NAMES_WITH_STATUS,\n CAP_PROVIDER_KIND_MAP,\n COCO_80_LABELS,\n COCO_TO_MACRO,\n bo as CamProfileSchema,\n bp as CamStreamKindSchema,\n bq as CamStreamResolutionSchema,\n br as CameraCredentialsSchema,\n bs as CameraCredentialsStatusSchema,\n bt as CameraMetricsSchema,\n bu as CameraMetricsWithDeviceIdSchema,\n bv as CameraStreamSchema,\n bw as CapScopeSchema,\n bx as CapabilityBindingsSchema,\n by as ChargingStatus,\n bz as ClientNetworkStatsSchema,\n bA as ClusterAddonNodeDeploymentSchema,\n bB as ClusterAddonStatusEntrySchema,\n bC as CollectionColumnSchema,\n bD as CollectionIndexSchema,\n bE as ConfigEntrySchema,\n bF as ConfigSectionWithValuesSchema,\n bG as ConfigTabDeclarationSchema,\n bH as CreateApiKeyInputSchema,\n bI as CreateApiKeyResultSchema,\n bJ as CreateIntegrationInputSchema,\n bK as CreateScopedTokenInputSchema,\n bL as CreateScopedTokenResultSchema,\n bM as CreateUserInputSchema,\n bN as CustomActionInputSchema,\n DEFAULT_ADDON_GROUP,\n DEFAULT_ADDON_PLACEMENT,\n bO as DEFAULT_AUDIO_ANALYZER_CONFIG,\n bP as DEFAULT_DECODER_HWACCEL_CONFIG,\n DEFAULT_FEATURES,\n DEFAULT_LOCATION_SUBDIRS,\n DEFAULT_RETENTION,\n DEVICE_CAP_NAMES,\n bQ as DEVICE_PROFILES,\n bR as DEVICE_SETTINGS_CONTRIBUTION_METHODS,\n bS as DEVICE_STATUS_METHOD,\n DEVICE_TYPE_INFO,\n bT as DecodedFrameSchema,\n bU as DecoderAssignmentSchema,\n bV as DecoderSessionConfigSchema,\n bW as DecoderStatsSchema,\n bX as DeleteIntegrationResultSchema,\n bY as DetectorOutputSchema,\n DeviceConfig,\n bZ as DeviceDiscoveryStatusSchema,\n b_ as DeviceExportExposeInputSchema,\n b$ as DeviceExportStatusSchema,\n c0 as DeviceExportUnexposeInputSchema,\n c1 as DeviceFeature,\n c2 as DeviceInfoSchema,\n c3 as DeviceNetworkStatsSchema,\n c4 as DeviceRole,\n DeviceRuntimeState,\n c5 as DeviceStatusSchema,\n c6 as DeviceType,\n c7 as DiscoveredChildDeviceSchema,\n c8 as DiscoveredChildStatusSchema,\n c9 as DiscoveredDeviceSchema,\n DisposerChain,\n ca as DoorbellPressEventSchema,\n cb as DoorbellStatusSchema,\n ElementConfigStore,\n cc as EmbeddingInfoSchema,\n cd as EmbeddingResultSchema,\n ce as EncodedPacketSchema,\n cf as EnrichedWidgetMetadataSchema,\n EventCategory,\n cg as EventItemSchema,\n ch as EventKindSchema,\n EventSourceType,\n ci as ExposedDeviceSchema,\n cj as ExposedResourceSchema,\n ck as FeatureManifestSchema,\n cl as FeatureProbeStatusSchema,\n cm as FrameInputSchema,\n cn as GetStreamWithCodecInputSchema,\n co as GlobalMetricsSchema,\n HF_BASE_URL,\n HF_REPO,\n cp as HWACCEL_OPTIONS,\n cq as HealthStatusSchema,\n cr as HistoryPointSchema,\n cs as HistoryResolutionEnum,\n ct as InstalledPackageSchema,\n cu as IntegrationLiteSchema,\n cv as IntegrationWithStateSchema,\n cw as IntercomAbilitySchema,\n cx as IntercomStatusSchema,\n KNOWN_CAP_NAMES,\n cy as LocationStatSchema,\n cz as LogEntrySchema,\n cA as LogLevelSchema,\n cB as LogStreamEntrySchema,\n MACRO_LABELS,\n METHOD_ACCESS_MAP,\n cC as MODEL_FORMATS,\n cD as MediaFileSchema,\n cE as MethodAccessSchema,\n cF as MotionAnalysisResultSchema,\n cG as MotionEventSchema,\n cH as MotionOnMotionChangedDataSchema,\n cI as MotionRegionSchema,\n cJ as MotionSourceEnum,\n cK as MotionSourcesSchema,\n cL as MotionStatusSchema,\n cM as MotionTriggerRuntimeStateSchema,\n cN as MotionTriggerStatusSchema,\n cO as MqttBrokerStatusSchema,\n cP as NativeDetectionSchema,\n cQ as NativeObjectClassEnum,\n cR as NativeObjectDetectionStatusSchema,\n cS as NetworkAccessStatusSchema,\n cT as NetworkAddressSchema,\n cU as NetworkEndpointSchema,\n cV as NotificationHistoryEntrySchema,\n cW as NotificationRuleSchema,\n cX as NotificationSchema,\n cY as ObjectEventSchema,\n cZ as OrchestratorMetricsSchema,\n c_ as OsdOverlayKindEnum,\n c$ as OsdOverlayPatchSchema,\n d0 as OsdOverlaySchema,\n d1 as OsdPositionEnum,\n d2 as OsdStatusSchema,\n d3 as PIPELINE_FLOW_CAPABILITY_NAMES,\n d4 as PIPELINE_OWNER_CAPABILITY_NAMES,\n PROVIDER_KIND_CAP_NAMES,\n PYTHON_SCRIPT,\n d5 as PackageUpdateSchema,\n d6 as PackageVersionInfoSchema,\n d7 as PasskeySummarySchema,\n d8 as PcmSampleFormatSchema,\n d9 as PerScopeBreakdownSchema,\n da as PipelineAssignmentSchema,\n db as PipelineDefaultStepSchema,\n dc as PipelineEngineChoiceSchema,\n dd as PipelineRunResultBridge,\n de as PipelineStepInputSchema,\n df as PlaceholderReasonSchema,\n dg as PolygonPointSchema,\n dh as ProfileSlotSchema,\n di as ProfileSlotStatusSchema,\n dj as ProviderStatusSchema,\n dk as PtzAutotrackRuntimeStateSchema,\n dl as PtzAutotrackSettingsSchema,\n dm as PtzAutotrackStatusSchema,\n dn as PtzAutotrackTargetOptionSchema,\n dp as PtzMoveCommandSchema,\n dq as PtzPositionSchema,\n dr as PtzPresetSchema,\n ds as QueryFilterSchema,\n RECOGNITION_TYPES,\n RUNTIME_DEFAULTS,\n RUNTIME_TO_FORMAT,\n ReadinessRegistry,\n ReadinessTimeoutError,\n dt as RegisteredStreamSchema,\n du as RemoteAccessEndpointSchema,\n dv as RemoteAccessProviderInfoSchema,\n dw as ReportMotionInputSchema,\n RingBuffer,\n dx as RtpSourceSchema,\n dy as RtspRestreamEntrySchema,\n dz as RunnerCameraConfigSchema,\n dA as RunnerCameraDeviceUIFields,\n dB as RunnerLocalLoadSchema,\n dC as RunnerLocalMetricsSchema,\n SCOPE_PRESETS,\n dD as STORAGE_LOCATION_CARDINALITY,\n STORAGE_LOCATION_TYPES,\n STREAM_QUALITY_LABELS,\n SUB_DETECTION_TYPES,\n SYSTEM_CAP_NAMES,\n dE as ScopedTokenSchema,\n dF as ScopedTokenSummarySchema,\n dG as SearchResultSchema,\n dH as SegmentSchema,\n dI as SendEmailInputSchema,\n dJ as SendEmailResultSchema,\n dK as SettingsPatchSchema,\n dL as SettingsRecordSchema,\n dM as SettingsSchemaWithValuesSchema,\n dN as SettingsUpdateResultSchema,\n dO as SmtpStatusSchema,\n dP as SnapshotImageSchema,\n dQ as SpatialDetectionSchema,\n dR as SsoBridgeClaimsSchema,\n dS as StartEmbeddedInputSchema,\n dT as StorageAbortUploadInputSchema,\n dU as StorageBeginDownloadInputSchema,\n dV as StorageBeginDownloadResultSchema,\n dW as StorageBeginUploadInputSchema,\n dX as StorageBeginUploadResultSchema,\n dY as StorageEndDownloadInputSchema,\n dZ as StorageFinalizeUploadInputSchema,\n d_ as StorageLocationRefSchema,\n d$ as StorageLocationSchema,\n e0 as StorageLocationTypeSchema,\n e1 as StorageProviderInfoSchema,\n e2 as StorageReadChunkInputSchema,\n e3 as StorageTestLocationResultSchema,\n e4 as StorageWriteChunkInputSchema,\n e5 as StreamFormatSchema,\n e6 as StreamInfoSchema,\n e7 as StreamNetworkStatsSchema,\n e8 as StreamSourceEntrySchema,\n e9 as StreamSourceSchema,\n ea as SwitchStatusSchema,\n eb as SystemMetricsSchema,\n SystemMirror,\n ec as TestConnectionResultSchema,\n ed as ToastSchema,\n ee as TokenScopeSchema,\n ef as TopologyNodeSchema,\n eg as TopologyProcessSchema,\n eh as TopologyServiceSchema,\n ei as TrackSchema,\n ej as TrackStateSchema,\n ek as TrackedDetectionSchema,\n el as TurnProviderInfoSchema,\n em as TurnServerSchema,\n en as UpdateIntegrationInputSchema,\n eo as UpdateUserInputSchema,\n ep as UserRecordSchema,\n eq as UserSummarySchema,\n er as WELL_KNOWN_TABS,\n es as WELL_KNOWN_TAB_MAP,\n et as WebrtcStreamChoiceSchema,\n eu as WebrtcStreamTargetSchema,\n ev as WidgetHostEnum,\n ew as WidgetMetadataSchema,\n ex as WidgetSizeEnum,\n ey as YAMNET_TO_MACRO,\n ez as ZoneKindEnum,\n eA as ZoneRuleModeEnum,\n eB as ZoneRuleSchema,\n eC as ZoneRuleStageEnum,\n eD as ZoneRulesArraySchema,\n eE as ZoneSchema,\n eF as ZoneScopeBreakdownSchema,\n accessoriesCapability,\n eG as accessoryStableId,\n addonPagesCapability,\n addonPagesSourceCapability,\n addonRoutesCapability,\n addonSettingsCapability,\n addonWidgetsCapability,\n addonWidgetsSourceCapability,\n addonsCapability,\n adminUiCapability,\n advancedNotifierCapability,\n alertsCapability,\n asBoolean,\n asJsonArray,\n asJsonObject,\n asNumber,\n asString,\n audioAnalysisCapability,\n audioAnalyzerCapability,\n audioCodecCapability,\n audioMetricsCapability,\n authProviderCapability,\n authenticationCapability,\n autoAssignProfiles,\n backupCapability,\n batteryCapability,\n bindAddonActions,\n brightnessCapability,\n buildAddonRouteProvider,\n cameraCredentialsCapability,\n cameraStreamsCapability,\n classifyStream,\n classifyStreams,\n cosineSimilarity,\n createDeviceProxy,\n createEvent,\n createLazyTrpcSource,\n createMirrorSource,\n createRuntimeStateBridge,\n createSliceHandle,\n createSystemProxy,\n customAction,\n decoderCapability,\n defineCustomActions,\n detectionPipelineCapability,\n deviceDiscoveryCapability,\n deviceExportCapability,\n deviceManagerCapability,\n eH as deviceMatchesProfile,\n deviceOpsCapability,\n deviceProviderCapability,\n deviceStateCapability,\n deviceStatusCapability,\n doorbellCapability,\n embeddingEncoderCapability,\n emitDownForOwnedCaps,\n emitReadiness,\n errMsg,\n evaluateZoneRules,\n eI as event,\n eventsCapability,\n eJ as expandCapMethods,\n featureProbeCapability,\n formatForBackend,\n formatForRuntime,\n eK as getAudioMacroClassIds,\n getCapsByProviderKind,\n hfModelUrl,\n hydrateSchema,\n integrationsCapability,\n intercomCapability,\n isAgentOnlyPlacement,\n isDeployableToAgent,\n isEvent,\n localNetworkCapability,\n logDestinationCapability,\n eL as mapAudioLabelToMacro,\n maskUrlCredentials,\n meshNetworkCapability,\n meshOrchestratorCapability,\n eM as method,\n metricsProviderCapability,\n motionCapability,\n motionDetectionCapability,\n motionTriggerCapability,\n mqttBrokerCapability,\n nativeObjectDetectionCapability,\n networkAccessCapability,\n networkQualityCapability,\n nodesCapability,\n normalizeAddonInitResult,\n notificationOutputCapability,\n osdCapability,\n parseCameraStreamConfig,\n parseJsonArray,\n parseJsonObject,\n parseJsonUnknown,\n pipelineAnalyticsCapability,\n pipelineExecutorCapability,\n pipelineOrchestratorCapability,\n pipelineRunnerCapability,\n platformProbeCapability,\n ptzAutotrackCapability,\n ptzCapability,\n pythonScriptForBackend,\n readinessKey,\n rebootCapability,\n recordingCapability,\n recordingEngineCapability,\n remoteAccessCapability,\n requiresPython,\n resolveAddonExecution,\n resolveAddonGroup,\n resolveAddonPlacement,\n resolveAddonRuntime,\n resolveDetectionRuntime,\n eN as resolveDeviceProfile,\n resolveModelFormat,\n restreamerCapability,\n runInferenceStep,\n scopeKey,\n settingsStoreCapability,\n smtpProviderCapability,\n snapshotCapability,\n snapshotProviderCapability,\n ssoBridgeCapability,\n storageCapability,\n storageProviderCapability,\n streamBrokerCapability,\n streamPixels,\n streamQualityLabel,\n streamingEngineCapability,\n switchCapability,\n systemCapability,\n toDeviceSummary,\n toStreamSourceEntry,\n toastCapability,\n turnOrchestratorCapability,\n turnProviderCapability,\n userManagementCapability,\n userPasskeysCapability,\n webrtcCapability,\n eO as webrtcClientHintsSchema,\n webrtcSessionCapability,\n zodEntriesToConfigUI,\n zoneAnalyticsCapability,\n zoneRulesCapability,\n zonesCapability\n};\n//# sourceMappingURL=index.mjs.map\n"],"names":["_a","initializer","object","config","util.jsonStringifyReplacer","issue","error","core.$ZodAsyncError","util.finalizeIssue","core.config","util.captureStackTrace","errors.$ZodError","safeParse","errors.$ZodRealError","safeParseAsync","duration","version","email","_emoji","date","time","datetime","string","number","boolean","_null","core.$constructor","inst","util.floatSafeRemainder","util.NUMBER_FORMAT_RANGES","regexes.integer","util.nullish","util.getLengthableOrigin","regexes.lowercase","regexes.uppercase","util.escapeRegex","checks","util.aborted","util.explicitlyAborted","checkResult","canary","result","util.defineLazy","regexes.string","_","checks.$ZodCheckStringFormat","regexes.guid","regexes.uuid","regexes.email","regexes.httpProtocol","regexes.emoji","regexes.nanoid","regexes.cuid","regexes.cuid2","regexes.ulid","regexes.xid","regexes.ksuid","regexes.datetime","regexes.date","regexes.time","regexes.duration","regexes.ipv4","regexes.ipv6","regexes.cidrv4","regexes.cidrv6","regexes.base64","regexes.base64url","base64","regexes.e164","regexes.number","checks.$ZodCheckNumberFormat","regexes.boolean","regexes.null","util.prefixIssues","util.optionalKeys","r","util.cached","isObject","util.isObject","util.esc","core.globalConfig","allowsEval","util.allowsEval","util.cleanRegex","results","left","right","util.isPlainObject","util.getEnumValues","util.propertyKeyTypes","core.$ZodEncodeError","output","checks.$ZodCheck","util.issue","util.normalizeParams","_void","checks.$ZodCheckLessThan","checks.$ZodCheckGreaterThan","checks.$ZodCheckMultipleOf","checks.$ZodCheckMaxLength","checks.$ZodCheckMinLength","checks.$ZodCheckLengthEquals","checks.$ZodCheckRegex","checks.$ZodCheckLowerCase","checks.$ZodCheckUpperCase","checks.$ZodCheckIncludes","checks.$ZodCheckStartsWith","checks.$ZodCheckEndsWith","checks.$ZodCheckOverwrite","util.slugify","id","schema","core.$ZodISODateTime","schemas.ZodStringFormat","core._isoDateTime","core.$ZodISODate","core._isoDate","core.$ZodISOTime","core._isoTime","core.$ZodISODuration","core._isoDuration","core.formatError","core.flattenError","issues","core._parse","core._parseAsync","core._safeParse","core._safeParseAsync","core._encode","core._decode","core._encodeAsync","core._decodeAsync","core._safeEncode","core._safeDecode","core._safeEncodeAsync","core._safeDecodeAsync","core.$ZodType","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","def","util.mergeDefs","core.clone","checks.overwrite","core.globalRegistry","core.$ZodString","processors.stringProcessor","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","checks.slugify","core._email","core._url","core._jwt","core._emoji","core._guid","core._uuid","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","core._cuid","core._cuid2","core._ulid","core._base64","core._base64url","core._xid","core._ksuid","core._ipv4","core._ipv6","core._cidrv4","core._cidrv6","core._e164","iso.datetime","iso.date","iso.time","iso.duration","core._string","core.$ZodStringFormat","core.$ZodEmail","core.$ZodGUID","core.$ZodUUID","core.$ZodURL","core.$ZodEmoji","core.$ZodNanoID","core.$ZodCUID","core.$ZodCUID2","core.$ZodULID","core.$ZodXID","core.$ZodKSUID","core.$ZodIPv4","core.$ZodIPv6","core.$ZodCIDRv4","core.$ZodCIDRv6","core.$ZodBase64","core.$ZodBase64URL","core.$ZodE164","core.$ZodJWT","core.$ZodNumber","processors.numberProcessor","checks.gt","checks.gte","checks.lt","checks.lte","checks.multipleOf","core._number","core.$ZodNumberFormat","core._int","core.$ZodBoolean","processors.booleanProcessor","core._boolean","core.$ZodNull","processors.nullProcessor","core._null","core.$ZodAny","processors.anyProcessor","core._any","core.$ZodUnknown","processors.unknownProcessor","core._unknown","core.$ZodNever","processors.neverProcessor","core._never","core.$ZodVoid","processors.voidProcessor","core._void","core.$ZodDate","processors.dateProcessor","core._date","core.$ZodArray","processors.arrayProcessor","core._array","core.$ZodObjectJIT","processors.objectProcessor","util.extend","util.safeExtend","util.merge","util.pick","util.omit","util.partial","util.required","core.$ZodUnion","processors.unionProcessor","core.$ZodDiscriminatedUnion","core.$ZodIntersection","processors.intersectionProcessor","core.$ZodTuple","processors.tupleProcessor","core.$ZodRecord","processors.recordProcessor","core.$ZodEnum","processors.enumProcessor","core.$ZodLiteral","processors.literalProcessor","core.$ZodTransform","processors.transformProcessor","core.$ZodOptional","processors.optionalProcessor","core.$ZodExactOptional","core.$ZodNullable","processors.nullableProcessor","core.$ZodDefault","processors.defaultProcessor","util.shallowClone","core.$ZodPrefault","processors.prefaultProcessor","core.$ZodNonOptional","processors.nonoptionalProcessor","core.$ZodCatch","processors.catchProcessor","core.$ZodPipe","processors.pipeProcessor","core.$ZodReadonly","processors.readonlyProcessor","core.$ZodLazy","processors.lazyProcessor","core.$ZodCustom","processors.customProcessor","core._custom","core._refine","core._superRefine","z.enum","z.object","z.string","z.record","z.unknown","z.boolean","z.number","z.union","z.literal","z.array","z.any","z.void","z.instanceof","z.custom","z.lazy","z.tuple","z.date","z.email","z.discriminatedUnion","z.null","event"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}