@camstack/types 1.2.379 → 1.2.381
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.d.ts +3 -0
- package/dist/addon.js +67 -2
- package/dist/addon.mjs +5 -3
- package/dist/capabilities/caller-stamp.d.ts +12 -0
- package/dist/capabilities/index.d.ts +7 -2
- package/dist/capabilities/record-entries.cap.d.ts +84 -0
- package/dist/capabilities/records.cap.d.ts +399 -0
- package/dist/capabilities/storage-admin.cap.d.ts +268 -0
- package/dist/client.js +57 -32
- package/dist/client.mjs +57 -32
- package/dist/device/device-context.d.ts +2 -0
- package/dist/ffmpeg/fmp4-fragment-child.d.ts +2 -2
- package/dist/ffmpeg/process.d.ts +21 -0
- package/dist/generated/addon-api.d.ts +191 -0
- package/dist/generated/cap-input-defaults.d.ts +1 -1
- package/dist/generated/capability-router-map.d.ts +8 -2
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/method-device-selectors.d.ts +2 -2
- package/dist/generated/system-proxy.d.ts +2 -0
- package/dist/helpers/addon-slice-handle.d.ts +4 -0
- package/dist/helpers/trpc-leaf.d.ts +17 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +724 -32
- package/dist/index.mjs +646 -33
- package/dist/interfaces/addon-peer-bytes.d.ts +19 -2
- package/dist/interfaces/addon.d.ts +13 -0
- package/dist/interfaces/config-ui.d.ts +4 -0
- package/dist/interfaces/event-bus.d.ts +32 -3
- package/dist/interfaces/storage.d.ts +1 -1
- package/dist/node.d.ts +2 -2
- package/dist/node.js +4 -0
- package/dist/node.mjs +4 -1
- package/dist/records/constants.d.ts +23 -0
- package/dist/records/entry-kind.d.ts +31 -0
- package/dist/records/errors.d.ts +81 -0
- package/dist/records/in-memory-records.d.ts +21 -0
- package/dist/records/index.d.ts +9 -0
- package/dist/records/record-kind.d.ts +144 -0
- package/dist/records/records-access.d.ts +153 -0
- package/dist/records/secret-paths.d.ts +52 -0
- package/dist/records/settings-array-adopts-from.d.ts +12 -0
- package/dist/records/settings-brokers-adopts-from.d.ts +10 -0
- package/dist/{sleep-DQYi915G.js → sleep-D8yJVc4r.js} +1971 -290
- package/dist/{sleep-D-Q2_Mcd.mjs → sleep-bZIhUvjd.mjs} +1413 -128
- package/package.json +1 -1
package/dist/client.js
CHANGED
|
@@ -25895,6 +25895,50 @@ function isSource(x) {
|
|
|
25895
25895
|
return typeof x.read === "function" && typeof x.watch === "function";
|
|
25896
25896
|
}
|
|
25897
25897
|
//#endregion
|
|
25898
|
+
//#region src/helpers/addon-slice-handle.ts
|
|
25899
|
+
/** Structural bridge: every `AddonApi` client carries `deviceState` (+ optional `live`). */
|
|
25900
|
+
function addonSliceHandleApi(api) {
|
|
25901
|
+
return api;
|
|
25902
|
+
}
|
|
25903
|
+
//#endregion
|
|
25904
|
+
//#region src/helpers/trpc-leaf.ts
|
|
25905
|
+
function isTrpcProcedureLeaf(value) {
|
|
25906
|
+
if (typeof value !== "object" || value === null) return false;
|
|
25907
|
+
const record = value;
|
|
25908
|
+
return (typeof record.query === "function" || typeof record.mutate === "function" || typeof record.subscribe === "function") && !Array.isArray(value);
|
|
25909
|
+
}
|
|
25910
|
+
function readCapRecord(api, capProp) {
|
|
25911
|
+
const cap = Reflect.get(api, capProp);
|
|
25912
|
+
if (typeof cap !== "object" || cap === null || Array.isArray(cap)) return void 0;
|
|
25913
|
+
return cap;
|
|
25914
|
+
}
|
|
25915
|
+
function readTrpcLeaf(api, capProp, method) {
|
|
25916
|
+
const capRecord = readCapRecord(api, capProp);
|
|
25917
|
+
if (!capRecord) throw new Error(`tRPC client has no router '${capProp}'`);
|
|
25918
|
+
const leaf = capRecord[method];
|
|
25919
|
+
if (!isTrpcProcedureLeaf(leaf)) throw new Error(`tRPC client has no '${capProp}.${method}'`);
|
|
25920
|
+
return leaf;
|
|
25921
|
+
}
|
|
25922
|
+
/**
|
|
25923
|
+
* Invoke `api.<capProp>.<method>.{query|mutate|subscribe}(input)`.
|
|
25924
|
+
* `Result` is the generated proxy method's return. The leaf itself is only
|
|
25925
|
+
* `unknown` (the client is a structural bag), so the assertion is the one
|
|
25926
|
+
* boundary between that bag and the typed proxy.
|
|
25927
|
+
*/
|
|
25928
|
+
function invokeTrpcLeaf(api, capProp, method, kind, input, push) {
|
|
25929
|
+
const fn = readTrpcLeaf(api, capProp, method);
|
|
25930
|
+
if (kind === "mutation") {
|
|
25931
|
+
if (typeof fn.mutate !== "function") throw new Error(`tRPC '${capProp}.${method}' has no mutate()`);
|
|
25932
|
+
return fn.mutate(input);
|
|
25933
|
+
}
|
|
25934
|
+
if (kind === "subscription") {
|
|
25935
|
+
if (typeof fn.subscribe !== "function") throw new Error(`tRPC '${capProp}.${method}' has no subscribe()`);
|
|
25936
|
+
return fn.subscribe(input, push);
|
|
25937
|
+
}
|
|
25938
|
+
if (typeof fn.query !== "function") throw new Error(`tRPC '${capProp}.${method}' has no query()`);
|
|
25939
|
+
return fn.query(input);
|
|
25940
|
+
}
|
|
25941
|
+
//#endregion
|
|
25898
25942
|
//#region src/generated/device-proxy.ts
|
|
25899
25943
|
/**
|
|
25900
25944
|
* Build a DeviceProxy that pre-binds deviceId + nodeId on every method call
|
|
@@ -25912,8 +25956,7 @@ function isSource(x) {
|
|
|
25912
25956
|
* field on the returned object.
|
|
25913
25957
|
*/
|
|
25914
25958
|
function createDeviceProxy(api, binding, opts) {
|
|
25915
|
-
const
|
|
25916
|
-
const stateSource = opts?.stateSource ?? createLazyTrpcSource(api);
|
|
25959
|
+
const stateSource = opts?.stateSource ?? createLazyTrpcSource(addonSliceHandleApi(api));
|
|
25917
25960
|
/** Merge `{deviceId, nodeId?}` into the caller-supplied input. */
|
|
25918
25961
|
function mergeInput(input, nodeId) {
|
|
25919
25962
|
const base = typeof input === "object" && input !== null ? input : {};
|
|
@@ -25926,20 +25969,8 @@ function createDeviceProxy(api, binding, opts) {
|
|
|
25926
25969
|
deviceId: binding.deviceId
|
|
25927
25970
|
};
|
|
25928
25971
|
}
|
|
25929
|
-
/**
|
|
25930
|
-
* Invoke `api.<capProp>.<method>.{query|mutate|subscribe}(merged)`.
|
|
25931
|
-
* Returns `any` so the caller-side per-method declaration assigns
|
|
25932
|
-
* cleanly into the strongly-typed `InferDeviceProxyCap<...>` shape on
|
|
25933
|
-
* the `DeviceProxy` interface — the proxy's contract is enforced by
|
|
25934
|
-
* the interface, not the dispatch helper.
|
|
25935
|
-
*/
|
|
25936
25972
|
function callLeaf(capProp, method, kind, merged, push) {
|
|
25937
|
-
|
|
25938
|
-
if (!leaf) throw new Error(`DeviceProxy: api has no '${capProp}.${method}'`);
|
|
25939
|
-
const fn = leaf;
|
|
25940
|
-
if (kind === "mutation") return fn.mutate(merged);
|
|
25941
|
-
if (kind === "subscription") return fn.subscribe(merged, push);
|
|
25942
|
-
return fn.query(merged);
|
|
25973
|
+
return invokeTrpcLeaf(api, capProp, method, kind, merged, push);
|
|
25943
25974
|
}
|
|
25944
25975
|
/**
|
|
25945
25976
|
* Device-scoped cap dispatch. Looks up the binding entry for `capName`
|
|
@@ -27252,9 +27283,10 @@ var SystemMirror = class {
|
|
|
27252
27283
|
for (let i = 0; i < targets.length; i += parallelism) {
|
|
27253
27284
|
const chunk = targets.slice(i, i + parallelism);
|
|
27254
27285
|
const settled = await Promise.allSettled(chunk.map(async (proxy) => {
|
|
27255
|
-
const cap = proxy
|
|
27256
|
-
|
|
27257
|
-
|
|
27286
|
+
const cap = Reflect.get(proxy, capName);
|
|
27287
|
+
const method = typeof cap === "object" && cap !== null ? Reflect.get(cap, methodName) : void 0;
|
|
27288
|
+
if (typeof method !== "function") throw new Error(`device '${proxy.deviceId}' does not expose '${capName}.${methodName}'`);
|
|
27289
|
+
return await Reflect.apply(method, cap, [args]);
|
|
27258
27290
|
}));
|
|
27259
27291
|
for (let j = 0; j < settled.length; j++) {
|
|
27260
27292
|
const proxy = chunk[j];
|
|
@@ -27489,21 +27521,8 @@ function matchesString(haystack, match) {
|
|
|
27489
27521
|
* dropping the reference.
|
|
27490
27522
|
*/
|
|
27491
27523
|
function createSystemProxy(api) {
|
|
27492
|
-
const typedApi = api;
|
|
27493
|
-
/**
|
|
27494
|
-
* Invoke `api.<capProp>.<method>.{query|mutate|subscribe}(input)`.
|
|
27495
|
-
* Returns `any` so the caller-side per-method declaration assigns
|
|
27496
|
-
* cleanly into the strongly-typed `Pick<InferProvider<...>, ...>`
|
|
27497
|
-
* shape on the `SystemProxy` interface — the proxy's contract is
|
|
27498
|
-
* enforced by the interface, not the dispatch helper.
|
|
27499
|
-
*/
|
|
27500
27524
|
function dispatch(capProp, method, kind, input, push) {
|
|
27501
|
-
|
|
27502
|
-
if (!leaf) throw new Error(`SystemProxy: api has no '${capProp}.${method}'`);
|
|
27503
|
-
const fn = leaf;
|
|
27504
|
-
if (kind === "mutation") return fn.mutate(input);
|
|
27505
|
-
if (kind === "subscription") return fn.subscribe(input, push);
|
|
27506
|
-
return fn.query(input);
|
|
27525
|
+
return invokeTrpcLeaf(api, capProp, method, kind, input, push);
|
|
27507
27526
|
}
|
|
27508
27527
|
return {
|
|
27509
27528
|
addonPages: { listPages: (input) => dispatch("addonPages", "listPages", "query", input) },
|
|
@@ -28076,6 +28095,12 @@ function createSystemProxy(api) {
|
|
|
28076
28095
|
assignPlates: (input) => dispatch("plateGallery", "assignPlates", "mutation", input),
|
|
28077
28096
|
unassignPlates: (input) => dispatch("plateGallery", "unassignPlates", "mutation", input)
|
|
28078
28097
|
},
|
|
28098
|
+
recordEntries: {
|
|
28099
|
+
listEntryKinds: (input) => dispatch("recordEntries", "listEntryKinds", "query", input),
|
|
28100
|
+
listEntries: (input) => dispatch("recordEntries", "listEntries", "query", input),
|
|
28101
|
+
putEntry: (input) => dispatch("recordEntries", "putEntry", "mutation", input),
|
|
28102
|
+
deleteEntry: (input) => dispatch("recordEntries", "deleteEntry", "mutation", input)
|
|
28103
|
+
},
|
|
28079
28104
|
recordingArchive: {
|
|
28080
28105
|
getAvailabilityBatch: (input) => dispatch("recordingArchive", "getAvailabilityBatch", "query", input),
|
|
28081
28106
|
getDaysWithRecordingsBatch: (input) => dispatch("recordingArchive", "getDaysWithRecordingsBatch", "query", input),
|
package/dist/client.mjs
CHANGED
|
@@ -25894,6 +25894,50 @@ function isSource(x) {
|
|
|
25894
25894
|
return typeof x.read === "function" && typeof x.watch === "function";
|
|
25895
25895
|
}
|
|
25896
25896
|
//#endregion
|
|
25897
|
+
//#region src/helpers/addon-slice-handle.ts
|
|
25898
|
+
/** Structural bridge: every `AddonApi` client carries `deviceState` (+ optional `live`). */
|
|
25899
|
+
function addonSliceHandleApi(api) {
|
|
25900
|
+
return api;
|
|
25901
|
+
}
|
|
25902
|
+
//#endregion
|
|
25903
|
+
//#region src/helpers/trpc-leaf.ts
|
|
25904
|
+
function isTrpcProcedureLeaf(value) {
|
|
25905
|
+
if (typeof value !== "object" || value === null) return false;
|
|
25906
|
+
const record = value;
|
|
25907
|
+
return (typeof record.query === "function" || typeof record.mutate === "function" || typeof record.subscribe === "function") && !Array.isArray(value);
|
|
25908
|
+
}
|
|
25909
|
+
function readCapRecord(api, capProp) {
|
|
25910
|
+
const cap = Reflect.get(api, capProp);
|
|
25911
|
+
if (typeof cap !== "object" || cap === null || Array.isArray(cap)) return void 0;
|
|
25912
|
+
return cap;
|
|
25913
|
+
}
|
|
25914
|
+
function readTrpcLeaf(api, capProp, method) {
|
|
25915
|
+
const capRecord = readCapRecord(api, capProp);
|
|
25916
|
+
if (!capRecord) throw new Error(`tRPC client has no router '${capProp}'`);
|
|
25917
|
+
const leaf = capRecord[method];
|
|
25918
|
+
if (!isTrpcProcedureLeaf(leaf)) throw new Error(`tRPC client has no '${capProp}.${method}'`);
|
|
25919
|
+
return leaf;
|
|
25920
|
+
}
|
|
25921
|
+
/**
|
|
25922
|
+
* Invoke `api.<capProp>.<method>.{query|mutate|subscribe}(input)`.
|
|
25923
|
+
* `Result` is the generated proxy method's return. The leaf itself is only
|
|
25924
|
+
* `unknown` (the client is a structural bag), so the assertion is the one
|
|
25925
|
+
* boundary between that bag and the typed proxy.
|
|
25926
|
+
*/
|
|
25927
|
+
function invokeTrpcLeaf(api, capProp, method, kind, input, push) {
|
|
25928
|
+
const fn = readTrpcLeaf(api, capProp, method);
|
|
25929
|
+
if (kind === "mutation") {
|
|
25930
|
+
if (typeof fn.mutate !== "function") throw new Error(`tRPC '${capProp}.${method}' has no mutate()`);
|
|
25931
|
+
return fn.mutate(input);
|
|
25932
|
+
}
|
|
25933
|
+
if (kind === "subscription") {
|
|
25934
|
+
if (typeof fn.subscribe !== "function") throw new Error(`tRPC '${capProp}.${method}' has no subscribe()`);
|
|
25935
|
+
return fn.subscribe(input, push);
|
|
25936
|
+
}
|
|
25937
|
+
if (typeof fn.query !== "function") throw new Error(`tRPC '${capProp}.${method}' has no query()`);
|
|
25938
|
+
return fn.query(input);
|
|
25939
|
+
}
|
|
25940
|
+
//#endregion
|
|
25897
25941
|
//#region src/generated/device-proxy.ts
|
|
25898
25942
|
/**
|
|
25899
25943
|
* Build a DeviceProxy that pre-binds deviceId + nodeId on every method call
|
|
@@ -25911,8 +25955,7 @@ function isSource(x) {
|
|
|
25911
25955
|
* field on the returned object.
|
|
25912
25956
|
*/
|
|
25913
25957
|
function createDeviceProxy(api, binding, opts) {
|
|
25914
|
-
const
|
|
25915
|
-
const stateSource = opts?.stateSource ?? createLazyTrpcSource(api);
|
|
25958
|
+
const stateSource = opts?.stateSource ?? createLazyTrpcSource(addonSliceHandleApi(api));
|
|
25916
25959
|
/** Merge `{deviceId, nodeId?}` into the caller-supplied input. */
|
|
25917
25960
|
function mergeInput(input, nodeId) {
|
|
25918
25961
|
const base = typeof input === "object" && input !== null ? input : {};
|
|
@@ -25925,20 +25968,8 @@ function createDeviceProxy(api, binding, opts) {
|
|
|
25925
25968
|
deviceId: binding.deviceId
|
|
25926
25969
|
};
|
|
25927
25970
|
}
|
|
25928
|
-
/**
|
|
25929
|
-
* Invoke `api.<capProp>.<method>.{query|mutate|subscribe}(merged)`.
|
|
25930
|
-
* Returns `any` so the caller-side per-method declaration assigns
|
|
25931
|
-
* cleanly into the strongly-typed `InferDeviceProxyCap<...>` shape on
|
|
25932
|
-
* the `DeviceProxy` interface — the proxy's contract is enforced by
|
|
25933
|
-
* the interface, not the dispatch helper.
|
|
25934
|
-
*/
|
|
25935
25971
|
function callLeaf(capProp, method, kind, merged, push) {
|
|
25936
|
-
|
|
25937
|
-
if (!leaf) throw new Error(`DeviceProxy: api has no '${capProp}.${method}'`);
|
|
25938
|
-
const fn = leaf;
|
|
25939
|
-
if (kind === "mutation") return fn.mutate(merged);
|
|
25940
|
-
if (kind === "subscription") return fn.subscribe(merged, push);
|
|
25941
|
-
return fn.query(merged);
|
|
25972
|
+
return invokeTrpcLeaf(api, capProp, method, kind, merged, push);
|
|
25942
25973
|
}
|
|
25943
25974
|
/**
|
|
25944
25975
|
* Device-scoped cap dispatch. Looks up the binding entry for `capName`
|
|
@@ -27251,9 +27282,10 @@ var SystemMirror = class {
|
|
|
27251
27282
|
for (let i = 0; i < targets.length; i += parallelism) {
|
|
27252
27283
|
const chunk = targets.slice(i, i + parallelism);
|
|
27253
27284
|
const settled = await Promise.allSettled(chunk.map(async (proxy) => {
|
|
27254
|
-
const cap = proxy
|
|
27255
|
-
|
|
27256
|
-
|
|
27285
|
+
const cap = Reflect.get(proxy, capName);
|
|
27286
|
+
const method = typeof cap === "object" && cap !== null ? Reflect.get(cap, methodName) : void 0;
|
|
27287
|
+
if (typeof method !== "function") throw new Error(`device '${proxy.deviceId}' does not expose '${capName}.${methodName}'`);
|
|
27288
|
+
return await Reflect.apply(method, cap, [args]);
|
|
27257
27289
|
}));
|
|
27258
27290
|
for (let j = 0; j < settled.length; j++) {
|
|
27259
27291
|
const proxy = chunk[j];
|
|
@@ -27488,21 +27520,8 @@ function matchesString(haystack, match) {
|
|
|
27488
27520
|
* dropping the reference.
|
|
27489
27521
|
*/
|
|
27490
27522
|
function createSystemProxy(api) {
|
|
27491
|
-
const typedApi = api;
|
|
27492
|
-
/**
|
|
27493
|
-
* Invoke `api.<capProp>.<method>.{query|mutate|subscribe}(input)`.
|
|
27494
|
-
* Returns `any` so the caller-side per-method declaration assigns
|
|
27495
|
-
* cleanly into the strongly-typed `Pick<InferProvider<...>, ...>`
|
|
27496
|
-
* shape on the `SystemProxy` interface — the proxy's contract is
|
|
27497
|
-
* enforced by the interface, not the dispatch helper.
|
|
27498
|
-
*/
|
|
27499
27523
|
function dispatch(capProp, method, kind, input, push) {
|
|
27500
|
-
|
|
27501
|
-
if (!leaf) throw new Error(`SystemProxy: api has no '${capProp}.${method}'`);
|
|
27502
|
-
const fn = leaf;
|
|
27503
|
-
if (kind === "mutation") return fn.mutate(input);
|
|
27504
|
-
if (kind === "subscription") return fn.subscribe(input, push);
|
|
27505
|
-
return fn.query(input);
|
|
27524
|
+
return invokeTrpcLeaf(api, capProp, method, kind, input, push);
|
|
27506
27525
|
}
|
|
27507
27526
|
return {
|
|
27508
27527
|
addonPages: { listPages: (input) => dispatch("addonPages", "listPages", "query", input) },
|
|
@@ -28075,6 +28094,12 @@ function createSystemProxy(api) {
|
|
|
28075
28094
|
assignPlates: (input) => dispatch("plateGallery", "assignPlates", "mutation", input),
|
|
28076
28095
|
unassignPlates: (input) => dispatch("plateGallery", "unassignPlates", "mutation", input)
|
|
28077
28096
|
},
|
|
28097
|
+
recordEntries: {
|
|
28098
|
+
listEntryKinds: (input) => dispatch("recordEntries", "listEntryKinds", "query", input),
|
|
28099
|
+
listEntries: (input) => dispatch("recordEntries", "listEntries", "query", input),
|
|
28100
|
+
putEntry: (input) => dispatch("recordEntries", "putEntry", "mutation", input),
|
|
28101
|
+
deleteEntry: (input) => dispatch("recordEntries", "deleteEntry", "mutation", input)
|
|
28102
|
+
},
|
|
28078
28103
|
recordingArchive: {
|
|
28079
28104
|
getAvailabilityBatch: (input) => dispatch("recordingArchive", "getAvailabilityBatch", "query", input),
|
|
28080
28105
|
getDaysWithRecordingsBatch: (input) => dispatch("recordingArchive", "getDaysWithRecordingsBatch", "query", input),
|
|
@@ -137,6 +137,8 @@ export interface DeviceContext {
|
|
|
137
137
|
* + persistInitialConfig + createContext + register` flow.
|
|
138
138
|
*/
|
|
139
139
|
export type DeviceConstructor<T extends IDevice = IDevice> = new (ctx: DeviceContext) => T;
|
|
140
|
+
/** Map entry helper — concrete camera/hub classes widen to `DeviceConstructor<IDevice>`. */
|
|
141
|
+
export declare function widenDeviceConstructor<T extends IDevice>(ctor: DeviceConstructor<T>): DeviceConstructor<IDevice>;
|
|
140
142
|
export interface DeviceManagerApi {
|
|
141
143
|
/**
|
|
142
144
|
* Create, register, and persist a device in one call.
|
|
@@ -35,14 +35,14 @@
|
|
|
35
35
|
* request schema on purpose (see `egressTransportFromRequest`): a plane is a
|
|
36
36
|
* live object, so an off-node caller could not use one anyway.
|
|
37
37
|
*/
|
|
38
|
-
import type { spawn as nodeSpawn } from 'node:child_process';
|
|
39
38
|
import type { IScopedLogger } from '../interfaces/logging.js';
|
|
40
39
|
import type { FfmpegInvocation } from './invocation.js';
|
|
40
|
+
import type { FfmpegSpawnFn } from './process.js';
|
|
41
41
|
import type { Fmp4FragmentPlane } from './fmp4-fragment-plane.js';
|
|
42
42
|
export interface Fmp4FragmentChildDeps {
|
|
43
43
|
readonly logger: IScopedLogger;
|
|
44
44
|
readonly ffmpegBinaryPath: string;
|
|
45
|
-
readonly spawnFn:
|
|
45
|
+
readonly spawnFn: FfmpegSpawnFn;
|
|
46
46
|
/** How long the child may produce no UNIT before it is declared dead. */
|
|
47
47
|
readonly firstUnitTimeoutMs?: number;
|
|
48
48
|
/** The child exited, or its output stopped parsing, AFTER it went live. */
|
package/dist/ffmpeg/process.d.ts
CHANGED
|
@@ -32,6 +32,27 @@
|
|
|
32
32
|
*/
|
|
33
33
|
import { spawn, type ChildProcess, type SpawnOptions } from 'node:child_process';
|
|
34
34
|
import type { IScopedLogger } from '../interfaces/logging.js';
|
|
35
|
+
/** Subset of {@link ChildProcess} every live-media ffmpeg site reads. */
|
|
36
|
+
export interface SpawnedFfmpegProcess {
|
|
37
|
+
readonly pid?: number;
|
|
38
|
+
readonly killed?: boolean;
|
|
39
|
+
readonly exitCode?: number | null;
|
|
40
|
+
readonly signalCode?: NodeJS.Signals | null;
|
|
41
|
+
readonly stdin?: {
|
|
42
|
+
on(event: string, listener: () => void): void;
|
|
43
|
+
end(): void;
|
|
44
|
+
} | null;
|
|
45
|
+
readonly stdout: NodeJS.ReadableStream | null;
|
|
46
|
+
readonly stderr: NodeJS.ReadableStream | null;
|
|
47
|
+
on(event: 'exit', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
|
48
|
+
on(event: 'error', listener: (err: Error) => void): this;
|
|
49
|
+
once(event: 'exit', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
|
50
|
+
once(event: 'error', listener: (err: Error) => void): this;
|
|
51
|
+
kill(signal?: NodeJS.Signals): boolean;
|
|
52
|
+
}
|
|
53
|
+
/** Injectable ffmpeg spawn — the three-arg shape live-media sites use. */
|
|
54
|
+
export type FfmpegSpawnFn = (command: string, args: readonly string[], options?: SpawnOptions) => SpawnedFfmpegProcess;
|
|
55
|
+
export declare function defaultFfmpegSpawn(command: string, args: readonly string[], options?: SpawnOptions): SpawnedFfmpegProcess;
|
|
35
56
|
/** How a child ended. */
|
|
36
57
|
export type FfmpegExitClass =
|
|
37
58
|
/** Exited 0. */
|
|
@@ -105,11 +105,13 @@ import type { privacyMaskCapability } from '../capabilities/privacy-mask.cap.js'
|
|
|
105
105
|
import type { ptzAutotrackCapability } from '../capabilities/ptz-autotrack.cap.js';
|
|
106
106
|
import type { ptzCapability } from '../capabilities/ptz.cap.js';
|
|
107
107
|
import type { rebootCapability } from '../capabilities/reboot.cap.js';
|
|
108
|
+
import type { recordEntriesCapability } from '../capabilities/record-entries.cap.js';
|
|
108
109
|
import type { recordingArchiveCapability } from '../capabilities/recording-archive.cap.js';
|
|
109
110
|
import type { recordingExportCapability } from '../capabilities/recording-export.cap.js';
|
|
110
111
|
import type { recordingOnboardCapability } from '../capabilities/recording-onboard.cap.js';
|
|
111
112
|
import type { recordingSignalCapability } from '../capabilities/recording-signal.cap.js';
|
|
112
113
|
import type { recordingCapability } from '../capabilities/recording.cap.js';
|
|
114
|
+
import type { recordsCapability } from '../capabilities/records.cap.js';
|
|
113
115
|
import type { sceneMonitorCapability } from '../capabilities/scene-monitor.cap.js';
|
|
114
116
|
import type { scriptRunnerCapability } from '../capabilities/script-runner.cap.js';
|
|
115
117
|
import type { serverManagementCapability } from '../capabilities/server-management.cap.js';
|
|
@@ -7880,6 +7882,41 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
7880
7882
|
meta: object;
|
|
7881
7883
|
}>;
|
|
7882
7884
|
}>>;
|
|
7885
|
+
recordEntries: TRPCBuiltRouter<{
|
|
7886
|
+
ctx: TrpcContext;
|
|
7887
|
+
meta: object;
|
|
7888
|
+
errorShape: AugmentedErrorShape;
|
|
7889
|
+
transformer: true;
|
|
7890
|
+
}, TRPCDecorateCreateRouterOptions<{
|
|
7891
|
+
listEntryKinds: TRPCQueryProcedure<{
|
|
7892
|
+
input: {
|
|
7893
|
+
[x: string]: unknown;
|
|
7894
|
+
} & z.input<typeof recordEntriesCapability.methods.listEntryKinds.input>;
|
|
7895
|
+
output: z.infer<typeof recordEntriesCapability.methods.listEntryKinds.output>;
|
|
7896
|
+
meta: object;
|
|
7897
|
+
}>;
|
|
7898
|
+
listEntries: TRPCQueryProcedure<{
|
|
7899
|
+
input: {
|
|
7900
|
+
[x: string]: unknown;
|
|
7901
|
+
} & z.input<typeof recordEntriesCapability.methods.listEntries.input>;
|
|
7902
|
+
output: z.infer<typeof recordEntriesCapability.methods.listEntries.output>;
|
|
7903
|
+
meta: object;
|
|
7904
|
+
}>;
|
|
7905
|
+
putEntry: TRPCMutationProcedure<{
|
|
7906
|
+
input: {
|
|
7907
|
+
[x: string]: unknown;
|
|
7908
|
+
} & z.input<typeof recordEntriesCapability.methods.putEntry.input>;
|
|
7909
|
+
output: z.infer<typeof recordEntriesCapability.methods.putEntry.output>;
|
|
7910
|
+
meta: object;
|
|
7911
|
+
}>;
|
|
7912
|
+
deleteEntry: TRPCMutationProcedure<{
|
|
7913
|
+
input: {
|
|
7914
|
+
[x: string]: unknown;
|
|
7915
|
+
} & z.input<typeof recordEntriesCapability.methods.deleteEntry.input>;
|
|
7916
|
+
output: z.infer<typeof recordEntriesCapability.methods.deleteEntry.output>;
|
|
7917
|
+
meta: object;
|
|
7918
|
+
}>;
|
|
7919
|
+
}>>;
|
|
7883
7920
|
recording: TRPCBuiltRouter<{
|
|
7884
7921
|
ctx: TrpcContext;
|
|
7885
7922
|
meta: object;
|
|
@@ -8265,6 +8302,125 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
8265
8302
|
meta: object;
|
|
8266
8303
|
}>;
|
|
8267
8304
|
}>>;
|
|
8305
|
+
records: TRPCBuiltRouter<{
|
|
8306
|
+
ctx: TrpcContext;
|
|
8307
|
+
meta: object;
|
|
8308
|
+
errorShape: AugmentedErrorShape;
|
|
8309
|
+
transformer: true;
|
|
8310
|
+
}, TRPCDecorateCreateRouterOptions<{
|
|
8311
|
+
declareKinds: TRPCMutationProcedure<{
|
|
8312
|
+
input: {
|
|
8313
|
+
[x: string]: unknown;
|
|
8314
|
+
} & z.input<typeof recordsCapability.methods.declareKinds.input>;
|
|
8315
|
+
output: z.infer<typeof recordsCapability.methods.declareKinds.output>;
|
|
8316
|
+
meta: object;
|
|
8317
|
+
}>;
|
|
8318
|
+
get: TRPCQueryProcedure<{
|
|
8319
|
+
input: {
|
|
8320
|
+
[x: string]: unknown;
|
|
8321
|
+
} & z.input<typeof recordsCapability.methods.get.input>;
|
|
8322
|
+
output: z.infer<typeof recordsCapability.methods.get.output>;
|
|
8323
|
+
meta: object;
|
|
8324
|
+
}>;
|
|
8325
|
+
getMany: TRPCQueryProcedure<{
|
|
8326
|
+
input: {
|
|
8327
|
+
[x: string]: unknown;
|
|
8328
|
+
} & z.input<typeof recordsCapability.methods.getMany.input>;
|
|
8329
|
+
output: z.infer<typeof recordsCapability.methods.getMany.output>;
|
|
8330
|
+
meta: object;
|
|
8331
|
+
}>;
|
|
8332
|
+
secretRefs: TRPCQueryProcedure<{
|
|
8333
|
+
input: {
|
|
8334
|
+
[x: string]: unknown;
|
|
8335
|
+
} & z.input<typeof recordsCapability.methods.secretRefs.input>;
|
|
8336
|
+
output: z.infer<typeof recordsCapability.methods.secretRefs.output>;
|
|
8337
|
+
meta: object;
|
|
8338
|
+
}>;
|
|
8339
|
+
put: TRPCMutationProcedure<{
|
|
8340
|
+
input: {
|
|
8341
|
+
[x: string]: unknown;
|
|
8342
|
+
} & z.input<typeof recordsCapability.methods.put.input>;
|
|
8343
|
+
output: z.infer<typeof recordsCapability.methods.put.output>;
|
|
8344
|
+
meta: object;
|
|
8345
|
+
}>;
|
|
8346
|
+
putMany: TRPCMutationProcedure<{
|
|
8347
|
+
input: {
|
|
8348
|
+
[x: string]: unknown;
|
|
8349
|
+
} & z.input<typeof recordsCapability.methods.putMany.input>;
|
|
8350
|
+
output: z.infer<typeof recordsCapability.methods.putMany.output>;
|
|
8351
|
+
meta: object;
|
|
8352
|
+
}>;
|
|
8353
|
+
patch: TRPCMutationProcedure<{
|
|
8354
|
+
input: {
|
|
8355
|
+
[x: string]: unknown;
|
|
8356
|
+
} & z.input<typeof recordsCapability.methods.patch.input>;
|
|
8357
|
+
output: z.infer<typeof recordsCapability.methods.patch.output>;
|
|
8358
|
+
meta: object;
|
|
8359
|
+
}>;
|
|
8360
|
+
delete: TRPCMutationProcedure<{
|
|
8361
|
+
input: {
|
|
8362
|
+
[x: string]: unknown;
|
|
8363
|
+
} & z.input<typeof recordsCapability.methods.delete.input>;
|
|
8364
|
+
output: z.infer<typeof recordsCapability.methods.delete.output>;
|
|
8365
|
+
meta: object;
|
|
8366
|
+
}>;
|
|
8367
|
+
deleteMany: TRPCMutationProcedure<{
|
|
8368
|
+
input: {
|
|
8369
|
+
[x: string]: unknown;
|
|
8370
|
+
} & z.input<typeof recordsCapability.methods.deleteMany.input>;
|
|
8371
|
+
output: z.infer<typeof recordsCapability.methods.deleteMany.output>;
|
|
8372
|
+
meta: object;
|
|
8373
|
+
}>;
|
|
8374
|
+
query: TRPCQueryProcedure<{
|
|
8375
|
+
input: {
|
|
8376
|
+
[x: string]: unknown;
|
|
8377
|
+
} & z.input<typeof recordsCapability.methods.query.input>;
|
|
8378
|
+
output: z.infer<typeof recordsCapability.methods.query.output>;
|
|
8379
|
+
meta: object;
|
|
8380
|
+
}>;
|
|
8381
|
+
count: TRPCQueryProcedure<{
|
|
8382
|
+
input: {
|
|
8383
|
+
[x: string]: unknown;
|
|
8384
|
+
} & z.input<typeof recordsCapability.methods.count.input>;
|
|
8385
|
+
output: z.infer<typeof recordsCapability.methods.count.output>;
|
|
8386
|
+
meta: object;
|
|
8387
|
+
}>;
|
|
8388
|
+
histogram: TRPCQueryProcedure<{
|
|
8389
|
+
input: {
|
|
8390
|
+
[x: string]: unknown;
|
|
8391
|
+
} & z.input<typeof recordsCapability.methods.histogram.input>;
|
|
8392
|
+
output: z.infer<typeof recordsCapability.methods.histogram.output>;
|
|
8393
|
+
meta: object;
|
|
8394
|
+
}>;
|
|
8395
|
+
aggregate: TRPCQueryProcedure<{
|
|
8396
|
+
input: {
|
|
8397
|
+
[x: string]: unknown;
|
|
8398
|
+
} & z.input<typeof recordsCapability.methods.aggregate.input>;
|
|
8399
|
+
output: z.infer<typeof recordsCapability.methods.aggregate.output>;
|
|
8400
|
+
meta: object;
|
|
8401
|
+
}>;
|
|
8402
|
+
deleteWhere: TRPCMutationProcedure<{
|
|
8403
|
+
input: {
|
|
8404
|
+
[x: string]: unknown;
|
|
8405
|
+
} & z.input<typeof recordsCapability.methods.deleteWhere.input>;
|
|
8406
|
+
output: z.infer<typeof recordsCapability.methods.deleteWhere.output>;
|
|
8407
|
+
meta: object;
|
|
8408
|
+
}>;
|
|
8409
|
+
deleteDevice: TRPCMutationProcedure<{
|
|
8410
|
+
input: {
|
|
8411
|
+
[x: string]: unknown;
|
|
8412
|
+
} & z.input<typeof recordsCapability.methods.deleteDevice.input>;
|
|
8413
|
+
output: z.infer<typeof recordsCapability.methods.deleteDevice.output>;
|
|
8414
|
+
meta: object;
|
|
8415
|
+
}>;
|
|
8416
|
+
allocateId: TRPCMutationProcedure<{
|
|
8417
|
+
input: {
|
|
8418
|
+
[x: string]: unknown;
|
|
8419
|
+
} & z.input<typeof recordsCapability.methods.allocateId.input>;
|
|
8420
|
+
output: z.infer<typeof recordsCapability.methods.allocateId.output>;
|
|
8421
|
+
meta: object;
|
|
8422
|
+
}>;
|
|
8423
|
+
}>>;
|
|
8268
8424
|
sceneMonitor: TRPCBuiltRouter<{
|
|
8269
8425
|
ctx: TrpcContext;
|
|
8270
8426
|
meta: object;
|
|
@@ -8854,6 +9010,41 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
8854
9010
|
output: z.infer<typeof storageAdminCapability.methods.dropCollection.output>;
|
|
8855
9011
|
meta: object;
|
|
8856
9012
|
}>;
|
|
9013
|
+
listKinds: TRPCQueryProcedure<{
|
|
9014
|
+
input: {
|
|
9015
|
+
[x: string]: unknown;
|
|
9016
|
+
} & z.input<typeof storageAdminCapability.methods.listKinds.input>;
|
|
9017
|
+
output: z.infer<typeof storageAdminCapability.methods.listKinds.output>;
|
|
9018
|
+
meta: object;
|
|
9019
|
+
}>;
|
|
9020
|
+
readRecords: TRPCQueryProcedure<{
|
|
9021
|
+
input: {
|
|
9022
|
+
[x: string]: unknown;
|
|
9023
|
+
} & z.input<typeof storageAdminCapability.methods.readRecords.input>;
|
|
9024
|
+
output: z.infer<typeof storageAdminCapability.methods.readRecords.output>;
|
|
9025
|
+
meta: object;
|
|
9026
|
+
}>;
|
|
9027
|
+
adoptRecords: TRPCMutationProcedure<{
|
|
9028
|
+
input: {
|
|
9029
|
+
[x: string]: unknown;
|
|
9030
|
+
} & z.input<typeof storageAdminCapability.methods.adoptRecords.input>;
|
|
9031
|
+
output: z.infer<typeof storageAdminCapability.methods.adoptRecords.output>;
|
|
9032
|
+
meta: object;
|
|
9033
|
+
}>;
|
|
9034
|
+
readLegacyCollection: TRPCQueryProcedure<{
|
|
9035
|
+
input: {
|
|
9036
|
+
[x: string]: unknown;
|
|
9037
|
+
} & z.input<typeof storageAdminCapability.methods.readLegacyCollection.input>;
|
|
9038
|
+
output: z.infer<typeof storageAdminCapability.methods.readLegacyCollection.output>;
|
|
9039
|
+
meta: object;
|
|
9040
|
+
}>;
|
|
9041
|
+
isAdoptedLegacyTable: TRPCQueryProcedure<{
|
|
9042
|
+
input: {
|
|
9043
|
+
[x: string]: unknown;
|
|
9044
|
+
} & z.input<typeof storageAdminCapability.methods.isAdoptedLegacyTable.input>;
|
|
9045
|
+
output: z.infer<typeof storageAdminCapability.methods.isAdoptedLegacyTable.output>;
|
|
9046
|
+
meta: object;
|
|
9047
|
+
}>;
|
|
8857
9048
|
}>>;
|
|
8858
9049
|
storageEvictable: TRPCBuiltRouter<{
|
|
8859
9050
|
ctx: TrpcContext;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* Plain data, zero Zod: a forked runner must not import the schema barrel
|
|
12
12
|
* (~144MB RSS per runner — D28).
|
|
13
13
|
*
|
|
14
|
-
* Coverage:
|
|
14
|
+
* Coverage: 29 caps, 71 methods with defaults.
|
|
15
15
|
*/
|
|
16
16
|
export declare const CAP_INPUT_DEFAULTS: Readonly<Record<string, Readonly<Record<string, Readonly<Record<string, unknown>>>>>>;
|
|
17
17
|
/**
|
|
@@ -126,11 +126,13 @@ export { privacyMaskCapability } from '../capabilities/privacy-mask.cap.js';
|
|
|
126
126
|
export { ptzCapability } from '../capabilities/ptz.cap.js';
|
|
127
127
|
export { ptzAutotrackCapability } from '../capabilities/ptz-autotrack.cap.js';
|
|
128
128
|
export { rebootCapability } from '../capabilities/reboot.cap.js';
|
|
129
|
+
export { recordEntriesCapability } from '../capabilities/record-entries.cap.js';
|
|
129
130
|
export { recordingCapability } from '../capabilities/recording.cap.js';
|
|
130
131
|
export { recordingArchiveCapability } from '../capabilities/recording-archive.cap.js';
|
|
131
132
|
export { recordingExportCapability } from '../capabilities/recording-export.cap.js';
|
|
132
133
|
export { recordingOnboardCapability } from '../capabilities/recording-onboard.cap.js';
|
|
133
134
|
export { recordingSignalCapability } from '../capabilities/recording-signal.cap.js';
|
|
135
|
+
export { recordsCapability } from '../capabilities/records.cap.js';
|
|
134
136
|
export { sceneMonitorCapability } from '../capabilities/scene-monitor.cap.js';
|
|
135
137
|
export { scriptRunnerCapability } from '../capabilities/script-runner.cap.js';
|
|
136
138
|
export { serverManagementCapability } from '../capabilities/server-management.cap.js';
|
|
@@ -302,11 +304,13 @@ export declare const CAPABILITY_NAMES: {
|
|
|
302
304
|
readonly ptz: 'ptz';
|
|
303
305
|
readonly ptzAutotrack: 'ptz-autotrack';
|
|
304
306
|
readonly reboot: 'reboot';
|
|
307
|
+
readonly recordEntries: 'record-entries';
|
|
305
308
|
readonly recording: 'recording';
|
|
306
309
|
readonly recordingArchive: 'recording-archive';
|
|
307
310
|
readonly recordingExport: 'recording-export';
|
|
308
311
|
readonly recordingOnboard: 'recording-onboard';
|
|
309
312
|
readonly recordingSignal: 'recording-signal';
|
|
313
|
+
readonly records: 'records';
|
|
310
314
|
readonly sceneMonitor: 'scene-monitor';
|
|
311
315
|
readonly scriptRunner: 'script-runner';
|
|
312
316
|
readonly serverManagement: 'server-management';
|
|
@@ -491,11 +495,13 @@ export interface CapabilityRouterMap<TRouter = unknown> {
|
|
|
491
495
|
readonly ptz: TRouter;
|
|
492
496
|
readonly ptzAutotrack: TRouter;
|
|
493
497
|
readonly reboot: TRouter;
|
|
498
|
+
readonly recordEntries: TRouter;
|
|
494
499
|
readonly recording: TRouter;
|
|
495
500
|
readonly recordingArchive: TRouter;
|
|
496
501
|
readonly recordingExport: TRouter;
|
|
497
502
|
readonly recordingOnboard: TRouter;
|
|
498
503
|
readonly recordingSignal: TRouter;
|
|
504
|
+
readonly records: TRouter;
|
|
499
505
|
readonly sceneMonitor: TRouter;
|
|
500
506
|
readonly scriptRunner: TRouter;
|
|
501
507
|
readonly serverManagement: TRouter;
|
|
@@ -539,8 +545,8 @@ export interface CapabilityRouterMap<TRouter = unknown> {
|
|
|
539
545
|
readonly zoneRules: TRouter;
|
|
540
546
|
readonly zones: TRouter;
|
|
541
547
|
}
|
|
542
|
-
/** Capability names whose mode is `singleton` (
|
|
543
|
-
export declare const SINGLETON_CAPABILITY_NAMES: readonly ['accessories', 'addon-pages', 'addon-settings', 'addon-widgets', 'addons', 'admin-ui', 'air-quality-sensor', 'alarm-panel', 'alerts', 'ambient-light-sensor', 'audio-analysis', 'audio-analyzer', 'audio-codec', 'audio-metrics', 'automation-control', 'backup', 'battery', 'binary', 'brightness', 'button', 'calendars', 'camera-credentials', 'camera-grid-layout', 'camera-pipeline-config', 'camera-streams', 'carbon-monoxide', 'climate-control', 'color', 'composer', 'connectivity', 'consumables', 'contact', 'control', 'core-blocks', 'cover', 'database-snapshot', 'day-night', 'decoder', 'detection-pipeline', 'device-admin-link', 'device-adoption', 'device-credentials', 'device-discovery', 'device-history', 'device-manager', 'device-ops', 'device-state', 'device-status', 'doorbell', 'enum-sensor', 'event-emitter', 'face-gallery', 'fan-control', 'feature-probe', 'filesystem-browse', 'flood', 'gas', 'humidifier', 'humidity-sensor', 'image', 'image-settings', 'integrations', 'intercom', 'keychain', 'keychain-admin', 'lawn-mower-control', 'llm-runtime', 'local-network', 'lock-control', 'media-player', 'metrics-provider', 'model-convert', 'model-distributor', 'motion', 'motion-detection', 'motion-trigger', 'motion-zones', 'native-object-detection', 'navigation', 'network-link', 'network-quality', 'node-certificates', 'nodes', 'notification-rules', 'notifier', 'numeric-sensor', 'oidc-connections', 'osd', 'osd-manager', 'pet-feeder', 'pipeline-analytics', 'pipeline-executor', 'pipeline-orchestrator', 'pipeline-runner', 'plate-gallery', 'platform-probe', 'power-meter', 'presence', 'pressure-sensor', 'privacy-mask', 'ptz', 'ptz-autotrack', 'reboot', 'recording-archive', 'recording-export', 'recording-onboard', 'recording-signal', 'scene-monitor', 'script-runner', 'server-management', 'settings-store', 'smoke', 'snapshot', 'sso-bridge', 'storage', 'storage-admin', 'storage-migration', 'stream-broker', 'stream-catalog', 'stream-params', 'stream-signals', 'switch', 'system', 'tamper', 'temperature-sensor', 'terminal-session', 'toast', 'training', 'update', 'user-management', 'vacuum-control', 'valve', 'vector-store', 'vibration', 'viewer-ui', 'water-heater', 'weather', 'webrtc-session', 'zone-analytics', 'zone-rules', 'zones'];
|
|
548
|
+
/** Capability names whose mode is `singleton` (143 caps). */
|
|
549
|
+
export declare const SINGLETON_CAPABILITY_NAMES: readonly ['accessories', 'addon-pages', 'addon-settings', 'addon-widgets', 'addons', 'admin-ui', 'air-quality-sensor', 'alarm-panel', 'alerts', 'ambient-light-sensor', 'audio-analysis', 'audio-analyzer', 'audio-codec', 'audio-metrics', 'automation-control', 'backup', 'battery', 'binary', 'brightness', 'button', 'calendars', 'camera-credentials', 'camera-grid-layout', 'camera-pipeline-config', 'camera-streams', 'carbon-monoxide', 'climate-control', 'color', 'composer', 'connectivity', 'consumables', 'contact', 'control', 'core-blocks', 'cover', 'database-snapshot', 'day-night', 'decoder', 'detection-pipeline', 'device-admin-link', 'device-adoption', 'device-credentials', 'device-discovery', 'device-history', 'device-manager', 'device-ops', 'device-state', 'device-status', 'doorbell', 'enum-sensor', 'event-emitter', 'face-gallery', 'fan-control', 'feature-probe', 'filesystem-browse', 'flood', 'gas', 'humidifier', 'humidity-sensor', 'image', 'image-settings', 'integrations', 'intercom', 'keychain', 'keychain-admin', 'lawn-mower-control', 'llm-runtime', 'local-network', 'lock-control', 'media-player', 'metrics-provider', 'model-convert', 'model-distributor', 'motion', 'motion-detection', 'motion-trigger', 'motion-zones', 'native-object-detection', 'navigation', 'network-link', 'network-quality', 'node-certificates', 'nodes', 'notification-rules', 'notifier', 'numeric-sensor', 'oidc-connections', 'osd', 'osd-manager', 'pet-feeder', 'pipeline-analytics', 'pipeline-executor', 'pipeline-orchestrator', 'pipeline-runner', 'plate-gallery', 'platform-probe', 'power-meter', 'presence', 'pressure-sensor', 'privacy-mask', 'ptz', 'ptz-autotrack', 'reboot', 'record-entries', 'recording-archive', 'recording-export', 'recording-onboard', 'recording-signal', 'records', 'scene-monitor', 'script-runner', 'server-management', 'settings-store', 'smoke', 'snapshot', 'sso-bridge', 'storage', 'storage-admin', 'storage-migration', 'stream-broker', 'stream-catalog', 'stream-params', 'stream-signals', 'switch', 'system', 'tamper', 'temperature-sensor', 'terminal-session', 'toast', 'training', 'update', 'user-management', 'vacuum-control', 'valve', 'vector-store', 'vibration', 'viewer-ui', 'water-heater', 'weather', 'webrtc-session', 'zone-analytics', 'zone-rules', 'zones'];
|
|
544
550
|
/** Union of singleton capability names (literal string union). */
|
|
545
551
|
export type SingletonCapabilityName = typeof SINGLETON_CAPABILITY_NAMES[number];
|
|
546
552
|
/** Capability names whose mode is `collection` (34 caps). */
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* scope+access check inside `protectedProcedure` (see
|
|
7
7
|
* `server/backend/src/api/trpc/trpc.middleware.ts`).
|
|
8
8
|
*
|
|
9
|
-
* Coverage:
|
|
9
|
+
* Coverage: 1369 method paths across 177 capabilities.
|
|
10
10
|
*/
|
|
11
11
|
import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
|
|
12
12
|
export interface MethodAccessRecord {
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* system-scope cap that takes a deviceId was previously never device-filtered
|
|
7
7
|
* — see the generator header).
|
|
8
8
|
*
|
|
9
|
-
* Coverage:
|
|
10
|
-
*
|
|
9
|
+
* Coverage: 534 methods carry a device reference, of which
|
|
10
|
+
* 179 are on SYSTEM-scope caps.
|
|
11
11
|
*
|
|
12
12
|
* Top-level fields, number arrays, and one-level arrays of objects carrying
|
|
13
13
|
* a numeric device field (targets[].deviceId) are all mapped; the matcher
|