@camstack/system 1.2.417 → 1.2.419
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-utils.js +1 -1
- package/dist/addon-utils.mjs +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
- package/dist/builtins/alerts/alerts.addon.js +1 -1
- package/dist/builtins/alerts/alerts.addon.mjs +1 -1
- package/dist/builtins/autotrack/index.js +1 -1
- package/dist/builtins/autotrack/index.mjs +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
- package/dist/builtins/calendars/calendars.addon.js +1 -1
- package/dist/builtins/calendars/calendars.addon.mjs +1 -1
- package/dist/builtins/camera-grid/index.js +1 -1
- package/dist/builtins/camera-grid/index.mjs +1 -1
- package/dist/builtins/composer/composer.addon.js +2 -2
- package/dist/builtins/composer/composer.addon.mjs +2 -2
- 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 +2 -2
- package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
- package/dist/builtins/device-manager/device-manager.addon.js +2 -2
- package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
- package/dist/builtins/hub-forwarder/index.js +1 -1
- package/dist/builtins/hub-forwarder/index.mjs +1 -1
- package/dist/builtins/keychain/index.js +7 -9
- package/dist/builtins/keychain/index.mjs +7 -9
- 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 +2 -2
- package/dist/builtins/local-auth/local-auth.addon.mjs +2 -2
- package/dist/builtins/local-network/local-network.addon.js +2 -2
- package/dist/builtins/local-network/local-network.addon.mjs +2 -2
- 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/amd-npu.d.ts +6 -0
- package/dist/builtins/platform-probe/index.js +317 -19
- package/dist/builtins/platform-probe/index.mjs +318 -20
- package/dist/builtins/platform-probe/platform-scorer.d.ts +4 -0
- package/dist/builtins/platform-probe/windows-hardware.d.ts +77 -0
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
- package/dist/builtins/snapshot/index.js +1 -1
- package/dist/builtins/snapshot/index.mjs +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
- package/dist/builtins/system-config/system-config.addon.js +2 -2
- package/dist/builtins/system-config/system-config.addon.mjs +279 -279
- package/dist/builtins/winston-logging/index.js +1 -1
- package/dist/builtins/winston-logging/index.mjs +1 -1
- package/dist/{composition-sources-CndJVssc.mjs → composition-sources-562ib2dL.mjs} +1 -1
- package/dist/{composition-sources-ChAX2Kdo.js → composition-sources-OaDYklhR.js} +1 -1
- package/dist/{constants-BzxwnfDc.mjs → constants-BeQWXybC.mjs} +1 -1
- package/dist/{constants-VXvZkGgw.js → constants-ik5xtasS.js} +1 -1
- package/dist/{custom-action-registry-DHv0kYcT.mjs → custom-action-registry-BQnbN0DP.mjs} +1 -2
- package/dist/{custom-action-registry-Bb28ibZV.js → custom-action-registry-Bf_YnagS.js} +3 -4
- package/dist/{dist-H_RapIeM.mjs → dist-C0wYvAHC.mjs} +68 -55
- package/dist/{dist-BMOD9OyH.js → dist-DLHPmdoV.js} +67 -72
- package/dist/index.js +38 -10
- package/dist/index.mjs +38 -10
- package/dist/{jwt-signing-key-BiKHENST.js → jwt-signing-key-CWmNKLQi.js} +1 -1
- package/dist/{jwt-signing-key-xQxqpwMC.mjs → jwt-signing-key-dkTVfsLI.mjs} +1 -1
- package/dist/{restore-archive-BobsETEp.js → restore-archive-DZeFVS2l.js} +1 -1
- package/dist/{restore-archive-CCAQicV-.mjs → restore-archive-gGHgAZsz.mjs} +77 -77
- package/dist/{retired-settings-keys-CwL4zHLg.mjs → retired-settings-keys-BHlKEYNL.mjs} +1 -1
- package/dist/{retired-settings-keys-BMq2u4Wv.js → retired-settings-keys-DibNtLmU.js} +1 -1
- package/dist/{tls-C0TRPfqc.js → tls-BgImdxCO.js} +4 -11
- package/dist/{tls-D-2dPY-5.mjs → tls-CaOLZ09W.mjs} +5 -12
- package/package.json +2 -1
- package/dist/amd-npu-B-QyyMyF.js +0 -53
- package/dist/amd-npu-Db_SoSuL.mjs +0 -52
|
@@ -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-DLHPmdoV.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 {
|
|
1
|
+
import { Xt as logDestinationCapability, cr as BaseAddon } from "../../dist-C0wYvAHC.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";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { er as compositionSourceKey, sr as errMsg } from "./dist-C0wYvAHC.mjs";
|
|
2
2
|
//#region src/builtins/core-blocks/composition-sources.ts
|
|
3
3
|
/**
|
|
4
4
|
* Describe what a composition reads and writes for SAVE-time validation
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { P as MODEL_FORMATS, Rt as hfModelUrl, T as HF_REPO } from "./dist-H_RapIeM.mjs";
|
|
2
1
|
import { createHash } from "node:crypto";
|
|
3
2
|
import * as path$1 from "node:path";
|
|
4
3
|
import path from "node:path";
|
|
5
4
|
import * as fs from "node:fs";
|
|
6
5
|
import { createReadStream, promises } from "node:fs";
|
|
7
6
|
import { promisify } from "node:util";
|
|
7
|
+
import { HF_REPO, MODEL_FORMATS, describeCustomActions, hfModelUrl } from "@camstack/types/addon";
|
|
8
8
|
import { createServer } from "node:http";
|
|
9
9
|
import { brotliCompress, constants as constants$1, gzip } from "node:zlib";
|
|
10
10
|
import { PerformanceObserver } from "node:perf_hooks";
|
|
11
|
-
import { describeCustomActions } from "@camstack/types/addon";
|
|
12
11
|
//#region src/download/hosted-model-revisions.ts
|
|
13
12
|
/**
|
|
14
13
|
* GENERATED by `scripts/check-hosted-model-revisions.ts --write` — DO NOT EDIT.
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-Cek0wNdY.js");
|
|
2
|
-
const require_dist = require("./dist-BMOD9OyH.js");
|
|
3
2
|
let node_crypto = require("node:crypto");
|
|
4
3
|
let node_path = require("node:path");
|
|
5
4
|
node_path = require_chunk.__toESM(node_path);
|
|
6
5
|
let node_fs = require("node:fs");
|
|
7
6
|
node_fs = require_chunk.__toESM(node_fs);
|
|
8
7
|
let node_util = require("node:util");
|
|
8
|
+
let _camstack_types_addon = require("@camstack/types/addon");
|
|
9
9
|
let node_http = require("node:http");
|
|
10
10
|
let node_zlib = require("node:zlib");
|
|
11
11
|
let node_perf_hooks = require("node:perf_hooks");
|
|
12
|
-
let _camstack_types_addon = require("@camstack/types/addon");
|
|
13
12
|
//#region src/download/hosted-model-revisions.ts
|
|
14
13
|
/**
|
|
15
14
|
* GENERATED by `scripts/check-hosted-model-revisions.ts --write` — DO NOT EDIT.
|
|
@@ -439,7 +438,7 @@ function readRevisionRecord(modelPath) {
|
|
|
439
438
|
}
|
|
440
439
|
}
|
|
441
440
|
/** The CamStack model mirror. Every artefact under it has a generated revision. */
|
|
442
|
-
var HOSTED_MODEL_MIRROR_PREFIX =
|
|
441
|
+
var HOSTED_MODEL_MIRROR_PREFIX = (0, _camstack_types_addon.hfModelUrl)(_camstack_types_addon.HF_REPO, "");
|
|
443
442
|
/**
|
|
444
443
|
* The revision a format must be at — the ONE rule every model download path
|
|
445
444
|
* reads (D743, D744). An inline `revision` wins; otherwise a format hosted on
|
|
@@ -609,7 +608,7 @@ async function adoptModelRevisions(modelsDir, entries) {
|
|
|
609
608
|
};
|
|
610
609
|
}
|
|
611
610
|
function isModelFormat(value) {
|
|
612
|
-
return
|
|
611
|
+
return _camstack_types_addon.MODEL_FORMATS.some((f) => f === value);
|
|
613
612
|
}
|
|
614
613
|
/** Compute the on-disk path for a given model + format, even when not yet downloaded. */
|
|
615
614
|
function getModelFilePath(modelsDir, entry, format) {
|
|
@@ -718,7 +718,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
718
718
|
return EventCategory;
|
|
719
719
|
}({});
|
|
720
720
|
//#endregion
|
|
721
|
-
//#region ../types/dist/sleep-
|
|
721
|
+
//#region ../types/dist/sleep-vWTnHq9G.mjs
|
|
722
722
|
/**
|
|
723
723
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
724
724
|
* window to float samples (D455).
|
|
@@ -3887,6 +3887,21 @@ function emitDownForOwnedCaps(registry, owned) {
|
|
|
3887
3887
|
for (const { capName, scope } of owned) registry.emitDown(capName, scope);
|
|
3888
3888
|
}
|
|
3889
3889
|
/**
|
|
3890
|
+
* The model weight formats a catalog entry can ship. Schema-free on purpose:
|
|
3891
|
+
* `types/models.ts` builds Zod schemas from it, but a runner-closure consumer
|
|
3892
|
+
* (the model downloader in `@camstack/system`) needs only the list and must
|
|
3893
|
+
* reach it through `@camstack/types/addon` without building the cap schema
|
|
3894
|
+
* graph (D28).
|
|
3895
|
+
*/
|
|
3896
|
+
var MODEL_FORMATS = [
|
|
3897
|
+
"onnx",
|
|
3898
|
+
"coreml",
|
|
3899
|
+
"openvino",
|
|
3900
|
+
"tflite",
|
|
3901
|
+
"pt",
|
|
3902
|
+
"gguf"
|
|
3903
|
+
];
|
|
3904
|
+
/**
|
|
3890
3905
|
* Per-call node pinning for `ctx.api` capability calls.
|
|
3891
3906
|
*
|
|
3892
3907
|
* A capability call normally resolves to its DEFAULT provider — a `singleton`
|
|
@@ -4306,6 +4321,42 @@ var deviceOpsCapability = {
|
|
|
4306
4321
|
getRawState: method(z.object({ deviceId: z.number() }), RawStateResultSchema.nullable(), { auth: "protected" })
|
|
4307
4322
|
}
|
|
4308
4323
|
};
|
|
4324
|
+
/**
|
|
4325
|
+
* Runtime defaults -- used by ConfigManager.get() for backward compatibility
|
|
4326
|
+
* until Plan B wires all runtime settings to the system_settings SQL table.
|
|
4327
|
+
*
|
|
4328
|
+
* Moved from @camstack/system/config-schema to @camstack/types so that
|
|
4329
|
+
* @camstack/system can reference it without a cross-package kernel import.
|
|
4330
|
+
*/
|
|
4331
|
+
var RUNTIME_DEFAULTS = {
|
|
4332
|
+
"features.streaming": true,
|
|
4333
|
+
"features.notifications": true,
|
|
4334
|
+
"features.objectDetection": false,
|
|
4335
|
+
"features.remoteAccess": true,
|
|
4336
|
+
"features.agentCluster": false,
|
|
4337
|
+
"features.smartHome": true,
|
|
4338
|
+
"features.recordings": true,
|
|
4339
|
+
"features.backup": true,
|
|
4340
|
+
"features.repl": true,
|
|
4341
|
+
"retention.detectionEventsDays": 30,
|
|
4342
|
+
"retention.audioLevelsDays": 7,
|
|
4343
|
+
"logging.level": "info",
|
|
4344
|
+
"logging.retentionDays": 30,
|
|
4345
|
+
"eventBus.ringBufferSize": 1e4,
|
|
4346
|
+
"storage.provider": "sqlite-storage",
|
|
4347
|
+
"storage.locations": {
|
|
4348
|
+
data: "camstack-data/data",
|
|
4349
|
+
media: "camstack-data/media",
|
|
4350
|
+
recordings: "camstack-data/recordings",
|
|
4351
|
+
cache: "/tmp/camstack-cache",
|
|
4352
|
+
logs: "camstack-data/logs",
|
|
4353
|
+
models: "camstack-data/models"
|
|
4354
|
+
},
|
|
4355
|
+
providers: [],
|
|
4356
|
+
"ffmpeg.hwAccel": "auto",
|
|
4357
|
+
"ffmpeg.threadCount": 0,
|
|
4358
|
+
"auth.tokenExpiry": "30d"
|
|
4359
|
+
};
|
|
4309
4360
|
function defOf(schema) {
|
|
4310
4361
|
return schema._zod?.def ?? {};
|
|
4311
4362
|
}
|
|
@@ -4765,7 +4816,7 @@ function errMsg(err) {
|
|
|
4765
4816
|
return String(err);
|
|
4766
4817
|
}
|
|
4767
4818
|
//#endregion
|
|
4768
|
-
//#region ../types/dist/composition-
|
|
4819
|
+
//#region ../types/dist/composition-C-WpVYTX.mjs
|
|
4769
4820
|
var AUDIO_ENCODER_BY_CODEC = {
|
|
4770
4821
|
opus: "libopus",
|
|
4771
4822
|
aac: "aac",
|
|
@@ -5209,7 +5260,7 @@ var BASE = `https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${FFM
|
|
|
5209
5260
|
function portable(target) {
|
|
5210
5261
|
return `${BASE}/jellyfin-ffmpeg_${FFMPEG_RELEASE}_portable_${target}-gpl.tar.xz`;
|
|
5211
5262
|
}
|
|
5212
|
-
portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64")
|
|
5263
|
+
portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64"), `${BASE}${FFMPEG_RELEASE}`;
|
|
5213
5264
|
/**
|
|
5214
5265
|
* THE table "which boolean of this device type counts as HIGH", and the
|
|
5215
5266
|
* pure evaluator of its EDGE.
|
|
@@ -9265,14 +9316,6 @@ var MASK_SUPPLY_STEP_IDS = ["segmentation"];
|
|
|
9265
9316
|
...CROP_SUPPLY_STEP_IDS,
|
|
9266
9317
|
...MASK_SUPPLY_STEP_IDS
|
|
9267
9318
|
];
|
|
9268
|
-
var MODEL_FORMATS = [
|
|
9269
|
-
"onnx",
|
|
9270
|
-
"coreml",
|
|
9271
|
-
"openvino",
|
|
9272
|
-
"tflite",
|
|
9273
|
-
"pt",
|
|
9274
|
-
"gguf"
|
|
9275
|
-
];
|
|
9276
9319
|
/**
|
|
9277
9320
|
* Multi-file format payload.
|
|
9278
9321
|
*
|
|
@@ -36946,6 +36989,17 @@ var BatteryStatusSchema = z.object({
|
|
|
36946
36989
|
*/
|
|
36947
36990
|
lastContactAt: z.number().optional(),
|
|
36948
36991
|
/**
|
|
36992
|
+
* Ms epoch of the last COMPLETE scheduled refresh — every fact the provider
|
|
36993
|
+
* holds for the device (level, charging, link, device info, state slices) and
|
|
36994
|
+
* its cached snapshot, read together. Absent = never since this slice was
|
|
36995
|
+
* born. Unlike `lastUpdated` (any write, even a push of one field) this is
|
|
36996
|
+
* the staleness an operator can trust: the provider owns the device fact and
|
|
36997
|
+
* so owns the window on its age (D224, D847). Not a clock in the
|
|
36998
|
+
* runtime-state-durability sense: it moves once per window and must survive
|
|
36999
|
+
* a restart, or every restart would owe the camera a wake.
|
|
37000
|
+
*/
|
|
37001
|
+
lastFullRefreshAt: z.number().optional(),
|
|
37002
|
+
/**
|
|
36949
37003
|
* True when the source is a BINARY low-battery indicator (HA
|
|
36950
37004
|
* `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
|
|
36951
37005
|
* charge level — `percentage` is then a coarse stand-in (100 = normal,
|
|
@@ -50083,44 +50137,6 @@ Object.freeze({
|
|
|
50083
50137
|
vehicle: .65,
|
|
50084
50138
|
animal: .65
|
|
50085
50139
|
});
|
|
50086
|
-
var HF_REPO = "camstack/camstack-models";
|
|
50087
|
-
`${HF_REPO}`;
|
|
50088
|
-
/**
|
|
50089
|
-
* Runtime defaults -- used by ConfigManager.get() for backward compatibility
|
|
50090
|
-
* until Plan B wires all runtime settings to the system_settings SQL table.
|
|
50091
|
-
*
|
|
50092
|
-
* Moved from @camstack/system/config-schema to @camstack/types so that
|
|
50093
|
-
* @camstack/system can reference it without a cross-package kernel import.
|
|
50094
|
-
*/
|
|
50095
|
-
var RUNTIME_DEFAULTS = {
|
|
50096
|
-
"features.streaming": true,
|
|
50097
|
-
"features.notifications": true,
|
|
50098
|
-
"features.objectDetection": false,
|
|
50099
|
-
"features.remoteAccess": true,
|
|
50100
|
-
"features.agentCluster": false,
|
|
50101
|
-
"features.smartHome": true,
|
|
50102
|
-
"features.recordings": true,
|
|
50103
|
-
"features.backup": true,
|
|
50104
|
-
"features.repl": true,
|
|
50105
|
-
"retention.detectionEventsDays": 30,
|
|
50106
|
-
"retention.audioLevelsDays": 7,
|
|
50107
|
-
"logging.level": "info",
|
|
50108
|
-
"logging.retentionDays": 30,
|
|
50109
|
-
"eventBus.ringBufferSize": 1e4,
|
|
50110
|
-
"storage.provider": "sqlite-storage",
|
|
50111
|
-
"storage.locations": {
|
|
50112
|
-
data: "camstack-data/data",
|
|
50113
|
-
media: "camstack-data/media",
|
|
50114
|
-
recordings: "camstack-data/recordings",
|
|
50115
|
-
cache: "/tmp/camstack-cache",
|
|
50116
|
-
logs: "camstack-data/logs",
|
|
50117
|
-
models: "camstack-data/models"
|
|
50118
|
-
},
|
|
50119
|
-
providers: [],
|
|
50120
|
-
"ffmpeg.hwAccel": "auto",
|
|
50121
|
-
"ffmpeg.threadCount": 0,
|
|
50122
|
-
"auth.tokenExpiry": "30d"
|
|
50123
|
-
};
|
|
50124
50140
|
/**
|
|
50125
50141
|
* Accessory device helpers — shared across drivers.
|
|
50126
50142
|
*
|
|
@@ -64861,9 +64877,6 @@ var ADDON_ID_PREFIX = "addon:";
|
|
|
64861
64877
|
function bareAddonId(id) {
|
|
64862
64878
|
return id.startsWith(ADDON_ID_PREFIX) ? id.slice(6) : id;
|
|
64863
64879
|
}
|
|
64864
|
-
function hfModelUrl(repo, path) {
|
|
64865
|
-
return `https://huggingface.co/${repo}/resolve/main/${path}`;
|
|
64866
|
-
}
|
|
64867
64880
|
var MB = 1024 * 1024;
|
|
64868
64881
|
1024 * MB, 3072 * MB;
|
|
64869
64882
|
/**
|
|
@@ -64907,7 +64920,7 @@ var RUNTIMES = [
|
|
|
64907
64920
|
value: "cuda",
|
|
64908
64921
|
label: "CUDA"
|
|
64909
64922
|
});
|
|
64910
|
-
if (hw.gpu?.type === "amd") out.push({
|
|
64923
|
+
if (hw.gpu?.type === "amd" && hw.platform === "linux") out.push({
|
|
64911
64924
|
value: "webgpu",
|
|
64912
64925
|
label: "WebGPU (AMD iGPU)"
|
|
64913
64926
|
});
|
|
@@ -65018,7 +65031,7 @@ function scoreRuntimes(hw) {
|
|
|
65018
65031
|
});
|
|
65019
65032
|
}
|
|
65020
65033
|
if (hw.gpu?.type === "amd") {
|
|
65021
|
-
scores.push({
|
|
65034
|
+
if (hw.platform === "linux") scores.push({
|
|
65022
65035
|
runtime: "python",
|
|
65023
65036
|
backend: "onnx",
|
|
65024
65037
|
format: "onnx",
|
|
@@ -65111,4 +65124,4 @@ function enumerateInferenceDevices(hw) {
|
|
|
65111
65124
|
return out;
|
|
65112
65125
|
}
|
|
65113
65126
|
//#endregion
|
|
65114
|
-
export {
|
|
65127
|
+
export { buildStreamParamsConfigSchema as $, compositionSliceKey as $n, transformSecretWrite as $r, mayReadLocation as $t, LocationIconIdSchema as A, siteZoneKey as An, formatSecretScope as Ar, extractNestedAddonId as At, StorageLocationModeSchema as B, validateComposition as Bn, normalizeSecretOwner as Br, isObjectInput as Bt, FieldClaimModeSchema as C, resolveMethodAuth as Cn, collectZodSecretPaths as Cr, enumerateInferenceDevices as Ct, KEYCHAIN_RESET_TRIGGER_ACTOR as D, scopesAllowDeviceCap as Dn, emitDownForOwnedCaps as Dr, evictionPolicyOfLocation as Dt, HUB_MDNS_TXT_KEYS as E, scopesAllowAddon as En, defineCustomActions as Er, evaluateCompositionField as Et, RecordingStatusSchema as F, storageProviderCapability as Fn, isSecretClear as Fr, isAppLinkBase as Ft, addonSettingsCapability as G, withLocationMode as Gn, resolveCapMount as Gr, legacyAutoLinkIds as Gt, StorageMigrationJobSchema as H, vectorDimFromBase64 as Hn, parseJsonUnknown as Hr, kebabToCamel as Ht, STORAGE_ACCESS_FALLBACK as I, streamCatalogCapability as In, isSecretMarker as Ir, isArrayOutputSchema as It, authProviderCapability as J, cloneStatefulExpressionMemory as Jn, secretTreeFromPaths as Jr, localNetworkCapability as Jt, addonWidgetsCapability as K, COMPOSER_ADDON_ID as Kn, resolveSecretMarkers as Kr, legacyModeOf as Kt, STREAM_PROFILE_META as L, streamQualityLabel as Ln, isSecretMarkerLike as Lr, isCollectionArrayMethod as Lt, MINUTES_PER_DAY as M, storageCapability as Mn, isDeviceConfigCap as Mr, foldSnapshotByFunction as Mt, MOTION_CLOSE_AFTER_MS as N, storageMigrationCapability as Nn, isEvent as Nr, formatMinutes as Nt, LOG_LEVEL_RANK as O, scoreRuntimes as On, emitReadiness as Or, expandContainer as Ot, RECORDING_SOURCE_CAMSTACK_ADDON as P, storageOccupancyCapability as Pn, isKeychainStoredField as Pr, gbToBytes as Pt, buildCapabilityLookup as Q, compositionItemFieldPath as Qn, toSecretFieldView as Qr, looseSchema as Qt, ScopedTokenSchema as R, supportedRuntimes as Rn, makeSecretMarker as Rr, isDefaultAppConnectionEndpoint as Rt, FIRST_LEVEL_MACRO_CLASSES as S, resolveLocationMode as Sn, collectSecretConfigKeys as Sr, deviceStatusCapability as St, HUB_MDNS_SERVICE_TYPE as T, runtimeStatePolicyFor as Tn, customAction as Tr, enumerateSchemaFields as Tt, UserRecordSchema as U, vectorIndexDimConflictError as Un, parseSecretRef as Ur, keychainAdminCapability as Ut, StorageLocationTypeSchema as V, validateCustomAddress as Vn, parseJsonObject as Vr, isVoidInput as Vt, addonPagesCapability as W, vectorStoreCapability as Wn, readinessKey as Wr, keychainCapability as Wt, bareAddonId as X, composedDeviceStableId as Xn, sleep as Xr, logDestinationCapability as Xt, backupCapability as Y, composedDeviceRef as Yn, secretTreeFromSchema as Yr, locationIconKey as Yt, batteryCapability as Z, compositionFeatureEnabled as Zn, toNodeId as Zr, logLevelAtMost as Zt, DATABASE_SNAPSHOT_TIMEOUT_MS as _, resolveAppConnections as _n, WELL_KNOWN_TAB_MAP as _r, deriveBatteryPresence as _t, BatteryStatusSchema as a, normalizeCoreBlockWrite as an, DeviceRole as ar, compositionSourceRefs as at, DeclaredDevices as b, resolveCoreBlockFiles as bn, asString$1 as br, deviceManagerCapability as bt, CAP_NAMES_WITH_STATUS as c, objectInputDeclaresRequiredDeviceId as cn, BaseAddon as cr, coreBlockIdFromAddonId as ct, CORE_BLOCKS_ADDON_ID as d, planComposition as dn, DEVICE_STATUS_METHOD as dr, createDeviceExtensionProvider as dt, EventCategory as ei, mayWriteToLocation as en, compositionSourceKey as er, calendarsCapability as et, CORE_BLOCK_ADDON_PREFIX as f, platformProbeCapability as fn, REDACTED_SECRET as fr, dataStoreProviderCapability as ft, DATABASE_SNAPSHOT_SUFFIX as g, replacedFieldKeys as gn, SECRET_CLEAR as gr, defineExtensionSlotProvider as gt, DATABASE_SNAPSHOT_PARTIAL_SUFFIX as h, reducePoints as hn, ReadinessTimeoutError as hr, decodeVectorBase64 as ht, BaseDevice as i, motionCapability as in, DeviceFeature as ir, compositionFieldKey as it, METHOD_ACCESS_MAP as j, snapshotCapability as jn, hydrateSchema as jr, filesystemBrowseCapability as jt, LegacyStorageLocationDefaultSchema as k, settingsStoreCapability as kn, expandCapMethods as kr, expressionContainsBuiltinCall as kt, COMPOSED_ITEM_FIXED_FIELDS as l, parseStreamParamsFormPatch as ln, DATAPLANE_SECRET_HEADER as lr, coreBlockSourceKind as lt, CoreBlockSchema as m, ptzAutotrackCapability as mn, ReadinessRegistry as mr, declarationOwnerNodeId as mt, AlertSchema as n, metricsProviderCapability as nn, disarmRoseMemory as nr, checkRoleAddress as nt, CAMERA_SWITCH_ORDER as o, normalizeUnit as on, DeviceType as or, coreBlockAddonId as ot, CalendarPreferencesSchema as p, procedureAuthKey as pn, RUNTIME_DEFAULTS as pr, databaseSnapshotCapability as pt, alertsCapability as q, buildFfmpegArgs as qn, scopeKey as qr, lifecycleJobSchema as qt, ApiKeyRecordSchema as r, modeMayWrite as rn, toExpressionValue as rr, composerCapability as rt, CAMSTACK_APP_LINK_ORIGIN as s, objectInputDeclaresAddonId as sn, errMsg as sr, coreBlockComposition as st, ALL_CAPABILITY_DEFINITIONS as t, memoizePinnedFfmpeg as tn, createStatefulExpressionMemory as tr, cameraGridLayoutCapability as tt, COMPOSER_RUNNER_ID as u, pickAppLinkHub as un, DEVICE_SETTINGS_CONTRIBUTION_METHODS as ur, coreBlocksCapability as ut, DAY_NAMES as v, resolveBucketMs as vn, asJsonObject as vr, describeComposableCaps as vt, FieldClaimSchema as w, resolveNotificationTapAddress as wn, createEvent as wr, enumerateItemArrayFields as wt, DeviceStatusSchema as x, resolveHubAddressRoles as xn, buildSecretRef as xr, deviceStateCapability as xt, DERIVED_CAMERA_SILENCED_CAP_NAMES as y, resolveCoreBlockEntry as yn, asNumber as yr, deviceExtensionCapability as yt, StorageCleanupJobSchema as z, userManagementCapability as zn, nodePin as zr, isLocationEnabled as zt };
|
|
@@ -718,7 +718,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
718
718
|
return EventCategory;
|
|
719
719
|
}({});
|
|
720
720
|
//#endregion
|
|
721
|
-
//#region ../types/dist/sleep-
|
|
721
|
+
//#region ../types/dist/sleep-vWTnHq9G.mjs
|
|
722
722
|
/**
|
|
723
723
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
724
724
|
* window to float samples (D455).
|
|
@@ -3887,6 +3887,21 @@ function emitDownForOwnedCaps(registry, owned) {
|
|
|
3887
3887
|
for (const { capName, scope } of owned) registry.emitDown(capName, scope);
|
|
3888
3888
|
}
|
|
3889
3889
|
/**
|
|
3890
|
+
* The model weight formats a catalog entry can ship. Schema-free on purpose:
|
|
3891
|
+
* `types/models.ts` builds Zod schemas from it, but a runner-closure consumer
|
|
3892
|
+
* (the model downloader in `@camstack/system`) needs only the list and must
|
|
3893
|
+
* reach it through `@camstack/types/addon` without building the cap schema
|
|
3894
|
+
* graph (D28).
|
|
3895
|
+
*/
|
|
3896
|
+
var MODEL_FORMATS = [
|
|
3897
|
+
"onnx",
|
|
3898
|
+
"coreml",
|
|
3899
|
+
"openvino",
|
|
3900
|
+
"tflite",
|
|
3901
|
+
"pt",
|
|
3902
|
+
"gguf"
|
|
3903
|
+
];
|
|
3904
|
+
/**
|
|
3890
3905
|
* Per-call node pinning for `ctx.api` capability calls.
|
|
3891
3906
|
*
|
|
3892
3907
|
* A capability call normally resolves to its DEFAULT provider — a `singleton`
|
|
@@ -4306,6 +4321,42 @@ var deviceOpsCapability = {
|
|
|
4306
4321
|
getRawState: method(zod.z.object({ deviceId: zod.z.number() }), RawStateResultSchema.nullable(), { auth: "protected" })
|
|
4307
4322
|
}
|
|
4308
4323
|
};
|
|
4324
|
+
/**
|
|
4325
|
+
* Runtime defaults -- used by ConfigManager.get() for backward compatibility
|
|
4326
|
+
* until Plan B wires all runtime settings to the system_settings SQL table.
|
|
4327
|
+
*
|
|
4328
|
+
* Moved from @camstack/system/config-schema to @camstack/types so that
|
|
4329
|
+
* @camstack/system can reference it without a cross-package kernel import.
|
|
4330
|
+
*/
|
|
4331
|
+
var RUNTIME_DEFAULTS = {
|
|
4332
|
+
"features.streaming": true,
|
|
4333
|
+
"features.notifications": true,
|
|
4334
|
+
"features.objectDetection": false,
|
|
4335
|
+
"features.remoteAccess": true,
|
|
4336
|
+
"features.agentCluster": false,
|
|
4337
|
+
"features.smartHome": true,
|
|
4338
|
+
"features.recordings": true,
|
|
4339
|
+
"features.backup": true,
|
|
4340
|
+
"features.repl": true,
|
|
4341
|
+
"retention.detectionEventsDays": 30,
|
|
4342
|
+
"retention.audioLevelsDays": 7,
|
|
4343
|
+
"logging.level": "info",
|
|
4344
|
+
"logging.retentionDays": 30,
|
|
4345
|
+
"eventBus.ringBufferSize": 1e4,
|
|
4346
|
+
"storage.provider": "sqlite-storage",
|
|
4347
|
+
"storage.locations": {
|
|
4348
|
+
data: "camstack-data/data",
|
|
4349
|
+
media: "camstack-data/media",
|
|
4350
|
+
recordings: "camstack-data/recordings",
|
|
4351
|
+
cache: "/tmp/camstack-cache",
|
|
4352
|
+
logs: "camstack-data/logs",
|
|
4353
|
+
models: "camstack-data/models"
|
|
4354
|
+
},
|
|
4355
|
+
providers: [],
|
|
4356
|
+
"ffmpeg.hwAccel": "auto",
|
|
4357
|
+
"ffmpeg.threadCount": 0,
|
|
4358
|
+
"auth.tokenExpiry": "30d"
|
|
4359
|
+
};
|
|
4309
4360
|
function defOf(schema) {
|
|
4310
4361
|
return schema._zod?.def ?? {};
|
|
4311
4362
|
}
|
|
@@ -4765,7 +4816,7 @@ function errMsg(err) {
|
|
|
4765
4816
|
return String(err);
|
|
4766
4817
|
}
|
|
4767
4818
|
//#endregion
|
|
4768
|
-
//#region ../types/dist/composition-
|
|
4819
|
+
//#region ../types/dist/composition-C-WpVYTX.mjs
|
|
4769
4820
|
var AUDIO_ENCODER_BY_CODEC = {
|
|
4770
4821
|
opus: "libopus",
|
|
4771
4822
|
aac: "aac",
|
|
@@ -5209,7 +5260,7 @@ var BASE = `https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${FFM
|
|
|
5209
5260
|
function portable(target) {
|
|
5210
5261
|
return `${BASE}/jellyfin-ffmpeg_${FFMPEG_RELEASE}_portable_${target}-gpl.tar.xz`;
|
|
5211
5262
|
}
|
|
5212
|
-
portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64")
|
|
5263
|
+
portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64"), `${BASE}${FFMPEG_RELEASE}`;
|
|
5213
5264
|
/**
|
|
5214
5265
|
* THE table "which boolean of this device type counts as HIGH", and the
|
|
5215
5266
|
* pure evaluator of its EDGE.
|
|
@@ -9265,14 +9316,6 @@ var MASK_SUPPLY_STEP_IDS = ["segmentation"];
|
|
|
9265
9316
|
...CROP_SUPPLY_STEP_IDS,
|
|
9266
9317
|
...MASK_SUPPLY_STEP_IDS
|
|
9267
9318
|
];
|
|
9268
|
-
var MODEL_FORMATS = [
|
|
9269
|
-
"onnx",
|
|
9270
|
-
"coreml",
|
|
9271
|
-
"openvino",
|
|
9272
|
-
"tflite",
|
|
9273
|
-
"pt",
|
|
9274
|
-
"gguf"
|
|
9275
|
-
];
|
|
9276
9319
|
/**
|
|
9277
9320
|
* Multi-file format payload.
|
|
9278
9321
|
*
|
|
@@ -36946,6 +36989,17 @@ var BatteryStatusSchema = zod.z.object({
|
|
|
36946
36989
|
*/
|
|
36947
36990
|
lastContactAt: zod.z.number().optional(),
|
|
36948
36991
|
/**
|
|
36992
|
+
* Ms epoch of the last COMPLETE scheduled refresh — every fact the provider
|
|
36993
|
+
* holds for the device (level, charging, link, device info, state slices) and
|
|
36994
|
+
* its cached snapshot, read together. Absent = never since this slice was
|
|
36995
|
+
* born. Unlike `lastUpdated` (any write, even a push of one field) this is
|
|
36996
|
+
* the staleness an operator can trust: the provider owns the device fact and
|
|
36997
|
+
* so owns the window on its age (D224, D847). Not a clock in the
|
|
36998
|
+
* runtime-state-durability sense: it moves once per window and must survive
|
|
36999
|
+
* a restart, or every restart would owe the camera a wake.
|
|
37000
|
+
*/
|
|
37001
|
+
lastFullRefreshAt: zod.z.number().optional(),
|
|
37002
|
+
/**
|
|
36949
37003
|
* True when the source is a BINARY low-battery indicator (HA
|
|
36950
37004
|
* `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
|
|
36951
37005
|
* charge level — `percentage` is then a coarse stand-in (100 = normal,
|
|
@@ -50083,44 +50137,6 @@ Object.freeze({
|
|
|
50083
50137
|
vehicle: .65,
|
|
50084
50138
|
animal: .65
|
|
50085
50139
|
});
|
|
50086
|
-
var HF_REPO = "camstack/camstack-models";
|
|
50087
|
-
`${HF_REPO}`;
|
|
50088
|
-
/**
|
|
50089
|
-
* Runtime defaults -- used by ConfigManager.get() for backward compatibility
|
|
50090
|
-
* until Plan B wires all runtime settings to the system_settings SQL table.
|
|
50091
|
-
*
|
|
50092
|
-
* Moved from @camstack/system/config-schema to @camstack/types so that
|
|
50093
|
-
* @camstack/system can reference it without a cross-package kernel import.
|
|
50094
|
-
*/
|
|
50095
|
-
var RUNTIME_DEFAULTS = {
|
|
50096
|
-
"features.streaming": true,
|
|
50097
|
-
"features.notifications": true,
|
|
50098
|
-
"features.objectDetection": false,
|
|
50099
|
-
"features.remoteAccess": true,
|
|
50100
|
-
"features.agentCluster": false,
|
|
50101
|
-
"features.smartHome": true,
|
|
50102
|
-
"features.recordings": true,
|
|
50103
|
-
"features.backup": true,
|
|
50104
|
-
"features.repl": true,
|
|
50105
|
-
"retention.detectionEventsDays": 30,
|
|
50106
|
-
"retention.audioLevelsDays": 7,
|
|
50107
|
-
"logging.level": "info",
|
|
50108
|
-
"logging.retentionDays": 30,
|
|
50109
|
-
"eventBus.ringBufferSize": 1e4,
|
|
50110
|
-
"storage.provider": "sqlite-storage",
|
|
50111
|
-
"storage.locations": {
|
|
50112
|
-
data: "camstack-data/data",
|
|
50113
|
-
media: "camstack-data/media",
|
|
50114
|
-
recordings: "camstack-data/recordings",
|
|
50115
|
-
cache: "/tmp/camstack-cache",
|
|
50116
|
-
logs: "camstack-data/logs",
|
|
50117
|
-
models: "camstack-data/models"
|
|
50118
|
-
},
|
|
50119
|
-
providers: [],
|
|
50120
|
-
"ffmpeg.hwAccel": "auto",
|
|
50121
|
-
"ffmpeg.threadCount": 0,
|
|
50122
|
-
"auth.tokenExpiry": "30d"
|
|
50123
|
-
};
|
|
50124
50140
|
/**
|
|
50125
50141
|
* Accessory device helpers — shared across drivers.
|
|
50126
50142
|
*
|
|
@@ -64861,9 +64877,6 @@ var ADDON_ID_PREFIX = "addon:";
|
|
|
64861
64877
|
function bareAddonId(id) {
|
|
64862
64878
|
return id.startsWith(ADDON_ID_PREFIX) ? id.slice(6) : id;
|
|
64863
64879
|
}
|
|
64864
|
-
function hfModelUrl(repo, path) {
|
|
64865
|
-
return `https://huggingface.co/${repo}/resolve/main/${path}`;
|
|
64866
|
-
}
|
|
64867
64880
|
var MB = 1024 * 1024;
|
|
64868
64881
|
1024 * MB, 3072 * MB;
|
|
64869
64882
|
/**
|
|
@@ -64907,7 +64920,7 @@ var RUNTIMES = [
|
|
|
64907
64920
|
value: "cuda",
|
|
64908
64921
|
label: "CUDA"
|
|
64909
64922
|
});
|
|
64910
|
-
if (hw.gpu?.type === "amd") out.push({
|
|
64923
|
+
if (hw.gpu?.type === "amd" && hw.platform === "linux") out.push({
|
|
64911
64924
|
value: "webgpu",
|
|
64912
64925
|
label: "WebGPU (AMD iGPU)"
|
|
64913
64926
|
});
|
|
@@ -65018,7 +65031,7 @@ function scoreRuntimes(hw) {
|
|
|
65018
65031
|
});
|
|
65019
65032
|
}
|
|
65020
65033
|
if (hw.gpu?.type === "amd") {
|
|
65021
|
-
scores.push({
|
|
65034
|
+
if (hw.platform === "linux") scores.push({
|
|
65022
65035
|
runtime: "python",
|
|
65023
65036
|
backend: "onnx",
|
|
65024
65037
|
format: "onnx",
|
|
@@ -65309,12 +65322,6 @@ Object.defineProperty(exports, "FieldClaimSchema", {
|
|
|
65309
65322
|
return FieldClaimSchema;
|
|
65310
65323
|
}
|
|
65311
65324
|
});
|
|
65312
|
-
Object.defineProperty(exports, "HF_REPO", {
|
|
65313
|
-
enumerable: true,
|
|
65314
|
-
get: function() {
|
|
65315
|
-
return HF_REPO;
|
|
65316
|
-
}
|
|
65317
|
-
});
|
|
65318
65325
|
Object.defineProperty(exports, "HUB_MDNS_SERVICE_TYPE", {
|
|
65319
65326
|
enumerable: true,
|
|
65320
65327
|
get: function() {
|
|
@@ -65363,12 +65370,6 @@ Object.defineProperty(exports, "MINUTES_PER_DAY", {
|
|
|
65363
65370
|
return MINUTES_PER_DAY;
|
|
65364
65371
|
}
|
|
65365
65372
|
});
|
|
65366
|
-
Object.defineProperty(exports, "MODEL_FORMATS", {
|
|
65367
|
-
enumerable: true,
|
|
65368
|
-
get: function() {
|
|
65369
|
-
return MODEL_FORMATS;
|
|
65370
|
-
}
|
|
65371
|
-
});
|
|
65372
65373
|
Object.defineProperty(exports, "MOTION_CLOSE_AFTER_MS", {
|
|
65373
65374
|
enumerable: true,
|
|
65374
65375
|
get: function() {
|
|
@@ -65885,12 +65886,6 @@ Object.defineProperty(exports, "gbToBytes", {
|
|
|
65885
65886
|
return gbToBytes;
|
|
65886
65887
|
}
|
|
65887
65888
|
});
|
|
65888
|
-
Object.defineProperty(exports, "hfModelUrl", {
|
|
65889
|
-
enumerable: true,
|
|
65890
|
-
get: function() {
|
|
65891
|
-
return hfModelUrl;
|
|
65892
|
-
}
|
|
65893
|
-
});
|
|
65894
65889
|
Object.defineProperty(exports, "hydrateSchema", {
|
|
65895
65890
|
enumerable: true,
|
|
65896
65891
|
get: function() {
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_chunk = require("./chunk-Cek0wNdY.js");
|
|
3
|
-
const require_dist = require("./dist-
|
|
4
|
-
const require_jwt_signing_key = require("./jwt-signing-key-
|
|
3
|
+
const require_dist = require("./dist-DLHPmdoV.js");
|
|
4
|
+
const require_jwt_signing_key = require("./jwt-signing-key-CWmNKLQi.js");
|
|
5
5
|
const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
|
|
6
6
|
require("./builtins/alerts/index.js");
|
|
7
7
|
const require_builtins_calendars_calendars_addon = require("./builtins/calendars/calendars.addon.js");
|
|
@@ -26,15 +26,15 @@ const require_builtins_sqlite_storage_sqlite_settings_addon = require("./builtin
|
|
|
26
26
|
const require_builtins_sqlite_storage_index = require("./builtins/sqlite-storage/index.js");
|
|
27
27
|
const require_builtins_storage_orchestrator_storage_orchestrator_addon = require("./builtins/storage-orchestrator/storage-orchestrator.addon.js");
|
|
28
28
|
require("./builtins/storage-orchestrator/index.js");
|
|
29
|
-
const require_constants = require("./constants-
|
|
29
|
+
const require_constants = require("./constants-ik5xtasS.js");
|
|
30
30
|
const require_builtins_system_config_system_config_addon = require("./builtins/system-config/system-config.addon.js");
|
|
31
31
|
require("./builtins/system-config/index.js");
|
|
32
32
|
const require_builtins_winston_logging_index = require("./builtins/winston-logging/index.js");
|
|
33
|
-
const require_custom_action_registry = require("./custom-action-registry-
|
|
34
|
-
const require_tls = require("./tls-
|
|
33
|
+
const require_custom_action_registry = require("./custom-action-registry-Bf_YnagS.js");
|
|
34
|
+
const require_tls = require("./tls-BgImdxCO.js");
|
|
35
35
|
const require_platform_key_source = require("./platform-key-source-Di7HrlGR.js");
|
|
36
36
|
const require_resource_monitor = require("./resource-monitor-mio9dSCT.js");
|
|
37
|
-
const require_restore_archive = require("./restore-archive-
|
|
37
|
+
const require_restore_archive = require("./restore-archive-DZeFVS2l.js");
|
|
38
38
|
let zod = require("zod");
|
|
39
39
|
let node_crypto = require("node:crypto");
|
|
40
40
|
node_crypto = require_chunk.__toESM(node_crypto);
|
|
@@ -52,6 +52,7 @@ let node_child_process = require("node:child_process");
|
|
|
52
52
|
let node_util = require("node:util");
|
|
53
53
|
node_util = require_chunk.__toESM(node_util);
|
|
54
54
|
let node_events = require("node:events");
|
|
55
|
+
let _camstack_types_addon = require("@camstack/types/addon");
|
|
55
56
|
let node_http = require("node:http");
|
|
56
57
|
let node_v8 = require("node:v8");
|
|
57
58
|
node_v8 = require_chunk.__toESM(node_v8);
|
|
@@ -59,7 +60,6 @@ let node_inspector_promises = require("node:inspector/promises");
|
|
|
59
60
|
let node_perf_hooks = require("node:perf_hooks");
|
|
60
61
|
let node_vm = require("node:vm");
|
|
61
62
|
node_vm = require_chunk.__toESM(node_vm);
|
|
62
|
-
let _camstack_types_addon = require("@camstack/types/addon");
|
|
63
63
|
let _trpc_client = require("@trpc/client");
|
|
64
64
|
//#region src/addon/addon-api-factory.ts
|
|
65
65
|
/**
|
|
@@ -24065,6 +24065,8 @@ function stripForgedIdentity(action, params) {
|
|
|
24065
24065
|
}
|
|
24066
24066
|
return withoutIdentity(params);
|
|
24067
24067
|
}
|
|
24068
|
+
/** Minimum gap between two "mesh event refused" lines for one sender. */
|
|
24069
|
+
var DROPPED_EVENT_LOG_INTERVAL_MS = 6e4;
|
|
24068
24070
|
function senderOf(ctx) {
|
|
24069
24071
|
const nodeID = ctx.nodeID;
|
|
24070
24072
|
return typeof nodeID === "string" && nodeID.length > 0 ? nodeID : null;
|
|
@@ -24078,6 +24080,29 @@ function paramNodeId(params) {
|
|
|
24078
24080
|
*/
|
|
24079
24081
|
function createMeshAccessMiddleware(options) {
|
|
24080
24082
|
const { ownNodeId, authenticator, logger } = options;
|
|
24083
|
+
const dropped = /* @__PURE__ */ new Map();
|
|
24084
|
+
const noteDroppedEvent = (sender, eventName) => {
|
|
24085
|
+
const now = Date.now();
|
|
24086
|
+
const entry = dropped.get(sender) ?? {
|
|
24087
|
+
lastLogAt: 0,
|
|
24088
|
+
count: 0
|
|
24089
|
+
};
|
|
24090
|
+
const count = entry.count + 1;
|
|
24091
|
+
if (now - entry.lastLogAt >= DROPPED_EVENT_LOG_INTERVAL_MS) {
|
|
24092
|
+
logger?.warn("mesh event refused", {
|
|
24093
|
+
sender,
|
|
24094
|
+
event: eventName,
|
|
24095
|
+
droppedSinceLastLog: count
|
|
24096
|
+
});
|
|
24097
|
+
dropped.set(sender, {
|
|
24098
|
+
lastLogAt: now,
|
|
24099
|
+
count: 0
|
|
24100
|
+
});
|
|
24101
|
+
} else dropped.set(sender, {
|
|
24102
|
+
lastLogAt: entry.lastLogAt,
|
|
24103
|
+
count
|
|
24104
|
+
});
|
|
24105
|
+
};
|
|
24081
24106
|
return {
|
|
24082
24107
|
name: "CamstackMeshAccess",
|
|
24083
24108
|
localAction(next, action) {
|
|
@@ -24103,9 +24128,12 @@ function createMeshAccessMiddleware(options) {
|
|
|
24103
24128
|
const name = event.name ?? "";
|
|
24104
24129
|
return function meshGatedEvent(ctx) {
|
|
24105
24130
|
const sender = senderOf(ctx);
|
|
24106
|
-
if (sender === null || sender === ownNodeId) return next.call(this, ctx);
|
|
24107
|
-
if (authenticator.admitEvent(sender, name).verdict === "deny")
|
|
24108
|
-
|
|
24131
|
+
if (sender === null || sender === ownNodeId) return Promise.resolve(next.call(this, ctx));
|
|
24132
|
+
if (authenticator.admitEvent(sender, name).verdict === "deny") {
|
|
24133
|
+
noteDroppedEvent(sender, name);
|
|
24134
|
+
return Promise.resolve();
|
|
24135
|
+
}
|
|
24136
|
+
return Promise.resolve(next.call(this, ctx));
|
|
24109
24137
|
};
|
|
24110
24138
|
}
|
|
24111
24139
|
};
|