@camstack/addon-pipeline 1.2.373 → 1.2.375
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/audio-analyzer/index.js +3 -3
- package/dist/audio-analyzer/index.mjs +3 -3
- package/dist/{custom-model-catalog-UaaDgBow.mjs → custom-model-catalog-DF5qs8u4.mjs} +2 -2
- package/dist/{custom-model-catalog-M-ECFeNJ.js → custom-model-catalog-gbLoUFki.js} +2 -2
- package/dist/detection-pipeline/index.js +4 -4
- package/dist/detection-pipeline/index.mjs +4 -4
- package/dist/{dist-QBVFmPYQ.js → dist-C0Mg8e3I.js} +924 -50
- package/dist/{dist-BT3uSeR7.mjs → dist-QyeZXkAO.mjs} +919 -51
- package/dist/{model-catalogs-C42Mo0jo.js → model-catalogs-BTuX-P0k.js} +1 -1
- package/dist/{model-catalogs-ChW0i2P6.mjs → model-catalogs-CIE4Dz4x.mjs} +1 -1
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/{node-B6ev-Hqa.js → node-CifGKjsd.js} +1 -1
- package/dist/{node-BVRFl1hZ.mjs → node-ndjp9DQO.mjs} +1 -1
- package/dist/pipeline-runner/index.js +3 -3
- package/dist/pipeline-runner/index.mjs +3 -3
- package/dist/{process-memory-Cdf2A2qg.js → process-memory-BMfSP5-i.js} +1 -1
- package/dist/{process-memory-DdeedEgU.mjs → process-memory-CaMI-Ry2.mjs} +1 -1
- package/dist/recorder/index.js +265 -94
- package/dist/recorder/index.mjs +263 -92
- package/dist/{segment-demux-js-8CfbEFeD.mjs → segment-demux-js-CLXBgUTo.mjs} +1 -1
- package/dist/{segment-demux-js-Dp0OI-2n.js → segment-demux-js-LhwVw18z.js} +1 -1
- package/dist/stream-broker/_stub.js +2 -2
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-Dl3wrJnM.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-B4MD_B4k.mjs} +2 -2
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BvMrdOCD.mjs +26 -0
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-JVFs9LgI.mjs +26 -0
- package/dist/stream-broker/demux-worker-child.js +1 -1
- package/dist/stream-broker/demux-worker-child.mjs +1 -1
- package/dist/stream-broker/{hostInit-Bq36nWMP.mjs → hostInit-DBDp5YHD.mjs} +2 -2
- package/dist/stream-broker/index.js +1229 -288
- package/dist/stream-broker/index.mjs +1229 -288
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/package.json +5 -1
- package/dist/retire-root-keys-Csb8z2f3.js +0 -338
- package/dist/retire-root-keys-DZvlso2l.mjs +0 -327
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C3ssSNKh.mjs +0 -26
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BFRtKBOe.mjs +0 -26
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
let node_crypto = require("node:crypto");
|
|
2
|
-
//#region ../types/dist/event-category-
|
|
2
|
+
//#region ../types/dist/event-category-BvOFi6PY.mjs
|
|
3
3
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4
4
|
EventCategory["SystemBoot"] = "system.boot";
|
|
5
5
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -63,6 +63,24 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
63
63
|
* consumes this category and maps it to the `addon-crash-loop` kind.
|
|
64
64
|
*/
|
|
65
65
|
EventCategory["AddonRunnerFailed"] = "addon.runner-failed";
|
|
66
|
+
/**
|
|
67
|
+
* A runner whose addon refused to start with a typed reason (D877) - parked
|
|
68
|
+
* in `refused`, never counted by the crash breaker, retried on operator
|
|
69
|
+
* action. One event per refusal.
|
|
70
|
+
*/
|
|
71
|
+
EventCategory["AddonRunnerRefused"] = "addon.runner-refused";
|
|
72
|
+
/**
|
|
73
|
+
* A runner settled on a state (D877): `running` (READY), `crashed`, `failed` or
|
|
74
|
+
* `refused`. In-process telemetry for the boot check (re-evaluate while any
|
|
75
|
+
* runner is still pending) and the alert centre (close a recovered runner).
|
|
76
|
+
*/
|
|
77
|
+
EventCategory["ProcessStateChanged"] = "process.state-changed";
|
|
78
|
+
/**
|
|
79
|
+
* The node's one-shot runner boot check (D877): planned runners against the
|
|
80
|
+
* process service, `degraded` when any is failed, refused or missing. The
|
|
81
|
+
* alert centre turns it into one alert and a direct critical push.
|
|
82
|
+
*/
|
|
83
|
+
EventCategory["SystemRunnerCheck"] = "system.runner-check";
|
|
66
84
|
EventCategory["AddonError"] = "addon.error";
|
|
67
85
|
EventCategory["AddonPageReady"] = "addon.page-ready";
|
|
68
86
|
EventCategory["AddonWidgetReady"] = "addon.widget-ready";
|
|
@@ -5387,7 +5405,7 @@ var ZodIssueCode = {
|
|
|
5387
5405
|
var ZodFirstPartyTypeKind;
|
|
5388
5406
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5389
5407
|
//#endregion
|
|
5390
|
-
//#region ../types/dist/sleep-
|
|
5408
|
+
//#region ../types/dist/sleep-WsrozGDL.mjs
|
|
5391
5409
|
/**
|
|
5392
5410
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5393
5411
|
* window to float samples (D455).
|
|
@@ -5536,7 +5554,7 @@ function isKeychainStoredField(field) {
|
|
|
5536
5554
|
var SECRET_CLEAR = { $secretClear: true };
|
|
5537
5555
|
/** The `'***'` token D634 redaction writes for non-admins. */
|
|
5538
5556
|
var LEGACY_DEVICE_REDACTION = "***";
|
|
5539
|
-
function isRecord$
|
|
5557
|
+
function isRecord$4(value) {
|
|
5540
5558
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5541
5559
|
}
|
|
5542
5560
|
function makeSecretMarker(ref) {
|
|
@@ -5547,12 +5565,12 @@ function makeSecretMarker(ref) {
|
|
|
5547
5565
|
}
|
|
5548
5566
|
/** A stored marker: an object whose `$secret` is a non-empty string. */
|
|
5549
5567
|
function isSecretMarker(value) {
|
|
5550
|
-
if (!isRecord$
|
|
5568
|
+
if (!isRecord$4(value)) return false;
|
|
5551
5569
|
const ref = value["$secret"];
|
|
5552
5570
|
return typeof ref === "string" && ref.length > 0;
|
|
5553
5571
|
}
|
|
5554
5572
|
function isSecretClear(value) {
|
|
5555
|
-
return isRecord$
|
|
5573
|
+
return isRecord$4(value) && value["$secretClear"] === true;
|
|
5556
5574
|
}
|
|
5557
5575
|
/**
|
|
5558
5576
|
* The UI view of a stored secret field value: a marker becomes "set", inline
|
|
@@ -6178,7 +6196,7 @@ var KeychainWriteRefusedError = class extends Error {
|
|
|
6178
6196
|
}
|
|
6179
6197
|
};
|
|
6180
6198
|
var KEEP = { kind: "keep" };
|
|
6181
|
-
function isRecord$
|
|
6199
|
+
function isRecord$3(value) {
|
|
6182
6200
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6183
6201
|
}
|
|
6184
6202
|
function defaultMintId() {
|
|
@@ -6191,7 +6209,7 @@ function collectSecretMarkerRefs(value, out = []) {
|
|
|
6191
6209
|
return out;
|
|
6192
6210
|
}
|
|
6193
6211
|
if (Array.isArray(value)) for (const item of value) collectSecretMarkerRefs(item, out);
|
|
6194
|
-
else if (isRecord$
|
|
6212
|
+
else if (isRecord$3(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
|
|
6195
6213
|
return out;
|
|
6196
6214
|
}
|
|
6197
6215
|
async function storedValueEquals(secrets, marker, candidate) {
|
|
@@ -6246,7 +6264,7 @@ function rowId(row, idKey) {
|
|
|
6246
6264
|
return null;
|
|
6247
6265
|
}
|
|
6248
6266
|
async function writeArray(ctx, node, incoming, stored, fieldPath) {
|
|
6249
|
-
const storedRows = Array.isArray(stored) ? stored.filter(isRecord$
|
|
6267
|
+
const storedRows = Array.isArray(stored) ? stored.filter(isRecord$3) : [];
|
|
6250
6268
|
if (!Array.isArray(incoming)) {
|
|
6251
6269
|
ctx.deletes.push(...collectSecretMarkerRefs(storedRows));
|
|
6252
6270
|
return {
|
|
@@ -6262,7 +6280,7 @@ async function writeArray(ctx, node, incoming, stored, fieldPath) {
|
|
|
6262
6280
|
const kept = /* @__PURE__ */ new Set();
|
|
6263
6281
|
const rows = [];
|
|
6264
6282
|
for (const row of incoming) {
|
|
6265
|
-
if (!isRecord$
|
|
6283
|
+
if (!isRecord$3(row)) {
|
|
6266
6284
|
rows.push(row);
|
|
6267
6285
|
continue;
|
|
6268
6286
|
}
|
|
@@ -6287,7 +6305,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
|
|
|
6287
6305
|
case "leaf": return writeLeaf(ctx, incoming, stored, fieldPath);
|
|
6288
6306
|
case "array": return writeArray(ctx, node, incoming, stored, fieldPath);
|
|
6289
6307
|
case "object": {
|
|
6290
|
-
if (!isRecord$
|
|
6308
|
+
if (!isRecord$3(incoming)) {
|
|
6291
6309
|
if (incoming === void 0) return KEEP;
|
|
6292
6310
|
ctx.deletes.push(...collectSecretMarkerRefs(stored));
|
|
6293
6311
|
return {
|
|
@@ -6295,7 +6313,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
|
|
|
6295
6313
|
value: incoming
|
|
6296
6314
|
};
|
|
6297
6315
|
}
|
|
6298
|
-
const storedObj = isRecord$
|
|
6316
|
+
const storedObj = isRecord$3(stored) ? stored : {};
|
|
6299
6317
|
return {
|
|
6300
6318
|
kind: "value",
|
|
6301
6319
|
value: await writeMembers(ctx, node.children, incoming, storedObj, (m) => `${fieldPath}.${m}`)
|
|
@@ -6418,7 +6436,7 @@ async function resolveSecretMarkers(value, secrets, options = {}) {
|
|
|
6418
6436
|
value: items
|
|
6419
6437
|
};
|
|
6420
6438
|
}
|
|
6421
|
-
if (isRecord$
|
|
6439
|
+
if (isRecord$3(v)) {
|
|
6422
6440
|
const out = {};
|
|
6423
6441
|
for (const [k, child] of Object.entries(v)) {
|
|
6424
6442
|
const s = substitute(child);
|
|
@@ -6450,7 +6468,7 @@ var SecretOverwriteRefusedError = class extends Error {
|
|
|
6450
6468
|
this.name = "SecretOverwriteRefusedError";
|
|
6451
6469
|
}
|
|
6452
6470
|
};
|
|
6453
|
-
function isRecord(value) {
|
|
6471
|
+
function isRecord$2$1(value) {
|
|
6454
6472
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6455
6473
|
}
|
|
6456
6474
|
function resolvedValue(pass, marker) {
|
|
@@ -6479,7 +6497,7 @@ function inArray(pass, incoming, stored) {
|
|
|
6479
6497
|
return incoming.map((item, index) => {
|
|
6480
6498
|
const twin = stored[index];
|
|
6481
6499
|
if (isSecretMarker(twin)) return typeof item === "string" && item === resolvedValue(pass, twin) ? twin : item;
|
|
6482
|
-
if (isRecord(item) && isRecord(twin)) return inArrayRow(pass, item, twin);
|
|
6500
|
+
if (isRecord$2$1(item) && isRecord$2$1(twin)) return inArrayRow(pass, item, twin);
|
|
6483
6501
|
if (Array.isArray(item) && Array.isArray(twin)) return inArray(pass, item, twin);
|
|
6484
6502
|
return item;
|
|
6485
6503
|
});
|
|
@@ -6490,7 +6508,7 @@ function inArrayRow(pass, incoming, stored) {
|
|
|
6490
6508
|
const twin = stored[key];
|
|
6491
6509
|
if (isSecretMarker(twin)) {
|
|
6492
6510
|
if (typeof value === "string" && value === resolvedValue(pass, twin)) out[key] = twin;
|
|
6493
|
-
} else if (isRecord(value) && isRecord(twin)) out[key] = inArrayRow(pass, value, twin);
|
|
6511
|
+
} else if (isRecord$2$1(value) && isRecord$2$1(twin)) out[key] = inArrayRow(pass, value, twin);
|
|
6494
6512
|
else if (Array.isArray(value) && Array.isArray(twin)) out[key] = inArray(pass, value, twin);
|
|
6495
6513
|
}
|
|
6496
6514
|
return out;
|
|
@@ -6498,7 +6516,7 @@ function inArrayRow(pass, incoming, stored) {
|
|
|
6498
6516
|
async function walk(pass, incoming, stored) {
|
|
6499
6517
|
if (isSecretMarker(stored)) return atMarker(pass, incoming, stored);
|
|
6500
6518
|
if (Array.isArray(incoming) && Array.isArray(stored)) return inArray(pass, incoming, stored);
|
|
6501
|
-
if (!isRecord(incoming) || !isRecord(stored)) return incoming;
|
|
6519
|
+
if (!isRecord$2$1(incoming) || !isRecord$2$1(stored)) return incoming;
|
|
6502
6520
|
const out = { ...incoming };
|
|
6503
6521
|
for (const [key, value] of Object.entries(incoming)) out[key] = await walk(pass, value, stored[key]);
|
|
6504
6522
|
return out;
|
|
@@ -6529,7 +6547,7 @@ async function restoreUnchangedSecrets(input) {
|
|
|
6529
6547
|
function isJsonEqual(a, b) {
|
|
6530
6548
|
if (Object.is(a, b)) return true;
|
|
6531
6549
|
if (Array.isArray(a)) return Array.isArray(b) && a.length === b.length && a.every((v, i) => isJsonEqual(v, b[i]));
|
|
6532
|
-
if (isRecord(a) && isRecord(b)) {
|
|
6550
|
+
if (isRecord$2$1(a) && isRecord$2$1(b)) {
|
|
6533
6551
|
const keys = Object.keys(a);
|
|
6534
6552
|
if (keys.length !== Object.keys(b).length) return false;
|
|
6535
6553
|
return keys.every((k) => Object.prototype.hasOwnProperty.call(b, k) && isJsonEqual(a[k], b[k]));
|
|
@@ -6553,7 +6571,7 @@ function markerKeysOf(blob, owner) {
|
|
|
6553
6571
|
}
|
|
6554
6572
|
function nodeFromStored(value, owner) {
|
|
6555
6573
|
if (isSecretMarker(value)) return isSecretRefOwnedBy(value.$secret, owner) ? { kind: "leaf" } : null;
|
|
6556
|
-
if (!isRecord(value)) return null;
|
|
6574
|
+
if (!isRecord$2$1(value)) return null;
|
|
6557
6575
|
const children = /* @__PURE__ */ new Map();
|
|
6558
6576
|
for (const [key, child] of Object.entries(value)) {
|
|
6559
6577
|
const node = nodeFromStored(child, owner);
|
|
@@ -6686,7 +6704,6 @@ function createHandle(raw, opts) {
|
|
|
6686
6704
|
const writeAddon = (patch) => write("addon", opts.addonTree(), void 0, patch, () => readStoredAddonBlob(raw), (p) => raw.writeAddonStore(p));
|
|
6687
6705
|
const readAddonStoreResult = raw.readAddonStoreResult;
|
|
6688
6706
|
const readAddonStoreKeyResult = raw.readAddonStoreKeyResult;
|
|
6689
|
-
const readDeviceStoreBatch = raw.readDeviceStoreBatch;
|
|
6690
6707
|
const overrides = {
|
|
6691
6708
|
readAddonStore: async () => resolveRead("addon", await raw.readAddonStore()),
|
|
6692
6709
|
...readAddonStoreResult !== void 0 ? { readAddonStoreResult: async () => {
|
|
@@ -6710,12 +6727,12 @@ function createHandle(raw, opts) {
|
|
|
6710
6727
|
};
|
|
6711
6728
|
} } : {},
|
|
6712
6729
|
readDeviceStore: async (deviceId) => resolveRead(`device:${deviceId}`, await raw.readDeviceStore(deviceId)),
|
|
6713
|
-
|
|
6714
|
-
const rows = await readDeviceStoreBatch
|
|
6730
|
+
readDeviceStoreBatch: async (deviceIds) => {
|
|
6731
|
+
const rows = await raw.readDeviceStoreBatch(deviceIds);
|
|
6715
6732
|
const out = /* @__PURE__ */ new Map();
|
|
6716
6733
|
for (const [deviceId, blob] of rows) out.set(deviceId, await resolveRead(`device:${deviceId}`, blob));
|
|
6717
6734
|
return out;
|
|
6718
|
-
}
|
|
6735
|
+
},
|
|
6719
6736
|
writeAddonStore: async (patch) => {
|
|
6720
6737
|
await writeAddon(patch);
|
|
6721
6738
|
},
|
|
@@ -7542,7 +7559,7 @@ var BaseAddon = class {
|
|
|
7542
7559
|
return this._addonSecretTree;
|
|
7543
7560
|
}
|
|
7544
7561
|
deviceSecretTree() {
|
|
7545
|
-
this._deviceSecretTree ??= secretTreeFromSchema(this.deviceSettingsSchema());
|
|
7562
|
+
this._deviceSecretTree ??= mergeSecretStatePaths(secretTreeFromSchema(this.deviceSettingsSchema()), this.secretStatePaths);
|
|
7546
7563
|
return this._deviceSecretTree;
|
|
7547
7564
|
}
|
|
7548
7565
|
/**
|
|
@@ -7618,42 +7635,135 @@ var BaseAddon = class {
|
|
|
7618
7635
|
this[timerOf] = timer;
|
|
7619
7636
|
}
|
|
7620
7637
|
/**
|
|
7621
|
-
* Wrap `ctx.settings.readAddonStore()` with a
|
|
7622
|
-
*
|
|
7623
|
-
* swap, or any race where the SqliteSettingsBackend is between shutdown and
|
|
7624
|
-
* re-initialize) doesn't propagate up into `initialize()` and leave the
|
|
7638
|
+
* Wrap `ctx.settings.readAddonStore()` with a retry budget so a transient
|
|
7639
|
+
* settings-store outage doesn't propagate up into `initialize()` and leave the
|
|
7625
7640
|
* addon permanently broken.
|
|
7626
7641
|
*
|
|
7627
|
-
*
|
|
7628
|
-
*
|
|
7629
|
-
* `
|
|
7642
|
+
* Two kinds of outage, two budgets:
|
|
7643
|
+
* - the store's own restart fingerprints (`SqliteSettingsBackend not
|
|
7644
|
+
* initialized`, `provider not available`): a short budget, then the addon
|
|
7645
|
+
* falls back to `{}` (defaults) - its first successful patch rehydrates;
|
|
7646
|
+
* - a TRANSPORT failure (the hub is restarting while this runner boots:
|
|
7647
|
+
* `discovery deadline exceeded`, `parent could not route`, a refused or
|
|
7648
|
+
* timed-out connection). Since D870 a runner's settings read THROWS instead
|
|
7649
|
+
* of answering `{}`, so without a budget a hub restart ends in a respawn
|
|
7650
|
+
* loop. A long, bounded budget; only after it the error propagates - the
|
|
7651
|
+
* addon never runs on defaults for a store it could not ask.
|
|
7652
|
+
* Anything else propagates immediately so real bugs surface.
|
|
7630
7653
|
*/
|
|
7631
7654
|
async readAddonStoreWithRetry() {
|
|
7632
7655
|
const settings = this.rawSettings();
|
|
7633
7656
|
if (!settings) return {};
|
|
7634
|
-
const delaysMs = [
|
|
7635
|
-
150,
|
|
7636
|
-
350,
|
|
7637
|
-
600,
|
|
7638
|
-
900
|
|
7639
|
-
];
|
|
7640
7657
|
let lastErr;
|
|
7641
|
-
for (let attempt = 0
|
|
7658
|
+
for (let attempt = 0;; attempt++) try {
|
|
7642
7659
|
const stored = await settings.readAddonStore() ?? {};
|
|
7643
7660
|
this.settingsStoreReady = true;
|
|
7644
7661
|
return stored;
|
|
7645
7662
|
} catch (err) {
|
|
7646
7663
|
lastErr = err;
|
|
7647
|
-
const
|
|
7648
|
-
if (
|
|
7649
|
-
|
|
7650
|
-
|
|
7664
|
+
const kind = classifyStoreError(err);
|
|
7665
|
+
if (kind === "permanent") throw err;
|
|
7666
|
+
const delay = (kind === "transport" ? TRANSPORT_RETRY_DELAYS_MS : RESTART_RETRY_DELAYS_MS)[attempt];
|
|
7667
|
+
if (delay === void 0) {
|
|
7668
|
+
if (kind === "transport") throw err;
|
|
7669
|
+
break;
|
|
7670
|
+
}
|
|
7671
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
7651
7672
|
}
|
|
7652
7673
|
this.settingsStoreReady = false;
|
|
7653
7674
|
this._ctx?.logger?.warn?.("readAddonStore: settings-store unavailable after retries — using defaults", { meta: { error: lastErr instanceof Error ? lastErr.message : String(lastErr) } });
|
|
7654
7675
|
return {};
|
|
7655
7676
|
}
|
|
7656
7677
|
};
|
|
7678
|
+
/** The settings store's own restart fingerprints. */
|
|
7679
|
+
var RESTART_RETRY_DELAYS_MS = [
|
|
7680
|
+
150,
|
|
7681
|
+
350,
|
|
7682
|
+
600,
|
|
7683
|
+
900
|
|
7684
|
+
];
|
|
7685
|
+
/** A hub restarting under a booting runner: ~100 s in total. */
|
|
7686
|
+
var TRANSPORT_RETRY_DELAYS_MS = [
|
|
7687
|
+
150,
|
|
7688
|
+
350,
|
|
7689
|
+
600,
|
|
7690
|
+
900,
|
|
7691
|
+
2e3,
|
|
7692
|
+
5e3,
|
|
7693
|
+
1e4,
|
|
7694
|
+
2e4,
|
|
7695
|
+
3e4,
|
|
7696
|
+
3e4
|
|
7697
|
+
];
|
|
7698
|
+
var RESTART_FINGERPRINTS = ["SqliteSettingsBackend not initialized", "provider not available"];
|
|
7699
|
+
/** Node / socket error codes of a connection that did not happen or broke. */
|
|
7700
|
+
var TRANSPORT_CODES = new Set([
|
|
7701
|
+
"ECONNREFUSED",
|
|
7702
|
+
"ECONNRESET",
|
|
7703
|
+
"ETIMEDOUT",
|
|
7704
|
+
"EPIPE",
|
|
7705
|
+
"EHOSTUNREACH",
|
|
7706
|
+
"ENETUNREACH"
|
|
7707
|
+
]);
|
|
7708
|
+
/** tRPC error codes that mean "the other side is not answering now", not "your call is wrong". */
|
|
7709
|
+
var UNAVAILABLE_TRPC_CODES = new Set([
|
|
7710
|
+
"TIMEOUT",
|
|
7711
|
+
"SERVICE_UNAVAILABLE",
|
|
7712
|
+
"BAD_GATEWAY",
|
|
7713
|
+
"GATEWAY_TIMEOUT"
|
|
7714
|
+
]);
|
|
7715
|
+
/** The exact phrases OUR transport raises when it cannot reach the hub. */
|
|
7716
|
+
var TRANSPORT_PHRASES = [
|
|
7717
|
+
"discovery deadline exceeded",
|
|
7718
|
+
"parent could not route child unowned cap call",
|
|
7719
|
+
"UDS request timed out after",
|
|
7720
|
+
"channel closed"
|
|
7721
|
+
];
|
|
7722
|
+
/** Moleculer error `type`s of a call that could not be served right now. */
|
|
7723
|
+
var MOLECULER_TRANSIENT_TYPES = new Set([
|
|
7724
|
+
"REQUEST_TIMEOUT",
|
|
7725
|
+
"SERVICE_NOT_FOUND",
|
|
7726
|
+
"SERVICE_NOT_AVAILABLE",
|
|
7727
|
+
"REQUEST_REJECTED",
|
|
7728
|
+
"BROKER_DISCONNECTED"
|
|
7729
|
+
]);
|
|
7730
|
+
function stringProp(value, key) {
|
|
7731
|
+
if (typeof value !== "object" || value === null) return void 0;
|
|
7732
|
+
const found = Reflect.get(value, key);
|
|
7733
|
+
return typeof found === "string" ? found : void 0;
|
|
7734
|
+
}
|
|
7735
|
+
/** The code an error carries: its own, its cause's, or a tRPC `data.code`. */
|
|
7736
|
+
function errorCode(err) {
|
|
7737
|
+
const out = {};
|
|
7738
|
+
const cause = typeof err === "object" && err !== null ? Reflect.get(err, "cause") : void 0;
|
|
7739
|
+
const data = typeof err === "object" && err !== null ? Reflect.get(err, "data") : void 0;
|
|
7740
|
+
const node = stringProp(err, "code") ?? stringProp(cause, "code");
|
|
7741
|
+
if (node !== void 0) out.node = node;
|
|
7742
|
+
const trpc = stringProp(data, "code");
|
|
7743
|
+
if (trpc !== void 0) out.trpc = trpc;
|
|
7744
|
+
return out;
|
|
7745
|
+
}
|
|
7746
|
+
/**
|
|
7747
|
+
* Is a settings read failure worth retrying, and with which budget? Only
|
|
7748
|
+
* EXPLICIT signals count: a socket error code, a tRPC "unavailable" code, or
|
|
7749
|
+
* one of the exact phrases our own transport raises. A message that merely
|
|
7750
|
+
* contains "timed out" or "unreachable" is not evidence of anything, and
|
|
7751
|
+
* `settings store not wired` is a wiring bug that retrying cannot fix.
|
|
7752
|
+
*/
|
|
7753
|
+
function classifyStoreError(err) {
|
|
7754
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
7755
|
+
if (RESTART_FINGERPRINTS.some((f) => message.includes(f))) return "restart";
|
|
7756
|
+
const code = errorCode(err);
|
|
7757
|
+
if (code.node !== void 0 && TRANSPORT_CODES.has(code.node)) return "transport";
|
|
7758
|
+
if (code.trpc !== void 0 && UNAVAILABLE_TRPC_CODES.has(code.trpc)) return "transport";
|
|
7759
|
+
if (typeof err === "object" && err !== null) {
|
|
7760
|
+
if (Reflect.get(err, "retryable") === true) return "transport";
|
|
7761
|
+
const type = stringProp(err, "type");
|
|
7762
|
+
if (type !== void 0 && MOLECULER_TRANSIENT_TYPES.has(type)) return "transport";
|
|
7763
|
+
}
|
|
7764
|
+
if (TRANSPORT_PHRASES.some((f) => message.includes(f))) return "transport";
|
|
7765
|
+
return "permanent";
|
|
7766
|
+
}
|
|
7657
7767
|
/**
|
|
7658
7768
|
* Collect the keys of every field marked `perNode: true`, recursing into
|
|
7659
7769
|
* layout containers (`group` fields and `sub-tabs` tabs) the same way
|
|
@@ -7743,6 +7853,89 @@ var PeerBytesTicketSchema = object({
|
|
|
7743
7853
|
*/
|
|
7744
7854
|
declaredBytes: number().int().nonnegative().nullable()
|
|
7745
7855
|
});
|
|
7856
|
+
/** Limits and names of `ctx.records` (D881). One authority; the engine and the facade read it. */
|
|
7857
|
+
/** The files a kind may live in. `history` is device-history's (D850), never records. */
|
|
7858
|
+
var RECORD_DATABASES = ["settings", "events"];
|
|
7859
|
+
/** The classes of a kind: the `@durable` vocabulary, one authority (replaces the annotation). */
|
|
7860
|
+
var RECORD_CLASSES = [
|
|
7861
|
+
"config",
|
|
7862
|
+
"ledger",
|
|
7863
|
+
"audit",
|
|
7864
|
+
"mirror",
|
|
7865
|
+
"ephemeral"
|
|
7866
|
+
];
|
|
7867
|
+
var RECORD_DEFAULT_MAX_DATA_BYTES = 64 * 1024;
|
|
7868
|
+
var RECORD_MAX_DATA_BYTES = 1024 * 1024;
|
|
7869
|
+
var RECORD_BATCH_MAX = 1e3;
|
|
7870
|
+
var RECORD_QUERY_MAX = 1e3;
|
|
7871
|
+
/**
|
|
7872
|
+
* Record kinds (D881): the declaration an addon makes of one kind of fact, the
|
|
7873
|
+
* Zod row schema that describes it, and the helper that turns the two into the
|
|
7874
|
+
* JSON the engine stores.
|
|
7875
|
+
*
|
|
7876
|
+
* A kind is declared ONCE, next to the code that owns it, and the engine's
|
|
7877
|
+
* reconciler creates its indexes - nothing creates DDL at runtime from a write.
|
|
7878
|
+
* Everything the generic machinery needs (secret fields, the entry descriptor)
|
|
7879
|
+
* is DERIVED from the Zod schema: `.meta({ secret: true })` marks a credential,
|
|
7880
|
+
* never a field name (D879).
|
|
7881
|
+
*/
|
|
7882
|
+
/** A JSON field path: `trackId`, `auth.accessToken`. Charset-restricted: it is rendered into DDL. */
|
|
7883
|
+
var RecordFieldPathSchema = string().regex(/^[A-Za-z_][A-Za-z0-9_]{0,63}(\.[A-Za-z_][A-Za-z0-9_]{0,63}){0,3}$/);
|
|
7884
|
+
var RecordIndexSchema = object({
|
|
7885
|
+
name: string().regex(/^[a-z][a-z0-9_]{0,31}$/),
|
|
7886
|
+
fields: array(RecordFieldPathSchema).min(1).max(4),
|
|
7887
|
+
unique: boolean().optional()
|
|
7888
|
+
}).strict();
|
|
7889
|
+
var RecordRetentionSchema = union([
|
|
7890
|
+
object({
|
|
7891
|
+
ttlMs: number().int().positive(),
|
|
7892
|
+
from: _enum(["at", "write"])
|
|
7893
|
+
}).strict(),
|
|
7894
|
+
object({
|
|
7895
|
+
maxRows: number().int().positive().optional(),
|
|
7896
|
+
maxRowsPerDevice: number().int().positive().optional()
|
|
7897
|
+
}).strict().refine((r) => r.maxRows !== void 0 || r.maxRowsPerDevice !== void 0, { message: "name maxRows, maxRowsPerDevice or both" }),
|
|
7898
|
+
object({
|
|
7899
|
+
owner: string().min(1),
|
|
7900
|
+
reason: string().min(1)
|
|
7901
|
+
}).strict(),
|
|
7902
|
+
object({ none: string().min(1) }).strict()
|
|
7903
|
+
]);
|
|
7904
|
+
/** The descriptor a generic entries UI reads (D881 "generic entries"). */
|
|
7905
|
+
var EntryDescriptorSchema = object({
|
|
7906
|
+
title: string().min(1),
|
|
7907
|
+
/** The record body field shown as the entry's name. */
|
|
7908
|
+
nameField: string().min(1),
|
|
7909
|
+
/** JSON Schema of the entry body; `secret: true` marks a password field. */
|
|
7910
|
+
fields: record(string(), unknown())
|
|
7911
|
+
}).strict();
|
|
7912
|
+
/** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
|
|
7913
|
+
var RecordKindDeclarationSchema = object({
|
|
7914
|
+
database: _enum(RECORD_DATABASES).default("settings"),
|
|
7915
|
+
class: _enum(RECORD_CLASSES),
|
|
7916
|
+
writeTrigger: string().min(1),
|
|
7917
|
+
device: _enum([
|
|
7918
|
+
"required",
|
|
7919
|
+
"optional",
|
|
7920
|
+
"none"
|
|
7921
|
+
]).default("none"),
|
|
7922
|
+
at: _enum(["required", "none"]).default("none"),
|
|
7923
|
+
indexes: array(RecordIndexSchema).max(8).default([]),
|
|
7924
|
+
retention: RecordRetentionSchema,
|
|
7925
|
+
deviceRemoval: _enum(["delete", "none"]).default("none"),
|
|
7926
|
+
maxDataBytes: number().int().positive().max(RECORD_MAX_DATA_BYTES).default(RECORD_DEFAULT_MAX_DATA_BYTES),
|
|
7927
|
+
/** Derived from the Zod schema; never written by hand. */
|
|
7928
|
+
secretPaths: array(string().min(1)).default([]),
|
|
7929
|
+
/** The id key of each array that carries a secret (`{ headers: 'name' }`). */
|
|
7930
|
+
secretArrayKeys: record(string(), string()).default({}),
|
|
7931
|
+
/** The legacy table this kind adopts from; the boot guard reads it (D853: no migration code). */
|
|
7932
|
+
adoptsFrom: string().min(1).optional(),
|
|
7933
|
+
/** Kinds that must agree through `transact` sit in one file under one family name. */
|
|
7934
|
+
transactFamily: string().min(1).optional(),
|
|
7935
|
+
entry: EntryDescriptorSchema.optional()
|
|
7936
|
+
}).strict();
|
|
7937
|
+
/** The kind names: lower-case, dash separated, short enough for an index name. */
|
|
7938
|
+
var RecordKindNameSchema = string().regex(/^[a-z][a-z0-9-]{0,47}$/);
|
|
7746
7939
|
/** Shared Zod schemas used across streaming capabilities. */
|
|
7747
7940
|
var CamProfileSchema = _enum([
|
|
7748
7941
|
"high",
|
|
@@ -8509,7 +8702,7 @@ function sleep(ms) {
|
|
|
8509
8702
|
return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
|
|
8510
8703
|
}
|
|
8511
8704
|
//#endregion
|
|
8512
|
-
//#region ../types/dist/err-msg
|
|
8705
|
+
//#region ../types/dist/err-msg--2RrYiLO.mjs
|
|
8513
8706
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
8514
8707
|
DeviceType["Camera"] = "camera";
|
|
8515
8708
|
DeviceType["Hub"] = "hub";
|
|
@@ -8778,6 +8971,9 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
8778
8971
|
/** Virtual HA toggle (input_boolean.*) — distinguishable from a
|
|
8779
8972
|
* real Switch device for UI rendering / export adapters. */
|
|
8780
8973
|
DeviceRole["BinaryHelper"] = "binary-helper";
|
|
8974
|
+
/** A smart plug: a `switch` whose source says it is an outlet (HA
|
|
8975
|
+
* `device_class: outlet`). The Alexa export shows it as a SMARTPLUG. */
|
|
8976
|
+
DeviceRole["Outlet"] = "outlet";
|
|
8781
8977
|
/** Generic motion / occupancy / moving event source. Distinct from
|
|
8782
8978
|
* the camera accessory PirSensor role: that one is a camera child;
|
|
8783
8979
|
* this is a standalone HA / 3rd-party motion sensor. */
|
|
@@ -8855,7 +9051,7 @@ function errMsg(err) {
|
|
|
8855
9051
|
return String(err);
|
|
8856
9052
|
}
|
|
8857
9053
|
//#endregion
|
|
8858
|
-
//#region ../types/dist/composition-
|
|
9054
|
+
//#region ../types/dist/composition-DOwQB_Ua.mjs
|
|
8859
9055
|
var AUDIO_ENCODER_BY_CODEC = {
|
|
8860
9056
|
opus: "libopus",
|
|
8861
9057
|
aac: "aac",
|
|
@@ -18318,6 +18514,41 @@ var ComposableCapabilitiesSchema = object({ caps: array(object({
|
|
|
18318
18514
|
keyField: string()
|
|
18319
18515
|
}).optional()
|
|
18320
18516
|
})) });
|
|
18517
|
+
/**
|
|
18518
|
+
* The report of a one-shot "move this owner's plaintext secrets into the
|
|
18519
|
+
* keychain" run (D878). COUNTS only - never a value, never a ref.
|
|
18520
|
+
*
|
|
18521
|
+
* The owner runs it on its own rows, through its own write path; an operator
|
|
18522
|
+
* script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
|
|
18523
|
+
* Dry run (`apply: false`) reports what WOULD move and changes nothing.
|
|
18524
|
+
*/
|
|
18525
|
+
var RawSecretMigrationInputSchema = object({
|
|
18526
|
+
/** `false` (the default of the script) = report only. */
|
|
18527
|
+
apply: boolean() });
|
|
18528
|
+
var RawSecretMigrationReportSchema = object({
|
|
18529
|
+
apply: boolean(),
|
|
18530
|
+
/** Rows that can carry a secret (a profile, an enrolment). */
|
|
18531
|
+
rows: number().int(),
|
|
18532
|
+
/** Rows whose secret was plaintext when the run started. */
|
|
18533
|
+
raw: number().int(),
|
|
18534
|
+
/** Rows that already held a keychain marker when the run started. */
|
|
18535
|
+
markers: number().int(),
|
|
18536
|
+
/** Plaintext rows moved by THIS run (always 0 on a dry run). */
|
|
18537
|
+
migrated: number().int(),
|
|
18538
|
+
/** Plaintext rows left in place because the move or its read-back failed. */
|
|
18539
|
+
failed: number().int(),
|
|
18540
|
+
/** After the run: rows still holding plaintext. */
|
|
18541
|
+
remainingRaw: number().int(),
|
|
18542
|
+
/** After the run: markers the keychain could not resolve right now. */
|
|
18543
|
+
unresolvedMarkers: number().int(),
|
|
18544
|
+
/**
|
|
18545
|
+
* A second, redundant copy of the secrets' rows that the run found (and, on
|
|
18546
|
+
* `apply`, deleted after verifying the first). Owners with a single copy omit it.
|
|
18547
|
+
*/
|
|
18548
|
+
redundantCopies: number().int().optional(),
|
|
18549
|
+
/** True when nothing is raw and every marker resolves. */
|
|
18550
|
+
verified: boolean()
|
|
18551
|
+
});
|
|
18321
18552
|
/** Where a block runs. The operator chooses — a block driving a device on an
|
|
18322
18553
|
* agent is the reason placement is not fixed to the hub. */
|
|
18323
18554
|
var CoreBlockPlacementSchema = union([literal("hub"), string().min(1)]);
|
|
@@ -18544,6 +18775,9 @@ method(object({}), object({ blocks: array(CoreBlockSchema) }), { auth: "admin" }
|
|
|
18544
18775
|
}), SettingsUpdateResultSchema, {
|
|
18545
18776
|
kind: "mutation",
|
|
18546
18777
|
auth: "admin"
|
|
18778
|
+
}), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
|
|
18779
|
+
kind: "mutation",
|
|
18780
|
+
auth: "admin"
|
|
18547
18781
|
}), method(object({}), object({ libs: array(object({
|
|
18548
18782
|
filePath: string(),
|
|
18549
18783
|
content: string()
|
|
@@ -18807,6 +19041,337 @@ id: union([string(), number()]) }), {
|
|
|
18807
19041
|
auth: "admin"
|
|
18808
19042
|
});
|
|
18809
19043
|
/**
|
|
19044
|
+
* records - an addon's own facts and documents (D881): ledgers, audit rows,
|
|
19045
|
+
* config documents, mirrors. The third storage API next to `ctx.settings`
|
|
19046
|
+
* (operator intent, D870) and device-history (numbers over time, D850).
|
|
19047
|
+
*
|
|
19048
|
+
* Who the OWNER is: `callerAddonId`, stamped by the transport on a call that
|
|
19049
|
+
* crossed a process and stated by a hub in-process caller (`ctx.records` does
|
|
19050
|
+
* that with the addon id closed over). It is deliberately NOT in any input
|
|
19051
|
+
* schema, so a session can never supply it, and a call with no stamp is refused
|
|
19052
|
+
* `records/no-caller`. A kind is readable and writable only by its owner; other
|
|
19053
|
+
* addons go through the owner's capability.
|
|
19054
|
+
*
|
|
19055
|
+
* Every read is three-way: a row, `null`, or the call THROWS. A failed read is
|
|
19056
|
+
* never `[]`. Secret fields are never on the wire: a read shows the
|
|
19057
|
+
* redaction token, `secretRefs` hands the owner's `ctx.secrets` the refs it
|
|
19058
|
+
* resolves itself, and a write may carry only a keychain marker bound to the
|
|
19059
|
+
* row's own ref.
|
|
19060
|
+
*
|
|
19061
|
+
* Internal: addons reach it through `ctx.records`, never directly.
|
|
19062
|
+
*/
|
|
19063
|
+
var RecordIdSchema = string().min(1).max(256);
|
|
19064
|
+
/** A JSON object body. Size is the engine's check (`maxDataBytes`), not a schema's. */
|
|
19065
|
+
var RecordBodySchema = record(string(), unknown());
|
|
19066
|
+
var RecordInputSchema = object({
|
|
19067
|
+
id: RecordIdSchema,
|
|
19068
|
+
/** The device this row belongs to (D865 removal, per-device reads). */
|
|
19069
|
+
deviceId: number().int().optional(),
|
|
19070
|
+
/** The domain clock, ms: observed / created / opened. */
|
|
19071
|
+
at: number().int().optional(),
|
|
19072
|
+
/** Producer-set expiry, ms. Refused on a kind whose retention is an engine TTL. */
|
|
19073
|
+
expiresAt: number().int().optional(),
|
|
19074
|
+
data: RecordBodySchema
|
|
19075
|
+
});
|
|
19076
|
+
var RecordViewSchema = object({
|
|
19077
|
+
id: string(),
|
|
19078
|
+
deviceId: number().int().nullable(),
|
|
19079
|
+
at: number().nullable(),
|
|
19080
|
+
expiresAt: number().nullable(),
|
|
19081
|
+
rev: number().int(),
|
|
19082
|
+
updatedAt: number(),
|
|
19083
|
+
data: RecordBodySchema
|
|
19084
|
+
});
|
|
19085
|
+
/** Declared index fields only. Anything else does not compile, by design. */
|
|
19086
|
+
var RecordWhereSchema = record(RecordFieldPathSchema, union([
|
|
19087
|
+
string(),
|
|
19088
|
+
number(),
|
|
19089
|
+
boolean(),
|
|
19090
|
+
object({ in: array(union([
|
|
19091
|
+
string(),
|
|
19092
|
+
number(),
|
|
19093
|
+
boolean()
|
|
19094
|
+
])).min(1).max(RECORD_BATCH_MAX) }),
|
|
19095
|
+
object({
|
|
19096
|
+
gt: union([string(), number()]).optional(),
|
|
19097
|
+
gte: union([string(), number()]).optional(),
|
|
19098
|
+
lt: union([string(), number()]).optional(),
|
|
19099
|
+
lte: union([string(), number()]).optional()
|
|
19100
|
+
}).refine((r) => Object.keys(r).length > 0, { message: "name at least one bound" })
|
|
19101
|
+
]));
|
|
19102
|
+
var KindShape = { kind: RecordKindNameSchema };
|
|
19103
|
+
var TimeWindowShape = {
|
|
19104
|
+
deviceId: number().int().optional(),
|
|
19105
|
+
atFrom: number().optional(),
|
|
19106
|
+
atTo: number().optional()
|
|
19107
|
+
};
|
|
19108
|
+
var RecordQueryInputSchema = object({
|
|
19109
|
+
...KindShape,
|
|
19110
|
+
...TimeWindowShape,
|
|
19111
|
+
where: RecordWhereSchema.optional(),
|
|
19112
|
+
/** Without `where`: `at` (default for a kind with a clock) or `id`. With `where` the order is the index's. */
|
|
19113
|
+
order: _enum(["at", "id"]).optional(),
|
|
19114
|
+
desc: boolean().optional(),
|
|
19115
|
+
limit: number().int().min(1).max(RECORD_QUERY_MAX).default(100),
|
|
19116
|
+
/** Opaque keyset cursor from a previous answer. There is no offset. */
|
|
19117
|
+
cursor: string().min(1).optional()
|
|
19118
|
+
});
|
|
19119
|
+
var RecordQueryResultSchema = object({
|
|
19120
|
+
records: array(RecordViewSchema),
|
|
19121
|
+
nextCursor: string().nullable()
|
|
19122
|
+
});
|
|
19123
|
+
var RecordKindStateSchema = _enum([
|
|
19124
|
+
"created",
|
|
19125
|
+
"unchanged",
|
|
19126
|
+
"updated"
|
|
19127
|
+
]);
|
|
19128
|
+
var DeclareKindResultSchema = object({
|
|
19129
|
+
kindId: number().int(),
|
|
19130
|
+
state: RecordKindStateSchema,
|
|
19131
|
+
createdIndexes: array(string()),
|
|
19132
|
+
/** The boot guard: the kind is empty while its legacy table still holds rows. */
|
|
19133
|
+
adoptionPending: object({
|
|
19134
|
+
legacyTable: string(),
|
|
19135
|
+
legacyRows: number().int()
|
|
19136
|
+
}).nullable()
|
|
19137
|
+
});
|
|
19138
|
+
/** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
|
|
19139
|
+
var SecretRefsList = array(string());
|
|
19140
|
+
var RecordSecretRefsSchema = record(string(), record(string(), string()));
|
|
19141
|
+
method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
|
|
19142
|
+
kind: "mutation",
|
|
19143
|
+
auth: "admin"
|
|
19144
|
+
}), method(object({
|
|
19145
|
+
...KindShape,
|
|
19146
|
+
id: RecordIdSchema
|
|
19147
|
+
}), RecordViewSchema.nullable(), { auth: "admin" }), method(object({
|
|
19148
|
+
...KindShape,
|
|
19149
|
+
ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
|
|
19150
|
+
}), array(RecordViewSchema), { auth: "admin" }), method(object({
|
|
19151
|
+
...KindShape,
|
|
19152
|
+
ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
|
|
19153
|
+
}), RecordSecretRefsSchema, { auth: "admin" }), method(object({
|
|
19154
|
+
...KindShape,
|
|
19155
|
+
record: RecordInputSchema,
|
|
19156
|
+
/** Compare-and-set. `0` means "the row must not exist". */
|
|
19157
|
+
ifRev: number().int().min(0).optional()
|
|
19158
|
+
}), object({
|
|
19159
|
+
rev: number().int(),
|
|
19160
|
+
releasedRefs: SecretRefsList
|
|
19161
|
+
}), {
|
|
19162
|
+
kind: "mutation",
|
|
19163
|
+
auth: "admin"
|
|
19164
|
+
}), method(object({
|
|
19165
|
+
...KindShape,
|
|
19166
|
+
records: array(RecordInputSchema).min(1).max(RECORD_BATCH_MAX)
|
|
19167
|
+
}), object({
|
|
19168
|
+
count: number().int(),
|
|
19169
|
+
releasedRefs: SecretRefsList
|
|
19170
|
+
}), {
|
|
19171
|
+
kind: "mutation",
|
|
19172
|
+
auth: "admin"
|
|
19173
|
+
}), method(object({
|
|
19174
|
+
...KindShape,
|
|
19175
|
+
id: RecordIdSchema,
|
|
19176
|
+
data: RecordBodySchema,
|
|
19177
|
+
at: number().int().nullable().optional(),
|
|
19178
|
+
expiresAt: number().int().nullable().optional(),
|
|
19179
|
+
ifRev: number().int().min(1).optional()
|
|
19180
|
+
}), object({
|
|
19181
|
+
rev: number().int(),
|
|
19182
|
+
releasedRefs: SecretRefsList
|
|
19183
|
+
}), {
|
|
19184
|
+
kind: "mutation",
|
|
19185
|
+
auth: "admin"
|
|
19186
|
+
}), method(object({
|
|
19187
|
+
...KindShape,
|
|
19188
|
+
id: RecordIdSchema
|
|
19189
|
+
}), object({
|
|
19190
|
+
deleted: boolean(),
|
|
19191
|
+
secretRefs: SecretRefsList
|
|
19192
|
+
}), {
|
|
19193
|
+
kind: "mutation",
|
|
19194
|
+
auth: "admin"
|
|
19195
|
+
}), method(object({
|
|
19196
|
+
...KindShape,
|
|
19197
|
+
ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
|
|
19198
|
+
}), object({
|
|
19199
|
+
deleted: number().int(),
|
|
19200
|
+
secretRefs: SecretRefsList
|
|
19201
|
+
}), {
|
|
19202
|
+
kind: "mutation",
|
|
19203
|
+
auth: "admin"
|
|
19204
|
+
}), method(RecordQueryInputSchema, RecordQueryResultSchema, { auth: "admin" }), method(object({
|
|
19205
|
+
...KindShape,
|
|
19206
|
+
...TimeWindowShape,
|
|
19207
|
+
where: RecordWhereSchema.optional()
|
|
19208
|
+
}), object({ count: number().int() }), { auth: "admin" }), method(object({
|
|
19209
|
+
...KindShape,
|
|
19210
|
+
deviceId: number().int().optional(),
|
|
19211
|
+
from: number(),
|
|
19212
|
+
to: number(),
|
|
19213
|
+
bucketMs: number().int().positive()
|
|
19214
|
+
}), object({ buckets: array(object({
|
|
19215
|
+
bucketStart: number(),
|
|
19216
|
+
count: number().int()
|
|
19217
|
+
})) }), { auth: "admin" }), method(object({
|
|
19218
|
+
...KindShape,
|
|
19219
|
+
op: _enum([
|
|
19220
|
+
"sum",
|
|
19221
|
+
"min",
|
|
19222
|
+
"max",
|
|
19223
|
+
"count"
|
|
19224
|
+
]),
|
|
19225
|
+
field: RecordFieldPathSchema.optional(),
|
|
19226
|
+
groupBy: RecordFieldPathSchema.optional(),
|
|
19227
|
+
where: RecordWhereSchema.optional()
|
|
19228
|
+
}), object({ rows: array(object({
|
|
19229
|
+
group: union([
|
|
19230
|
+
string(),
|
|
19231
|
+
number(),
|
|
19232
|
+
_null()
|
|
19233
|
+
]),
|
|
19234
|
+
value: number().nullable()
|
|
19235
|
+
})) }), { auth: "admin" }), method(object({
|
|
19236
|
+
...KindShape,
|
|
19237
|
+
deviceId: number().int().optional(),
|
|
19238
|
+
atBefore: number().optional(),
|
|
19239
|
+
where: RecordWhereSchema.optional()
|
|
19240
|
+
}), object({
|
|
19241
|
+
deleted: number().int(),
|
|
19242
|
+
secretRefs: SecretRefsList
|
|
19243
|
+
}), {
|
|
19244
|
+
kind: "mutation",
|
|
19245
|
+
auth: "admin"
|
|
19246
|
+
}), method(object({
|
|
19247
|
+
deviceId: number().int(),
|
|
19248
|
+
kinds: array(RecordKindNameSchema).optional()
|
|
19249
|
+
}), object({
|
|
19250
|
+
deleted: record(string(), number().int()),
|
|
19251
|
+
secretRefs: SecretRefsList
|
|
19252
|
+
}), {
|
|
19253
|
+
kind: "mutation",
|
|
19254
|
+
auth: "admin"
|
|
19255
|
+
}), method(object(KindShape), object({ id: number().int() }), {
|
|
19256
|
+
kind: "mutation",
|
|
19257
|
+
auth: "admin"
|
|
19258
|
+
});
|
|
19259
|
+
/** One table of the settings database. */
|
|
19260
|
+
var StorageTableSchema = object({
|
|
19261
|
+
/** The table's full name, e.g. `recorder:addon-settings` or `addon-device-settings`. */
|
|
19262
|
+
name: string(),
|
|
19263
|
+
/** The owner prefix of a scoped name (`recorder` for `recorder:addon-settings`), else null. */
|
|
19264
|
+
owner: string().nullable(),
|
|
19265
|
+
rows: number().int().nonnegative(),
|
|
19266
|
+
/** Bytes the table's pages occupy (`dbstat`); null when the engine cannot measure. */
|
|
19267
|
+
bytes: number().int().nonnegative().nullable(),
|
|
19268
|
+
/** Declared by an addon since this engine process started (a running addon claims it). */
|
|
19269
|
+
declaredThisBoot: boolean()
|
|
19270
|
+
});
|
|
19271
|
+
/** One declared record kind (D881) as System -> Data shows it. */
|
|
19272
|
+
var StorageKindSchema = object({
|
|
19273
|
+
owner: string(),
|
|
19274
|
+
kind: string(),
|
|
19275
|
+
database: _enum(["settings", "events"]),
|
|
19276
|
+
class: string(),
|
|
19277
|
+
state: _enum([
|
|
19278
|
+
"declared",
|
|
19279
|
+
"orphaned",
|
|
19280
|
+
"dropped"
|
|
19281
|
+
]),
|
|
19282
|
+
/** `null` when the caller asked for no counts (`counts: false`). */
|
|
19283
|
+
rows: number().int().nonnegative().nullable(),
|
|
19284
|
+
/** Rows x the average size of a sample; null for an empty kind. */
|
|
19285
|
+
bytesEstimate: number().int().nonnegative().nullable(),
|
|
19286
|
+
writeTrigger: string(),
|
|
19287
|
+
retention: RecordRetentionSchema,
|
|
19288
|
+
/** `true` when the kind is an entry kind (the generic entries UI lists it). */
|
|
19289
|
+
entry: boolean(),
|
|
19290
|
+
/** The whole declaration, secret paths and entry descriptor included (the entries service builds its handle from it). */
|
|
19291
|
+
declaration: RecordKindDeclarationSchema
|
|
19292
|
+
});
|
|
19293
|
+
method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: array(StorageTableSchema) }), { auth: "admin" }), method(object({
|
|
19294
|
+
collection: string().min(1),
|
|
19295
|
+
expectRows: number().int().nonnegative()
|
|
19296
|
+
}), object({
|
|
19297
|
+
dropped: literal(true),
|
|
19298
|
+
rows: number().int().nonnegative()
|
|
19299
|
+
}), {
|
|
19300
|
+
kind: "mutation",
|
|
19301
|
+
auth: "admin"
|
|
19302
|
+
}), method(object({
|
|
19303
|
+
owner: string().min(1).optional(),
|
|
19304
|
+
/** `false` skips the per-kind row count (a catalog read only). Default true. */
|
|
19305
|
+
counts: boolean().optional()
|
|
19306
|
+
}), object({ kinds: array(StorageKindSchema) }), { auth: "admin" }), method(RecordQueryInputSchema.extend({
|
|
19307
|
+
owner: string().min(1),
|
|
19308
|
+
kind: RecordKindNameSchema
|
|
19309
|
+
}), RecordQueryResultSchema, { auth: "admin" }), method(object({
|
|
19310
|
+
owner: string().min(1),
|
|
19311
|
+
kind: RecordKindNameSchema,
|
|
19312
|
+
records: array(RecordInputSchema).min(1).max(RECORD_BATCH_MAX),
|
|
19313
|
+
/** The LAST batch: the copy is complete, the boot guard stops asking. */
|
|
19314
|
+
complete: boolean().optional()
|
|
19315
|
+
}), object({ adopted: number().int() }), {
|
|
19316
|
+
kind: "mutation",
|
|
19317
|
+
auth: "admin"
|
|
19318
|
+
});
|
|
19319
|
+
/**
|
|
19320
|
+
* record-entries - the ONE admin surface for every list of user-created entries
|
|
19321
|
+
* (D881): notification targets, brokers, LLM profiles, anything an addon
|
|
19322
|
+
* declares as an ENTRY kind (`entry: { title }` in `defineRecordKinds`).
|
|
19323
|
+
*
|
|
19324
|
+
* The UI is generic. `listEntryKinds` hands it, per kind, the JSON Schema of
|
|
19325
|
+
* the entry body with `secret: true` on every credential field, so a password
|
|
19326
|
+
* field is derived from the schema and never from a name. `putEntry` takes the
|
|
19327
|
+
* redaction token for an untouched secret (the stored value is kept), a string
|
|
19328
|
+
* for a new one, and the clear instruction to remove one. A read never carries
|
|
19329
|
+
* a secret value, and a locked keychain refuses the write with
|
|
19330
|
+
* `records/secret-unavailable` instead of storing plaintext.
|
|
19331
|
+
*
|
|
19332
|
+
* Hub-only, served in-process (it acts for each entry's owner on the keychain).
|
|
19333
|
+
*/
|
|
19334
|
+
var EntryKindInfoSchema = object({
|
|
19335
|
+
owner: string(),
|
|
19336
|
+
kind: RecordKindNameSchema,
|
|
19337
|
+
title: string(),
|
|
19338
|
+
nameField: string(),
|
|
19339
|
+
/** JSON Schema of the body; `secret: true` marks a password field. */
|
|
19340
|
+
fields: record(string(), unknown()),
|
|
19341
|
+
secretPaths: array(string()),
|
|
19342
|
+
rows: number().int().nonnegative()
|
|
19343
|
+
});
|
|
19344
|
+
var EntryViewSchema = object({
|
|
19345
|
+
id: RecordIdSchema,
|
|
19346
|
+
name: string(),
|
|
19347
|
+
rev: number().int(),
|
|
19348
|
+
updatedAt: number(),
|
|
19349
|
+
/** Secret fields hold the redaction token. */
|
|
19350
|
+
data: RecordBodySchema
|
|
19351
|
+
});
|
|
19352
|
+
var EntryAddress = {
|
|
19353
|
+
owner: string().min(1),
|
|
19354
|
+
kind: RecordKindNameSchema
|
|
19355
|
+
};
|
|
19356
|
+
method(object({}), object({ kinds: array(EntryKindInfoSchema) }), { auth: "admin" }), method(object({ ...EntryAddress }), object({ entries: array(EntryViewSchema) }), { auth: "admin" }), method(object({
|
|
19357
|
+
...EntryAddress,
|
|
19358
|
+
id: RecordIdSchema.optional(),
|
|
19359
|
+
data: RecordBodySchema,
|
|
19360
|
+
ifRev: number().int().min(1).optional()
|
|
19361
|
+
}), object({
|
|
19362
|
+
id: string(),
|
|
19363
|
+
rev: number().int()
|
|
19364
|
+
}), {
|
|
19365
|
+
kind: "mutation",
|
|
19366
|
+
auth: "admin"
|
|
19367
|
+
}), method(object({
|
|
19368
|
+
...EntryAddress,
|
|
19369
|
+
id: RecordIdSchema
|
|
19370
|
+
}), object({ deleted: boolean() }), {
|
|
19371
|
+
kind: "mutation",
|
|
19372
|
+
auth: "admin"
|
|
19373
|
+
});
|
|
19374
|
+
/**
|
|
18810
19375
|
* `keychain` — the hub's encrypted store of secret values (D787).
|
|
18811
19376
|
*
|
|
18812
19377
|
* Settings blobs never hold a secret: they hold a marker
|
|
@@ -19347,6 +19912,16 @@ method(object({}), KeychainStatusSchema, { auth: "admin" }), method(object({}),
|
|
|
19347
19912
|
kind: "mutation",
|
|
19348
19913
|
auth: "admin",
|
|
19349
19914
|
caller: "required"
|
|
19915
|
+
}), method(object({
|
|
19916
|
+
ref: string().min(1),
|
|
19917
|
+
value: string().min(1)
|
|
19918
|
+
}), object({
|
|
19919
|
+
ref: string(),
|
|
19920
|
+
version: number().int()
|
|
19921
|
+
}), {
|
|
19922
|
+
kind: "mutation",
|
|
19923
|
+
auth: "admin",
|
|
19924
|
+
caller: "required"
|
|
19350
19925
|
}), method(object({ refs: array(string().min(1)).max(1e3) }), object({
|
|
19351
19926
|
deleted: array(string()).readonly(),
|
|
19352
19927
|
kept: array(object({
|
|
@@ -41883,6 +42458,9 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
|
41883
42458
|
}), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
41884
42459
|
kind: "mutation",
|
|
41885
42460
|
auth: "admin"
|
|
42461
|
+
}), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
|
|
42462
|
+
kind: "mutation",
|
|
42463
|
+
auth: "admin"
|
|
41886
42464
|
}), method(ProfileRefInputSchema, _void(), {
|
|
41887
42465
|
kind: "mutation",
|
|
41888
42466
|
auth: "admin"
|
|
@@ -53139,6 +53717,41 @@ var ServerRollbackInfoSchema = object({
|
|
|
53139
53717
|
atMs: number(),
|
|
53140
53718
|
reason: string()
|
|
53141
53719
|
});
|
|
53720
|
+
/**
|
|
53721
|
+
* The runner boot check (D877): the runners this node PLANNED (hub: one per
|
|
53722
|
+
* `resolveRunnerId` over its forked addons; agent: the runners its process
|
|
53723
|
+
* service holds, because only the hub plans) against the states the process
|
|
53724
|
+
* service reports. Kept in memory, recomputed by the same one-shot check after
|
|
53725
|
+
* every boot, served on `getServerPackageStatus`.
|
|
53726
|
+
*
|
|
53727
|
+
* `failed` is the D6 breaker's terminal state, `refused` a deterministic Init
|
|
53728
|
+
* refusal (an addon that said "I will not start, and here is why"), `missing` a
|
|
53729
|
+
* planned runner the process service has no entry for.
|
|
53730
|
+
*/
|
|
53731
|
+
var RunnerRefusalSchema = object({
|
|
53732
|
+
runnerId: string(),
|
|
53733
|
+
addonIds: array(string()),
|
|
53734
|
+
reason: string()
|
|
53735
|
+
});
|
|
53736
|
+
var RunnerBootCheckSchema = object({
|
|
53737
|
+
checkedAtMs: number(),
|
|
53738
|
+
/** Runners planned for this node. */
|
|
53739
|
+
expected: number(),
|
|
53740
|
+
/** Planned runners whose process is `running`. */
|
|
53741
|
+
running: number(),
|
|
53742
|
+
failed: array(string()),
|
|
53743
|
+
refused: array(RunnerRefusalSchema),
|
|
53744
|
+
missing: array(string()),
|
|
53745
|
+
/**
|
|
53746
|
+
* Runners still on their way: `starting`, or `crashed` waiting on a backoff
|
|
53747
|
+
* respawn. The check is FINAL only when this is empty; until then nothing is
|
|
53748
|
+
* pushed and the verdict is re-evaluated on the next runner state change.
|
|
53749
|
+
* Optional for version skew (absent = settled).
|
|
53750
|
+
*/
|
|
53751
|
+
pending: array(string()).optional(),
|
|
53752
|
+
/** True when the plan is the hub's (`missing` is then meaningful); false on an agent. */
|
|
53753
|
+
planKnown: boolean()
|
|
53754
|
+
});
|
|
53142
53755
|
var ServerPackageStatusSchema = object({
|
|
53143
53756
|
/** Root package name (`@camstack/server` on the hub). */
|
|
53144
53757
|
packageName: string(),
|
|
@@ -53201,7 +53814,14 @@ var ServerPackageStatusSchema = object({
|
|
|
53201
53814
|
* for version skew: an older provider's payload simply omits it, and an
|
|
53202
53815
|
* absent wrapper is unknown — never `native`.
|
|
53203
53816
|
*/
|
|
53204
|
-
wrapper: WrapperIdentitySchema.optional()
|
|
53817
|
+
wrapper: WrapperIdentitySchema.optional(),
|
|
53818
|
+
/**
|
|
53819
|
+
* What this node PLANNED to run against what its process service reports
|
|
53820
|
+
* (D877). Absent until the one-shot boot check has run (~60 s after boot) and
|
|
53821
|
+
* on a provider that predates it. Absent is "not checked yet", never "all
|
|
53822
|
+
* well": a consumer that needs the answer treats it as pending.
|
|
53823
|
+
*/
|
|
53824
|
+
runners: RunnerBootCheckSchema.optional()
|
|
53205
53825
|
});
|
|
53206
53826
|
var ServerUpdateCheckResultSchema = object({
|
|
53207
53827
|
packageName: string(),
|
|
@@ -53252,6 +53872,13 @@ var ServerUpdateOutcomeSchema = _enum([
|
|
|
53252
53872
|
"refused",
|
|
53253
53873
|
"failed"
|
|
53254
53874
|
]);
|
|
53875
|
+
/** One addon the pre-flight found the target version would refuse (D877). */
|
|
53876
|
+
var UpdateBlockerSchema = object({
|
|
53877
|
+
addonId: string(),
|
|
53878
|
+
reason: string(),
|
|
53879
|
+
/** What the operator does about it. */
|
|
53880
|
+
remedy: string()
|
|
53881
|
+
});
|
|
53255
53882
|
var ServerUpdateActionResultSchema = object({
|
|
53256
53883
|
accepted: boolean(),
|
|
53257
53884
|
targetVersion: string().nullable(),
|
|
@@ -53269,14 +53896,27 @@ var ServerUpdateActionResultSchema = object({
|
|
|
53269
53896
|
* The failure itself, verbatim enough to act on (the npm output for a
|
|
53270
53897
|
* staging install). Non-null only for `failed`.
|
|
53271
53898
|
*/
|
|
53272
|
-
error: string().nullable().optional()
|
|
53899
|
+
error: string().nullable().optional(),
|
|
53900
|
+
/**
|
|
53901
|
+
* The addons the target version would refuse to start on this node's live
|
|
53902
|
+
* store (D877), present when the pre-flight refused the update
|
|
53903
|
+
* (`reason: 'addon-would-refuse'`). Optional for version skew.
|
|
53904
|
+
*/
|
|
53905
|
+
blockers: array(UpdateBlockerSchema).optional()
|
|
53273
53906
|
});
|
|
53274
53907
|
method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), ServerUpdateCheckResultSchema, {
|
|
53275
53908
|
kind: "mutation",
|
|
53276
53909
|
auth: "admin"
|
|
53277
|
-
}), method(object({
|
|
53278
|
-
/** Explicit target version; omitted = latest from the registry. */
|
|
53279
|
-
version: string().optional()
|
|
53910
|
+
}), method(object({
|
|
53911
|
+
/** Explicit target version; omitted = latest from the registry. */
|
|
53912
|
+
version: string().optional(),
|
|
53913
|
+
/**
|
|
53914
|
+
* Apply even though the pre-flight (D877) found addons the target would
|
|
53915
|
+
* refuse to start. Off by default: those addons stay down until the
|
|
53916
|
+
* remedy is run, which is the incident this gate exists to prevent.
|
|
53917
|
+
*/
|
|
53918
|
+
acknowledgeRefusals: boolean().optional()
|
|
53919
|
+
}), ServerUpdateActionResultSchema, {
|
|
53280
53920
|
kind: "mutation",
|
|
53281
53921
|
auth: "admin",
|
|
53282
53922
|
timeoutMs: 16 * 6e4
|
|
@@ -56103,7 +56743,9 @@ var ManifestShapeSchema = object({
|
|
|
56103
56743
|
var AddonProcessSchema = object({
|
|
56104
56744
|
pid: number().optional(),
|
|
56105
56745
|
mode: string(),
|
|
56106
|
-
state: string()
|
|
56746
|
+
state: string(),
|
|
56747
|
+
/** Why the runner is `refused` (an addon's own words), when it is (D877). */
|
|
56748
|
+
reason: string().optional()
|
|
56107
56749
|
});
|
|
56108
56750
|
/**
|
|
56109
56751
|
* Per-addon health snapshot from the kernel's AddonHealthMonitor.
|
|
@@ -57195,6 +57837,12 @@ object({
|
|
|
57195
57837
|
/** Horizontal louver swing on/off. Null when the device has no
|
|
57196
57838
|
* horizontal swing surface (gate with `DeviceFeature.ClimateSwingHorizontal`). */
|
|
57197
57839
|
swingHorizontal: boolean().nullable(),
|
|
57840
|
+
/** Lowest setpoint the device accepts, Celsius. Absent / null = not reported. */
|
|
57841
|
+
minTemp: number().nullable().optional(),
|
|
57842
|
+
/** Highest setpoint the device accepts, Celsius. Absent / null = not reported. */
|
|
57843
|
+
maxTemp: number().nullable().optional(),
|
|
57844
|
+
/** Setpoint granularity, Celsius (0.5, 1). Absent / null = not reported. */
|
|
57845
|
+
tempStep: number().positive().nullable().optional(),
|
|
57198
57846
|
/** Ms epoch when the slice was last updated (push or command). */
|
|
57199
57847
|
lastFetchedAt: number()
|
|
57200
57848
|
});
|
|
@@ -64739,7 +65387,11 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
64739
65387
|
kind: "mutation",
|
|
64740
65388
|
auth: "admin",
|
|
64741
65389
|
access: "delete"
|
|
64742
|
-
}), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(
|
|
65390
|
+
}), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
|
|
65391
|
+
kind: "mutation",
|
|
65392
|
+
auth: "admin",
|
|
65393
|
+
access: "create"
|
|
65394
|
+
}), method(object({
|
|
64743
65395
|
userId: string(),
|
|
64744
65396
|
code: string()
|
|
64745
65397
|
}), object({ valid: boolean() }), {
|
|
@@ -66958,6 +67610,12 @@ Object.freeze({
|
|
|
66958
67610
|
addonId: null,
|
|
66959
67611
|
access: "view"
|
|
66960
67612
|
},
|
|
67613
|
+
"coreBlocks.migrateRawSecrets": {
|
|
67614
|
+
capName: "core-blocks",
|
|
67615
|
+
capScope: "system",
|
|
67616
|
+
addonId: null,
|
|
67617
|
+
access: "create"
|
|
67618
|
+
},
|
|
66961
67619
|
"coreBlocks.restart": {
|
|
66962
67620
|
capName: "core-blocks",
|
|
66963
67621
|
capScope: "system",
|
|
@@ -68644,6 +69302,12 @@ Object.freeze({
|
|
|
68644
69302
|
addonId: null,
|
|
68645
69303
|
access: "create"
|
|
68646
69304
|
},
|
|
69305
|
+
"keychainAdmin.importSecret": {
|
|
69306
|
+
capName: "keychain-admin",
|
|
69307
|
+
capScope: "system",
|
|
69308
|
+
addonId: null,
|
|
69309
|
+
access: "create"
|
|
69310
|
+
},
|
|
68647
69311
|
"keychainAdmin.listAudit": {
|
|
68648
69312
|
capName: "keychain-admin",
|
|
68649
69313
|
capScope: "system",
|
|
@@ -68812,6 +69476,12 @@ Object.freeze({
|
|
|
68812
69476
|
addonId: null,
|
|
68813
69477
|
access: "view"
|
|
68814
69478
|
},
|
|
69479
|
+
"llm.migrateRawSecrets": {
|
|
69480
|
+
capName: "llm",
|
|
69481
|
+
capScope: "system",
|
|
69482
|
+
addonId: null,
|
|
69483
|
+
access: "create"
|
|
69484
|
+
},
|
|
68815
69485
|
"llm.resolveModelRef": {
|
|
68816
69486
|
capName: "llm",
|
|
68817
69487
|
capScope: "system",
|
|
@@ -71698,6 +72368,30 @@ Object.freeze({
|
|
|
71698
72368
|
addonId: null,
|
|
71699
72369
|
access: "create"
|
|
71700
72370
|
},
|
|
72371
|
+
"recordEntries.deleteEntry": {
|
|
72372
|
+
capName: "record-entries",
|
|
72373
|
+
capScope: "system",
|
|
72374
|
+
addonId: null,
|
|
72375
|
+
access: "delete"
|
|
72376
|
+
},
|
|
72377
|
+
"recordEntries.listEntries": {
|
|
72378
|
+
capName: "record-entries",
|
|
72379
|
+
capScope: "system",
|
|
72380
|
+
addonId: null,
|
|
72381
|
+
access: "view"
|
|
72382
|
+
},
|
|
72383
|
+
"recordEntries.listEntryKinds": {
|
|
72384
|
+
capName: "record-entries",
|
|
72385
|
+
capScope: "system",
|
|
72386
|
+
addonId: null,
|
|
72387
|
+
access: "view"
|
|
72388
|
+
},
|
|
72389
|
+
"recordEntries.putEntry": {
|
|
72390
|
+
capName: "record-entries",
|
|
72391
|
+
capScope: "system",
|
|
72392
|
+
addonId: null,
|
|
72393
|
+
access: "create"
|
|
72394
|
+
},
|
|
71701
72395
|
"recording.getAvailability": {
|
|
71702
72396
|
capName: "recording",
|
|
71703
72397
|
capScope: "device",
|
|
@@ -71998,6 +72692,102 @@ Object.freeze({
|
|
|
71998
72692
|
addonId: null,
|
|
71999
72693
|
access: "view"
|
|
72000
72694
|
},
|
|
72695
|
+
"records.aggregate": {
|
|
72696
|
+
capName: "records",
|
|
72697
|
+
capScope: "system",
|
|
72698
|
+
addonId: null,
|
|
72699
|
+
access: "view"
|
|
72700
|
+
},
|
|
72701
|
+
"records.allocateId": {
|
|
72702
|
+
capName: "records",
|
|
72703
|
+
capScope: "system",
|
|
72704
|
+
addonId: null,
|
|
72705
|
+
access: "create"
|
|
72706
|
+
},
|
|
72707
|
+
"records.count": {
|
|
72708
|
+
capName: "records",
|
|
72709
|
+
capScope: "system",
|
|
72710
|
+
addonId: null,
|
|
72711
|
+
access: "view"
|
|
72712
|
+
},
|
|
72713
|
+
"records.declareKinds": {
|
|
72714
|
+
capName: "records",
|
|
72715
|
+
capScope: "system",
|
|
72716
|
+
addonId: null,
|
|
72717
|
+
access: "create"
|
|
72718
|
+
},
|
|
72719
|
+
"records.delete": {
|
|
72720
|
+
capName: "records",
|
|
72721
|
+
capScope: "system",
|
|
72722
|
+
addonId: null,
|
|
72723
|
+
access: "delete"
|
|
72724
|
+
},
|
|
72725
|
+
"records.deleteDevice": {
|
|
72726
|
+
capName: "records",
|
|
72727
|
+
capScope: "system",
|
|
72728
|
+
addonId: null,
|
|
72729
|
+
access: "delete"
|
|
72730
|
+
},
|
|
72731
|
+
"records.deleteMany": {
|
|
72732
|
+
capName: "records",
|
|
72733
|
+
capScope: "system",
|
|
72734
|
+
addonId: null,
|
|
72735
|
+
access: "delete"
|
|
72736
|
+
},
|
|
72737
|
+
"records.deleteWhere": {
|
|
72738
|
+
capName: "records",
|
|
72739
|
+
capScope: "system",
|
|
72740
|
+
addonId: null,
|
|
72741
|
+
access: "delete"
|
|
72742
|
+
},
|
|
72743
|
+
"records.get": {
|
|
72744
|
+
capName: "records",
|
|
72745
|
+
capScope: "system",
|
|
72746
|
+
addonId: null,
|
|
72747
|
+
access: "view"
|
|
72748
|
+
},
|
|
72749
|
+
"records.getMany": {
|
|
72750
|
+
capName: "records",
|
|
72751
|
+
capScope: "system",
|
|
72752
|
+
addonId: null,
|
|
72753
|
+
access: "view"
|
|
72754
|
+
},
|
|
72755
|
+
"records.histogram": {
|
|
72756
|
+
capName: "records",
|
|
72757
|
+
capScope: "system",
|
|
72758
|
+
addonId: null,
|
|
72759
|
+
access: "view"
|
|
72760
|
+
},
|
|
72761
|
+
"records.patch": {
|
|
72762
|
+
capName: "records",
|
|
72763
|
+
capScope: "system",
|
|
72764
|
+
addonId: null,
|
|
72765
|
+
access: "create"
|
|
72766
|
+
},
|
|
72767
|
+
"records.put": {
|
|
72768
|
+
capName: "records",
|
|
72769
|
+
capScope: "system",
|
|
72770
|
+
addonId: null,
|
|
72771
|
+
access: "create"
|
|
72772
|
+
},
|
|
72773
|
+
"records.putMany": {
|
|
72774
|
+
capName: "records",
|
|
72775
|
+
capScope: "system",
|
|
72776
|
+
addonId: null,
|
|
72777
|
+
access: "create"
|
|
72778
|
+
},
|
|
72779
|
+
"records.query": {
|
|
72780
|
+
capName: "records",
|
|
72781
|
+
capScope: "system",
|
|
72782
|
+
addonId: null,
|
|
72783
|
+
access: "view"
|
|
72784
|
+
},
|
|
72785
|
+
"records.secretRefs": {
|
|
72786
|
+
capName: "records",
|
|
72787
|
+
capScope: "system",
|
|
72788
|
+
addonId: null,
|
|
72789
|
+
access: "view"
|
|
72790
|
+
},
|
|
72001
72791
|
"sceneMonitor.captureReference": {
|
|
72002
72792
|
capName: "scene-monitor",
|
|
72003
72793
|
capScope: "device",
|
|
@@ -72430,6 +73220,36 @@ Object.freeze({
|
|
|
72430
73220
|
addonId: null,
|
|
72431
73221
|
access: "create"
|
|
72432
73222
|
},
|
|
73223
|
+
"storageAdmin.adoptRecords": {
|
|
73224
|
+
capName: "storage-admin",
|
|
73225
|
+
capScope: "system",
|
|
73226
|
+
addonId: null,
|
|
73227
|
+
access: "create"
|
|
73228
|
+
},
|
|
73229
|
+
"storageAdmin.dropCollection": {
|
|
73230
|
+
capName: "storage-admin",
|
|
73231
|
+
capScope: "system",
|
|
73232
|
+
addonId: null,
|
|
73233
|
+
access: "delete"
|
|
73234
|
+
},
|
|
73235
|
+
"storageAdmin.listKinds": {
|
|
73236
|
+
capName: "storage-admin",
|
|
73237
|
+
capScope: "system",
|
|
73238
|
+
addonId: null,
|
|
73239
|
+
access: "view"
|
|
73240
|
+
},
|
|
73241
|
+
"storageAdmin.listTables": {
|
|
73242
|
+
capName: "storage-admin",
|
|
73243
|
+
capScope: "system",
|
|
73244
|
+
addonId: null,
|
|
73245
|
+
access: "view"
|
|
73246
|
+
},
|
|
73247
|
+
"storageAdmin.readRecords": {
|
|
73248
|
+
capName: "storage-admin",
|
|
73249
|
+
capScope: "system",
|
|
73250
|
+
addonId: null,
|
|
73251
|
+
access: "view"
|
|
73252
|
+
},
|
|
72433
73253
|
"storageEvictable.evict": {
|
|
72434
73254
|
capName: "storage-evictable",
|
|
72435
73255
|
capScope: "system",
|
|
@@ -73342,6 +74162,12 @@ Object.freeze({
|
|
|
73342
74162
|
addonId: null,
|
|
73343
74163
|
access: "view"
|
|
73344
74164
|
},
|
|
74165
|
+
"userManagement.migrateRawSecrets": {
|
|
74166
|
+
capName: "user-management",
|
|
74167
|
+
capScope: "system",
|
|
74168
|
+
addonId: null,
|
|
74169
|
+
access: "create"
|
|
74170
|
+
},
|
|
73345
74171
|
"userManagement.oauthExchangeCode": {
|
|
73346
74172
|
capName: "user-management",
|
|
73347
74173
|
capScope: "system",
|
|
@@ -76018,6 +76844,37 @@ Object.freeze({
|
|
|
76018
76844
|
form: "single",
|
|
76019
76845
|
optional: false
|
|
76020
76846
|
}],
|
|
76847
|
+
"records.count": [{
|
|
76848
|
+
name: "deviceId",
|
|
76849
|
+
form: "single",
|
|
76850
|
+
optional: true
|
|
76851
|
+
}],
|
|
76852
|
+
"records.deleteDevice": [{
|
|
76853
|
+
name: "deviceId",
|
|
76854
|
+
form: "single",
|
|
76855
|
+
optional: false
|
|
76856
|
+
}],
|
|
76857
|
+
"records.deleteWhere": [{
|
|
76858
|
+
name: "deviceId",
|
|
76859
|
+
form: "single",
|
|
76860
|
+
optional: true
|
|
76861
|
+
}],
|
|
76862
|
+
"records.histogram": [{
|
|
76863
|
+
name: "deviceId",
|
|
76864
|
+
form: "single",
|
|
76865
|
+
optional: true
|
|
76866
|
+
}],
|
|
76867
|
+
"records.putMany": [{
|
|
76868
|
+
name: "records",
|
|
76869
|
+
form: "object-array",
|
|
76870
|
+
optional: false,
|
|
76871
|
+
itemField: "deviceId"
|
|
76872
|
+
}],
|
|
76873
|
+
"records.query": [{
|
|
76874
|
+
name: "deviceId",
|
|
76875
|
+
form: "single",
|
|
76876
|
+
optional: true
|
|
76877
|
+
}],
|
|
76021
76878
|
"sceneMonitor.captureReference": [{
|
|
76022
76879
|
name: "deviceId",
|
|
76023
76880
|
form: "single",
|
|
@@ -76134,6 +76991,17 @@ Object.freeze({
|
|
|
76134
76991
|
form: "single",
|
|
76135
76992
|
optional: false
|
|
76136
76993
|
}],
|
|
76994
|
+
"storageAdmin.adoptRecords": [{
|
|
76995
|
+
name: "records",
|
|
76996
|
+
form: "object-array",
|
|
76997
|
+
optional: false,
|
|
76998
|
+
itemField: "deviceId"
|
|
76999
|
+
}],
|
|
77000
|
+
"storageAdmin.readRecords": [{
|
|
77001
|
+
name: "deviceId",
|
|
77002
|
+
form: "single",
|
|
77003
|
+
optional: true
|
|
77004
|
+
}],
|
|
76137
77005
|
"streamBroker.acquireEgressTranscode": [{
|
|
76138
77006
|
name: "deviceId",
|
|
76139
77007
|
form: "single",
|
|
@@ -79539,6 +80407,12 @@ Object.defineProperty(exports, "isFirstLevelMacroClass", {
|
|
|
79539
80407
|
return isFirstLevelMacroClass;
|
|
79540
80408
|
}
|
|
79541
80409
|
});
|
|
80410
|
+
Object.defineProperty(exports, "isSecretMarker", {
|
|
80411
|
+
enumerable: true,
|
|
80412
|
+
get: function() {
|
|
80413
|
+
return isSecretMarker;
|
|
80414
|
+
}
|
|
80415
|
+
});
|
|
79542
80416
|
Object.defineProperty(exports, "isSoftwareDecode", {
|
|
79543
80417
|
enumerable: true,
|
|
79544
80418
|
get: function() {
|