@camstack/system 1.2.276 → 1.2.277
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
- package/dist/builtins/alerts/alerts.addon.js +1 -1
- package/dist/builtins/alerts/alerts.addon.mjs +1 -1
- package/dist/builtins/autotrack/index.js +1 -1
- package/dist/builtins/autotrack/index.mjs +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
- package/dist/builtins/camera-grid/index.js +1 -1
- package/dist/builtins/camera-grid/index.mjs +1 -1
- package/dist/builtins/console-logging/index.js +1 -1
- package/dist/builtins/console-logging/index.mjs +1 -1
- package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
- package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
- package/dist/builtins/device-manager/device-bindings-store.d.ts +10 -0
- package/dist/builtins/device-manager/device-manager.addon.js +63 -118
- package/dist/builtins/device-manager/device-manager.addon.mjs +64 -116
- package/dist/builtins/device-manager/device-meta-types.d.ts +15 -27
- package/dist/builtins/device-manager/device-source-activation.d.ts +9 -43
- package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
- package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
- package/dist/builtins/hub-forwarder/index.js +1 -1
- package/dist/builtins/hub-forwarder/index.mjs +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
- package/dist/builtins/local-auth/local-auth.addon.js +1 -1
- package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
- package/dist/builtins/local-network/local-network.addon.js +1 -1
- package/dist/builtins/local-network/local-network.addon.mjs +1 -1
- package/dist/builtins/loki-logging/index.js +1 -1
- package/dist/builtins/loki-logging/index.mjs +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
- package/dist/builtins/platform-probe/index.js +1 -1
- package/dist/builtins/platform-probe/index.mjs +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
- package/dist/builtins/snapshot/index.js +1 -1
- package/dist/builtins/snapshot/index.mjs +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
- package/dist/builtins/system-config/system-config.addon.js +1 -1
- package/dist/builtins/system-config/system-config.addon.mjs +1 -1
- package/dist/builtins/winston-logging/index.js +1 -1
- package/dist/builtins/winston-logging/index.mjs +1 -1
- package/dist/{dist-D_OlSf31.js → dist-Bu8HN-KS.js} +36 -18
- package/dist/{dist-AHdiIdJH.mjs → dist-DOF9wnat.mjs} +36 -18
- package/dist/index.d.ts +1 -1
- package/dist/index.js +14 -67
- package/dist/index.mjs +16 -66
- package/dist/kernel/capability-registry.d.ts +12 -42
- package/dist/kernel/index.d.ts +0 -1
- package/dist/{retired-settings-keys-LwFyTKun.js → retired-settings-keys-BwE6S2eQ.js} +1 -1
- package/dist/{retired-settings-keys-Cp3oG_aH.mjs → retired-settings-keys-DXMfts8c.mjs} +1 -1
- package/package.json +1 -1
|
@@ -45,38 +45,26 @@ export type DriverConfigSchemaResult = {
|
|
|
45
45
|
};
|
|
46
46
|
/**
|
|
47
47
|
* One `(device, capability)` row of the persisted wrapper-activation store —
|
|
48
|
-
* the authority for every per-camera function switch (D62)
|
|
49
|
-
* for which SOURCES a camera's collection cap has.
|
|
48
|
+
* the authority for every per-camera function switch (D62).
|
|
50
49
|
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
50
|
+
* SINGLETON capabilities only. `wrapperAddonId` is the bound wrapper, or the
|
|
51
|
+
* explicit `null` "operator disabled" marker that stops `getBindings` step 2
|
|
52
|
+
* re-binding a `defaultActive` wrapper; absent means the operator never touched
|
|
53
|
+
* this cap on this device.
|
|
53
54
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* `
|
|
64
|
-
* One addon can serve several of a device's sources, so an addon-keyed entry
|
|
65
|
-
* could only ever mean "all of them" — which is exactly how a LEGACY entry is
|
|
66
|
-
* still read: {@link DeviceCapBinding.disabledSourceAddonIds} is never written
|
|
67
|
-
* any more and every id in it denies every source that addon serves for this
|
|
68
|
-
* device. One predicate, stated once, so an operator's existing decision does
|
|
69
|
-
* not silently stop applying (D555).
|
|
55
|
+
* **A COLLECTION capability has no row here, by design.** Its providers are a
|
|
56
|
+
* SET, and the set is DERIVED from who provides the cap
|
|
57
|
+
* (`device-bindings-store.ts` step 0) — *"tutti i providers funzionano sempre,
|
|
58
|
+
* non serve disattivarli/attivarli … loro vivono lì"* (operator, 2026-09-20).
|
|
59
|
+
* Nothing persists it, so nothing has to be back-filled onto a fleet and
|
|
60
|
+
* nothing goes stale when an addon is deployed to a camera later.
|
|
61
|
+
* `setWrapperActive` REFUSES a collection cap rather than writing a field the
|
|
62
|
+
* enumeration does not read — `disabledSourceIds` / `disabledSourceAddonIds`
|
|
63
|
+
* (D556, D555) were exactly that, and
|
|
64
|
+
* `scripts/check-device-selection-authority.ts` now makes it unrepresentable.
|
|
70
65
|
*/
|
|
71
66
|
export interface DeviceCapBinding {
|
|
72
67
|
readonly wrapperAddonId?: string | null;
|
|
73
|
-
/** SOURCE ids the operator switched off for this device. */
|
|
74
|
-
readonly disabledSourceIds?: readonly string[];
|
|
75
|
-
/**
|
|
76
|
-
* @deprecated Pre-re-key entries, keyed by ADDON id. Read, never written:
|
|
77
|
-
* an id here denies every source that addon serves for this device.
|
|
78
|
-
*/
|
|
79
|
-
readonly disabledSourceAddonIds?: readonly string[];
|
|
80
68
|
}
|
|
81
69
|
export interface DeviceBindingsStore {
|
|
82
70
|
readonly deviceBindings: Record<string, Record<string, DeviceCapBinding>>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { AddonContext, ICapabilityRegistry
|
|
2
|
-
import { DeviceBindingsStore } from './device-meta-types.js';
|
|
1
|
+
import { AddonContext, ICapabilityRegistry } from '@camstack/types';
|
|
3
2
|
import { WriteLock } from './write-lock.js';
|
|
4
3
|
/**
|
|
5
4
|
* What a wrapper-activation write needs, and nothing more.
|
|
@@ -20,51 +19,18 @@ export interface WrapperActivationInput {
|
|
|
20
19
|
readonly deviceId: number;
|
|
21
20
|
readonly capName: string;
|
|
22
21
|
readonly wrapperAddonId: string;
|
|
23
|
-
/**
|
|
24
|
-
* The SOURCE to toggle, for a collection cap. Absent keeps the cap-wide
|
|
25
|
-
* meaning D556 shipped — every source this addon serves for this device —
|
|
26
|
-
* which is also how a pre-re-key entry is read.
|
|
27
|
-
*/
|
|
28
|
-
readonly sourceId?: string;
|
|
29
22
|
readonly active: boolean;
|
|
30
23
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Is `source` denied for a device, given the persisted deny set?
|
|
33
|
-
*
|
|
34
|
-
* The ONE place the migration rule lives: an entry matches either the source's
|
|
35
|
-
* own id or the id of the addon that serves it. New writes are always source
|
|
36
|
-
* ids; an addon id can only be a pre-re-key entry, and it still means "every
|
|
37
|
-
* source this addon serves here".
|
|
38
|
-
*/
|
|
39
|
-
export declare function isSourceDenied(denied: readonly string[], source: {
|
|
40
|
-
readonly sourceId?: string;
|
|
41
|
-
readonly addonId: string;
|
|
42
|
-
}): boolean;
|
|
43
|
-
/**
|
|
44
|
-
* The deny list after one toggle. Pure, order-preserving, idempotent — a
|
|
45
|
-
* second "off" on an addon already off changes nothing.
|
|
46
|
-
*/
|
|
47
|
-
export declare function nextDisabledSources(current: readonly string[], key: string, active: boolean): readonly string[];
|
|
48
|
-
/**
|
|
49
|
-
* Replay the whole persisted store onto a fresh registry.
|
|
50
|
-
*
|
|
51
|
-
* The projection is in-memory, so a hub restart starts it empty — and an empty
|
|
52
|
-
* deny list means "every source", which would silently switch every source the
|
|
53
|
-
* operator turned off back ON. That is precisely the D62 failure (an off switch
|
|
54
|
-
* that reports on), so the replay is not an optimisation: it is what makes the
|
|
55
|
-
* authority durable. Called from the device-manager's `onInitialize`, before
|
|
56
|
-
* any camera can be asked for its clips, and safe to call again.
|
|
57
|
-
*/
|
|
58
|
-
export declare function restoreDeviceSourceActivations(registry: ICapabilityRegistry, store: Partial<DeviceBindingsStore>, logger: IScopedLogger): number;
|
|
59
24
|
/**
|
|
60
25
|
* Activate or deactivate a wrapper for one device.
|
|
61
26
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* `
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
27
|
+
* SINGLETON caps only, and that is now enforced rather than assumed: one
|
|
28
|
+
* `wrapperAddonId`, or the explicit `null` "operator disabled" marker that
|
|
29
|
+
* stops `getBindings` step 2 re-binding a `defaultActive` wrapper.
|
|
30
|
+
*
|
|
31
|
+
* A COLLECTION cap is REFUSED by name. Its providers are a derived SET
|
|
32
|
+
* (`device-bindings-store.ts` step 0) — there is nothing to activate, and a
|
|
33
|
+
* verb that accepted the call and wrote a store nobody reads is exactly what
|
|
34
|
+
* this module shipped until 2026-09-20.
|
|
69
35
|
*/
|
|
70
36
|
export declare function setWrapperActive(deps: WrapperActivationDeps, input: WrapperActivationInput): Promise<void>;
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
7
7
|
//#region src/builtins/doorbell/trigger-engine.ts
|
|
8
8
|
/**
|
|
9
9
|
* Pure trigger logic for the virtual-doorbell builtin — edge detection over
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as bareAddonId, Fn as EventCategory, T as SOURCE_DEVICE_TYPES, at as evaluateSensorEdge, cn as BaseAddon, gt as isSourceCap, ht as isSameAddonId, mn as DeviceType, on as errMsg, tt as doorbellCapability, w as SOURCE_CAPS, xn as createEvent } from "../../dist-
|
|
1
|
+
import { B as bareAddonId, Fn as EventCategory, T as SOURCE_DEVICE_TYPES, at as evaluateSensorEdge, cn as BaseAddon, gt as isSourceCap, ht as isSameAddonId, mn as DeviceType, on as errMsg, tt as doorbellCapability, w as SOURCE_CAPS, xn as createEvent } from "../../dist-DOF9wnat.mjs";
|
|
2
2
|
//#region src/builtins/doorbell/trigger-engine.ts
|
|
3
3
|
/**
|
|
4
4
|
* Pure trigger logic for the virtual-doorbell builtin — edge detection over
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
7
7
|
const require_formatter = require("../../formatter-DqAKDlvN.js");
|
|
8
8
|
//#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
|
|
9
9
|
var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ct as logDestinationCapability, cn as BaseAddon } from "../../dist-
|
|
1
|
+
import { Ct as logDestinationCapability, cn as BaseAddon } from "../../dist-DOF9wnat.mjs";
|
|
2
2
|
import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
|
|
3
3
|
//#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
|
|
4
4
|
var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../chunk-Cek0wNdY.js");
|
|
3
|
-
const require_dist = require("../../dist-
|
|
3
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
4
4
|
//#region src/builtins/liveness-monitor/liveness-checks.ts
|
|
5
5
|
var NO_DEVICES = "liveness:no-devices";
|
|
6
6
|
var ALL_OFFLINE = "liveness:all-devices-offline";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as RecordingStatusSchema, Fn as EventCategory, cn as BaseAddon, on as errMsg, xn as createEvent } from "../../dist-
|
|
1
|
+
import { C as RecordingStatusSchema, Fn as EventCategory, cn as BaseAddon, on as errMsg, xn as createEvent } from "../../dist-DOF9wnat.mjs";
|
|
2
2
|
//#region src/builtins/liveness-monitor/liveness-checks.ts
|
|
3
3
|
var NO_DEVICES = "liveness:no-devices";
|
|
4
4
|
var ALL_OFFLINE = "liveness:all-devices-offline";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
8
|
node_crypto = require_chunk.__toESM(node_crypto);
|
|
9
9
|
let crypto$1 = require("crypto");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as __require, o as __toESM, t as __commonJSMin } from "../../chunk-CNf5ZN-e.mjs";
|
|
2
|
-
import { N as UserRecordSchema, O as ScopedTokenSchema, R as authProviderCapability, cn as BaseAddon, nn as userManagementCapability, r as ApiKeyRecordSchema } from "../../dist-
|
|
2
|
+
import { N as UserRecordSchema, O as ScopedTokenSchema, R as authProviderCapability, cn as BaseAddon, nn as userManagementCapability, r as ApiKeyRecordSchema } from "../../dist-DOF9wnat.mjs";
|
|
3
3
|
import * as crypto$2 from "node:crypto";
|
|
4
4
|
import { createHash, randomUUID, timingSafeEqual } from "node:crypto";
|
|
5
5
|
import nodeCrypto from "crypto";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
3
|
-
const require_dist = require("../../dist-
|
|
3
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
4
4
|
const require_tls = require("../../tls-D_wUeOTD.js");
|
|
5
5
|
let node_fs_promises = require("node:fs/promises");
|
|
6
6
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fn as EventCategory, cn as BaseAddon, xt as localNetworkCapability } from "../../dist-
|
|
1
|
+
import { Fn as EventCategory, cn as BaseAddon, xt as localNetworkCapability } from "../../dist-DOF9wnat.mjs";
|
|
2
2
|
import { S as readLanHttpState, _ as DEFAULT_LAN_HTTP_PORT, a as writeTlsMode, i as writeExtraSans, l as reissueTlsLeaf, n as readTlsAccessStatus, o as validateUploadedTls, r as readTlsMode, s as ensureTlsCert, t as readExtraSans, y as applyLanHttp } from "../../tls-IM-v7JV4.mjs";
|
|
3
3
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
4
4
|
import { join } from "node:path";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
7
7
|
//#region src/builtins/loki-logging/loki-payload.ts
|
|
8
8
|
/**
|
|
9
9
|
* Loki rejects a label name that is not a valid Prometheus label
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ct as logDestinationCapability, cn as BaseAddon } from "../../dist-
|
|
1
|
+
import { Ct as logDestinationCapability, cn as BaseAddon } from "../../dist-DOF9wnat.mjs";
|
|
2
2
|
//#region src/builtins/loki-logging/loki-payload.ts
|
|
3
3
|
/**
|
|
4
4
|
* Loki rejects a label name that is not a valid Prometheus label
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
7
7
|
let node_fs_promises = require("node:fs/promises");
|
|
8
8
|
let node_fs = require("node:fs");
|
|
9
9
|
node_fs = require_chunk.__toESM(node_fs);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fn as EventCategory, Ot as metricsProviderCapability, Rt as reducePoints, cn as BaseAddon, lt as foldSnapshotByFunction, on as errMsg, xn as createEvent, zt as resolveBucketMs } from "../../dist-
|
|
1
|
+
import { Fn as EventCategory, Ot as metricsProviderCapability, Rt as reducePoints, cn as BaseAddon, lt as foldSnapshotByFunction, on as errMsg, xn as createEvent, zt as resolveBucketMs } from "../../dist-DOF9wnat.mjs";
|
|
2
2
|
import { access, readFile, readdir } from "node:fs/promises";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import { constants, readFileSync } from "node:fs";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
7
7
|
let node_fs = require("node:fs");
|
|
8
8
|
node_fs = require_chunk.__toESM(node_fs);
|
|
9
9
|
let node_child_process = require("node:child_process");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
|
|
2
|
-
import { Cn as emitReadiness, Fn as EventCategory, Ft as platformProbeCapability, Kt as scoreRuntimes, cn as BaseAddon, nt as enumerateInferenceDevices, on as errMsg } from "../../dist-
|
|
2
|
+
import { Cn as emitReadiness, Fn as EventCategory, Ft as platformProbeCapability, Kt as scoreRuntimes, cn as BaseAddon, nt as enumerateInferenceDevices, on as errMsg } from "../../dist-DOF9wnat.mjs";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import { execFile } from "node:child_process";
|
|
5
5
|
import * as os from "node:os";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
7
7
|
//#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
|
|
8
8
|
/**
|
|
9
9
|
* Reconcile the durable `enabledProviders` set against authoritative
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fn as EventCategory, cn as BaseAddon } from "../../dist-
|
|
1
|
+
import { Fn as EventCategory, cn as BaseAddon } from "../../dist-DOF9wnat.mjs";
|
|
2
2
|
//#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
|
|
3
3
|
/**
|
|
4
4
|
* Reconcile the durable `enabledProviders` set against authoritative
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
7
7
|
const require_snapshot_courtesy = require("../../snapshot-courtesy-Cqs7GkOV.js");
|
|
8
8
|
let zod = require("zod");
|
|
9
9
|
let node_crypto = require("node:crypto");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as bareAddonId, Fn as EventCategory, On as nodePin, V as batteryCapability, Yt as snapshotCapability, Z as deriveBatteryPresence, a as BatteryStatusSchema, cn as BaseAddon, fn as DeviceFeature, mn as DeviceType, on as errMsg, tn as streamQualityLabel } from "../../dist-
|
|
1
|
+
import { B as bareAddonId, Fn as EventCategory, On as nodePin, V as batteryCapability, Yt as snapshotCapability, Z as deriveBatteryPresence, a as BatteryStatusSchema, cn as BaseAddon, fn as DeviceFeature, mn as DeviceType, on as errMsg, tn as streamQualityLabel } from "../../dist-DOF9wnat.mjs";
|
|
2
2
|
import { i as renderCourtesyOverlayJpeg, n as courtesyCacheKey, r as renderCourtesyJpeg } from "../../snapshot-courtesy-CZPvteq2.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
8
|
let node_fs_promises = require("node:fs/promises");
|
|
9
9
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $t as storageProviderCapability, cn as BaseAddon, ct as filesystemBrowseCapability } from "../../dist-
|
|
1
|
+
import { $t as storageProviderCapability, cn as BaseAddon, ct as filesystemBrowseCapability } from "../../dist-DOF9wnat.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { mkdir, readdir, realpath, statfs } from "node:fs/promises";
|
|
4
4
|
import * as path$1 from "node:path";
|
|
Binary file
|
|
Binary file
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
7
7
|
const require_hub_cap_forward = require("../../hub-cap-forward-DmHNjbB0.js");
|
|
8
8
|
let zod = require("zod");
|
|
9
9
|
let node_crypto = require("node:crypto");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as StorageLocationModeSchema, Dt as mayWriteToLocation, Et as mayReadLocation, Fn as EventCategory, M as StorageMigrationJobSchema, Vt as resolveLocationMode, W as collectSecretConfigKeys, Xt as storageCapability, Zt as storageMigrationCapability, _ as LegacyStorageLocationDefaultSchema, an as withLocationMode, cn as BaseAddon, j as StorageLocationTypeSchema, k as StorageCleanupJobSchema, kn as parseJsonObject, kt as modeMayWrite, ot as evictionPolicyOfLocation, pt as isLocationEnabled, qt as settingsStoreCapability, ut as gbToBytes, x as REDACTED_SECRET, yt as legacyModeOf } from "../../dist-
|
|
1
|
+
import { A as StorageLocationModeSchema, Dt as mayWriteToLocation, Et as mayReadLocation, Fn as EventCategory, M as StorageMigrationJobSchema, Vt as resolveLocationMode, W as collectSecretConfigKeys, Xt as storageCapability, Zt as storageMigrationCapability, _ as LegacyStorageLocationDefaultSchema, an as withLocationMode, cn as BaseAddon, j as StorageLocationTypeSchema, k as StorageCleanupJobSchema, kn as parseJsonObject, kt as modeMayWrite, ot as evictionPolicyOfLocation, pt as isLocationEnabled, qt as settingsStoreCapability, ut as gbToBytes, x as REDACTED_SECRET, yt as legacyModeOf } from "../../dist-DOF9wnat.mjs";
|
|
2
2
|
import { t as HUB_CAP_FWD_ACTION } from "../../hub-cap-forward-BdT320dq.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
7
7
|
//#region src/builtins/system-config/system-config.addon.ts
|
|
8
8
|
/**
|
|
9
9
|
* Built-in `system-config` addon — Phase 4 of the settings redesign.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Tn as hydrateSchema, cn as BaseAddon, on as errMsg } from "../../dist-
|
|
1
|
+
import { Tn as hydrateSchema, cn as BaseAddon, on as errMsg } from "../../dist-DOF9wnat.mjs";
|
|
2
2
|
//#region src/builtins/system-config/system-config.addon.ts
|
|
3
3
|
/**
|
|
4
4
|
* Built-in `system-config` addon — Phase 4 of the settings redesign.
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-Bu8HN-KS.js");
|
|
7
7
|
const require_formatter = require("../../formatter-DqAKDlvN.js");
|
|
8
8
|
let node_path = require("node:path");
|
|
9
9
|
node_path = require_chunk.__toESM(node_path);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ct as logDestinationCapability, cn as BaseAddon } from "../../dist-
|
|
1
|
+
import { Ct as logDestinationCapability, cn as BaseAddon } from "../../dist-DOF9wnat.mjs";
|
|
2
2
|
import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
|
|
3
3
|
import * as path$1 from "node:path";
|
|
4
4
|
import path from "node:path";
|
|
@@ -691,7 +691,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
691
691
|
return EventCategory;
|
|
692
692
|
}({});
|
|
693
693
|
//#endregion
|
|
694
|
-
//#region ../types/dist/sleep-
|
|
694
|
+
//#region ../types/dist/sleep-7AN_Txmu.mjs
|
|
695
695
|
/**
|
|
696
696
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
697
697
|
* window to float samples (D455).
|
|
@@ -892,12 +892,6 @@ var WELL_KNOWN_TAB_MAP = Object.fromEntries([
|
|
|
892
892
|
icon: "circle-dot",
|
|
893
893
|
order: 40
|
|
894
894
|
},
|
|
895
|
-
{
|
|
896
|
-
id: "clips",
|
|
897
|
-
label: "Clips",
|
|
898
|
-
icon: "clapperboard",
|
|
899
|
-
order: 41
|
|
900
|
-
},
|
|
901
895
|
{
|
|
902
896
|
id: "engine",
|
|
903
897
|
label: "Inference Engine",
|
|
@@ -26256,17 +26250,31 @@ var videoclipsCapability = {
|
|
|
26256
26250
|
* `device-config-widget-wrapped-binding.spec.ts` pins that a `kind:'wrapped'`
|
|
26257
26251
|
* binding entry derives the same section a native one does.
|
|
26258
26252
|
*
|
|
26259
|
-
*
|
|
26260
|
-
*
|
|
26261
|
-
*
|
|
26253
|
+
* **It is a SECTION of the Recording tab, at the end of it — not a tab of
|
|
26254
|
+
* its own.** It shipped as a `clips` top-tab and the operator rejected the
|
|
26255
|
+
* placement: *"utilizzerei la stessa tab recordings, lì abbiamo già tutto il
|
|
26256
|
+
* necessario, una nuova sezione alla fine per le clips"*. The Recording tab
|
|
26257
|
+
* already holds the recorder's panel, the schedule bands and the unified
|
|
26258
|
+
* retention policy; footage the camera itself holds is the same question,
|
|
26259
|
+
* asked of a different store. `order: 100` puts it after all of them with
|
|
26260
|
+
* room left in front. The `clips` entry in `WELL_KNOWN_TABS` went with it —
|
|
26261
|
+
* a well-known id nobody declares is an invitation to mint the tab again.
|
|
26262
|
+
*
|
|
26263
|
+
* `topTab` stays: the browser owns a pane (a day's tiles, a source list and
|
|
26264
|
+
* a player) and the Config tab's inner bar has no room for one. The widget
|
|
26265
|
+
* itself is `host/clips-browser` in ui-library's `HOST_WIDGETS`, and because
|
|
26266
|
+
* the admin Recordings page renders every `location:'top-tab'` +
|
|
26267
|
+
* `tab:'recording'` section behind its camera picker
|
|
26268
|
+
* (`CameraRecordingSettingsSection`), this declaration lands the section on
|
|
26269
|
+
* BOTH surfaces with no second wiring.
|
|
26262
26270
|
*/
|
|
26263
26271
|
deviceConfig: { ui: {
|
|
26264
26272
|
kind: "widget",
|
|
26265
26273
|
widgetId: "host/clips-browser",
|
|
26266
|
-
tab: "
|
|
26274
|
+
tab: "recording",
|
|
26267
26275
|
topTab: true,
|
|
26268
26276
|
label: "Clips",
|
|
26269
|
-
order:
|
|
26277
|
+
order: 100
|
|
26270
26278
|
} },
|
|
26271
26279
|
methods: {
|
|
26272
26280
|
listClips: method(zod.z.object({
|
|
@@ -26275,13 +26283,23 @@ var videoclipsCapability = {
|
|
|
26275
26283
|
until: zod.z.number(),
|
|
26276
26284
|
limit: zod.z.number().int().positive().optional(),
|
|
26277
26285
|
/**
|
|
26278
|
-
*
|
|
26279
|
-
*
|
|
26280
|
-
*
|
|
26281
|
-
*
|
|
26282
|
-
*
|
|
26286
|
+
* WHICH provider to ask — the `addonId` a {@link ClipSourceSchema} row
|
|
26287
|
+
* carries, never a source id and never a list.
|
|
26288
|
+
*
|
|
26289
|
+
* Absent means the device's BOUND provider, which is CamStack on every
|
|
26290
|
+
* camera today because that is what `deviceManager.getBindings`
|
|
26291
|
+
* answers with. A provider the device is not bound to is refused by
|
|
26292
|
+
* name rather than answered by another one (D552's
|
|
26293
|
+
* `rejectUnresolvedAddonPin` rule).
|
|
26294
|
+
*
|
|
26295
|
+
* It replaced `sources?: string[]`, a VIEW filter over source ids that
|
|
26296
|
+
* assumed the answer was a fan-out over everything a camera has. The
|
|
26297
|
+
* operator settled otherwise on 2026-09-20 — *"il get videoclips
|
|
26298
|
+
* prendere un provider opzionale, di default va su camstack"*,
|
|
26299
|
+
* *"l'utilizzatore è uno solo"* — so the list is asked of one provider
|
|
26300
|
+
* at a time and there is nothing to filter out of it.
|
|
26283
26301
|
*/
|
|
26284
|
-
|
|
26302
|
+
provider: zod.z.string().optional()
|
|
26285
26303
|
}), zod.z.array(ClipSchema).readonly(), {
|
|
26286
26304
|
kind: "query",
|
|
26287
26305
|
auth: "protected"
|
|
@@ -691,7 +691,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
691
691
|
return EventCategory;
|
|
692
692
|
}({});
|
|
693
693
|
//#endregion
|
|
694
|
-
//#region ../types/dist/sleep-
|
|
694
|
+
//#region ../types/dist/sleep-7AN_Txmu.mjs
|
|
695
695
|
/**
|
|
696
696
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
697
697
|
* window to float samples (D455).
|
|
@@ -892,12 +892,6 @@ var WELL_KNOWN_TAB_MAP = Object.fromEntries([
|
|
|
892
892
|
icon: "circle-dot",
|
|
893
893
|
order: 40
|
|
894
894
|
},
|
|
895
|
-
{
|
|
896
|
-
id: "clips",
|
|
897
|
-
label: "Clips",
|
|
898
|
-
icon: "clapperboard",
|
|
899
|
-
order: 41
|
|
900
|
-
},
|
|
901
895
|
{
|
|
902
896
|
id: "engine",
|
|
903
897
|
label: "Inference Engine",
|
|
@@ -26256,17 +26250,31 @@ var videoclipsCapability = {
|
|
|
26256
26250
|
* `device-config-widget-wrapped-binding.spec.ts` pins that a `kind:'wrapped'`
|
|
26257
26251
|
* binding entry derives the same section a native one does.
|
|
26258
26252
|
*
|
|
26259
|
-
*
|
|
26260
|
-
*
|
|
26261
|
-
*
|
|
26253
|
+
* **It is a SECTION of the Recording tab, at the end of it — not a tab of
|
|
26254
|
+
* its own.** It shipped as a `clips` top-tab and the operator rejected the
|
|
26255
|
+
* placement: *"utilizzerei la stessa tab recordings, lì abbiamo già tutto il
|
|
26256
|
+
* necessario, una nuova sezione alla fine per le clips"*. The Recording tab
|
|
26257
|
+
* already holds the recorder's panel, the schedule bands and the unified
|
|
26258
|
+
* retention policy; footage the camera itself holds is the same question,
|
|
26259
|
+
* asked of a different store. `order: 100` puts it after all of them with
|
|
26260
|
+
* room left in front. The `clips` entry in `WELL_KNOWN_TABS` went with it —
|
|
26261
|
+
* a well-known id nobody declares is an invitation to mint the tab again.
|
|
26262
|
+
*
|
|
26263
|
+
* `topTab` stays: the browser owns a pane (a day's tiles, a source list and
|
|
26264
|
+
* a player) and the Config tab's inner bar has no room for one. The widget
|
|
26265
|
+
* itself is `host/clips-browser` in ui-library's `HOST_WIDGETS`, and because
|
|
26266
|
+
* the admin Recordings page renders every `location:'top-tab'` +
|
|
26267
|
+
* `tab:'recording'` section behind its camera picker
|
|
26268
|
+
* (`CameraRecordingSettingsSection`), this declaration lands the section on
|
|
26269
|
+
* BOTH surfaces with no second wiring.
|
|
26262
26270
|
*/
|
|
26263
26271
|
deviceConfig: { ui: {
|
|
26264
26272
|
kind: "widget",
|
|
26265
26273
|
widgetId: "host/clips-browser",
|
|
26266
|
-
tab: "
|
|
26274
|
+
tab: "recording",
|
|
26267
26275
|
topTab: true,
|
|
26268
26276
|
label: "Clips",
|
|
26269
|
-
order:
|
|
26277
|
+
order: 100
|
|
26270
26278
|
} },
|
|
26271
26279
|
methods: {
|
|
26272
26280
|
listClips: method(z.object({
|
|
@@ -26275,13 +26283,23 @@ var videoclipsCapability = {
|
|
|
26275
26283
|
until: z.number(),
|
|
26276
26284
|
limit: z.number().int().positive().optional(),
|
|
26277
26285
|
/**
|
|
26278
|
-
*
|
|
26279
|
-
*
|
|
26280
|
-
*
|
|
26281
|
-
*
|
|
26282
|
-
*
|
|
26286
|
+
* WHICH provider to ask — the `addonId` a {@link ClipSourceSchema} row
|
|
26287
|
+
* carries, never a source id and never a list.
|
|
26288
|
+
*
|
|
26289
|
+
* Absent means the device's BOUND provider, which is CamStack on every
|
|
26290
|
+
* camera today because that is what `deviceManager.getBindings`
|
|
26291
|
+
* answers with. A provider the device is not bound to is refused by
|
|
26292
|
+
* name rather than answered by another one (D552's
|
|
26293
|
+
* `rejectUnresolvedAddonPin` rule).
|
|
26294
|
+
*
|
|
26295
|
+
* It replaced `sources?: string[]`, a VIEW filter over source ids that
|
|
26296
|
+
* assumed the answer was a fan-out over everything a camera has. The
|
|
26297
|
+
* operator settled otherwise on 2026-09-20 — *"il get videoclips
|
|
26298
|
+
* prendere un provider opzionale, di default va su camstack"*,
|
|
26299
|
+
* *"l'utilizzatore è uno solo"* — so the list is asked of one provider
|
|
26300
|
+
* at a time and there is nothing to filter out of it.
|
|
26283
26301
|
*/
|
|
26284
|
-
|
|
26302
|
+
provider: z.string().optional()
|
|
26285
26303
|
}), z.array(ClipSchema).readonly(), {
|
|
26286
26304
|
kind: "query",
|
|
26287
26305
|
auth: "protected"
|
package/dist/index.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export { DeviceManagerAddon } from './builtins/device-manager/index.js';
|
|
|
22
22
|
* projection — a spec that proves "activate, then list" must be able to drive
|
|
23
23
|
* the real one, not a re-implementation of it.
|
|
24
24
|
*/
|
|
25
|
-
export {
|
|
25
|
+
export { setWrapperActive, type WrapperActivationDeps, type WrapperActivationInput, } from './builtins/device-manager/device-source-activation.js';
|
|
26
26
|
export { HubForwarderAddon, HubForwarderDestination } from './builtins/hub-forwarder/index.js';
|
|
27
27
|
export { LivenessMonitorAddon } from './builtins/liveness-monitor/index.js';
|
|
28
28
|
export { LocalAuthAddon } from './builtins/local-auth/index.js';
|