@camstack/system 1.2.95 → 1.2.97
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/backup-orchestrator/backup-orchestrator.addon.js +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.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-manager.addon.js +1 -1
- package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
- 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 +76 -12
- package/dist/builtins/snapshot/index.mjs +76 -12
- package/dist/builtins/snapshot/snapshot.addon.d.ts +24 -6
- 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/filter-compiler.d.ts +6 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +7 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +7 -1
- 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-hKJyHgFg.mjs → dist-6JUfbDpM.mjs} +42 -6
- package/dist/{dist-BQoU9nGS.js → dist-uhKRdmyc.js} +42 -6
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
|
@@ -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-uhKRdmyc.js");
|
|
7
7
|
const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
|
|
8
8
|
let node_crypto = require("node:crypto");
|
|
9
9
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Gt as EventCategory, v as addonPagesCapability, vt as errMsg, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { Gt as EventCategory, v as addonPagesCapability, vt as errMsg, yt as BaseAddon } from "../../dist-6JUfbDpM.mjs";
|
|
2
2
|
import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
|
|
3
3
|
import { createHash, randomUUID } from "node:crypto";
|
|
4
4
|
import * as path$1 from "node:path";
|
|
@@ -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-uhKRdmyc.js");
|
|
7
7
|
const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
|
|
8
8
|
let node_crypto = require("node:crypto");
|
|
9
9
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Gt as EventCategory, b as addonWidgetsCapability, vt as errMsg, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { Gt as EventCategory, b as addonWidgetsCapability, vt as errMsg, yt as BaseAddon } from "../../dist-6JUfbDpM.mjs";
|
|
2
2
|
import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
|
|
3
3
|
import { createHash, randomUUID } from "node:crypto";
|
|
4
4
|
import * as path$1 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-uhKRdmyc.js");
|
|
7
7
|
//#region src/builtins/alerts/prune-policy.ts
|
|
8
8
|
/**
|
|
9
9
|
* Ids older than `cutoffMs`, oldest first.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Gt as EventCategory, Mt as createEvent, n as AlertSchema, vt as errMsg, x as alertsCapability, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { Gt as EventCategory, Mt as createEvent, n as AlertSchema, vt as errMsg, x as alertsCapability, yt as BaseAddon } from "../../dist-6JUfbDpM.mjs";
|
|
2
2
|
//#region src/builtins/alerts/prune-policy.ts
|
|
3
3
|
/**
|
|
4
4
|
* Ids older than `cutoffMs`, oldest first.
|
|
@@ -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-uhKRdmyc.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
8
|
let buffer = require("buffer");
|
|
9
9
|
let node_fs_promises = require("node:fs/promises");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as backupCapability, Gt as EventCategory, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { C as backupCapability, Gt as EventCategory, yt as BaseAddon } from "../../dist-6JUfbDpM.mjs";
|
|
2
2
|
import { randomBytes, randomUUID } from "node:crypto";
|
|
3
3
|
import { Buffer as Buffer$1 } from "buffer";
|
|
4
4
|
import * as fsp from "node:fs/promises";
|
|
@@ -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-uhKRdmyc.js");
|
|
7
7
|
const require_formatter = require("../../formatter-DqAKDlvN.js");
|
|
8
8
|
//#region src/builtins/console-logging/console-destination.ts
|
|
9
9
|
var LEVEL_RANK = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { X as logDestinationCapability, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { X as logDestinationCapability, yt as BaseAddon } from "../../dist-6JUfbDpM.mjs";
|
|
2
2
|
import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
|
|
3
3
|
//#region src/builtins/console-logging/console-destination.ts
|
|
4
4
|
var LEVEL_RANK = {
|
|
@@ -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-uhKRdmyc.js");
|
|
4
4
|
let node_crypto = require("node:crypto");
|
|
5
5
|
let node_fs_promises = require("node:fs/promises");
|
|
6
6
|
node_fs_promises = require_chunk.__toESM(node_fs_promises);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { D as coreBlockAddonId, O as coreBlockIdFromAddonId, c as CoreBlockSchema, k as coreBlocksCapability, l as DeclaredDevices, o as CORE_BLOCKS_ADDON_ID, s as CORE_BLOCK_ADDON_PREFIX, vt as errMsg, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { D as coreBlockAddonId, O as coreBlockIdFromAddonId, c as CoreBlockSchema, k as coreBlocksCapability, l as DeclaredDevices, o as CORE_BLOCKS_ADDON_ID, s as CORE_BLOCK_ADDON_PREFIX, vt as errMsg, yt as BaseAddon } from "../../dist-6JUfbDpM.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import * as fs from "node:fs/promises";
|
|
4
4
|
import * as path$1 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-uhKRdmyc.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
8
|
let _camstack_types_node = require("@camstack/types/node");
|
|
9
9
|
//#region src/builtins/device-manager/adoption-job-engine.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ct as DeviceFeature, E as buildStreamParamsConfigSchema, F as deviceStatusCapability, Gt as EventCategory, Lt as isDeviceConfigCap, N as deviceManagerCapability, Ot as WELL_KNOWN_TAB_MAP, P as deviceStateCapability, R as enumerateItemArrayFields, Tt as DeviceType, Wt as sleep, a as CAP_NAMES_WITH_STATUS, at as runtimeStatePolicyFor, et as normalizeUnit, nt as parseStreamParamsFormPatch, p as STREAM_PROFILE_META, t as ALL_CAPABILITY_DEFINITIONS, u as DeviceStatusSchema, vt as errMsg, wt as DeviceRole, yt as BaseAddon, z as enumerateSchemaFields } from "../../dist-
|
|
1
|
+
import { Ct as DeviceFeature, E as buildStreamParamsConfigSchema, F as deviceStatusCapability, Gt as EventCategory, Lt as isDeviceConfigCap, N as deviceManagerCapability, Ot as WELL_KNOWN_TAB_MAP, P as deviceStateCapability, R as enumerateItemArrayFields, Tt as DeviceType, Wt as sleep, a as CAP_NAMES_WITH_STATUS, at as runtimeStatePolicyFor, et as normalizeUnit, nt as parseStreamParamsFormPatch, p as STREAM_PROFILE_META, t as ALL_CAPABILITY_DEFINITIONS, u as DeviceStatusSchema, vt as errMsg, wt as DeviceRole, yt as BaseAddon, z as enumerateSchemaFields } from "../../dist-6JUfbDpM.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { canonicalDeviceFingerprint } from "@camstack/types/node";
|
|
4
4
|
//#region src/builtins/device-manager/adoption-job-engine.ts
|
|
@@ -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-uhKRdmyc.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 { G as isSameAddonId, Gt as EventCategory, I as doorbellCapability, Mt as createEvent, Tt as DeviceType, vt as errMsg, w as bareAddonId, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { G as isSameAddonId, Gt as EventCategory, I as doorbellCapability, Mt as createEvent, Tt as DeviceType, vt as errMsg, w as bareAddonId, yt as BaseAddon } from "../../dist-6JUfbDpM.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-uhKRdmyc.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 { X as logDestinationCapability, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { X as logDestinationCapability, yt as BaseAddon } from "../../dist-6JUfbDpM.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-uhKRdmyc.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 { Gt as EventCategory, Mt as createEvent, vt as errMsg, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { Gt as EventCategory, Mt as createEvent, vt as errMsg, yt as BaseAddon } from "../../dist-6JUfbDpM.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-uhKRdmyc.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 { S as authProviderCapability, _ as UserRecordSchema, ht as userManagementCapability, m as ScopedTokenSchema, r as ApiKeyRecordSchema, yt as BaseAddon } from "../../dist-
|
|
2
|
+
import { S as authProviderCapability, _ as UserRecordSchema, ht as userManagementCapability, m as ScopedTokenSchema, r as ApiKeyRecordSchema, yt as BaseAddon } from "../../dist-6JUfbDpM.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-uhKRdmyc.js");
|
|
4
4
|
let node_os = require("node:os");
|
|
5
5
|
node_os = require_chunk.__toESM(node_os);
|
|
6
6
|
//#region src/builtins/local-network/local-network.addon.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Gt as EventCategory, Y as localNetworkCapability, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { Gt as EventCategory, Y as localNetworkCapability, yt as BaseAddon } from "../../dist-6JUfbDpM.mjs";
|
|
2
2
|
import * as os from "node:os";
|
|
3
3
|
//#region src/builtins/local-network/local-network.addon.ts
|
|
4
4
|
/**
|
|
@@ -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-uhKRdmyc.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 { X as logDestinationCapability, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { X as logDestinationCapability, yt as BaseAddon } from "../../dist-6JUfbDpM.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-uhKRdmyc.js");
|
|
7
7
|
let node_child_process = require("node:child_process");
|
|
8
8
|
let node_util = require("node:util");
|
|
9
9
|
let node_os = require("node:os");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as metricsProviderCapability, Gt as EventCategory, Mt as createEvent, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { $ as metricsProviderCapability, Gt as EventCategory, Mt as createEvent, yt as BaseAddon } from "../../dist-6JUfbDpM.mjs";
|
|
2
2
|
import { execFile, execFileSync } from "node:child_process";
|
|
3
3
|
import { promisify } from "node:util";
|
|
4
4
|
import * as os from "node:os";
|
|
@@ -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-uhKRdmyc.js");
|
|
7
7
|
let node_child_process = require("node:child_process");
|
|
8
8
|
let node_util = require("node:util");
|
|
9
9
|
let node_os = require("node:os");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
|
|
2
|
-
import { Gt as EventCategory, L as enumerateInferenceDevices, Pt as emitReadiness, ct as scoreRuntimes, rt as platformProbeCapability, vt as errMsg, yt as BaseAddon } from "../../dist-
|
|
2
|
+
import { Gt as EventCategory, L as enumerateInferenceDevices, Pt as emitReadiness, ct as scoreRuntimes, rt as platformProbeCapability, vt as errMsg, yt as BaseAddon } from "../../dist-6JUfbDpM.mjs";
|
|
3
3
|
import { execFile } from "node:child_process";
|
|
4
4
|
import { promisify } from "node:util";
|
|
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-uhKRdmyc.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 { Gt as EventCategory, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { Gt as EventCategory, yt as BaseAddon } from "../../dist-6JUfbDpM.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-uhKRdmyc.js");
|
|
7
7
|
let zod = require("zod");
|
|
8
8
|
let node_crypto = require("node:crypto");
|
|
9
9
|
let _camstack_types_node = require("@camstack/types/node");
|
|
@@ -823,11 +823,34 @@ var LINK_MINT_DEADLINE_MS = 2500;
|
|
|
823
823
|
var LINK_BATCH_WAIT_MS = 750;
|
|
824
824
|
/** Frames older than this are never represented as current by the Viewer. */
|
|
825
825
|
var LINK_CURRENT_MAX_AGE_MS = 15e3;
|
|
826
|
+
/**
|
|
827
|
+
* Memo TTL for the per-device `deviceManager.getDevice` lookup.
|
|
828
|
+
*
|
|
829
|
+
* Every serve decision — each `getSnapshotLinks` target, each media-plane GET,
|
|
830
|
+
* each conditional-GET peek — used to pay this cross-process round trip (plus
|
|
831
|
+
* the battery-slice one) before it could even look at the cache: 21-target
|
|
832
|
+
* grids paid 42 UDS calls per 5 s poll, on top of the captures themselves
|
|
833
|
+
* (live hub, 2026-08-15). Registry facts (name/type/disabled/online/features)
|
|
834
|
+
* change on operator action or provider reconnect, not mid-second, so ten
|
|
835
|
+
* seconds of staleness is invisible next to the poll cadence — and every
|
|
836
|
+
* lifecycle event that changes one of those fields evicts the entry
|
|
837
|
+
* immediately (see the `device.*` subscriptions in `onInitialize`).
|
|
838
|
+
*
|
|
839
|
+
* The BATTERY SLICE is deliberately NOT memoized: sleep/wake transitions must
|
|
840
|
+
* be reactive (a camera that just fell asleep must not be dialed — the
|
|
841
|
+
* Baichuan wake-on-login incident), and `waking` is already live from the
|
|
842
|
+
* in-memory `wakingDevices` map.
|
|
843
|
+
*/
|
|
844
|
+
var DEVICE_META_MEMO_MS = 1e4;
|
|
826
845
|
/** Wake-on-play's 8 s firmware wait + 20 s broker settle, with scheduling
|
|
827
846
|
* slack. A lost completion event must not leave a camera "Waking" forever. */
|
|
828
847
|
var SNAPSHOT_WAKING_TTL_MS = 35e3;
|
|
829
|
-
/** Default cache window for non-battery cams (seconds).
|
|
830
|
-
|
|
848
|
+
/** Default cache window for non-battery cams (seconds). Matches the Viewer's
|
|
849
|
+
* 15 s currency contract (`LINK_CURRENT_MAX_AGE_MS`): a frame younger than
|
|
850
|
+
* that is presented as current, so re-capturing INSIDE the window bought
|
|
851
|
+
* nothing the client would show — under the 5 s links poll it made every
|
|
852
|
+
* other poll recapture the whole fleet through the 6-permit grab pools. */
|
|
853
|
+
var NON_BATTERY_DEFAULT_MAX_AGE_S = 15;
|
|
831
854
|
/** Default cache window for battery cams (seconds). 1h ≈ "don't wake the cam unless asked". */
|
|
832
855
|
var BATTERY_DEFAULT_MAX_AGE_S = 3600;
|
|
833
856
|
/**
|
|
@@ -879,6 +902,15 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
|
|
|
879
902
|
/** Devices inside the explicit battery wake-in-progress window. */
|
|
880
903
|
wakingDevices = /* @__PURE__ */ new Map();
|
|
881
904
|
/**
|
|
905
|
+
* Short-TTL memo for `lookupDeviceMeta` (see {@link DEVICE_META_MEMO_MS}).
|
|
906
|
+
* The PROMISE is stored (not the resolved value), so a burst of concurrent
|
|
907
|
+
* callers — a links batch plus the image fetches it mints — joins one
|
|
908
|
+
* in-flight lookup instead of stampeding `deviceManager.getDevice`.
|
|
909
|
+
* `fetchDeviceMeta` never rejects (failure → null), so a settled rejection
|
|
910
|
+
* can never be served from the memo.
|
|
911
|
+
*/
|
|
912
|
+
deviceMetaMemo = /* @__PURE__ */ new Map();
|
|
913
|
+
/**
|
|
882
914
|
* De-dupes concurrent captures per `${deviceId}:${streamId}` and holds a
|
|
883
915
|
* settled SUCCESS for COALESCE_MS so a grid-mount burst (and a row of refresh
|
|
884
916
|
* buttons) collapses into one capture instead of one dial per tile.
|
|
@@ -949,6 +981,17 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
|
|
|
949
981
|
const deviceId = event.data.deviceId;
|
|
950
982
|
if (typeof deviceId === "number") this.evictRemovedDevice(deviceId, "device-unregistered");
|
|
951
983
|
});
|
|
984
|
+
const dropMetaMemo = (data) => {
|
|
985
|
+
const deviceId = data?.deviceId;
|
|
986
|
+
if (typeof deviceId === "number") this.deviceMetaMemo.delete(deviceId);
|
|
987
|
+
};
|
|
988
|
+
this.subscribe({ category: require_dist.EventCategory.DeviceRegistered }, (event) => dropMetaMemo(event.data));
|
|
989
|
+
this.subscribe({ category: require_dist.EventCategory.DeviceEnabled }, (event) => dropMetaMemo(event.data));
|
|
990
|
+
this.subscribe({ category: require_dist.EventCategory.DeviceDisabled }, (event) => dropMetaMemo(event.data));
|
|
991
|
+
this.subscribe({ category: require_dist.EventCategory.DeviceMetaChanged }, (event) => dropMetaMemo(event.data));
|
|
992
|
+
this.subscribe({ category: require_dist.EventCategory.DeviceOnline }, (event) => dropMetaMemo(event.data));
|
|
993
|
+
this.subscribe({ category: require_dist.EventCategory.DeviceOffline }, (event) => dropMetaMemo(event.data));
|
|
994
|
+
this.subscribe({ category: require_dist.EventCategory.DeviceBindingsChanged }, (event) => dropMetaMemo(event.data));
|
|
952
995
|
this.subscribe({ category: require_dist.EventCategory.BatteryOnWakeStarted }, (event) => {
|
|
953
996
|
this.wakingDevices.set(event.data.deviceId, Date.now());
|
|
954
997
|
});
|
|
@@ -1245,7 +1288,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
|
|
|
1245
1288
|
deviceId,
|
|
1246
1289
|
...streamId !== void 0 ? { streamId } : {},
|
|
1247
1290
|
force
|
|
1248
|
-
}, 0, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, resolutionMeta);
|
|
1291
|
+
}, 0, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, resolutionMeta, 0);
|
|
1249
1292
|
if (!image) return null;
|
|
1250
1293
|
const capturedAt = this.cache.get(deviceId, streamId)?.ts ?? Date.now();
|
|
1251
1294
|
const prefs = await this.readDeviceSettings(deviceId).catch(() => ({}));
|
|
@@ -1350,6 +1393,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
|
|
|
1350
1393
|
this.variants.clear();
|
|
1351
1394
|
this.stateFrames.clear();
|
|
1352
1395
|
this.wakingDevices.clear();
|
|
1396
|
+
this.deviceMetaMemo.clear();
|
|
1353
1397
|
this.captureFlight.clear();
|
|
1354
1398
|
this.ownerCache = null;
|
|
1355
1399
|
}
|
|
@@ -1382,7 +1426,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
|
|
|
1382
1426
|
})]
|
|
1383
1427
|
}] });
|
|
1384
1428
|
}
|
|
1385
|
-
async getSnapshot(input, minimumCaptureWaitMs = 0, maximumCacheAgeMs = Number.POSITIVE_INFINITY, maximumCaptureWaitMs = Number.POSITIVE_INFINITY, resolutionMeta) {
|
|
1429
|
+
async getSnapshot(input, minimumCaptureWaitMs = 0, maximumCacheAgeMs = Number.POSITIVE_INFINITY, maximumCaptureWaitMs = Number.POSITIVE_INFINITY, resolutionMeta, staleWaitCapMs = Number.POSITIVE_INFINITY) {
|
|
1386
1430
|
const { deviceId } = input;
|
|
1387
1431
|
const force = input.force === true;
|
|
1388
1432
|
const meta = await this.lookupDeviceMeta(deviceId);
|
|
@@ -1445,7 +1489,8 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
|
|
|
1445
1489
|
log
|
|
1446
1490
|
}));
|
|
1447
1491
|
flight.catch(() => void 0);
|
|
1448
|
-
const
|
|
1492
|
+
const waitMs = !force && decision.staleFallback && hit !== void 0 ? Math.min(decision.waitMs, staleWaitCapMs) : decision.waitMs;
|
|
1493
|
+
const raced = await raceForResult(flight, Math.min(Math.max(waitMs, minimumCaptureWaitMs), maximumCaptureWaitMs));
|
|
1449
1494
|
if (raced.settled) try {
|
|
1450
1495
|
const resolved = await this.resolveOutcome(raced.value, deviceId, hit, log);
|
|
1451
1496
|
if (resolved !== null) return resolved;
|
|
@@ -1745,6 +1790,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
|
|
|
1745
1790
|
this.variants.deleteDevice(deviceId);
|
|
1746
1791
|
this.stateFrames.delete(deviceId);
|
|
1747
1792
|
this.wakingDevices.delete(deviceId);
|
|
1793
|
+
this.deviceMetaMemo.delete(deviceId);
|
|
1748
1794
|
this.captureFlight.invalidatePrefix(`${deviceId}:`);
|
|
1749
1795
|
}
|
|
1750
1796
|
/**
|
|
@@ -2052,17 +2098,35 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
|
|
|
2052
2098
|
}
|
|
2053
2099
|
}
|
|
2054
2100
|
/**
|
|
2055
|
-
* Single-trip device lookup against device-manager
|
|
2056
|
-
*
|
|
2057
|
-
*
|
|
2058
|
-
*
|
|
2059
|
-
*
|
|
2101
|
+
* Single-trip device lookup against device-manager — memoized for
|
|
2102
|
+
* {@link DEVICE_META_MEMO_MS} (promise-keyed, so bursts single-flight).
|
|
2103
|
+
* Registry facts only; nothing battery-runtime lives here, so the TTL never
|
|
2104
|
+
* masks a sleep/wake transition. Announced changes evict immediately (the
|
|
2105
|
+
* `device.*` subscriptions in `onInitialize`); the TTL bounds silent drift.
|
|
2106
|
+
*/
|
|
2107
|
+
lookupDeviceMeta(deviceId) {
|
|
2108
|
+
const hit = this.deviceMetaMemo.get(deviceId);
|
|
2109
|
+
if (hit !== void 0 && Date.now() - hit.ts < DEVICE_META_MEMO_MS) return hit.promise;
|
|
2110
|
+
const promise = this.fetchDeviceMeta(deviceId);
|
|
2111
|
+
this.deviceMetaMemo.set(deviceId, {
|
|
2112
|
+
ts: Date.now(),
|
|
2113
|
+
promise
|
|
2114
|
+
});
|
|
2115
|
+
return promise;
|
|
2116
|
+
}
|
|
2117
|
+
/**
|
|
2118
|
+
* The actual `deviceManager.getDevice` round trip behind
|
|
2119
|
+
* {@link lookupDeviceMeta}. Returns the stable registry fields the wrapper
|
|
2120
|
+
* consults. Battery classification is completed by `resolveSnapshotState`
|
|
2121
|
+
* from this feature flag PLUS the canonical runtime-state mirror, so a stale
|
|
2122
|
+
* persisted feature projection cannot authorize a snapshot dial against a
|
|
2123
|
+
* known sleeping battery camera.
|
|
2060
2124
|
*
|
|
2061
2125
|
* Logged at debug + null return on failure: every call site already
|
|
2062
2126
|
* has a sensible fallback path (cache hit, conservative default, …),
|
|
2063
2127
|
* so we don't want a transient device-manager hiccup to throw.
|
|
2064
2128
|
*/
|
|
2065
|
-
async
|
|
2129
|
+
async fetchDeviceMeta(deviceId) {
|
|
2066
2130
|
const api = this.ctx.api;
|
|
2067
2131
|
if (!api) return null;
|
|
2068
2132
|
try {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ct as DeviceFeature, Gt as EventCategory, M as deriveBatteryPresence, Rt as nodePin, T as batteryCapability, Tt as DeviceType, i as BatteryStatusSchema, mt as streamQualityLabel, ut as snapshotCapability, vt as errMsg, w as bareAddonId, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { Ct as DeviceFeature, Gt as EventCategory, M as deriveBatteryPresence, Rt as nodePin, T as batteryCapability, Tt as DeviceType, i as BatteryStatusSchema, mt as streamQualityLabel, ut as snapshotCapability, vt as errMsg, w as bareAddonId, yt as BaseAddon } from "../../dist-6JUfbDpM.mjs";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
4
|
import { signExpiringUrl, verifyExpiringUrl } from "@camstack/types/node";
|
|
@@ -817,11 +817,34 @@ var LINK_MINT_DEADLINE_MS = 2500;
|
|
|
817
817
|
var LINK_BATCH_WAIT_MS = 750;
|
|
818
818
|
/** Frames older than this are never represented as current by the Viewer. */
|
|
819
819
|
var LINK_CURRENT_MAX_AGE_MS = 15e3;
|
|
820
|
+
/**
|
|
821
|
+
* Memo TTL for the per-device `deviceManager.getDevice` lookup.
|
|
822
|
+
*
|
|
823
|
+
* Every serve decision — each `getSnapshotLinks` target, each media-plane GET,
|
|
824
|
+
* each conditional-GET peek — used to pay this cross-process round trip (plus
|
|
825
|
+
* the battery-slice one) before it could even look at the cache: 21-target
|
|
826
|
+
* grids paid 42 UDS calls per 5 s poll, on top of the captures themselves
|
|
827
|
+
* (live hub, 2026-08-15). Registry facts (name/type/disabled/online/features)
|
|
828
|
+
* change on operator action or provider reconnect, not mid-second, so ten
|
|
829
|
+
* seconds of staleness is invisible next to the poll cadence — and every
|
|
830
|
+
* lifecycle event that changes one of those fields evicts the entry
|
|
831
|
+
* immediately (see the `device.*` subscriptions in `onInitialize`).
|
|
832
|
+
*
|
|
833
|
+
* The BATTERY SLICE is deliberately NOT memoized: sleep/wake transitions must
|
|
834
|
+
* be reactive (a camera that just fell asleep must not be dialed — the
|
|
835
|
+
* Baichuan wake-on-login incident), and `waking` is already live from the
|
|
836
|
+
* in-memory `wakingDevices` map.
|
|
837
|
+
*/
|
|
838
|
+
var DEVICE_META_MEMO_MS = 1e4;
|
|
820
839
|
/** Wake-on-play's 8 s firmware wait + 20 s broker settle, with scheduling
|
|
821
840
|
* slack. A lost completion event must not leave a camera "Waking" forever. */
|
|
822
841
|
var SNAPSHOT_WAKING_TTL_MS = 35e3;
|
|
823
|
-
/** Default cache window for non-battery cams (seconds).
|
|
824
|
-
|
|
842
|
+
/** Default cache window for non-battery cams (seconds). Matches the Viewer's
|
|
843
|
+
* 15 s currency contract (`LINK_CURRENT_MAX_AGE_MS`): a frame younger than
|
|
844
|
+
* that is presented as current, so re-capturing INSIDE the window bought
|
|
845
|
+
* nothing the client would show — under the 5 s links poll it made every
|
|
846
|
+
* other poll recapture the whole fleet through the 6-permit grab pools. */
|
|
847
|
+
var NON_BATTERY_DEFAULT_MAX_AGE_S = 15;
|
|
825
848
|
/** Default cache window for battery cams (seconds). 1h ≈ "don't wake the cam unless asked". */
|
|
826
849
|
var BATTERY_DEFAULT_MAX_AGE_S = 3600;
|
|
827
850
|
/**
|
|
@@ -873,6 +896,15 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
|
|
|
873
896
|
/** Devices inside the explicit battery wake-in-progress window. */
|
|
874
897
|
wakingDevices = /* @__PURE__ */ new Map();
|
|
875
898
|
/**
|
|
899
|
+
* Short-TTL memo for `lookupDeviceMeta` (see {@link DEVICE_META_MEMO_MS}).
|
|
900
|
+
* The PROMISE is stored (not the resolved value), so a burst of concurrent
|
|
901
|
+
* callers — a links batch plus the image fetches it mints — joins one
|
|
902
|
+
* in-flight lookup instead of stampeding `deviceManager.getDevice`.
|
|
903
|
+
* `fetchDeviceMeta` never rejects (failure → null), so a settled rejection
|
|
904
|
+
* can never be served from the memo.
|
|
905
|
+
*/
|
|
906
|
+
deviceMetaMemo = /* @__PURE__ */ new Map();
|
|
907
|
+
/**
|
|
876
908
|
* De-dupes concurrent captures per `${deviceId}:${streamId}` and holds a
|
|
877
909
|
* settled SUCCESS for COALESCE_MS so a grid-mount burst (and a row of refresh
|
|
878
910
|
* buttons) collapses into one capture instead of one dial per tile.
|
|
@@ -943,6 +975,17 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
|
|
|
943
975
|
const deviceId = event.data.deviceId;
|
|
944
976
|
if (typeof deviceId === "number") this.evictRemovedDevice(deviceId, "device-unregistered");
|
|
945
977
|
});
|
|
978
|
+
const dropMetaMemo = (data) => {
|
|
979
|
+
const deviceId = data?.deviceId;
|
|
980
|
+
if (typeof deviceId === "number") this.deviceMetaMemo.delete(deviceId);
|
|
981
|
+
};
|
|
982
|
+
this.subscribe({ category: EventCategory.DeviceRegistered }, (event) => dropMetaMemo(event.data));
|
|
983
|
+
this.subscribe({ category: EventCategory.DeviceEnabled }, (event) => dropMetaMemo(event.data));
|
|
984
|
+
this.subscribe({ category: EventCategory.DeviceDisabled }, (event) => dropMetaMemo(event.data));
|
|
985
|
+
this.subscribe({ category: EventCategory.DeviceMetaChanged }, (event) => dropMetaMemo(event.data));
|
|
986
|
+
this.subscribe({ category: EventCategory.DeviceOnline }, (event) => dropMetaMemo(event.data));
|
|
987
|
+
this.subscribe({ category: EventCategory.DeviceOffline }, (event) => dropMetaMemo(event.data));
|
|
988
|
+
this.subscribe({ category: EventCategory.DeviceBindingsChanged }, (event) => dropMetaMemo(event.data));
|
|
946
989
|
this.subscribe({ category: EventCategory.BatteryOnWakeStarted }, (event) => {
|
|
947
990
|
this.wakingDevices.set(event.data.deviceId, Date.now());
|
|
948
991
|
});
|
|
@@ -1239,7 +1282,7 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
|
|
|
1239
1282
|
deviceId,
|
|
1240
1283
|
...streamId !== void 0 ? { streamId } : {},
|
|
1241
1284
|
force
|
|
1242
|
-
}, 0, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, resolutionMeta);
|
|
1285
|
+
}, 0, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, resolutionMeta, 0);
|
|
1243
1286
|
if (!image) return null;
|
|
1244
1287
|
const capturedAt = this.cache.get(deviceId, streamId)?.ts ?? Date.now();
|
|
1245
1288
|
const prefs = await this.readDeviceSettings(deviceId).catch(() => ({}));
|
|
@@ -1344,6 +1387,7 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
|
|
|
1344
1387
|
this.variants.clear();
|
|
1345
1388
|
this.stateFrames.clear();
|
|
1346
1389
|
this.wakingDevices.clear();
|
|
1390
|
+
this.deviceMetaMemo.clear();
|
|
1347
1391
|
this.captureFlight.clear();
|
|
1348
1392
|
this.ownerCache = null;
|
|
1349
1393
|
}
|
|
@@ -1376,7 +1420,7 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
|
|
|
1376
1420
|
})]
|
|
1377
1421
|
}] });
|
|
1378
1422
|
}
|
|
1379
|
-
async getSnapshot(input, minimumCaptureWaitMs = 0, maximumCacheAgeMs = Number.POSITIVE_INFINITY, maximumCaptureWaitMs = Number.POSITIVE_INFINITY, resolutionMeta) {
|
|
1423
|
+
async getSnapshot(input, minimumCaptureWaitMs = 0, maximumCacheAgeMs = Number.POSITIVE_INFINITY, maximumCaptureWaitMs = Number.POSITIVE_INFINITY, resolutionMeta, staleWaitCapMs = Number.POSITIVE_INFINITY) {
|
|
1380
1424
|
const { deviceId } = input;
|
|
1381
1425
|
const force = input.force === true;
|
|
1382
1426
|
const meta = await this.lookupDeviceMeta(deviceId);
|
|
@@ -1439,7 +1483,8 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
|
|
|
1439
1483
|
log
|
|
1440
1484
|
}));
|
|
1441
1485
|
flight.catch(() => void 0);
|
|
1442
|
-
const
|
|
1486
|
+
const waitMs = !force && decision.staleFallback && hit !== void 0 ? Math.min(decision.waitMs, staleWaitCapMs) : decision.waitMs;
|
|
1487
|
+
const raced = await raceForResult(flight, Math.min(Math.max(waitMs, minimumCaptureWaitMs), maximumCaptureWaitMs));
|
|
1443
1488
|
if (raced.settled) try {
|
|
1444
1489
|
const resolved = await this.resolveOutcome(raced.value, deviceId, hit, log);
|
|
1445
1490
|
if (resolved !== null) return resolved;
|
|
@@ -1739,6 +1784,7 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
|
|
|
1739
1784
|
this.variants.deleteDevice(deviceId);
|
|
1740
1785
|
this.stateFrames.delete(deviceId);
|
|
1741
1786
|
this.wakingDevices.delete(deviceId);
|
|
1787
|
+
this.deviceMetaMemo.delete(deviceId);
|
|
1742
1788
|
this.captureFlight.invalidatePrefix(`${deviceId}:`);
|
|
1743
1789
|
}
|
|
1744
1790
|
/**
|
|
@@ -2046,17 +2092,35 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
|
|
|
2046
2092
|
}
|
|
2047
2093
|
}
|
|
2048
2094
|
/**
|
|
2049
|
-
* Single-trip device lookup against device-manager
|
|
2050
|
-
*
|
|
2051
|
-
*
|
|
2052
|
-
*
|
|
2053
|
-
*
|
|
2095
|
+
* Single-trip device lookup against device-manager — memoized for
|
|
2096
|
+
* {@link DEVICE_META_MEMO_MS} (promise-keyed, so bursts single-flight).
|
|
2097
|
+
* Registry facts only; nothing battery-runtime lives here, so the TTL never
|
|
2098
|
+
* masks a sleep/wake transition. Announced changes evict immediately (the
|
|
2099
|
+
* `device.*` subscriptions in `onInitialize`); the TTL bounds silent drift.
|
|
2100
|
+
*/
|
|
2101
|
+
lookupDeviceMeta(deviceId) {
|
|
2102
|
+
const hit = this.deviceMetaMemo.get(deviceId);
|
|
2103
|
+
if (hit !== void 0 && Date.now() - hit.ts < DEVICE_META_MEMO_MS) return hit.promise;
|
|
2104
|
+
const promise = this.fetchDeviceMeta(deviceId);
|
|
2105
|
+
this.deviceMetaMemo.set(deviceId, {
|
|
2106
|
+
ts: Date.now(),
|
|
2107
|
+
promise
|
|
2108
|
+
});
|
|
2109
|
+
return promise;
|
|
2110
|
+
}
|
|
2111
|
+
/**
|
|
2112
|
+
* The actual `deviceManager.getDevice` round trip behind
|
|
2113
|
+
* {@link lookupDeviceMeta}. Returns the stable registry fields the wrapper
|
|
2114
|
+
* consults. Battery classification is completed by `resolveSnapshotState`
|
|
2115
|
+
* from this feature flag PLUS the canonical runtime-state mirror, so a stale
|
|
2116
|
+
* persisted feature projection cannot authorize a snapshot dial against a
|
|
2117
|
+
* known sleeping battery camera.
|
|
2054
2118
|
*
|
|
2055
2119
|
* Logged at debug + null return on failure: every call site already
|
|
2056
2120
|
* has a sensible fallback path (cache hit, conservative default, …),
|
|
2057
2121
|
* so we don't want a transient device-manager hiccup to throw.
|
|
2058
2122
|
*/
|
|
2059
|
-
async
|
|
2123
|
+
async fetchDeviceMeta(deviceId) {
|
|
2060
2124
|
const api = this.ctx.api;
|
|
2061
2125
|
if (!api) return null;
|
|
2062
2126
|
try {
|
|
@@ -48,6 +48,15 @@ export declare class SnapshotAddon extends BaseAddon<SnapshotAddonConfig> {
|
|
|
48
48
|
private readonly stateFrames;
|
|
49
49
|
/** Devices inside the explicit battery wake-in-progress window. */
|
|
50
50
|
private readonly wakingDevices;
|
|
51
|
+
/**
|
|
52
|
+
* Short-TTL memo for `lookupDeviceMeta` (see {@link DEVICE_META_MEMO_MS}).
|
|
53
|
+
* The PROMISE is stored (not the resolved value), so a burst of concurrent
|
|
54
|
+
* callers — a links batch plus the image fetches it mints — joins one
|
|
55
|
+
* in-flight lookup instead of stampeding `deviceManager.getDevice`.
|
|
56
|
+
* `fetchDeviceMeta` never rejects (failure → null), so a settled rejection
|
|
57
|
+
* can never be served from the memo.
|
|
58
|
+
*/
|
|
59
|
+
private readonly deviceMetaMemo;
|
|
51
60
|
/**
|
|
52
61
|
* De-dupes concurrent captures per `${deviceId}:${streamId}` and holds a
|
|
53
62
|
* settled SUCCESS for COALESCE_MS so a grid-mount burst (and a row of refresh
|
|
@@ -433,17 +442,26 @@ export declare class SnapshotAddon extends BaseAddon<SnapshotAddonConfig> {
|
|
|
433
442
|
*/
|
|
434
443
|
private stateImage;
|
|
435
444
|
/**
|
|
436
|
-
* Single-trip device lookup against device-manager
|
|
437
|
-
*
|
|
438
|
-
*
|
|
439
|
-
*
|
|
440
|
-
*
|
|
445
|
+
* Single-trip device lookup against device-manager — memoized for
|
|
446
|
+
* {@link DEVICE_META_MEMO_MS} (promise-keyed, so bursts single-flight).
|
|
447
|
+
* Registry facts only; nothing battery-runtime lives here, so the TTL never
|
|
448
|
+
* masks a sleep/wake transition. Announced changes evict immediately (the
|
|
449
|
+
* `device.*` subscriptions in `onInitialize`); the TTL bounds silent drift.
|
|
450
|
+
*/
|
|
451
|
+
private lookupDeviceMeta;
|
|
452
|
+
/**
|
|
453
|
+
* The actual `deviceManager.getDevice` round trip behind
|
|
454
|
+
* {@link lookupDeviceMeta}. Returns the stable registry fields the wrapper
|
|
455
|
+
* consults. Battery classification is completed by `resolveSnapshotState`
|
|
456
|
+
* from this feature flag PLUS the canonical runtime-state mirror, so a stale
|
|
457
|
+
* persisted feature projection cannot authorize a snapshot dial against a
|
|
458
|
+
* known sleeping battery camera.
|
|
441
459
|
*
|
|
442
460
|
* Logged at debug + null return on failure: every call site already
|
|
443
461
|
* has a sensible fallback path (cache hit, conservative default, …),
|
|
444
462
|
* so we don't want a transient device-manager hiccup to throw.
|
|
445
463
|
*/
|
|
446
|
-
private
|
|
464
|
+
private fetchDeviceMeta;
|
|
447
465
|
/** Settings-UI helper — battery flag drives the default max-age in the field description. */
|
|
448
466
|
private isDeviceBattery;
|
|
449
467
|
/**
|
|
@@ -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-uhKRdmyc.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 { V as filesystemBrowseCapability, pt as storageProviderCapability, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { V as filesystemBrowseCapability, pt as storageProviderCapability, yt as BaseAddon } from "../../dist-6JUfbDpM.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";
|
|
@@ -36,6 +36,12 @@ export interface QueryFilterInput {
|
|
|
36
36
|
readonly where?: Readonly<Record<string, unknown>>;
|
|
37
37
|
readonly whereIn?: Readonly<Record<string, readonly unknown[]>>;
|
|
38
38
|
readonly whereBetween?: Readonly<Record<string, readonly [unknown, unknown]>>;
|
|
39
|
+
/**
|
|
40
|
+
* NULL-safe exclusion, compiled as `(expr IS NULL OR expr != ?)`. SQL `!=`
|
|
41
|
+
* alone drops NULL rows, and on a nullable column those are precisely the
|
|
42
|
+
* rows a "not this kind" filter must keep (they predate the column).
|
|
43
|
+
*/
|
|
44
|
+
readonly whereNot?: Readonly<Record<string, unknown>>;
|
|
39
45
|
}
|
|
40
46
|
/**
|
|
41
47
|
* The predicate-only filter a bulk mutation accepts — no ordering, no limit.
|
|
@@ -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-uhKRdmyc.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
8
|
let node_fs = require("node:fs");
|
|
9
9
|
let node_module = require("node:module");
|
|
@@ -308,6 +308,12 @@ function compileFilter$1(filter, shape, mode, serialize) {
|
|
|
308
308
|
clauses.push(`${expr} BETWEEN ? AND ?`);
|
|
309
309
|
params.push(serialize(low), serialize(high));
|
|
310
310
|
}
|
|
311
|
+
for (const [field, value] of Object.entries(filter?.whereNot ?? {})) {
|
|
312
|
+
const expr = resolve(field);
|
|
313
|
+
if (expr === null) continue;
|
|
314
|
+
clauses.push(`(${expr} IS NULL OR ${expr} != ?)`);
|
|
315
|
+
params.push(serialize(value));
|
|
316
|
+
}
|
|
311
317
|
if (clauses.length === 0 && mode === "mutate") throw new UnsafeFilterError("filter compiled to no predicate — that would affect every row in the collection; use the explicit clear operation if that is the intent");
|
|
312
318
|
return {
|
|
313
319
|
whereSql: clauses.length > 0 ? ` WHERE ${clauses.join(" AND ")}` : "",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as dataStoreProviderCapability, Bt as parseJsonUnknown, _t as vectorStoreCapability, f as RUNTIME_DEFAULTS, gt as vectorDimFromBase64, j as decodeVectorBase64, kt as asJsonObject, vt as errMsg, w as bareAddonId, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { A as dataStoreProviderCapability, Bt as parseJsonUnknown, _t as vectorStoreCapability, f as RUNTIME_DEFAULTS, gt as vectorDimFromBase64, j as decodeVectorBase64, kt as asJsonObject, vt as errMsg, w as bareAddonId, yt as BaseAddon } from "../../dist-6JUfbDpM.mjs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
4
|
import { statSync } from "node:fs";
|
|
@@ -302,6 +302,12 @@ function compileFilter$1(filter, shape, mode, serialize) {
|
|
|
302
302
|
clauses.push(`${expr} BETWEEN ? AND ?`);
|
|
303
303
|
params.push(serialize(low), serialize(high));
|
|
304
304
|
}
|
|
305
|
+
for (const [field, value] of Object.entries(filter?.whereNot ?? {})) {
|
|
306
|
+
const expr = resolve(field);
|
|
307
|
+
if (expr === null) continue;
|
|
308
|
+
clauses.push(`(${expr} IS NULL OR ${expr} != ?)`);
|
|
309
|
+
params.push(serialize(value));
|
|
310
|
+
}
|
|
305
311
|
if (clauses.length === 0 && mode === "mutate") throw new UnsafeFilterError("filter compiled to no predicate — that would affect every row in the collection; use the explicit clear operation if that is the intent");
|
|
306
312
|
return {
|
|
307
313
|
whereSql: clauses.length > 0 ? ` WHERE ${clauses.join(" AND ")}` : "",
|
|
@@ -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-uhKRdmyc.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
8
|
let node_fs_promises = require("node:fs/promises");
|
|
9
9
|
node_fs_promises = require_chunk.__toESM(node_fs_promises);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { dt as storageCapability, ft as storageMigrationCapability, g as StorageMigrationJobSchema, h as StorageLocationTypeSchema, lt as settingsStoreCapability, yt as BaseAddon, zt as parseJsonObject } from "../../dist-
|
|
1
|
+
import { dt as storageCapability, ft as storageMigrationCapability, g as StorageMigrationJobSchema, h as StorageLocationTypeSchema, lt as settingsStoreCapability, yt as BaseAddon, zt as parseJsonObject } from "../../dist-6JUfbDpM.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import * as fs from "node:fs/promises";
|
|
4
4
|
import * as path$1 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-uhKRdmyc.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 { It as hydrateSchema, vt as errMsg, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { It as hydrateSchema, vt as errMsg, yt as BaseAddon } from "../../dist-6JUfbDpM.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-uhKRdmyc.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 { X as logDestinationCapability, yt as BaseAddon } from "../../dist-
|
|
1
|
+
import { X as logDestinationCapability, yt as BaseAddon } from "../../dist-6JUfbDpM.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";
|
|
@@ -7867,6 +7867,8 @@ var QueryFilterSchema = z.object({
|
|
|
7867
7867
|
where: z.record(z.string(), z.unknown()).optional(),
|
|
7868
7868
|
whereIn: z.record(z.string(), z.array(z.unknown())).optional(),
|
|
7869
7869
|
whereBetween: z.record(z.string(), z.tuple([z.unknown(), z.unknown()])).optional(),
|
|
7870
|
+
/** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
|
|
7871
|
+
whereNot: z.record(z.string(), z.unknown()).optional(),
|
|
7870
7872
|
orderBy: z.object({
|
|
7871
7873
|
field: z.string(),
|
|
7872
7874
|
direction: z.enum(["asc", "desc"])
|
|
@@ -7886,7 +7888,8 @@ var QueryFilterSchema = z.object({
|
|
|
7886
7888
|
var MutationFilterSchema = z.object({
|
|
7887
7889
|
where: z.record(z.string(), z.unknown()).optional(),
|
|
7888
7890
|
whereIn: z.record(z.string(), z.array(z.unknown())).optional(),
|
|
7889
|
-
whereBetween: z.record(z.string(), z.tuple([z.unknown(), z.unknown()])).optional()
|
|
7891
|
+
whereBetween: z.record(z.string(), z.tuple([z.unknown(), z.unknown()])).optional(),
|
|
7892
|
+
whereNot: z.record(z.string(), z.unknown()).optional()
|
|
7890
7893
|
});
|
|
7891
7894
|
/** A single stored record: `{ id, data }`. */
|
|
7892
7895
|
var SettingsRecordSchema = z.object({
|
|
@@ -15016,7 +15019,10 @@ var RecentTracksQueryInput = z.object({
|
|
|
15016
15019
|
* Encodes the (lastSeen, trackId) sort position — treat as opaque. */
|
|
15017
15020
|
cursor: z.string().optional(),
|
|
15018
15021
|
/** See {@link TrackProjectionSchema}. Default `full`. */
|
|
15019
|
-
projection: TrackProjectionSchema.optional()
|
|
15022
|
+
projection: TrackProjectionSchema.optional(),
|
|
15023
|
+
/** Include stationary-promoted rows (parked objects). Default false: the
|
|
15024
|
+
* feed lists passages; parking records live on the stationary registry. */
|
|
15025
|
+
includeStationary: z.boolean().optional()
|
|
15020
15026
|
});
|
|
15021
15027
|
var RecentTracksPageSchema = z.object({
|
|
15022
15028
|
/** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
|
|
@@ -15248,7 +15254,11 @@ var pipelineAnalyticsCapability = {
|
|
|
15248
15254
|
zone: TrackZoneFilterSchema.optional(),
|
|
15249
15255
|
/** See {@link TrackProjectionSchema}. Default `full` (backward
|
|
15250
15256
|
* compatible — omitting the field keeps today's exact behaviour). */
|
|
15251
|
-
projection: TrackProjectionSchema.optional()
|
|
15257
|
+
projection: TrackProjectionSchema.optional(),
|
|
15258
|
+
/** Include stationary-promoted rows (parked objects handed to the
|
|
15259
|
+
* stationary registry). Default false: the timeline lists passages,
|
|
15260
|
+
* not parking records (operator decision, 2026-08-15). */
|
|
15261
|
+
includeStationary: z.boolean().optional()
|
|
15252
15262
|
}), z.array(TrackSchema).readonly()),
|
|
15253
15263
|
/**
|
|
15254
15264
|
* Batched cluster-wide track listing — ONE call for the events page /
|
|
@@ -15739,7 +15749,8 @@ var pipelineAnalyticsCapability = {
|
|
|
15739
15749
|
}),
|
|
15740
15750
|
getEventMedia: method(z.object({
|
|
15741
15751
|
eventId: z.string(),
|
|
15742
|
-
kind: MediaFileKindEnum.optional()
|
|
15752
|
+
kind: MediaFileKindEnum.optional(),
|
|
15753
|
+
deviceId: z.number()
|
|
15743
15754
|
}), z.array(MediaFileSchema).readonly()),
|
|
15744
15755
|
/** All media rows owned by a track. `kinds` narrows to a kind subset so a
|
|
15745
15756
|
* client can fetch the SMALL display variants on open and pull the
|
|
@@ -15747,7 +15758,8 @@ var pipelineAnalyticsCapability = {
|
|
|
15747
15758
|
* Absent ⇒ every kind (back-compat). */
|
|
15748
15759
|
getTrackMedia: method(z.object({
|
|
15749
15760
|
trackId: z.string(),
|
|
15750
|
-
kinds: z.array(MediaFileKindEnum).optional()
|
|
15761
|
+
kinds: z.array(MediaFileKindEnum).optional(),
|
|
15762
|
+
deviceId: z.number()
|
|
15751
15763
|
}), z.array(MediaFileSchema).readonly()),
|
|
15752
15764
|
/**
|
|
15753
15765
|
* What media a track HAS, without any of it.
|
|
@@ -15764,7 +15776,10 @@ var pipelineAnalyticsCapability = {
|
|
|
15764
15776
|
* tell a full-resolution variant existed — and the affordance that opens it
|
|
15765
15777
|
* would silently disappear.
|
|
15766
15778
|
*/
|
|
15767
|
-
listTrackMedia: method(z.object({
|
|
15779
|
+
listTrackMedia: method(z.object({
|
|
15780
|
+
trackId: z.string(),
|
|
15781
|
+
deviceId: z.number()
|
|
15782
|
+
}), z.array(MediaFileInfoSchema).readonly()),
|
|
15768
15783
|
/**
|
|
15769
15784
|
* Search object events by text query using CLIP cosine similarity.
|
|
15770
15785
|
* Encodes `text` via the `embedding-encoder` cap, queries the
|
|
@@ -36442,6 +36457,11 @@ Object.freeze({
|
|
|
36442
36457
|
form: "single",
|
|
36443
36458
|
optional: false
|
|
36444
36459
|
}],
|
|
36460
|
+
"pipelineAnalytics.getEventMedia": [{
|
|
36461
|
+
name: "deviceId",
|
|
36462
|
+
form: "single",
|
|
36463
|
+
optional: false
|
|
36464
|
+
}],
|
|
36445
36465
|
"pipelineAnalytics.getKeyEvents": [{
|
|
36446
36466
|
name: "deviceId",
|
|
36447
36467
|
form: "single",
|
|
@@ -36472,6 +36492,11 @@ Object.freeze({
|
|
|
36472
36492
|
form: "single",
|
|
36473
36493
|
optional: false
|
|
36474
36494
|
}],
|
|
36495
|
+
"pipelineAnalytics.getTrackMedia": [{
|
|
36496
|
+
name: "deviceId",
|
|
36497
|
+
form: "single",
|
|
36498
|
+
optional: false
|
|
36499
|
+
}],
|
|
36475
36500
|
"pipelineAnalytics.getTrainingExportSummary": [{
|
|
36476
36501
|
name: "deviceIds",
|
|
36477
36502
|
form: "array",
|
|
@@ -36507,6 +36532,11 @@ Object.freeze({
|
|
|
36507
36532
|
form: "array",
|
|
36508
36533
|
optional: true
|
|
36509
36534
|
}],
|
|
36535
|
+
"pipelineAnalytics.listTrackMedia": [{
|
|
36536
|
+
name: "deviceId",
|
|
36537
|
+
form: "single",
|
|
36538
|
+
optional: false
|
|
36539
|
+
}],
|
|
36510
36540
|
"pipelineAnalytics.listTracks": [{
|
|
36511
36541
|
name: "deviceId",
|
|
36512
36542
|
form: "single",
|
|
@@ -36947,6 +36977,12 @@ Object.freeze({
|
|
|
36947
36977
|
form: "single",
|
|
36948
36978
|
optional: false
|
|
36949
36979
|
}],
|
|
36980
|
+
"snapshot.getSnapshotLinks": [{
|
|
36981
|
+
name: "targets",
|
|
36982
|
+
form: "object-array",
|
|
36983
|
+
optional: false,
|
|
36984
|
+
itemField: "deviceId"
|
|
36985
|
+
}],
|
|
36950
36986
|
"snapshot.getSnapshotOverview": [{
|
|
36951
36987
|
name: "deviceIds",
|
|
36952
36988
|
form: "array",
|
|
@@ -7867,6 +7867,8 @@ var QueryFilterSchema = zod.z.object({
|
|
|
7867
7867
|
where: zod.z.record(zod.z.string(), zod.z.unknown()).optional(),
|
|
7868
7868
|
whereIn: zod.z.record(zod.z.string(), zod.z.array(zod.z.unknown())).optional(),
|
|
7869
7869
|
whereBetween: zod.z.record(zod.z.string(), zod.z.tuple([zod.z.unknown(), zod.z.unknown()])).optional(),
|
|
7870
|
+
/** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
|
|
7871
|
+
whereNot: zod.z.record(zod.z.string(), zod.z.unknown()).optional(),
|
|
7870
7872
|
orderBy: zod.z.object({
|
|
7871
7873
|
field: zod.z.string(),
|
|
7872
7874
|
direction: zod.z.enum(["asc", "desc"])
|
|
@@ -7886,7 +7888,8 @@ var QueryFilterSchema = zod.z.object({
|
|
|
7886
7888
|
var MutationFilterSchema = zod.z.object({
|
|
7887
7889
|
where: zod.z.record(zod.z.string(), zod.z.unknown()).optional(),
|
|
7888
7890
|
whereIn: zod.z.record(zod.z.string(), zod.z.array(zod.z.unknown())).optional(),
|
|
7889
|
-
whereBetween: zod.z.record(zod.z.string(), zod.z.tuple([zod.z.unknown(), zod.z.unknown()])).optional()
|
|
7891
|
+
whereBetween: zod.z.record(zod.z.string(), zod.z.tuple([zod.z.unknown(), zod.z.unknown()])).optional(),
|
|
7892
|
+
whereNot: zod.z.record(zod.z.string(), zod.z.unknown()).optional()
|
|
7890
7893
|
});
|
|
7891
7894
|
/** A single stored record: `{ id, data }`. */
|
|
7892
7895
|
var SettingsRecordSchema = zod.z.object({
|
|
@@ -15016,7 +15019,10 @@ var RecentTracksQueryInput = zod.z.object({
|
|
|
15016
15019
|
* Encodes the (lastSeen, trackId) sort position — treat as opaque. */
|
|
15017
15020
|
cursor: zod.z.string().optional(),
|
|
15018
15021
|
/** See {@link TrackProjectionSchema}. Default `full`. */
|
|
15019
|
-
projection: TrackProjectionSchema.optional()
|
|
15022
|
+
projection: TrackProjectionSchema.optional(),
|
|
15023
|
+
/** Include stationary-promoted rows (parked objects). Default false: the
|
|
15024
|
+
* feed lists passages; parking records live on the stationary registry. */
|
|
15025
|
+
includeStationary: zod.z.boolean().optional()
|
|
15020
15026
|
});
|
|
15021
15027
|
var RecentTracksPageSchema = zod.z.object({
|
|
15022
15028
|
/** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
|
|
@@ -15248,7 +15254,11 @@ var pipelineAnalyticsCapability = {
|
|
|
15248
15254
|
zone: TrackZoneFilterSchema.optional(),
|
|
15249
15255
|
/** See {@link TrackProjectionSchema}. Default `full` (backward
|
|
15250
15256
|
* compatible — omitting the field keeps today's exact behaviour). */
|
|
15251
|
-
projection: TrackProjectionSchema.optional()
|
|
15257
|
+
projection: TrackProjectionSchema.optional(),
|
|
15258
|
+
/** Include stationary-promoted rows (parked objects handed to the
|
|
15259
|
+
* stationary registry). Default false: the timeline lists passages,
|
|
15260
|
+
* not parking records (operator decision, 2026-08-15). */
|
|
15261
|
+
includeStationary: zod.z.boolean().optional()
|
|
15252
15262
|
}), zod.z.array(TrackSchema).readonly()),
|
|
15253
15263
|
/**
|
|
15254
15264
|
* Batched cluster-wide track listing — ONE call for the events page /
|
|
@@ -15739,7 +15749,8 @@ var pipelineAnalyticsCapability = {
|
|
|
15739
15749
|
}),
|
|
15740
15750
|
getEventMedia: method(zod.z.object({
|
|
15741
15751
|
eventId: zod.z.string(),
|
|
15742
|
-
kind: MediaFileKindEnum.optional()
|
|
15752
|
+
kind: MediaFileKindEnum.optional(),
|
|
15753
|
+
deviceId: zod.z.number()
|
|
15743
15754
|
}), zod.z.array(MediaFileSchema).readonly()),
|
|
15744
15755
|
/** All media rows owned by a track. `kinds` narrows to a kind subset so a
|
|
15745
15756
|
* client can fetch the SMALL display variants on open and pull the
|
|
@@ -15747,7 +15758,8 @@ var pipelineAnalyticsCapability = {
|
|
|
15747
15758
|
* Absent ⇒ every kind (back-compat). */
|
|
15748
15759
|
getTrackMedia: method(zod.z.object({
|
|
15749
15760
|
trackId: zod.z.string(),
|
|
15750
|
-
kinds: zod.z.array(MediaFileKindEnum).optional()
|
|
15761
|
+
kinds: zod.z.array(MediaFileKindEnum).optional(),
|
|
15762
|
+
deviceId: zod.z.number()
|
|
15751
15763
|
}), zod.z.array(MediaFileSchema).readonly()),
|
|
15752
15764
|
/**
|
|
15753
15765
|
* What media a track HAS, without any of it.
|
|
@@ -15764,7 +15776,10 @@ var pipelineAnalyticsCapability = {
|
|
|
15764
15776
|
* tell a full-resolution variant existed — and the affordance that opens it
|
|
15765
15777
|
* would silently disappear.
|
|
15766
15778
|
*/
|
|
15767
|
-
listTrackMedia: method(zod.z.object({
|
|
15779
|
+
listTrackMedia: method(zod.z.object({
|
|
15780
|
+
trackId: zod.z.string(),
|
|
15781
|
+
deviceId: zod.z.number()
|
|
15782
|
+
}), zod.z.array(MediaFileInfoSchema).readonly()),
|
|
15768
15783
|
/**
|
|
15769
15784
|
* Search object events by text query using CLIP cosine similarity.
|
|
15770
15785
|
* Encodes `text` via the `embedding-encoder` cap, queries the
|
|
@@ -36442,6 +36457,11 @@ Object.freeze({
|
|
|
36442
36457
|
form: "single",
|
|
36443
36458
|
optional: false
|
|
36444
36459
|
}],
|
|
36460
|
+
"pipelineAnalytics.getEventMedia": [{
|
|
36461
|
+
name: "deviceId",
|
|
36462
|
+
form: "single",
|
|
36463
|
+
optional: false
|
|
36464
|
+
}],
|
|
36445
36465
|
"pipelineAnalytics.getKeyEvents": [{
|
|
36446
36466
|
name: "deviceId",
|
|
36447
36467
|
form: "single",
|
|
@@ -36472,6 +36492,11 @@ Object.freeze({
|
|
|
36472
36492
|
form: "single",
|
|
36473
36493
|
optional: false
|
|
36474
36494
|
}],
|
|
36495
|
+
"pipelineAnalytics.getTrackMedia": [{
|
|
36496
|
+
name: "deviceId",
|
|
36497
|
+
form: "single",
|
|
36498
|
+
optional: false
|
|
36499
|
+
}],
|
|
36475
36500
|
"pipelineAnalytics.getTrainingExportSummary": [{
|
|
36476
36501
|
name: "deviceIds",
|
|
36477
36502
|
form: "array",
|
|
@@ -36507,6 +36532,11 @@ Object.freeze({
|
|
|
36507
36532
|
form: "array",
|
|
36508
36533
|
optional: true
|
|
36509
36534
|
}],
|
|
36535
|
+
"pipelineAnalytics.listTrackMedia": [{
|
|
36536
|
+
name: "deviceId",
|
|
36537
|
+
form: "single",
|
|
36538
|
+
optional: false
|
|
36539
|
+
}],
|
|
36510
36540
|
"pipelineAnalytics.listTracks": [{
|
|
36511
36541
|
name: "deviceId",
|
|
36512
36542
|
form: "single",
|
|
@@ -36947,6 +36977,12 @@ Object.freeze({
|
|
|
36947
36977
|
form: "single",
|
|
36948
36978
|
optional: false
|
|
36949
36979
|
}],
|
|
36980
|
+
"snapshot.getSnapshotLinks": [{
|
|
36981
|
+
name: "targets",
|
|
36982
|
+
form: "object-array",
|
|
36983
|
+
optional: false,
|
|
36984
|
+
itemField: "deviceId"
|
|
36985
|
+
}],
|
|
36950
36986
|
"snapshot.getSnapshotOverview": [{
|
|
36951
36987
|
name: "deviceIds",
|
|
36952
36988
|
form: "array",
|
package/dist/index.js
CHANGED
|
@@ -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-uhKRdmyc.js");
|
|
4
4
|
const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
|
|
5
5
|
require("./builtins/alerts/index.js");
|
|
6
6
|
const require_formatter = require("./formatter-DqAKDlvN.js");
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM$1, r as __exportAll, t as __commonJSMin$1 } from "./chunk-CNf5ZN-e.mjs";
|
|
2
|
-
import { At as asNumber, B as extractNestedAddonId, Bt as parseJsonUnknown$1, Dt as ReadinessTimeoutError, Et as ReadinessRegistry, Ft as expandCapMethods, Gt as EventCategory$1, H as isArrayOutputSchema, Ht as resolveCapMount, J as lifecycleJobSchema, K as isVoidInput, Mt as createEvent, Nt as emitDownForOwnedCaps, Q as looseSchema, St as DEVICE_STATUS_METHOD, U as isCollectionArrayMethod, Ut as scopeKey, Vt as readinessKey, W as isObjectInput, Z as logLevelAtMost, bt as DATAPLANE_SECRET_HEADER$1, d as METHOD_ACCESS_MAP, f as RUNTIME_DEFAULTS, it as procedureAuthKey, jt as asString$1, kt as asJsonObject$1, ot as scopesAllowAddon, q as kebabToCamel, st as scopesAllowDeviceCap, t as ALL_CAPABILITY_DEFINITIONS, tt as objectInputDeclaresAddonId, vt as errMsg$1, xt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, y as addonSettingsCapability, zt as parseJsonObject } from "./dist-
|
|
2
|
+
import { At as asNumber, B as extractNestedAddonId, Bt as parseJsonUnknown$1, Dt as ReadinessTimeoutError, Et as ReadinessRegistry, Ft as expandCapMethods, Gt as EventCategory$1, H as isArrayOutputSchema, Ht as resolveCapMount, J as lifecycleJobSchema, K as isVoidInput, Mt as createEvent, Nt as emitDownForOwnedCaps, Q as looseSchema, St as DEVICE_STATUS_METHOD, U as isCollectionArrayMethod, Ut as scopeKey, Vt as readinessKey, W as isObjectInput, Z as logLevelAtMost, bt as DATAPLANE_SECRET_HEADER$1, d as METHOD_ACCESS_MAP, f as RUNTIME_DEFAULTS, it as procedureAuthKey, jt as asString$1, kt as asJsonObject$1, ot as scopesAllowAddon, q as kebabToCamel, st as scopesAllowDeviceCap, t as ALL_CAPABILITY_DEFINITIONS, tt as objectInputDeclaresAddonId, vt as errMsg$1, xt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, y as addonSettingsCapability, zt as parseJsonObject } from "./dist-6JUfbDpM.mjs";
|
|
3
3
|
import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
|
|
4
4
|
import "./builtins/alerts/index.mjs";
|
|
5
5
|
import { t as formatLogLine } from "./formatter-B7qW8bPJ.mjs";
|