@camstack/system 1.1.54 → 1.1.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon-runner.js +2 -2
- package/dist/addon-runner.mjs +2 -2
- 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/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/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/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 +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -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-B5C4dVvO.js → dist-CD5HJkAg.js} +186 -5
- package/dist/{dist-DssImRC5.mjs → dist-RlzjLezj.mjs} +186 -5
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{manifest-python-deps-CWom-eqp.mjs → manifest-python-deps-BMKlyabv.mjs} +1 -1
- package/dist/{manifest-python-deps-kkvku9yU.js → manifest-python-deps-BpDOYWC2.js} +1 -1
- package/package.json +1 -1
package/dist/addon-runner.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-Cek0wNdY.js");
|
|
2
|
-
const require_dist = require("./dist-
|
|
3
|
-
const require_manifest_python_deps = require("./manifest-python-deps-
|
|
2
|
+
const require_dist = require("./dist-CD5HJkAg.js");
|
|
3
|
+
const require_manifest_python_deps = require("./manifest-python-deps-BpDOYWC2.js");
|
|
4
4
|
const require_custom_action_registry = require("./custom-action-registry-vLYEFTtv.js");
|
|
5
5
|
let node_fs = require("node:fs");
|
|
6
6
|
node_fs = require_chunk.__toESM(node_fs);
|
package/dist/addon-runner.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { j as isCollectionArrayMethod, t as ALL_CAPABILITY_DEFINITIONS } from "./dist-
|
|
2
|
-
import { F as createUdsLoggerWithControl, I as LocalChildClient, bt as resolveAddonClass, i as createUdsAddonContext, it as setWorkerNativeCapsChangeListener, nt as getWorkerNativeCapSnapshot, ot as validateProviderRegistrations, t as installManifestPythonDeps, tt as getWorkerNativeCapProvider, vt as installManifestNativeDeps } from "./manifest-python-deps-
|
|
1
|
+
import { j as isCollectionArrayMethod, t as ALL_CAPABILITY_DEFINITIONS } from "./dist-RlzjLezj.mjs";
|
|
2
|
+
import { F as createUdsLoggerWithControl, I as LocalChildClient, bt as resolveAddonClass, i as createUdsAddonContext, it as setWorkerNativeCapsChangeListener, nt as getWorkerNativeCapSnapshot, ot as validateProviderRegistrations, t as installManifestPythonDeps, tt as getWorkerNativeCapProvider, vt as installManifestNativeDeps } from "./manifest-python-deps-BMKlyabv.mjs";
|
|
3
3
|
import { t as CustomActionRegistry } from "./custom-action-registry-BEXwC-oo.mjs";
|
|
4
4
|
import { register } from "node:module";
|
|
5
5
|
import * as fs 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-CD5HJkAg.js");
|
|
7
7
|
const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
|
|
8
8
|
let node_fs = require("node:fs");
|
|
9
9
|
node_fs = require_chunk.__toESM(node_fs);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { f as addonPagesCapability, it as BaseAddon, kt as EventCategory, rt as errMsg } from "../../dist-
|
|
1
|
+
import { f as addonPagesCapability, it as BaseAddon, kt as EventCategory, rt as errMsg } from "../../dist-RlzjLezj.mjs";
|
|
2
2
|
import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
|
|
3
3
|
import * as fs from "node:fs";
|
|
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-CD5HJkAg.js");
|
|
7
7
|
const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
|
|
8
8
|
let node_fs = require("node:fs");
|
|
9
9
|
node_fs = require_chunk.__toESM(node_fs);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { it as BaseAddon, kt as EventCategory, m as addonWidgetsCapability, rt as errMsg } from "../../dist-
|
|
1
|
+
import { it as BaseAddon, kt as EventCategory, m as addonWidgetsCapability, rt as errMsg } from "../../dist-RlzjLezj.mjs";
|
|
2
2
|
import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
|
|
3
3
|
import * as fs from "node:fs";
|
|
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-CD5HJkAg.js");
|
|
7
7
|
//#region src/builtins/alerts/alerts.addon.ts
|
|
8
8
|
var CATEGORY_MAPPINGS = {
|
|
9
9
|
"addon.crashed": {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _t as createEvent, h as alertsCapability, it as BaseAddon, kt as EventCategory, n as AlertSchema, rt as errMsg } from "../../dist-
|
|
1
|
+
import { _t as createEvent, h as alertsCapability, it as BaseAddon, kt as EventCategory, n as AlertSchema, rt as errMsg } from "../../dist-RlzjLezj.mjs";
|
|
2
2
|
//#region src/builtins/alerts/alerts.addon.ts
|
|
3
3
|
var CATEGORY_MAPPINGS = {
|
|
4
4
|
"addon.crashed": {
|
|
@@ -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-CD5HJkAg.js");
|
|
7
7
|
let node_fs = require("node:fs");
|
|
8
8
|
let node_fs$1 = require_chunk.__toESM(node_fs, 1);
|
|
9
9
|
node_fs = require_chunk.__toESM(node_fs);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { it as BaseAddon, kt as EventCategory, v as backupCapability } from "../../dist-
|
|
1
|
+
import { it as BaseAddon, kt as EventCategory, v as backupCapability } from "../../dist-RlzjLezj.mjs";
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import Kt from "node:fs";
|
|
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-CD5HJkAg.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 { L as logDestinationCapability, it as BaseAddon } from "../../dist-
|
|
1
|
+
import { L as logDestinationCapability, it as BaseAddon } from "../../dist-RlzjLezj.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 = {
|
|
@@ -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-CD5HJkAg.js");
|
|
7
7
|
let _camstack_types_node = require("@camstack/types/node");
|
|
8
8
|
let zod = require("zod");
|
|
9
9
|
let node_crypto = require("node:crypto");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as evaluateLinkExpression, J as setByPath, Ot as sleep, S as deviceStatusCapability, St as isDeviceConfigCap, T as enumerateSchemaFields, U as parseStreamParamsFormPatch, V as normalizeUnit, a as DeviceStatusSchema, b as deviceManagerCapability, c as STREAM_PROFILE_META, ct as DeviceFeature, et as toExpressionValue, g as applyTransform, i as CAP_NAMES_WITH_STATUS, it as BaseAddon, k as getByPath, kt as EventCategory, lt as DeviceRole, nt as validateExpressionSource, pt as WELL_KNOWN_TAB_MAP, rt as errMsg, t as ALL_CAPABILITY_DEFINITIONS, ut as DeviceType, w as enumerateItemArrayFields, x as deviceStateCapability, y as buildStreamParamsConfigSchema } from "../../dist-
|
|
1
|
+
import { E as evaluateLinkExpression, J as setByPath, Ot as sleep, S as deviceStatusCapability, St as isDeviceConfigCap, T as enumerateSchemaFields, U as parseStreamParamsFormPatch, V as normalizeUnit, a as DeviceStatusSchema, b as deviceManagerCapability, c as STREAM_PROFILE_META, ct as DeviceFeature, et as toExpressionValue, g as applyTransform, i as CAP_NAMES_WITH_STATUS, it as BaseAddon, k as getByPath, kt as EventCategory, lt as DeviceRole, nt as validateExpressionSource, pt as WELL_KNOWN_TAB_MAP, rt as errMsg, t as ALL_CAPABILITY_DEFINITIONS, ut as DeviceType, w as enumerateItemArrayFields, x as deviceStateCapability, y as buildStreamParamsConfigSchema } from "../../dist-RlzjLezj.mjs";
|
|
2
2
|
import { canonicalDeviceFingerprint } from "@camstack/types/node";
|
|
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-CD5HJkAg.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 { C as doorbellCapability, _t as createEvent, it as BaseAddon, kt as EventCategory, rt as errMsg, ut as DeviceType } from "../../dist-
|
|
1
|
+
import { C as doorbellCapability, _t as createEvent, it as BaseAddon, kt as EventCategory, rt as errMsg, ut as DeviceType } from "../../dist-RlzjLezj.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-CD5HJkAg.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 { L as logDestinationCapability, it as BaseAddon } from "../../dist-
|
|
1
|
+
import { L as logDestinationCapability, it as BaseAddon } from "../../dist-RlzjLezj.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;
|
|
@@ -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-CD5HJkAg.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,4 +1,4 @@
|
|
|
1
|
-
import { _ as authProviderCapability, d as UserRecordSchema, it as BaseAddon, l as ScopedTokenSchema, r as ApiKeyRecordSchema, tt as userManagementCapability } from "../../dist-
|
|
1
|
+
import { _ as authProviderCapability, d as UserRecordSchema, it as BaseAddon, l as ScopedTokenSchema, r as ApiKeyRecordSchema, tt as userManagementCapability } from "../../dist-RlzjLezj.mjs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import * as crypto$1 from "node:crypto";
|
|
4
4
|
import { randomUUID } from "node: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-CD5HJkAg.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 { I as localNetworkCapability, it as BaseAddon, kt as EventCategory } from "../../dist-
|
|
1
|
+
import { I as localNetworkCapability, it as BaseAddon, kt as EventCategory } from "../../dist-RlzjLezj.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
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-CD5HJkAg.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,4 +1,4 @@
|
|
|
1
|
-
import { _t as createEvent, it as BaseAddon, kt as EventCategory, z as metricsProviderCapability } from "../../dist-
|
|
1
|
+
import { _t as createEvent, it as BaseAddon, kt as EventCategory, z as metricsProviderCapability } from "../../dist-RlzjLezj.mjs";
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import { execFile, execFileSync } from "node:child_process";
|
|
4
4
|
import { promisify } from "node:util";
|
|
@@ -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-CD5HJkAg.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,4 +1,4 @@
|
|
|
1
|
-
import { W as platformProbeCapability, it as BaseAddon, kt as EventCategory, q as scoreRuntimes, rt as errMsg, yt as emitReadiness } from "../../dist-
|
|
1
|
+
import { W as platformProbeCapability, it as BaseAddon, kt as EventCategory, q as scoreRuntimes, rt as errMsg, yt as emitReadiness } from "../../dist-RlzjLezj.mjs";
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import { execFile } from "node:child_process";
|
|
4
4
|
import { promisify } from "node:util";
|
|
@@ -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-CD5HJkAg.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 { it as BaseAddon, kt as EventCategory } from "../../dist-
|
|
1
|
+
import { it as BaseAddon, kt as EventCategory } from "../../dist-RlzjLezj.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
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-CD5HJkAg.js");
|
|
7
7
|
let node_child_process = require("node:child_process");
|
|
8
8
|
//#region src/builtins/snapshot/snapshot-coalescing.ts
|
|
9
9
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as streamQualityLabel, B as nodePin, X as snapshotCapability, ct as DeviceFeature, it as BaseAddon, rt as errMsg, ut as DeviceType } from "../../dist-
|
|
1
|
+
import { $ as streamQualityLabel, B as nodePin, X as snapshotCapability, ct as DeviceFeature, it as BaseAddon, rt as errMsg, ut as DeviceType } from "../../dist-RlzjLezj.mjs";
|
|
2
2
|
import { execFile } from "node:child_process";
|
|
3
3
|
//#region src/builtins/snapshot/snapshot-coalescing.ts
|
|
4
4
|
/**
|
|
@@ -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-CD5HJkAg.js");
|
|
7
7
|
let node_fs = require("node:fs");
|
|
8
8
|
node_fs = require_chunk.__toESM(node_fs);
|
|
9
9
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { O as filesystemBrowseCapability, Q as storageProviderCapability, it as BaseAddon } from "../../dist-
|
|
1
|
+
import { O as filesystemBrowseCapability, Q as storageProviderCapability, it as BaseAddon } from "../../dist-RlzjLezj.mjs";
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import * as path$1 from "node:path";
|
|
4
4
|
import { basename, dirname, join, resolve, sep } 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-CD5HJkAg.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
8
|
let better_sqlite3 = require("better-sqlite3");
|
|
9
9
|
better_sqlite3 = require_chunk.__toESM(better_sqlite3);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Y as settingsStoreCapability, it as BaseAddon, mt as asJsonObject, rt as errMsg, s as RUNTIME_DEFAULTS, wt as parseJsonUnknown } from "../../dist-
|
|
1
|
+
import { Y as settingsStoreCapability, it as BaseAddon, mt as asJsonObject, rt as errMsg, s as RUNTIME_DEFAULTS, wt as parseJsonUnknown } from "../../dist-RlzjLezj.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import Database from "better-sqlite3";
|
|
4
4
|
//#region src/builtins/sqlite-storage/sqlite-settings-backend.ts
|
|
@@ -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-CD5HJkAg.js");
|
|
7
7
|
let node_path = require("node:path");
|
|
8
8
|
node_path = require_chunk.__toESM(node_path);
|
|
9
9
|
let node_fs_promises = require("node:fs/promises");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ct as parseJsonObject, Z as storageCapability, it as BaseAddon, u as StorageLocationTypeSchema } from "../../dist-
|
|
1
|
+
import { Ct as parseJsonObject, Z as storageCapability, it as BaseAddon, u as StorageLocationTypeSchema } from "../../dist-RlzjLezj.mjs";
|
|
2
2
|
import * as path$1 from "node:path";
|
|
3
3
|
import * as fs from "node:fs/promises";
|
|
4
4
|
import { buildStorageLocationRegistry } from "@camstack/system";
|
|
@@ -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-CD5HJkAg.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 BaseAddon, rt as errMsg, xt as hydrateSchema } from "../../dist-
|
|
1
|
+
import { it as BaseAddon, rt as errMsg, xt as hydrateSchema } from "../../dist-RlzjLezj.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-CD5HJkAg.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 { L as logDestinationCapability, it as BaseAddon } from "../../dist-
|
|
1
|
+
import { L as logDestinationCapability, it as BaseAddon } from "../../dist-RlzjLezj.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";
|
|
@@ -3343,6 +3343,62 @@ var RecordingConfigSchema = zod.z.object({
|
|
|
3343
3343
|
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
3344
3344
|
});
|
|
3345
3345
|
/**
|
|
3346
|
+
* Ops-log — the durable, append-only operations audit shared by the
|
|
3347
|
+
* recordings and events management surfaces.
|
|
3348
|
+
*
|
|
3349
|
+
* ONE row shape is reused for both domains so a single "Activity" view can
|
|
3350
|
+
* merge the recorder's DurableState ring (recordings ops-log) and the
|
|
3351
|
+
* pipeline-analytics SQLite collection (events ops-log). Each row records a
|
|
3352
|
+
* management operation, WHY it ran (reason), and its measurable effect
|
|
3353
|
+
* (itemsAffected + bytesReclaimed). Writes are best-effort — a failed log must
|
|
3354
|
+
* never fail the operation it records.
|
|
3355
|
+
*/
|
|
3356
|
+
/** Which management domain the operation belongs to. */
|
|
3357
|
+
var OpsLogDomainSchema = zod.z.enum(["recording", "events"]);
|
|
3358
|
+
/** The kind of management operation performed. */
|
|
3359
|
+
var OpsLogOpSchema = zod.z.enum([
|
|
3360
|
+
"prune",
|
|
3361
|
+
"manual-delete",
|
|
3362
|
+
"rescan",
|
|
3363
|
+
"retention-run"
|
|
3364
|
+
]);
|
|
3365
|
+
/** Why the operation ran. */
|
|
3366
|
+
var OpsLogReasonSchema = zod.z.enum([
|
|
3367
|
+
"retention",
|
|
3368
|
+
"quota",
|
|
3369
|
+
"manual",
|
|
3370
|
+
"operator"
|
|
3371
|
+
]);
|
|
3372
|
+
/** One audit row, shared verbatim by both domains. */
|
|
3373
|
+
var OpsLogEntrySchema = zod.z.object({
|
|
3374
|
+
/** Unique row id. */
|
|
3375
|
+
id: zod.z.string(),
|
|
3376
|
+
/** Epoch ms the operation completed. */
|
|
3377
|
+
at: zod.z.number(),
|
|
3378
|
+
domain: OpsLogDomainSchema,
|
|
3379
|
+
op: OpsLogOpSchema,
|
|
3380
|
+
reason: OpsLogReasonSchema,
|
|
3381
|
+
/** The camera the op targeted; null for a cluster/global op. */
|
|
3382
|
+
deviceId: zod.z.number().nullable(),
|
|
3383
|
+
/** Node that performed the op (the log carries nodeId — no cross-node aggregation). */
|
|
3384
|
+
nodeId: zod.z.string(),
|
|
3385
|
+
/** Buckets / rows deleted (op-specific unit). */
|
|
3386
|
+
itemsAffected: zod.z.number(),
|
|
3387
|
+
/** Bytes reclaimed by the op (0 when not measurable). */
|
|
3388
|
+
bytesReclaimed: zod.z.number(),
|
|
3389
|
+
/** Free-text detail (e.g. "floor moved to <ts>"); null when none. */
|
|
3390
|
+
detail: zod.z.string().nullable(),
|
|
3391
|
+
/** Who/what triggered the op. */
|
|
3392
|
+
actor: zod.z.string()
|
|
3393
|
+
});
|
|
3394
|
+
/** Shared query input for the per-domain `listOpsLog` cap methods. */
|
|
3395
|
+
var OpsLogQueryInputSchema = zod.z.object({
|
|
3396
|
+
/** Restrict to a single camera; omit for every row. */
|
|
3397
|
+
deviceId: zod.z.number().optional(),
|
|
3398
|
+
/** Max rows returned, newest-first. */
|
|
3399
|
+
limit: zod.z.number().int().min(1).max(1e3).optional()
|
|
3400
|
+
});
|
|
3401
|
+
/**
|
|
3346
3402
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
3347
3403
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
3348
3404
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -11238,9 +11294,10 @@ var zoneRulesCapability = {
|
|
|
11238
11294
|
* `package` backs the package-drop detector — a package zone is a
|
|
11239
11295
|
* `ZoneRule` on the `'package'` stage referencing drawn polygons
|
|
11240
11296
|
* (see docs/superpowers/specs/2026-07-17-package-zones-design.md §3.1).
|
|
11241
|
-
* The orchestrator provider
|
|
11242
|
-
*
|
|
11243
|
-
* consumers read
|
|
11297
|
+
* The orchestrator provider writes this stage as a first-class slice
|
|
11298
|
+
* (Phase 4): every mutation mirrors the full `{motion, detection,
|
|
11299
|
+
* package}` shape, so consumers read the current package rules directly
|
|
11300
|
+
* off `device.state.zoneRules.value.package`.
|
|
11244
11301
|
*/
|
|
11245
11302
|
runtimeState: zod.z.object({
|
|
11246
11303
|
motion: zod.z.array(ZoneRuleSchema).readonly(),
|
|
@@ -16161,6 +16218,26 @@ var TrackCascadeCountsSchema = zod.z.object({
|
|
|
16161
16218
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
16162
16219
|
embeddings: zod.z.number().int()
|
|
16163
16220
|
});
|
|
16221
|
+
/** Event-store footprint for one camera. */
|
|
16222
|
+
var EventStoreDeviceFootprintSchema = zod.z.object({
|
|
16223
|
+
deviceId: zod.z.number(),
|
|
16224
|
+
/** Persisted event rows (motion + object + audio) for the camera. */
|
|
16225
|
+
rows: zod.z.number().int(),
|
|
16226
|
+
/** Event-owned media bytes on disk for the camera. */
|
|
16227
|
+
bytes: zod.z.number().int()
|
|
16228
|
+
});
|
|
16229
|
+
/** Aggregate event-store footprint: global totals + per-camera breakdown. */
|
|
16230
|
+
var EventStoreFootprintSchema = zod.z.object({
|
|
16231
|
+
totalRows: zod.z.number().int(),
|
|
16232
|
+
totalBytes: zod.z.number().int(),
|
|
16233
|
+
devices: zod.z.array(EventStoreDeviceFootprintSchema).readonly()
|
|
16234
|
+
});
|
|
16235
|
+
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
16236
|
+
var EventPruneCountsSchema = zod.z.object({
|
|
16237
|
+
motion: zod.z.number().int(),
|
|
16238
|
+
object: zod.z.number().int(),
|
|
16239
|
+
audio: zod.z.number().int()
|
|
16240
|
+
});
|
|
16164
16241
|
var pipelineAnalyticsCapability = {
|
|
16165
16242
|
name: "pipeline-analytics",
|
|
16166
16243
|
scope: "device",
|
|
@@ -16322,6 +16399,45 @@ var pipelineAnalyticsCapability = {
|
|
|
16322
16399
|
kind: "mutation",
|
|
16323
16400
|
auth: "admin"
|
|
16324
16401
|
}),
|
|
16402
|
+
/**
|
|
16403
|
+
* Durable event-store footprint for the management UI: event rows
|
|
16404
|
+
* (motion + object + audio) counted per camera + total, plus the
|
|
16405
|
+
* event-owned media bytes on disk per camera + total. Stat/count-based,
|
|
16406
|
+
* computed on demand.
|
|
16407
|
+
*/
|
|
16408
|
+
getEventStoreFootprint: method(zod.z.object({}), EventStoreFootprintSchema, {
|
|
16409
|
+
kind: "query",
|
|
16410
|
+
auth: "admin"
|
|
16411
|
+
}),
|
|
16412
|
+
/**
|
|
16413
|
+
* Cluster-wide prune of events older than `olderThanMs` (exclusive) across
|
|
16414
|
+
* every camera, deleting each event's media in lockstep. Logged to the
|
|
16415
|
+
* events ops-log with `reason` (default `'retention'`). Returns the summed
|
|
16416
|
+
* per-kind deleted counts.
|
|
16417
|
+
*/
|
|
16418
|
+
pruneEvents: method(zod.z.object({
|
|
16419
|
+
olderThanMs: zod.z.number(),
|
|
16420
|
+
reason: OpsLogReasonSchema.optional()
|
|
16421
|
+
}), EventPruneCountsSchema, {
|
|
16422
|
+
kind: "mutation",
|
|
16423
|
+
auth: "admin"
|
|
16424
|
+
}),
|
|
16425
|
+
/**
|
|
16426
|
+
* Manually delete EVERY event (motion + object + audio) for one camera and
|
|
16427
|
+
* its event-owned media in lockstep. Logged to the events ops-log as
|
|
16428
|
+
* `op:'manual-delete', reason:'manual'`. Destructive — the admin UI guards
|
|
16429
|
+
* it behind a confirm.
|
|
16430
|
+
*/
|
|
16431
|
+
deleteDeviceEvents: method(zod.z.object({ deviceId: zod.z.number() }), EventPruneCountsSchema, {
|
|
16432
|
+
kind: "mutation",
|
|
16433
|
+
auth: "admin"
|
|
16434
|
+
}),
|
|
16435
|
+
/** The events ops-log rows (newest-first), optionally scoped to one camera.
|
|
16436
|
+
* Backed by a declared pipeline-analytics SQLite collection. */
|
|
16437
|
+
listOpsLog: method(OpsLogQueryInputSchema, zod.z.array(OpsLogEntrySchema).readonly(), {
|
|
16438
|
+
kind: "query",
|
|
16439
|
+
auth: "admin"
|
|
16440
|
+
}),
|
|
16325
16441
|
getEventMedia: method(zod.z.object({
|
|
16326
16442
|
eventId: zod.z.string(),
|
|
16327
16443
|
kind: MediaFileKindEnum.optional()
|
|
@@ -20945,14 +21061,43 @@ var recordingCapability = {
|
|
|
20945
21061
|
auth: "admin"
|
|
20946
21062
|
}),
|
|
20947
21063
|
/** Apply this device's retention policy to footage now; returns the oldest
|
|
20948
|
-
* surviving footage start (the retention floor) or null if no footage.
|
|
20949
|
-
|
|
21064
|
+
* surviving footage start (the retention floor) or null if no footage. The
|
|
21065
|
+
* prune is logged to the recordings ops-log with `reason` (default
|
|
21066
|
+
* `'retention'` — the policy-driven prune; `'quota'` when disk-pressure
|
|
21067
|
+
* triggered). */
|
|
21068
|
+
pruneFootage: method(zod.z.object({
|
|
21069
|
+
deviceId: zod.z.number(),
|
|
21070
|
+
reason: OpsLogReasonSchema.optional()
|
|
21071
|
+
}), zod.z.object({
|
|
20950
21072
|
floorMs: zod.z.number().nullable(),
|
|
20951
21073
|
deletedBuckets: zod.z.number().int(),
|
|
20952
21074
|
reclaimedBytes: zod.z.number().int()
|
|
20953
21075
|
}), {
|
|
20954
21076
|
kind: "mutation",
|
|
20955
21077
|
auth: "admin"
|
|
21078
|
+
}),
|
|
21079
|
+
/**
|
|
21080
|
+
* Manually delete a camera's footage — the whole footprint, or a
|
|
21081
|
+
* `[fromMs, toMs)` window when either bound is given. Logged to the
|
|
21082
|
+
* recordings ops-log as `op:'manual-delete', reason:'manual'`. Destructive:
|
|
21083
|
+
* the admin UI guards it behind a confirm.
|
|
21084
|
+
*/
|
|
21085
|
+
deleteFootprint: method(zod.z.object({
|
|
21086
|
+
deviceId: zod.z.number(),
|
|
21087
|
+
fromMs: zod.z.number().optional(),
|
|
21088
|
+
toMs: zod.z.number().optional()
|
|
21089
|
+
}), zod.z.object({
|
|
21090
|
+
deletedBuckets: zod.z.number().int(),
|
|
21091
|
+
reclaimedBytes: zod.z.number().int()
|
|
21092
|
+
}), {
|
|
21093
|
+
kind: "mutation",
|
|
21094
|
+
auth: "admin"
|
|
21095
|
+
}),
|
|
21096
|
+
/** The recordings ops-log rows (newest-first), optionally scoped to one
|
|
21097
|
+
* camera. Backed by the recorder's bounded DurableState ring. */
|
|
21098
|
+
listOpsLog: method(OpsLogQueryInputSchema, zod.z.array(OpsLogEntrySchema).readonly(), {
|
|
21099
|
+
kind: "query",
|
|
21100
|
+
auth: "admin"
|
|
20956
21101
|
})
|
|
20957
21102
|
}
|
|
20958
21103
|
};
|
|
@@ -24655,6 +24800,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
24655
24800
|
addonId: null,
|
|
24656
24801
|
access: "delete"
|
|
24657
24802
|
},
|
|
24803
|
+
"pipelineAnalytics.deleteDeviceEvents": {
|
|
24804
|
+
capName: "pipeline-analytics",
|
|
24805
|
+
capScope: "device",
|
|
24806
|
+
addonId: null,
|
|
24807
|
+
access: "delete"
|
|
24808
|
+
},
|
|
24658
24809
|
"pipelineAnalytics.deleteTracks": {
|
|
24659
24810
|
capName: "pipeline-analytics",
|
|
24660
24811
|
capScope: "device",
|
|
@@ -24685,6 +24836,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
24685
24836
|
addonId: null,
|
|
24686
24837
|
access: "view"
|
|
24687
24838
|
},
|
|
24839
|
+
"pipelineAnalytics.getEventStoreFootprint": {
|
|
24840
|
+
capName: "pipeline-analytics",
|
|
24841
|
+
capScope: "device",
|
|
24842
|
+
addonId: null,
|
|
24843
|
+
access: "view"
|
|
24844
|
+
},
|
|
24688
24845
|
"pipelineAnalytics.getKeyEvents": {
|
|
24689
24846
|
capName: "pipeline-analytics",
|
|
24690
24847
|
capScope: "device",
|
|
@@ -24727,6 +24884,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
24727
24884
|
addonId: null,
|
|
24728
24885
|
access: "view"
|
|
24729
24886
|
},
|
|
24887
|
+
"pipelineAnalytics.listOpsLog": {
|
|
24888
|
+
capName: "pipeline-analytics",
|
|
24889
|
+
capScope: "device",
|
|
24890
|
+
addonId: null,
|
|
24891
|
+
access: "view"
|
|
24892
|
+
},
|
|
24730
24893
|
"pipelineAnalytics.listRecentTracks": {
|
|
24731
24894
|
capName: "pipeline-analytics",
|
|
24732
24895
|
capScope: "device",
|
|
@@ -24739,6 +24902,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
24739
24902
|
addonId: null,
|
|
24740
24903
|
access: "view"
|
|
24741
24904
|
},
|
|
24905
|
+
"pipelineAnalytics.pruneEvents": {
|
|
24906
|
+
capName: "pipeline-analytics",
|
|
24907
|
+
capScope: "device",
|
|
24908
|
+
addonId: null,
|
|
24909
|
+
access: "create"
|
|
24910
|
+
},
|
|
24742
24911
|
"pipelineAnalytics.pruneEventsBefore": {
|
|
24743
24912
|
capName: "pipeline-analytics",
|
|
24744
24913
|
capScope: "device",
|
|
@@ -25501,6 +25670,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
25501
25670
|
addonId: null,
|
|
25502
25671
|
access: "create"
|
|
25503
25672
|
},
|
|
25673
|
+
"recording.deleteFootprint": {
|
|
25674
|
+
capName: "recording",
|
|
25675
|
+
capScope: "system",
|
|
25676
|
+
addonId: null,
|
|
25677
|
+
access: "delete"
|
|
25678
|
+
},
|
|
25504
25679
|
"recording.getAvailability": {
|
|
25505
25680
|
capName: "recording",
|
|
25506
25681
|
capScope: "system",
|
|
@@ -25531,6 +25706,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
25531
25706
|
addonId: null,
|
|
25532
25707
|
access: "view"
|
|
25533
25708
|
},
|
|
25709
|
+
"recording.listOpsLog": {
|
|
25710
|
+
capName: "recording",
|
|
25711
|
+
capScope: "system",
|
|
25712
|
+
addonId: null,
|
|
25713
|
+
access: "view"
|
|
25714
|
+
},
|
|
25534
25715
|
"recording.locateSegment": {
|
|
25535
25716
|
capName: "recording",
|
|
25536
25717
|
capScope: "system",
|
|
@@ -3343,6 +3343,62 @@ var RecordingConfigSchema = z.object({
|
|
|
3343
3343
|
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
3344
3344
|
});
|
|
3345
3345
|
/**
|
|
3346
|
+
* Ops-log — the durable, append-only operations audit shared by the
|
|
3347
|
+
* recordings and events management surfaces.
|
|
3348
|
+
*
|
|
3349
|
+
* ONE row shape is reused for both domains so a single "Activity" view can
|
|
3350
|
+
* merge the recorder's DurableState ring (recordings ops-log) and the
|
|
3351
|
+
* pipeline-analytics SQLite collection (events ops-log). Each row records a
|
|
3352
|
+
* management operation, WHY it ran (reason), and its measurable effect
|
|
3353
|
+
* (itemsAffected + bytesReclaimed). Writes are best-effort — a failed log must
|
|
3354
|
+
* never fail the operation it records.
|
|
3355
|
+
*/
|
|
3356
|
+
/** Which management domain the operation belongs to. */
|
|
3357
|
+
var OpsLogDomainSchema = z.enum(["recording", "events"]);
|
|
3358
|
+
/** The kind of management operation performed. */
|
|
3359
|
+
var OpsLogOpSchema = z.enum([
|
|
3360
|
+
"prune",
|
|
3361
|
+
"manual-delete",
|
|
3362
|
+
"rescan",
|
|
3363
|
+
"retention-run"
|
|
3364
|
+
]);
|
|
3365
|
+
/** Why the operation ran. */
|
|
3366
|
+
var OpsLogReasonSchema = z.enum([
|
|
3367
|
+
"retention",
|
|
3368
|
+
"quota",
|
|
3369
|
+
"manual",
|
|
3370
|
+
"operator"
|
|
3371
|
+
]);
|
|
3372
|
+
/** One audit row, shared verbatim by both domains. */
|
|
3373
|
+
var OpsLogEntrySchema = z.object({
|
|
3374
|
+
/** Unique row id. */
|
|
3375
|
+
id: z.string(),
|
|
3376
|
+
/** Epoch ms the operation completed. */
|
|
3377
|
+
at: z.number(),
|
|
3378
|
+
domain: OpsLogDomainSchema,
|
|
3379
|
+
op: OpsLogOpSchema,
|
|
3380
|
+
reason: OpsLogReasonSchema,
|
|
3381
|
+
/** The camera the op targeted; null for a cluster/global op. */
|
|
3382
|
+
deviceId: z.number().nullable(),
|
|
3383
|
+
/** Node that performed the op (the log carries nodeId — no cross-node aggregation). */
|
|
3384
|
+
nodeId: z.string(),
|
|
3385
|
+
/** Buckets / rows deleted (op-specific unit). */
|
|
3386
|
+
itemsAffected: z.number(),
|
|
3387
|
+
/** Bytes reclaimed by the op (0 when not measurable). */
|
|
3388
|
+
bytesReclaimed: z.number(),
|
|
3389
|
+
/** Free-text detail (e.g. "floor moved to <ts>"); null when none. */
|
|
3390
|
+
detail: z.string().nullable(),
|
|
3391
|
+
/** Who/what triggered the op. */
|
|
3392
|
+
actor: z.string()
|
|
3393
|
+
});
|
|
3394
|
+
/** Shared query input for the per-domain `listOpsLog` cap methods. */
|
|
3395
|
+
var OpsLogQueryInputSchema = z.object({
|
|
3396
|
+
/** Restrict to a single camera; omit for every row. */
|
|
3397
|
+
deviceId: z.number().optional(),
|
|
3398
|
+
/** Max rows returned, newest-first. */
|
|
3399
|
+
limit: z.number().int().min(1).max(1e3).optional()
|
|
3400
|
+
});
|
|
3401
|
+
/**
|
|
3346
3402
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
3347
3403
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
3348
3404
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -11238,9 +11294,10 @@ var zoneRulesCapability = {
|
|
|
11238
11294
|
* `package` backs the package-drop detector — a package zone is a
|
|
11239
11295
|
* `ZoneRule` on the `'package'` stage referencing drawn polygons
|
|
11240
11296
|
* (see docs/superpowers/specs/2026-07-17-package-zones-design.md §3.1).
|
|
11241
|
-
* The orchestrator provider
|
|
11242
|
-
*
|
|
11243
|
-
* consumers read
|
|
11297
|
+
* The orchestrator provider writes this stage as a first-class slice
|
|
11298
|
+
* (Phase 4): every mutation mirrors the full `{motion, detection,
|
|
11299
|
+
* package}` shape, so consumers read the current package rules directly
|
|
11300
|
+
* off `device.state.zoneRules.value.package`.
|
|
11244
11301
|
*/
|
|
11245
11302
|
runtimeState: z.object({
|
|
11246
11303
|
motion: z.array(ZoneRuleSchema).readonly(),
|
|
@@ -16161,6 +16218,26 @@ var TrackCascadeCountsSchema = z.object({
|
|
|
16161
16218
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
16162
16219
|
embeddings: z.number().int()
|
|
16163
16220
|
});
|
|
16221
|
+
/** Event-store footprint for one camera. */
|
|
16222
|
+
var EventStoreDeviceFootprintSchema = z.object({
|
|
16223
|
+
deviceId: z.number(),
|
|
16224
|
+
/** Persisted event rows (motion + object + audio) for the camera. */
|
|
16225
|
+
rows: z.number().int(),
|
|
16226
|
+
/** Event-owned media bytes on disk for the camera. */
|
|
16227
|
+
bytes: z.number().int()
|
|
16228
|
+
});
|
|
16229
|
+
/** Aggregate event-store footprint: global totals + per-camera breakdown. */
|
|
16230
|
+
var EventStoreFootprintSchema = z.object({
|
|
16231
|
+
totalRows: z.number().int(),
|
|
16232
|
+
totalBytes: z.number().int(),
|
|
16233
|
+
devices: z.array(EventStoreDeviceFootprintSchema).readonly()
|
|
16234
|
+
});
|
|
16235
|
+
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
16236
|
+
var EventPruneCountsSchema = z.object({
|
|
16237
|
+
motion: z.number().int(),
|
|
16238
|
+
object: z.number().int(),
|
|
16239
|
+
audio: z.number().int()
|
|
16240
|
+
});
|
|
16164
16241
|
var pipelineAnalyticsCapability = {
|
|
16165
16242
|
name: "pipeline-analytics",
|
|
16166
16243
|
scope: "device",
|
|
@@ -16322,6 +16399,45 @@ var pipelineAnalyticsCapability = {
|
|
|
16322
16399
|
kind: "mutation",
|
|
16323
16400
|
auth: "admin"
|
|
16324
16401
|
}),
|
|
16402
|
+
/**
|
|
16403
|
+
* Durable event-store footprint for the management UI: event rows
|
|
16404
|
+
* (motion + object + audio) counted per camera + total, plus the
|
|
16405
|
+
* event-owned media bytes on disk per camera + total. Stat/count-based,
|
|
16406
|
+
* computed on demand.
|
|
16407
|
+
*/
|
|
16408
|
+
getEventStoreFootprint: method(z.object({}), EventStoreFootprintSchema, {
|
|
16409
|
+
kind: "query",
|
|
16410
|
+
auth: "admin"
|
|
16411
|
+
}),
|
|
16412
|
+
/**
|
|
16413
|
+
* Cluster-wide prune of events older than `olderThanMs` (exclusive) across
|
|
16414
|
+
* every camera, deleting each event's media in lockstep. Logged to the
|
|
16415
|
+
* events ops-log with `reason` (default `'retention'`). Returns the summed
|
|
16416
|
+
* per-kind deleted counts.
|
|
16417
|
+
*/
|
|
16418
|
+
pruneEvents: method(z.object({
|
|
16419
|
+
olderThanMs: z.number(),
|
|
16420
|
+
reason: OpsLogReasonSchema.optional()
|
|
16421
|
+
}), EventPruneCountsSchema, {
|
|
16422
|
+
kind: "mutation",
|
|
16423
|
+
auth: "admin"
|
|
16424
|
+
}),
|
|
16425
|
+
/**
|
|
16426
|
+
* Manually delete EVERY event (motion + object + audio) for one camera and
|
|
16427
|
+
* its event-owned media in lockstep. Logged to the events ops-log as
|
|
16428
|
+
* `op:'manual-delete', reason:'manual'`. Destructive — the admin UI guards
|
|
16429
|
+
* it behind a confirm.
|
|
16430
|
+
*/
|
|
16431
|
+
deleteDeviceEvents: method(z.object({ deviceId: z.number() }), EventPruneCountsSchema, {
|
|
16432
|
+
kind: "mutation",
|
|
16433
|
+
auth: "admin"
|
|
16434
|
+
}),
|
|
16435
|
+
/** The events ops-log rows (newest-first), optionally scoped to one camera.
|
|
16436
|
+
* Backed by a declared pipeline-analytics SQLite collection. */
|
|
16437
|
+
listOpsLog: method(OpsLogQueryInputSchema, z.array(OpsLogEntrySchema).readonly(), {
|
|
16438
|
+
kind: "query",
|
|
16439
|
+
auth: "admin"
|
|
16440
|
+
}),
|
|
16325
16441
|
getEventMedia: method(z.object({
|
|
16326
16442
|
eventId: z.string(),
|
|
16327
16443
|
kind: MediaFileKindEnum.optional()
|
|
@@ -20945,14 +21061,43 @@ var recordingCapability = {
|
|
|
20945
21061
|
auth: "admin"
|
|
20946
21062
|
}),
|
|
20947
21063
|
/** Apply this device's retention policy to footage now; returns the oldest
|
|
20948
|
-
* surviving footage start (the retention floor) or null if no footage.
|
|
20949
|
-
|
|
21064
|
+
* surviving footage start (the retention floor) or null if no footage. The
|
|
21065
|
+
* prune is logged to the recordings ops-log with `reason` (default
|
|
21066
|
+
* `'retention'` — the policy-driven prune; `'quota'` when disk-pressure
|
|
21067
|
+
* triggered). */
|
|
21068
|
+
pruneFootage: method(z.object({
|
|
21069
|
+
deviceId: z.number(),
|
|
21070
|
+
reason: OpsLogReasonSchema.optional()
|
|
21071
|
+
}), z.object({
|
|
20950
21072
|
floorMs: z.number().nullable(),
|
|
20951
21073
|
deletedBuckets: z.number().int(),
|
|
20952
21074
|
reclaimedBytes: z.number().int()
|
|
20953
21075
|
}), {
|
|
20954
21076
|
kind: "mutation",
|
|
20955
21077
|
auth: "admin"
|
|
21078
|
+
}),
|
|
21079
|
+
/**
|
|
21080
|
+
* Manually delete a camera's footage — the whole footprint, or a
|
|
21081
|
+
* `[fromMs, toMs)` window when either bound is given. Logged to the
|
|
21082
|
+
* recordings ops-log as `op:'manual-delete', reason:'manual'`. Destructive:
|
|
21083
|
+
* the admin UI guards it behind a confirm.
|
|
21084
|
+
*/
|
|
21085
|
+
deleteFootprint: method(z.object({
|
|
21086
|
+
deviceId: z.number(),
|
|
21087
|
+
fromMs: z.number().optional(),
|
|
21088
|
+
toMs: z.number().optional()
|
|
21089
|
+
}), z.object({
|
|
21090
|
+
deletedBuckets: z.number().int(),
|
|
21091
|
+
reclaimedBytes: z.number().int()
|
|
21092
|
+
}), {
|
|
21093
|
+
kind: "mutation",
|
|
21094
|
+
auth: "admin"
|
|
21095
|
+
}),
|
|
21096
|
+
/** The recordings ops-log rows (newest-first), optionally scoped to one
|
|
21097
|
+
* camera. Backed by the recorder's bounded DurableState ring. */
|
|
21098
|
+
listOpsLog: method(OpsLogQueryInputSchema, z.array(OpsLogEntrySchema).readonly(), {
|
|
21099
|
+
kind: "query",
|
|
21100
|
+
auth: "admin"
|
|
20956
21101
|
})
|
|
20957
21102
|
}
|
|
20958
21103
|
};
|
|
@@ -24655,6 +24800,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
24655
24800
|
addonId: null,
|
|
24656
24801
|
access: "delete"
|
|
24657
24802
|
},
|
|
24803
|
+
"pipelineAnalytics.deleteDeviceEvents": {
|
|
24804
|
+
capName: "pipeline-analytics",
|
|
24805
|
+
capScope: "device",
|
|
24806
|
+
addonId: null,
|
|
24807
|
+
access: "delete"
|
|
24808
|
+
},
|
|
24658
24809
|
"pipelineAnalytics.deleteTracks": {
|
|
24659
24810
|
capName: "pipeline-analytics",
|
|
24660
24811
|
capScope: "device",
|
|
@@ -24685,6 +24836,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
24685
24836
|
addonId: null,
|
|
24686
24837
|
access: "view"
|
|
24687
24838
|
},
|
|
24839
|
+
"pipelineAnalytics.getEventStoreFootprint": {
|
|
24840
|
+
capName: "pipeline-analytics",
|
|
24841
|
+
capScope: "device",
|
|
24842
|
+
addonId: null,
|
|
24843
|
+
access: "view"
|
|
24844
|
+
},
|
|
24688
24845
|
"pipelineAnalytics.getKeyEvents": {
|
|
24689
24846
|
capName: "pipeline-analytics",
|
|
24690
24847
|
capScope: "device",
|
|
@@ -24727,6 +24884,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
24727
24884
|
addonId: null,
|
|
24728
24885
|
access: "view"
|
|
24729
24886
|
},
|
|
24887
|
+
"pipelineAnalytics.listOpsLog": {
|
|
24888
|
+
capName: "pipeline-analytics",
|
|
24889
|
+
capScope: "device",
|
|
24890
|
+
addonId: null,
|
|
24891
|
+
access: "view"
|
|
24892
|
+
},
|
|
24730
24893
|
"pipelineAnalytics.listRecentTracks": {
|
|
24731
24894
|
capName: "pipeline-analytics",
|
|
24732
24895
|
capScope: "device",
|
|
@@ -24739,6 +24902,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
24739
24902
|
addonId: null,
|
|
24740
24903
|
access: "view"
|
|
24741
24904
|
},
|
|
24905
|
+
"pipelineAnalytics.pruneEvents": {
|
|
24906
|
+
capName: "pipeline-analytics",
|
|
24907
|
+
capScope: "device",
|
|
24908
|
+
addonId: null,
|
|
24909
|
+
access: "create"
|
|
24910
|
+
},
|
|
24742
24911
|
"pipelineAnalytics.pruneEventsBefore": {
|
|
24743
24912
|
capName: "pipeline-analytics",
|
|
24744
24913
|
capScope: "device",
|
|
@@ -25501,6 +25670,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
25501
25670
|
addonId: null,
|
|
25502
25671
|
access: "create"
|
|
25503
25672
|
},
|
|
25673
|
+
"recording.deleteFootprint": {
|
|
25674
|
+
capName: "recording",
|
|
25675
|
+
capScope: "system",
|
|
25676
|
+
addonId: null,
|
|
25677
|
+
access: "delete"
|
|
25678
|
+
},
|
|
25504
25679
|
"recording.getAvailability": {
|
|
25505
25680
|
capName: "recording",
|
|
25506
25681
|
capScope: "system",
|
|
@@ -25531,6 +25706,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
25531
25706
|
addonId: null,
|
|
25532
25707
|
access: "view"
|
|
25533
25708
|
},
|
|
25709
|
+
"recording.listOpsLog": {
|
|
25710
|
+
capName: "recording",
|
|
25711
|
+
capScope: "system",
|
|
25712
|
+
addonId: null,
|
|
25713
|
+
access: "view"
|
|
25714
|
+
},
|
|
25534
25715
|
"recording.locateSegment": {
|
|
25535
25716
|
capName: "recording",
|
|
25536
25717
|
capScope: "system",
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
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-CD5HJkAg.js");
|
|
4
4
|
const require_model_download_service = require("./model-download-service-hf0ookyy.js");
|
|
5
|
-
const require_manifest_python_deps = require("./manifest-python-deps-
|
|
5
|
+
const require_manifest_python_deps = require("./manifest-python-deps-BpDOYWC2.js");
|
|
6
6
|
const require_resource_monitor = require("./resource-monitor-DNNomR-i.js");
|
|
7
7
|
const require_builtins_sqlite_storage_filesystem_storage_addon = require("./builtins/sqlite-storage/filesystem-storage.addon.js");
|
|
8
8
|
const require_builtins_sqlite_storage_sqlite_settings_addon = require("./builtins/sqlite-storage/sqlite-settings.addon.js");
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { A as isArrayOutputSchema, Ct as parseJsonObject, D as extractNestedAddonId, Dt as scopeKey, Et as resolveCapMount, F as lifecycleJobSchema, G as procedureAuthKey, H as objectInputDeclaresAddonId, M as isObjectInput, N as isVoidInput, P as kebabToCamel, R as looseSchema, Tt as readinessKey, _t as createEvent, at as DATAPLANE_SECRET_HEADER$1, bt as expandCapMethods, dt as ReadinessRegistry, ft as ReadinessTimeoutError, gt as asString$1, ht as asNumber, j as isCollectionArrayMethod, kt as EventCategory$1, mt as asJsonObject$1, o as METHOD_ACCESS_MAP, ot as DEVICE_SETTINGS_CONTRIBUTION_METHODS, p as addonSettingsCapability, rt as errMsg$1, s as RUNTIME_DEFAULTS, st as DEVICE_STATUS_METHOD, t as ALL_CAPABILITY_DEFINITIONS, vt as emitDownForOwnedCaps, wt as parseJsonUnknown$1 } from "./dist-
|
|
1
|
+
import { A as isArrayOutputSchema, Ct as parseJsonObject, D as extractNestedAddonId, Dt as scopeKey, Et as resolveCapMount, F as lifecycleJobSchema, G as procedureAuthKey, H as objectInputDeclaresAddonId, M as isObjectInput, N as isVoidInput, P as kebabToCamel, R as looseSchema, Tt as readinessKey, _t as createEvent, at as DATAPLANE_SECRET_HEADER$1, bt as expandCapMethods, dt as ReadinessRegistry, ft as ReadinessTimeoutError, gt as asString$1, ht as asNumber, j as isCollectionArrayMethod, kt as EventCategory$1, mt as asJsonObject$1, o as METHOD_ACCESS_MAP, ot as DEVICE_SETTINGS_CONTRIBUTION_METHODS, p as addonSettingsCapability, rt as errMsg$1, s as RUNTIME_DEFAULTS, st as DEVICE_STATUS_METHOD, t as ALL_CAPABILITY_DEFINITIONS, vt as emitDownForOwnedCaps, wt as parseJsonUnknown$1 } from "./dist-RlzjLezj.mjs";
|
|
2
2
|
import { a as downloadModel, c as getModelFilePath, d as contentTypeFor, f as createAuthenticatedFileServer, h as resolveFilePath, i as downloadFile, l as isModelDownloaded, m as parseTokenizedUrl, n as collectModelFiles, o as ensureModel, p as parseRangeHeader, r as deleteModelFromDisk, s as fetchJson, t as ModelDownloadService, u as createFileDataPlaneHandler } from "./model-download-service-Cp9f4dk6.mjs";
|
|
3
|
-
import { $ as buildUdsNativeCapProxy, A as createParentUnownedCallHandler, B as AGENT_CAP_FWD_SERVICE, C as buildLinkChain, D as HUB_CAP_FWD_ACTION, E as localProviderLink, F as createUdsLoggerWithControl, G as createLocalTransport, H as CapRouteError, I as LocalChildClient, J as SocketChannel, K as UdsLocalTransportClient, L as LocalChildRegistry, M as createUdsEventBus, N as udsChildLogToWorkerEntry, O as HUB_CAP_FWD_SERVICE, P as createUdsLogger, Q as buildNativeCapProxy, R as UDS_NO_ROUTE_PREFIX, S as brokerTransportLink, T as ipcParentLink, U as classifyCapRoute, V as CapRouteResolver, W as callWithServiceDiscovery, X as FrameDecoder, Y as localEndpointPath, Z as encodeFrame, _ as resolveHwAccel, _t as CapabilityUnavailableError, a as getWorkerDeviceRegistry, at as createAddonService, b as getCapUsageRegistry, bt as resolveAddonClass, c as setHubConnected, ct as capActionName, d as getMoleculerEventStats, dt as capServiceName, et as createBrokerDeviceManagerApi, f as registerEventBusService, ft as parseCapAction, g as createKernelHwAccel, gt as CapabilityHandle, h as AddonDepsManager, ht as DeviceRegistry, i as createUdsAddonContext, j as createUdsEventBridge, k as createHubCapForwardService, l as EVENT_TOPIC_PREFIX, lt as capActionSuffix, m as subscribePassthrough, mt as serializeTypedArrays, n as adaptBrokerToCluster, o as getOrInitReadinessRegistry, ot as validateProviderRegistrations, p as setNodeEventInterest, pt as deserializeTypedArrays, q as UdsLocalTransportServer, r as createAddonContext, rt as mountNativeCapService, s as getOrInitReadinessRegistryForClient, st as NATIVE_PROVIDER_SERVICE_INFIX, t as installManifestPythonDeps, u as getBrokerEventBus, ut as capBareAction, v as CapUsageRegistry, vt as installManifestNativeDeps, w as ipcChildLink, x as brokerCallForCap, xt as createAddonDataPlaneFacility, y as __resetCapUsageRegistryForTests, yt as runNpm, z as AGENT_CAP_FWD_ACTION } from "./manifest-python-deps-
|
|
3
|
+
import { $ as buildUdsNativeCapProxy, A as createParentUnownedCallHandler, B as AGENT_CAP_FWD_SERVICE, C as buildLinkChain, D as HUB_CAP_FWD_ACTION, E as localProviderLink, F as createUdsLoggerWithControl, G as createLocalTransport, H as CapRouteError, I as LocalChildClient, J as SocketChannel, K as UdsLocalTransportClient, L as LocalChildRegistry, M as createUdsEventBus, N as udsChildLogToWorkerEntry, O as HUB_CAP_FWD_SERVICE, P as createUdsLogger, Q as buildNativeCapProxy, R as UDS_NO_ROUTE_PREFIX, S as brokerTransportLink, T as ipcParentLink, U as classifyCapRoute, V as CapRouteResolver, W as callWithServiceDiscovery, X as FrameDecoder, Y as localEndpointPath, Z as encodeFrame, _ as resolveHwAccel, _t as CapabilityUnavailableError, a as getWorkerDeviceRegistry, at as createAddonService, b as getCapUsageRegistry, bt as resolveAddonClass, c as setHubConnected, ct as capActionName, d as getMoleculerEventStats, dt as capServiceName, et as createBrokerDeviceManagerApi, f as registerEventBusService, ft as parseCapAction, g as createKernelHwAccel, gt as CapabilityHandle, h as AddonDepsManager, ht as DeviceRegistry, i as createUdsAddonContext, j as createUdsEventBridge, k as createHubCapForwardService, l as EVENT_TOPIC_PREFIX, lt as capActionSuffix, m as subscribePassthrough, mt as serializeTypedArrays, n as adaptBrokerToCluster, o as getOrInitReadinessRegistry, ot as validateProviderRegistrations, p as setNodeEventInterest, pt as deserializeTypedArrays, q as UdsLocalTransportServer, r as createAddonContext, rt as mountNativeCapService, s as getOrInitReadinessRegistryForClient, st as NATIVE_PROVIDER_SERVICE_INFIX, t as installManifestPythonDeps, u as getBrokerEventBus, ut as capBareAction, v as CapUsageRegistry, vt as installManifestNativeDeps, w as ipcChildLink, x as brokerCallForCap, xt as createAddonDataPlaneFacility, y as __resetCapUsageRegistryForTests, yt as runNpm, z as AGENT_CAP_FWD_ACTION } from "./manifest-python-deps-BMKlyabv.mjs";
|
|
4
4
|
import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-Le3l0qS2.mjs";
|
|
5
5
|
import { FilesystemStorageAddon, t as FilesystemStorageProvider } from "./builtins/sqlite-storage/filesystem-storage.addon.mjs";
|
|
6
6
|
import { SqliteSettingsAddon, t as SqliteSettingsBackend } from "./builtins/sqlite-storage/sqlite-settings.addon.mjs";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { K as readNodePin } from "./dist-
|
|
1
|
+
import { K as readNodePin } from "./dist-RlzjLezj.mjs";
|
|
2
2
|
import { ensureBinary, ensureFfmpeg, ensurePython, installPythonPackages, installPythonRequirements } from "@camstack/types/node";
|
|
3
3
|
import { createServer } from "node:http";
|
|
4
4
|
import * as fs from "node:fs";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-Cek0wNdY.js");
|
|
2
|
-
const require_dist = require("./dist-
|
|
2
|
+
const require_dist = require("./dist-CD5HJkAg.js");
|
|
3
3
|
let _camstack_types_node = require("@camstack/types/node");
|
|
4
4
|
let node_http = require("node:http");
|
|
5
5
|
let node_fs = require("node:fs");
|