@camstack/addon-post-analysis 1.2.373 → 1.2.601
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/{clip-model-registry-jeFu3pma.mjs → clip-model-registry-BuM8eXlN.mjs} +1004 -117
- package/dist/{clip-model-registry-Cy2RokDO.js → clip-model-registry-DAZ9ie-f.js} +1027 -116
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/_stub.js +2 -2
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-ujfvEENv.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DAs_96VP.mjs} +3 -3
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CElkWYPg.mjs +26 -0
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-SRvLcL_J.mjs +26 -0
- package/dist/pipeline-analytics/{hostInit-Ddz0CyLk.mjs → hostInit-C3wjY7W8.mjs} +3 -3
- package/dist/pipeline-analytics/index.js +79652 -79203
- package/dist/pipeline-analytics/index.mjs +79072 -78623
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CyYkqCmx.mjs +0 -26
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Kh1uHJki.mjs +0 -26
|
@@ -4168,6 +4168,12 @@ var numberProcessor = (schema, ctx, _json, _params) => {
|
|
|
4168
4168
|
var booleanProcessor = (_schema, _ctx, json, _params) => {
|
|
4169
4169
|
json.type = "boolean";
|
|
4170
4170
|
};
|
|
4171
|
+
var bigintProcessor = (_schema, ctx, _json, _params) => {
|
|
4172
|
+
if (ctx.unrepresentable === "throw") throw new Error("BigInt cannot be represented in JSON Schema");
|
|
4173
|
+
};
|
|
4174
|
+
var symbolProcessor = (_schema, ctx, _json, _params) => {
|
|
4175
|
+
if (ctx.unrepresentable === "throw") throw new Error("Symbols cannot be represented in JSON Schema");
|
|
4176
|
+
};
|
|
4171
4177
|
var nullProcessor = (_schema, ctx, json, _params) => {
|
|
4172
4178
|
if (ctx.target === "openapi-3.0") {
|
|
4173
4179
|
json.type = "string";
|
|
@@ -4175,12 +4181,17 @@ var nullProcessor = (_schema, ctx, json, _params) => {
|
|
|
4175
4181
|
json.enum = [null];
|
|
4176
4182
|
} else json.type = "null";
|
|
4177
4183
|
};
|
|
4184
|
+
var undefinedProcessor = (_schema, ctx, _json, _params) => {
|
|
4185
|
+
if (ctx.unrepresentable === "throw") throw new Error("Undefined cannot be represented in JSON Schema");
|
|
4186
|
+
};
|
|
4178
4187
|
var voidProcessor = (_schema, ctx, _json, _params) => {
|
|
4179
4188
|
if (ctx.unrepresentable === "throw") throw new Error("Void cannot be represented in JSON Schema");
|
|
4180
4189
|
};
|
|
4181
4190
|
var neverProcessor = (_schema, _ctx, json, _params) => {
|
|
4182
4191
|
json.not = {};
|
|
4183
4192
|
};
|
|
4193
|
+
var anyProcessor = (_schema, _ctx, _json, _params) => {};
|
|
4194
|
+
var unknownProcessor = (_schema, _ctx, _json, _params) => {};
|
|
4184
4195
|
var dateProcessor = (_schema, ctx, _json, _params) => {
|
|
4185
4196
|
if (ctx.unrepresentable === "throw") throw new Error("Date cannot be represented in JSON Schema");
|
|
4186
4197
|
};
|
|
@@ -4212,6 +4223,9 @@ var literalProcessor = (schema, ctx, json, _params) => {
|
|
|
4212
4223
|
json.enum = vals;
|
|
4213
4224
|
}
|
|
4214
4225
|
};
|
|
4226
|
+
var nanProcessor = (_schema, ctx, _json, _params) => {
|
|
4227
|
+
if (ctx.unrepresentable === "throw") throw new Error("NaN cannot be represented in JSON Schema");
|
|
4228
|
+
};
|
|
4215
4229
|
var templateLiteralProcessor = (schema, _ctx, json, _params) => {
|
|
4216
4230
|
const _json = json;
|
|
4217
4231
|
const pattern = schema._zod.pattern;
|
|
@@ -4219,12 +4233,43 @@ var templateLiteralProcessor = (schema, _ctx, json, _params) => {
|
|
|
4219
4233
|
_json.type = "string";
|
|
4220
4234
|
_json.pattern = pattern.source;
|
|
4221
4235
|
};
|
|
4236
|
+
var fileProcessor = (schema, _ctx, json, _params) => {
|
|
4237
|
+
const _json = json;
|
|
4238
|
+
const file = {
|
|
4239
|
+
type: "string",
|
|
4240
|
+
format: "binary",
|
|
4241
|
+
contentEncoding: "binary"
|
|
4242
|
+
};
|
|
4243
|
+
const { minimum, maximum, mime } = schema._zod.bag;
|
|
4244
|
+
if (minimum !== void 0) file.minLength = minimum;
|
|
4245
|
+
if (maximum !== void 0) file.maxLength = maximum;
|
|
4246
|
+
if (mime) if (mime.length === 1) {
|
|
4247
|
+
file.contentMediaType = mime[0];
|
|
4248
|
+
Object.assign(_json, file);
|
|
4249
|
+
} else {
|
|
4250
|
+
Object.assign(_json, file);
|
|
4251
|
+
_json.anyOf = mime.map((m) => ({ contentMediaType: m }));
|
|
4252
|
+
}
|
|
4253
|
+
else Object.assign(_json, file);
|
|
4254
|
+
};
|
|
4255
|
+
var successProcessor = (_schema, _ctx, json, _params) => {
|
|
4256
|
+
json.type = "boolean";
|
|
4257
|
+
};
|
|
4222
4258
|
var customProcessor = (_schema, ctx, _json, _params) => {
|
|
4223
4259
|
if (ctx.unrepresentable === "throw") throw new Error("Custom types cannot be represented in JSON Schema");
|
|
4224
4260
|
};
|
|
4261
|
+
var functionProcessor = (_schema, ctx, _json, _params) => {
|
|
4262
|
+
if (ctx.unrepresentable === "throw") throw new Error("Function types cannot be represented in JSON Schema");
|
|
4263
|
+
};
|
|
4225
4264
|
var transformProcessor = (_schema, ctx, _json, _params) => {
|
|
4226
4265
|
if (ctx.unrepresentable === "throw") throw new Error("Transforms cannot be represented in JSON Schema");
|
|
4227
4266
|
};
|
|
4267
|
+
var mapProcessor = (_schema, ctx, _json, _params) => {
|
|
4268
|
+
if (ctx.unrepresentable === "throw") throw new Error("Map cannot be represented in JSON Schema");
|
|
4269
|
+
};
|
|
4270
|
+
var setProcessor = (_schema, ctx, _json, _params) => {
|
|
4271
|
+
if (ctx.unrepresentable === "throw") throw new Error("Set cannot be represented in JSON Schema");
|
|
4272
|
+
};
|
|
4228
4273
|
var arrayProcessor = (schema, ctx, _json, params) => {
|
|
4229
4274
|
const json = _json;
|
|
4230
4275
|
const def = schema._zod.def;
|
|
@@ -4429,6 +4474,12 @@ var readonlyProcessor = (schema, ctx, json, params) => {
|
|
|
4429
4474
|
seen.ref = def.innerType;
|
|
4430
4475
|
json.readOnly = true;
|
|
4431
4476
|
};
|
|
4477
|
+
var promiseProcessor = (schema, ctx, _json, params) => {
|
|
4478
|
+
const def = schema._zod.def;
|
|
4479
|
+
process(def.innerType, ctx, params);
|
|
4480
|
+
const seen = ctx.seen.get(schema);
|
|
4481
|
+
seen.ref = def.innerType;
|
|
4482
|
+
};
|
|
4432
4483
|
var optionalProcessor = (schema, ctx, _json, params) => {
|
|
4433
4484
|
const def = schema._zod.def;
|
|
4434
4485
|
process(def.innerType, ctx, params);
|
|
@@ -4441,6 +4492,81 @@ var lazyProcessor = (schema, ctx, _json, params) => {
|
|
|
4441
4492
|
const seen = ctx.seen.get(schema);
|
|
4442
4493
|
seen.ref = innerType;
|
|
4443
4494
|
};
|
|
4495
|
+
var allProcessors = {
|
|
4496
|
+
string: stringProcessor,
|
|
4497
|
+
number: numberProcessor,
|
|
4498
|
+
boolean: booleanProcessor,
|
|
4499
|
+
bigint: bigintProcessor,
|
|
4500
|
+
symbol: symbolProcessor,
|
|
4501
|
+
null: nullProcessor,
|
|
4502
|
+
undefined: undefinedProcessor,
|
|
4503
|
+
void: voidProcessor,
|
|
4504
|
+
never: neverProcessor,
|
|
4505
|
+
any: anyProcessor,
|
|
4506
|
+
unknown: unknownProcessor,
|
|
4507
|
+
date: dateProcessor,
|
|
4508
|
+
enum: enumProcessor,
|
|
4509
|
+
literal: literalProcessor,
|
|
4510
|
+
nan: nanProcessor,
|
|
4511
|
+
template_literal: templateLiteralProcessor,
|
|
4512
|
+
file: fileProcessor,
|
|
4513
|
+
success: successProcessor,
|
|
4514
|
+
custom: customProcessor,
|
|
4515
|
+
function: functionProcessor,
|
|
4516
|
+
transform: transformProcessor,
|
|
4517
|
+
map: mapProcessor,
|
|
4518
|
+
set: setProcessor,
|
|
4519
|
+
array: arrayProcessor,
|
|
4520
|
+
object: objectProcessor,
|
|
4521
|
+
union: unionProcessor,
|
|
4522
|
+
intersection: intersectionProcessor,
|
|
4523
|
+
tuple: tupleProcessor,
|
|
4524
|
+
record: recordProcessor,
|
|
4525
|
+
nullable: nullableProcessor,
|
|
4526
|
+
nonoptional: nonoptionalProcessor,
|
|
4527
|
+
default: defaultProcessor,
|
|
4528
|
+
prefault: prefaultProcessor,
|
|
4529
|
+
catch: catchProcessor,
|
|
4530
|
+
pipe: pipeProcessor,
|
|
4531
|
+
readonly: readonlyProcessor,
|
|
4532
|
+
promise: promiseProcessor,
|
|
4533
|
+
optional: optionalProcessor,
|
|
4534
|
+
lazy: lazyProcessor
|
|
4535
|
+
};
|
|
4536
|
+
function toJSONSchema(input, params) {
|
|
4537
|
+
if ("_idmap" in input) {
|
|
4538
|
+
const registry = input;
|
|
4539
|
+
const ctx = initializeContext({
|
|
4540
|
+
...params,
|
|
4541
|
+
processors: allProcessors
|
|
4542
|
+
});
|
|
4543
|
+
const defs = {};
|
|
4544
|
+
for (const entry of registry._idmap.entries()) {
|
|
4545
|
+
const [_, schema] = entry;
|
|
4546
|
+
process(schema, ctx);
|
|
4547
|
+
}
|
|
4548
|
+
const schemas = {};
|
|
4549
|
+
ctx.external = {
|
|
4550
|
+
registry,
|
|
4551
|
+
uri: params?.uri,
|
|
4552
|
+
defs
|
|
4553
|
+
};
|
|
4554
|
+
for (const entry of registry._idmap.entries()) {
|
|
4555
|
+
const [key, schema] = entry;
|
|
4556
|
+
extractDefs(ctx, schema);
|
|
4557
|
+
schemas[key] = finalize(ctx, schema);
|
|
4558
|
+
}
|
|
4559
|
+
if (Object.keys(defs).length > 0) schemas.__shared = { [ctx.target === "draft-2020-12" ? "$defs" : "definitions"]: defs };
|
|
4560
|
+
return { schemas };
|
|
4561
|
+
}
|
|
4562
|
+
const ctx = initializeContext({
|
|
4563
|
+
...params,
|
|
4564
|
+
processors: allProcessors
|
|
4565
|
+
});
|
|
4566
|
+
process(input, ctx);
|
|
4567
|
+
extractDefs(ctx, input);
|
|
4568
|
+
return finalize(ctx, input);
|
|
4569
|
+
}
|
|
4444
4570
|
//#endregion
|
|
4445
4571
|
//#region ../../node_modules/zod/v4/classic/iso.js
|
|
4446
4572
|
var ZodISODateTime = /*@__PURE__*/ $constructor("ZodISODateTime", (inst, def) => {
|
|
@@ -5477,7 +5603,7 @@ var ZodIssueCode = {
|
|
|
5477
5603
|
var ZodFirstPartyTypeKind;
|
|
5478
5604
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5479
5605
|
//#endregion
|
|
5480
|
-
//#region ../types/dist/sleep-
|
|
5606
|
+
//#region ../types/dist/sleep-bZIhUvjd.mjs
|
|
5481
5607
|
/**
|
|
5482
5608
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5483
5609
|
* window to float samples (D455).
|
|
@@ -5594,7 +5720,7 @@ function isKeychainStoredField(field) {
|
|
|
5594
5720
|
var SECRET_CLEAR = { $secretClear: true };
|
|
5595
5721
|
/** The `'***'` token D634 redaction writes for non-admins. */
|
|
5596
5722
|
var LEGACY_DEVICE_REDACTION = "***";
|
|
5597
|
-
function isRecord$
|
|
5723
|
+
function isRecord$5(value) {
|
|
5598
5724
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5599
5725
|
}
|
|
5600
5726
|
function makeSecretMarker(ref) {
|
|
@@ -5605,12 +5731,12 @@ function makeSecretMarker(ref) {
|
|
|
5605
5731
|
}
|
|
5606
5732
|
/** A stored marker: an object whose `$secret` is a non-empty string. */
|
|
5607
5733
|
function isSecretMarker(value) {
|
|
5608
|
-
if (!isRecord$
|
|
5734
|
+
if (!isRecord$5(value)) return false;
|
|
5609
5735
|
const ref = value["$secret"];
|
|
5610
5736
|
return typeof ref === "string" && ref.length > 0;
|
|
5611
5737
|
}
|
|
5612
5738
|
function isSecretClear(value) {
|
|
5613
|
-
return isRecord$
|
|
5739
|
+
return isRecord$5(value) && value["$secretClear"] === true;
|
|
5614
5740
|
}
|
|
5615
5741
|
/**
|
|
5616
5742
|
* The UI view of a stored secret field value: a marker becomes "set", inline
|
|
@@ -6220,7 +6346,7 @@ var KeychainWriteRefusedError = class extends Error {
|
|
|
6220
6346
|
}
|
|
6221
6347
|
};
|
|
6222
6348
|
var KEEP = { kind: "keep" };
|
|
6223
|
-
function isRecord$
|
|
6349
|
+
function isRecord$4(value) {
|
|
6224
6350
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6225
6351
|
}
|
|
6226
6352
|
function defaultMintId() {
|
|
@@ -6233,7 +6359,7 @@ function collectSecretMarkerRefs(value, out = []) {
|
|
|
6233
6359
|
return out;
|
|
6234
6360
|
}
|
|
6235
6361
|
if (Array.isArray(value)) for (const item of value) collectSecretMarkerRefs(item, out);
|
|
6236
|
-
else if (isRecord$
|
|
6362
|
+
else if (isRecord$4(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
|
|
6237
6363
|
return out;
|
|
6238
6364
|
}
|
|
6239
6365
|
async function storedValueEquals(secrets, marker, candidate) {
|
|
@@ -6288,7 +6414,7 @@ function rowId(row, idKey) {
|
|
|
6288
6414
|
return null;
|
|
6289
6415
|
}
|
|
6290
6416
|
async function writeArray(ctx, node, incoming, stored, fieldPath) {
|
|
6291
|
-
const storedRows = Array.isArray(stored) ? stored.filter(isRecord$
|
|
6417
|
+
const storedRows = Array.isArray(stored) ? stored.filter(isRecord$4) : [];
|
|
6292
6418
|
if (!Array.isArray(incoming)) {
|
|
6293
6419
|
ctx.deletes.push(...collectSecretMarkerRefs(storedRows));
|
|
6294
6420
|
return {
|
|
@@ -6304,7 +6430,7 @@ async function writeArray(ctx, node, incoming, stored, fieldPath) {
|
|
|
6304
6430
|
const kept = /* @__PURE__ */ new Set();
|
|
6305
6431
|
const rows = [];
|
|
6306
6432
|
for (const row of incoming) {
|
|
6307
|
-
if (!isRecord$
|
|
6433
|
+
if (!isRecord$4(row)) {
|
|
6308
6434
|
rows.push(row);
|
|
6309
6435
|
continue;
|
|
6310
6436
|
}
|
|
@@ -6329,7 +6455,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
|
|
|
6329
6455
|
case "leaf": return writeLeaf(ctx, incoming, stored, fieldPath);
|
|
6330
6456
|
case "array": return writeArray(ctx, node, incoming, stored, fieldPath);
|
|
6331
6457
|
case "object": {
|
|
6332
|
-
if (!isRecord$
|
|
6458
|
+
if (!isRecord$4(incoming)) {
|
|
6333
6459
|
if (incoming === void 0) return KEEP;
|
|
6334
6460
|
ctx.deletes.push(...collectSecretMarkerRefs(stored));
|
|
6335
6461
|
return {
|
|
@@ -6337,7 +6463,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
|
|
|
6337
6463
|
value: incoming
|
|
6338
6464
|
};
|
|
6339
6465
|
}
|
|
6340
|
-
const storedObj = isRecord$
|
|
6466
|
+
const storedObj = isRecord$4(stored) ? stored : {};
|
|
6341
6467
|
return {
|
|
6342
6468
|
kind: "value",
|
|
6343
6469
|
value: await writeMembers(ctx, node.children, incoming, storedObj, (m) => `${fieldPath}.${m}`)
|
|
@@ -6460,7 +6586,7 @@ async function resolveSecretMarkers(value, secrets, options = {}) {
|
|
|
6460
6586
|
value: items
|
|
6461
6587
|
};
|
|
6462
6588
|
}
|
|
6463
|
-
if (isRecord$
|
|
6589
|
+
if (isRecord$4(v)) {
|
|
6464
6590
|
const out = {};
|
|
6465
6591
|
for (const [k, child] of Object.entries(v)) {
|
|
6466
6592
|
const s = substitute(child);
|
|
@@ -6492,7 +6618,7 @@ var SecretOverwriteRefusedError = class extends Error {
|
|
|
6492
6618
|
this.name = "SecretOverwriteRefusedError";
|
|
6493
6619
|
}
|
|
6494
6620
|
};
|
|
6495
|
-
function isRecord(value) {
|
|
6621
|
+
function isRecord$3(value) {
|
|
6496
6622
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6497
6623
|
}
|
|
6498
6624
|
function resolvedValue(pass, marker) {
|
|
@@ -6521,7 +6647,7 @@ function inArray(pass, incoming, stored) {
|
|
|
6521
6647
|
return incoming.map((item, index) => {
|
|
6522
6648
|
const twin = stored[index];
|
|
6523
6649
|
if (isSecretMarker(twin)) return typeof item === "string" && item === resolvedValue(pass, twin) ? twin : item;
|
|
6524
|
-
if (isRecord(item) && isRecord(twin)) return inArrayRow(pass, item, twin);
|
|
6650
|
+
if (isRecord$3(item) && isRecord$3(twin)) return inArrayRow(pass, item, twin);
|
|
6525
6651
|
if (Array.isArray(item) && Array.isArray(twin)) return inArray(pass, item, twin);
|
|
6526
6652
|
return item;
|
|
6527
6653
|
});
|
|
@@ -6532,7 +6658,7 @@ function inArrayRow(pass, incoming, stored) {
|
|
|
6532
6658
|
const twin = stored[key];
|
|
6533
6659
|
if (isSecretMarker(twin)) {
|
|
6534
6660
|
if (typeof value === "string" && value === resolvedValue(pass, twin)) out[key] = twin;
|
|
6535
|
-
} else if (isRecord(value) && isRecord(twin)) out[key] = inArrayRow(pass, value, twin);
|
|
6661
|
+
} else if (isRecord$3(value) && isRecord$3(twin)) out[key] = inArrayRow(pass, value, twin);
|
|
6536
6662
|
else if (Array.isArray(value) && Array.isArray(twin)) out[key] = inArray(pass, value, twin);
|
|
6537
6663
|
}
|
|
6538
6664
|
return out;
|
|
@@ -6540,7 +6666,7 @@ function inArrayRow(pass, incoming, stored) {
|
|
|
6540
6666
|
async function walk(pass, incoming, stored) {
|
|
6541
6667
|
if (isSecretMarker(stored)) return atMarker(pass, incoming, stored);
|
|
6542
6668
|
if (Array.isArray(incoming) && Array.isArray(stored)) return inArray(pass, incoming, stored);
|
|
6543
|
-
if (!isRecord(incoming) || !isRecord(stored)) return incoming;
|
|
6669
|
+
if (!isRecord$3(incoming) || !isRecord$3(stored)) return incoming;
|
|
6544
6670
|
const out = { ...incoming };
|
|
6545
6671
|
for (const [key, value] of Object.entries(incoming)) out[key] = await walk(pass, value, stored[key]);
|
|
6546
6672
|
return out;
|
|
@@ -6571,7 +6697,7 @@ async function restoreUnchangedSecrets(input) {
|
|
|
6571
6697
|
function isJsonEqual(a, b) {
|
|
6572
6698
|
if (Object.is(a, b)) return true;
|
|
6573
6699
|
if (Array.isArray(a)) return Array.isArray(b) && a.length === b.length && a.every((v, i) => isJsonEqual(v, b[i]));
|
|
6574
|
-
if (isRecord(a) && isRecord(b)) {
|
|
6700
|
+
if (isRecord$3(a) && isRecord$3(b)) {
|
|
6575
6701
|
const keys = Object.keys(a);
|
|
6576
6702
|
if (keys.length !== Object.keys(b).length) return false;
|
|
6577
6703
|
return keys.every((k) => Object.prototype.hasOwnProperty.call(b, k) && isJsonEqual(a[k], b[k]));
|
|
@@ -6595,7 +6721,7 @@ function markerKeysOf(blob, owner) {
|
|
|
6595
6721
|
}
|
|
6596
6722
|
function nodeFromStored(value, owner) {
|
|
6597
6723
|
if (isSecretMarker(value)) return isSecretRefOwnedBy(value.$secret, owner) ? { kind: "leaf" } : null;
|
|
6598
|
-
if (!isRecord(value)) return null;
|
|
6724
|
+
if (!isRecord$3(value)) return null;
|
|
6599
6725
|
const children = /* @__PURE__ */ new Map();
|
|
6600
6726
|
for (const [key, child] of Object.entries(value)) {
|
|
6601
6727
|
const node = nodeFromStored(child, owner);
|
|
@@ -7383,7 +7509,7 @@ var BaseAddon = class {
|
|
|
7383
7509
|
if (!ctx) return;
|
|
7384
7510
|
const addonId = ctx.id;
|
|
7385
7511
|
setImmediate(() => {
|
|
7386
|
-
ctx.api.addons
|
|
7512
|
+
ctx.api.addons.restartAddon.mutate({ addonId }).then(() => {
|
|
7387
7513
|
ctx.logger.info("addon auto-restart triggered by restart-required setting change", { meta: { changedFields: patchKeys.filter((k) => restartKeys.has(k)) } });
|
|
7388
7514
|
}).catch((err) => {
|
|
7389
7515
|
ctx.logger.error("addon auto-restart failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
|
|
@@ -7877,6 +8003,303 @@ var PeerBytesTicketSchema = object({
|
|
|
7877
8003
|
*/
|
|
7878
8004
|
declaredBytes: number().int().nonnegative().nullable()
|
|
7879
8005
|
});
|
|
8006
|
+
/** Limits and names of `ctx.records` (D881). One authority; the engine and the facade read it. */
|
|
8007
|
+
/** The files a kind may live in. `history` is device-history's (D850), never records. */
|
|
8008
|
+
var RECORD_DATABASES = ["settings", "events"];
|
|
8009
|
+
/** The classes of a kind: the `@durable` vocabulary, one authority (replaces the annotation). */
|
|
8010
|
+
var RECORD_CLASSES = [
|
|
8011
|
+
"config",
|
|
8012
|
+
"ledger",
|
|
8013
|
+
"audit",
|
|
8014
|
+
"mirror",
|
|
8015
|
+
"ephemeral"
|
|
8016
|
+
];
|
|
8017
|
+
var RECORD_DEFAULT_MAX_DATA_BYTES = 64 * 1024;
|
|
8018
|
+
var RECORD_MAX_DATA_BYTES = 1024 * 1024;
|
|
8019
|
+
var RECORD_BATCH_MAX = 1e3;
|
|
8020
|
+
var RECORD_QUERY_MAX = 1e3;
|
|
8021
|
+
/** A kind in the `settings` file may not bound itself above this (D447: high volume is `events`). */
|
|
8022
|
+
var RECORD_SETTINGS_MAX_ROWS = 5e4;
|
|
8023
|
+
var PREFIX = "records/";
|
|
8024
|
+
/** The base of every records failure. `detail` is the human part of the message. */
|
|
8025
|
+
var RecordsError = class extends Error {
|
|
8026
|
+
code;
|
|
8027
|
+
detail;
|
|
8028
|
+
constructor(code, detail) {
|
|
8029
|
+
super(`${PREFIX}${code}: ${detail}`);
|
|
8030
|
+
this.name = "RecordsError";
|
|
8031
|
+
this.code = code;
|
|
8032
|
+
this.detail = detail;
|
|
8033
|
+
}
|
|
8034
|
+
};
|
|
8035
|
+
var InvalidRecordError = class extends RecordsError {
|
|
8036
|
+
constructor(detail) {
|
|
8037
|
+
super("invalid-record", detail);
|
|
8038
|
+
this.name = "InvalidRecordError";
|
|
8039
|
+
}
|
|
8040
|
+
};
|
|
8041
|
+
/** A kind declaration the engine refuses (non-additive change, bad shape, wrong file). */
|
|
8042
|
+
var DeclarationRefusedError = class extends RecordsError {
|
|
8043
|
+
constructor(detail) {
|
|
8044
|
+
super("declaration-refused", detail);
|
|
8045
|
+
this.name = "DeclarationRefusedError";
|
|
8046
|
+
}
|
|
8047
|
+
};
|
|
8048
|
+
function defOf(schema) {
|
|
8049
|
+
const zodBag = Reflect.get(schema, "_zod");
|
|
8050
|
+
if (typeof zodBag !== "object" || zodBag === null) return {};
|
|
8051
|
+
const def = Reflect.get(zodBag, "def");
|
|
8052
|
+
if (typeof def !== "object" || def === null) return {};
|
|
8053
|
+
return def;
|
|
8054
|
+
}
|
|
8055
|
+
function declaredHere(schema) {
|
|
8056
|
+
return globalRegistry.get(schema)?.secret === true;
|
|
8057
|
+
}
|
|
8058
|
+
/** Wrapper kinds whose `innerType` is the field itself. */
|
|
8059
|
+
var WRAPPERS = new Set([
|
|
8060
|
+
"optional",
|
|
8061
|
+
"nullable",
|
|
8062
|
+
"default",
|
|
8063
|
+
"prefault",
|
|
8064
|
+
"catch",
|
|
8065
|
+
"readonly",
|
|
8066
|
+
"nonoptional"
|
|
8067
|
+
]);
|
|
8068
|
+
/**
|
|
8069
|
+
* The schema layers that make up ONE field: the schema itself and every
|
|
8070
|
+
* wrapper below it (optional / default / nullable / readonly / catch), plus
|
|
8071
|
+
* both sides of a pipe (`z.preprocess` puts the real schema on `out`,
|
|
8072
|
+
* `.transform` on `in`).
|
|
8073
|
+
*/
|
|
8074
|
+
function layersOf(schema) {
|
|
8075
|
+
const out = [];
|
|
8076
|
+
const queue = [schema];
|
|
8077
|
+
while (queue.length > 0) {
|
|
8078
|
+
const s = queue.shift();
|
|
8079
|
+
if (!s || out.includes(s)) continue;
|
|
8080
|
+
out.push(s);
|
|
8081
|
+
const def = defOf(s);
|
|
8082
|
+
if (def.type !== void 0 && WRAPPERS.has(def.type) && def.innerType) queue.push(def.innerType);
|
|
8083
|
+
if (def.type === "pipe") {
|
|
8084
|
+
if (def.in) queue.push(def.in);
|
|
8085
|
+
if (def.out) queue.push(def.out);
|
|
8086
|
+
}
|
|
8087
|
+
}
|
|
8088
|
+
return out;
|
|
8089
|
+
}
|
|
8090
|
+
/** True when any layer of this field declares `.meta({ secret: true })`. */
|
|
8091
|
+
function isZodSecret(schema) {
|
|
8092
|
+
return layersOf(schema).some(declaredHere);
|
|
8093
|
+
}
|
|
8094
|
+
/**
|
|
8095
|
+
* Every declared secret path in a config schema: dotted keys, `[]` for "each
|
|
8096
|
+
* element of this array" (`connection.password`, `rows[].token`). A declared
|
|
8097
|
+
* object or array is reported as one path and not descended into — everything
|
|
8098
|
+
* under it is secret.
|
|
8099
|
+
*/
|
|
8100
|
+
function collectZodSecretPaths(schema, prefix = "") {
|
|
8101
|
+
if (isZodSecret(schema)) return prefix.length > 0 ? [prefix] : [];
|
|
8102
|
+
const paths = [];
|
|
8103
|
+
for (const layer of layersOf(schema)) {
|
|
8104
|
+
const def = defOf(layer);
|
|
8105
|
+
if (def.type === "object" && def.shape) for (const [key, child] of Object.entries(def.shape)) paths.push(...collectZodSecretPaths(child, prefix ? `${prefix}.${key}` : key));
|
|
8106
|
+
else if (def.type === "array" && def.element) paths.push(...collectZodSecretPaths(def.element, `${prefix}[]`));
|
|
8107
|
+
else if (def.type === "union" && def.options) for (const option of def.options) paths.push(...collectZodSecretPaths(option, prefix));
|
|
8108
|
+
else if (def.type === "intersection") {
|
|
8109
|
+
if (def.left) paths.push(...collectZodSecretPaths(def.left, prefix));
|
|
8110
|
+
if (def.right) paths.push(...collectZodSecretPaths(def.right, prefix));
|
|
8111
|
+
}
|
|
8112
|
+
}
|
|
8113
|
+
return [...new Set(paths)];
|
|
8114
|
+
}
|
|
8115
|
+
/**
|
|
8116
|
+
* Secret fields of a record, addressed the way a Zod schema declares them
|
|
8117
|
+
* (`collectZodSecretPaths`): dotted keys, `[]` for "each element of this array"
|
|
8118
|
+
* (`auth.accessToken`, `headers[].value`).
|
|
8119
|
+
*
|
|
8120
|
+
* Array elements are matched by a DECLARED id key (`secretArrayKeys`:
|
|
8121
|
+
* `{ headers: 'name' }`), never by index, so reordering a list keeps every
|
|
8122
|
+
* keychain ref (the same rule as `arrayItemFieldPath`). The concrete path of a
|
|
8123
|
+
* leaf names its element: `headers[X-Api].value`.
|
|
8124
|
+
*
|
|
8125
|
+
* Pure and browser-safe. Nothing here mutates: every transform returns a new value.
|
|
8126
|
+
*/
|
|
8127
|
+
/** The array prefixes (declared form, e.g. `headers` or `a.headers`) of a path. */
|
|
8128
|
+
function parseSecretPath(path) {
|
|
8129
|
+
if (path.length === 0) throw new InvalidRecordError("an empty secret path");
|
|
8130
|
+
return path.split(".").map((raw) => {
|
|
8131
|
+
const each = raw.endsWith("[]");
|
|
8132
|
+
const key = each ? raw.slice(0, -2) : raw;
|
|
8133
|
+
if (key.length === 0) throw new InvalidRecordError(`secret path "${path}" has an empty segment`);
|
|
8134
|
+
return {
|
|
8135
|
+
key,
|
|
8136
|
+
each
|
|
8137
|
+
};
|
|
8138
|
+
});
|
|
8139
|
+
}
|
|
8140
|
+
/** The declared array prefixes of `path` that need an id key (`headers`, `a.rows`). */
|
|
8141
|
+
function secretArrayPrefixes(path) {
|
|
8142
|
+
const segments = parseSecretPath(path);
|
|
8143
|
+
const prefixes = [];
|
|
8144
|
+
const walked = [];
|
|
8145
|
+
for (const segment of segments) {
|
|
8146
|
+
walked.push(segment.key);
|
|
8147
|
+
if (segment.each) prefixes.push(walked.join("."));
|
|
8148
|
+
}
|
|
8149
|
+
return prefixes;
|
|
8150
|
+
}
|
|
8151
|
+
/**
|
|
8152
|
+
* Record kinds (D881): the declaration an addon makes of one kind of fact, the
|
|
8153
|
+
* Zod row schema that describes it, and the helper that turns the two into the
|
|
8154
|
+
* JSON the engine stores.
|
|
8155
|
+
*
|
|
8156
|
+
* A kind is declared ONCE, next to the code that owns it, and the engine's
|
|
8157
|
+
* reconciler creates its indexes - nothing creates DDL at runtime from a write.
|
|
8158
|
+
* Everything the generic machinery needs (secret fields, the entry descriptor)
|
|
8159
|
+
* is DERIVED from the Zod schema: `.meta({ secret: true })` marks a credential,
|
|
8160
|
+
* never a field name (D879).
|
|
8161
|
+
*/
|
|
8162
|
+
/** A JSON field path: `trackId`, `auth.accessToken`. Charset-restricted: it is rendered into DDL. */
|
|
8163
|
+
var RecordFieldPathSchema = string().regex(/^[A-Za-z_][A-Za-z0-9_]{0,63}(\.[A-Za-z_][A-Za-z0-9_]{0,63}){0,3}$/);
|
|
8164
|
+
var RecordIndexSchema = object({
|
|
8165
|
+
name: string().regex(/^[a-z][a-z0-9_]{0,31}$/),
|
|
8166
|
+
fields: array(RecordFieldPathSchema).min(1).max(4),
|
|
8167
|
+
unique: boolean().optional()
|
|
8168
|
+
}).strict();
|
|
8169
|
+
var RecordRetentionSchema = union([
|
|
8170
|
+
object({
|
|
8171
|
+
ttlMs: number().int().positive(),
|
|
8172
|
+
from: _enum(["at", "write"])
|
|
8173
|
+
}).strict(),
|
|
8174
|
+
object({
|
|
8175
|
+
maxRows: number().int().positive().optional(),
|
|
8176
|
+
maxRowsPerDevice: number().int().positive().optional()
|
|
8177
|
+
}).strict().refine((r) => r.maxRows !== void 0 || r.maxRowsPerDevice !== void 0, { message: "name maxRows, maxRowsPerDevice or both" }),
|
|
8178
|
+
object({
|
|
8179
|
+
owner: string().min(1),
|
|
8180
|
+
reason: string().min(1)
|
|
8181
|
+
}).strict(),
|
|
8182
|
+
object({ none: string().min(1) }).strict()
|
|
8183
|
+
]);
|
|
8184
|
+
/** The descriptor a generic entries UI reads (D881 "generic entries"). */
|
|
8185
|
+
var EntryDescriptorSchema = object({
|
|
8186
|
+
title: string().min(1),
|
|
8187
|
+
/** The record body field shown as the entry's name. */
|
|
8188
|
+
nameField: string().min(1),
|
|
8189
|
+
/** JSON Schema of the entry body; `secret: true` marks a password field. */
|
|
8190
|
+
fields: record(string(), unknown())
|
|
8191
|
+
}).strict();
|
|
8192
|
+
/** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
|
|
8193
|
+
var RecordKindDeclarationSchema = object({
|
|
8194
|
+
database: _enum(RECORD_DATABASES).default("settings"),
|
|
8195
|
+
class: _enum(RECORD_CLASSES),
|
|
8196
|
+
writeTrigger: string().min(1),
|
|
8197
|
+
device: _enum([
|
|
8198
|
+
"required",
|
|
8199
|
+
"optional",
|
|
8200
|
+
"none"
|
|
8201
|
+
]).default("none"),
|
|
8202
|
+
at: _enum(["required", "none"]).default("none"),
|
|
8203
|
+
indexes: array(RecordIndexSchema).max(8).default([]),
|
|
8204
|
+
retention: RecordRetentionSchema,
|
|
8205
|
+
deviceRemoval: _enum(["delete", "none"]).default("none"),
|
|
8206
|
+
maxDataBytes: number().int().positive().max(RECORD_MAX_DATA_BYTES).default(RECORD_DEFAULT_MAX_DATA_BYTES),
|
|
8207
|
+
/** Derived from the Zod schema; never written by hand. */
|
|
8208
|
+
secretPaths: array(string().min(1)).default([]),
|
|
8209
|
+
/** The id key of each array that carries a secret (`{ headers: 'name' }`). */
|
|
8210
|
+
secretArrayKeys: record(string(), string()).default({}),
|
|
8211
|
+
/** The legacy table this kind adopts from; the boot guard reads it (D853: no migration code). */
|
|
8212
|
+
adoptsFrom: string().min(1).optional(),
|
|
8213
|
+
/** Kinds that must agree through `transact` sit in one file under one family name. */
|
|
8214
|
+
transactFamily: string().min(1).optional(),
|
|
8215
|
+
entry: EntryDescriptorSchema.optional()
|
|
8216
|
+
}).strict();
|
|
8217
|
+
/** The kind names: lower-case, dash separated, short enough for an index name. */
|
|
8218
|
+
var RecordKindNameSchema = string().regex(/^[a-z][a-z0-9-]{0,47}$/);
|
|
8219
|
+
/** Cross-field rules a declaration must satisfy. Throws {@link DeclarationRefusedError}. */
|
|
8220
|
+
function assertValidDeclaration(name, decl) {
|
|
8221
|
+
const refuse = (why) => {
|
|
8222
|
+
throw new DeclarationRefusedError(`kind "${name}": ${why}`);
|
|
8223
|
+
};
|
|
8224
|
+
if (!RecordKindNameSchema.safeParse(name).success) refuse("the name must be lower-case-dashed");
|
|
8225
|
+
const seen = /* @__PURE__ */ new Set();
|
|
8226
|
+
for (const index of decl.indexes) {
|
|
8227
|
+
if (seen.has(index.name)) refuse(`index name "${index.name}" is declared twice`);
|
|
8228
|
+
seen.add(index.name);
|
|
8229
|
+
}
|
|
8230
|
+
const { retention } = decl;
|
|
8231
|
+
const hasSecrets = decl.secretPaths.length > 0;
|
|
8232
|
+
if ("ttlMs" in retention) {
|
|
8233
|
+
if (retention.from === "at" && decl.at !== "required") refuse("a ttl from \"at\" needs at: \"required\"");
|
|
8234
|
+
if (hasSecrets) refuse("a kind with secret fields cannot use engine TTL (its keychain values would be orphaned)");
|
|
8235
|
+
}
|
|
8236
|
+
if ("maxRows" in retention || "maxRowsPerDevice" in retention) {
|
|
8237
|
+
if (retention.maxRowsPerDevice !== void 0 && decl.device !== "required") refuse("maxRowsPerDevice needs device: \"required\"");
|
|
8238
|
+
if (decl.at !== "required") refuse("a row bound trims the oldest \"at\": it needs at: \"required\"");
|
|
8239
|
+
if (hasSecrets) refuse("a kind with secret fields cannot use an engine row bound");
|
|
8240
|
+
const bound = Math.max(retention.maxRows ?? 0, retention.maxRowsPerDevice ?? 0);
|
|
8241
|
+
if (decl.database === "settings" && bound > 5e4) refuse(`a row bound above ${RECORD_SETTINGS_MAX_ROWS} belongs in database: "events" (a big delete on the settings thread stalls every configuration read)`);
|
|
8242
|
+
}
|
|
8243
|
+
if (decl.deviceRemoval === "delete" && decl.device === "none") refuse("deviceRemoval: \"delete\" needs a device: \"required\" or \"optional\"");
|
|
8244
|
+
for (const path of decl.secretPaths) for (const prefix of secretArrayPrefixes(path)) if (decl.secretArrayKeys[prefix] === void 0) refuse(`secret path "${path}" crosses the array "${prefix}": declare its id key in secretArrayKeys`);
|
|
8245
|
+
}
|
|
8246
|
+
function bodyFieldsOf(schema) {
|
|
8247
|
+
return { ...toJSONSchema(schema, {
|
|
8248
|
+
unrepresentable: "any",
|
|
8249
|
+
io: "input"
|
|
8250
|
+
}) };
|
|
8251
|
+
}
|
|
8252
|
+
function isRecordLike(value) {
|
|
8253
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
8254
|
+
}
|
|
8255
|
+
/** Does every branch of the body schema carry `field`? (A discriminated union has several.) */
|
|
8256
|
+
function hasNameField(json, field) {
|
|
8257
|
+
const branches = json["oneOf"] ?? json["anyOf"];
|
|
8258
|
+
if (Array.isArray(branches)) return branches.length > 0 && branches.every((b) => isRecordLike(b) && hasNameField(b, field));
|
|
8259
|
+
const properties = json["properties"];
|
|
8260
|
+
return isRecordLike(properties) && Object.prototype.hasOwnProperty.call(properties, field);
|
|
8261
|
+
}
|
|
8262
|
+
/**
|
|
8263
|
+
* Declare the kinds of a package. The keys are the kind names. The result is
|
|
8264
|
+
* what `ctx.records.declare` sends to the engine and what `ctx.records.kind`
|
|
8265
|
+
* types its handle from.
|
|
8266
|
+
*/
|
|
8267
|
+
function defineRecordKinds(specs) {
|
|
8268
|
+
const out = {};
|
|
8269
|
+
for (const [name, spec] of Object.entries(specs)) {
|
|
8270
|
+
const secretPaths = collectZodSecretPaths(spec.schema);
|
|
8271
|
+
const nameField = spec.entry?.nameField ?? "name";
|
|
8272
|
+
const fields = bodyFieldsOf(spec.schema);
|
|
8273
|
+
if (spec.entry !== void 0 && !hasNameField(fields, nameField)) throw new DeclarationRefusedError(`kind "${name}": an entry kind's schema needs a "${nameField}" field`);
|
|
8274
|
+
const parsed = RecordKindDeclarationSchema.parse({
|
|
8275
|
+
database: spec.database,
|
|
8276
|
+
class: spec.class,
|
|
8277
|
+
writeTrigger: spec.writeTrigger,
|
|
8278
|
+
device: spec.device,
|
|
8279
|
+
at: spec.at,
|
|
8280
|
+
indexes: spec.indexes === void 0 ? void 0 : [...spec.indexes],
|
|
8281
|
+
retention: spec.retention,
|
|
8282
|
+
deviceRemoval: spec.deviceRemoval,
|
|
8283
|
+
maxDataBytes: spec.maxDataBytes,
|
|
8284
|
+
secretPaths: [...secretPaths],
|
|
8285
|
+
secretArrayKeys: spec.secretArrayKeys === void 0 ? void 0 : { ...spec.secretArrayKeys },
|
|
8286
|
+
adoptsFrom: spec.adoptsFrom,
|
|
8287
|
+
transactFamily: spec.transactFamily,
|
|
8288
|
+
entry: spec.entry === void 0 ? void 0 : {
|
|
8289
|
+
title: spec.entry.title,
|
|
8290
|
+
nameField,
|
|
8291
|
+
fields
|
|
8292
|
+
}
|
|
8293
|
+
});
|
|
8294
|
+
assertValidDeclaration(name, parsed);
|
|
8295
|
+
out[name] = {
|
|
8296
|
+
name,
|
|
8297
|
+
schema: spec.schema,
|
|
8298
|
+
declaration: parsed
|
|
8299
|
+
};
|
|
8300
|
+
}
|
|
8301
|
+
return out;
|
|
8302
|
+
}
|
|
7880
8303
|
/** Shared Zod schemas used across streaming capabilities. */
|
|
7881
8304
|
var CamProfileSchema = _enum([
|
|
7882
8305
|
"high",
|
|
@@ -8422,69 +8845,6 @@ method(object({ deviceId: number() }), array(StreamSourceEntrySchema)), method(o
|
|
|
8422
8845
|
kind: "mutation",
|
|
8423
8846
|
auth: "admin"
|
|
8424
8847
|
}), method(object({ deviceId: number() }), unknown().nullable()), method(object({ deviceId: number() }), RawStateResultSchema.nullable(), { auth: "protected" });
|
|
8425
|
-
function defOf(schema) {
|
|
8426
|
-
return schema._zod?.def ?? {};
|
|
8427
|
-
}
|
|
8428
|
-
function declaredHere(schema) {
|
|
8429
|
-
return globalRegistry.get(schema)?.secret === true;
|
|
8430
|
-
}
|
|
8431
|
-
/** Wrapper kinds whose `innerType` is the field itself. */
|
|
8432
|
-
var WRAPPERS = new Set([
|
|
8433
|
-
"optional",
|
|
8434
|
-
"nullable",
|
|
8435
|
-
"default",
|
|
8436
|
-
"prefault",
|
|
8437
|
-
"catch",
|
|
8438
|
-
"readonly",
|
|
8439
|
-
"nonoptional"
|
|
8440
|
-
]);
|
|
8441
|
-
/**
|
|
8442
|
-
* The schema layers that make up ONE field: the schema itself and every
|
|
8443
|
-
* wrapper below it (optional / default / nullable / readonly / catch), plus
|
|
8444
|
-
* both sides of a pipe (`z.preprocess` puts the real schema on `out`,
|
|
8445
|
-
* `.transform` on `in`).
|
|
8446
|
-
*/
|
|
8447
|
-
function layersOf(schema) {
|
|
8448
|
-
const out = [];
|
|
8449
|
-
const queue = [schema];
|
|
8450
|
-
while (queue.length > 0) {
|
|
8451
|
-
const s = queue.shift();
|
|
8452
|
-
if (!s || out.includes(s)) continue;
|
|
8453
|
-
out.push(s);
|
|
8454
|
-
const def = defOf(s);
|
|
8455
|
-
if (def.type !== void 0 && WRAPPERS.has(def.type) && def.innerType) queue.push(def.innerType);
|
|
8456
|
-
if (def.type === "pipe") {
|
|
8457
|
-
if (def.in) queue.push(def.in);
|
|
8458
|
-
if (def.out) queue.push(def.out);
|
|
8459
|
-
}
|
|
8460
|
-
}
|
|
8461
|
-
return out;
|
|
8462
|
-
}
|
|
8463
|
-
/** True when any layer of this field declares `.meta({ secret: true })`. */
|
|
8464
|
-
function isZodSecret(schema) {
|
|
8465
|
-
return layersOf(schema).some(declaredHere);
|
|
8466
|
-
}
|
|
8467
|
-
/**
|
|
8468
|
-
* Every declared secret path in a config schema: dotted keys, `[]` for "each
|
|
8469
|
-
* element of this array" (`connection.password`, `rows[].token`). A declared
|
|
8470
|
-
* object or array is reported as one path and not descended into — everything
|
|
8471
|
-
* under it is secret.
|
|
8472
|
-
*/
|
|
8473
|
-
function collectZodSecretPaths(schema, prefix = "") {
|
|
8474
|
-
if (isZodSecret(schema)) return prefix.length > 0 ? [prefix] : [];
|
|
8475
|
-
const paths = [];
|
|
8476
|
-
for (const layer of layersOf(schema)) {
|
|
8477
|
-
const def = defOf(layer);
|
|
8478
|
-
if (def.type === "object" && def.shape) for (const [key, child] of Object.entries(def.shape)) paths.push(...collectZodSecretPaths(child, prefix ? `${prefix}.${key}` : key));
|
|
8479
|
-
else if (def.type === "array" && def.element) paths.push(...collectZodSecretPaths(def.element, `${prefix}[]`));
|
|
8480
|
-
else if (def.type === "union" && def.options) for (const option of def.options) paths.push(...collectZodSecretPaths(option, prefix));
|
|
8481
|
-
else if (def.type === "intersection") {
|
|
8482
|
-
if (def.left) paths.push(...collectZodSecretPaths(def.left, prefix));
|
|
8483
|
-
if (def.right) paths.push(...collectZodSecretPaths(def.right, prefix));
|
|
8484
|
-
}
|
|
8485
|
-
}
|
|
8486
|
-
return [...new Set(paths)];
|
|
8487
|
-
}
|
|
8488
8848
|
/**
|
|
8489
8849
|
* AUTO-GENERATED by scripts/generate-device-scoped-caps.ts — DO NOT EDIT.
|
|
8490
8850
|
*
|
|
@@ -16825,6 +17185,41 @@ var ComposableCapabilitiesSchema = object({ caps: array(object({
|
|
|
16825
17185
|
keyField: string()
|
|
16826
17186
|
}).optional()
|
|
16827
17187
|
})) });
|
|
17188
|
+
/**
|
|
17189
|
+
* The report of a one-shot "move this owner's plaintext secrets into the
|
|
17190
|
+
* keychain" run (D878). COUNTS only - never a value, never a ref.
|
|
17191
|
+
*
|
|
17192
|
+
* The owner runs it on its own rows, through its own write path; an operator
|
|
17193
|
+
* script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
|
|
17194
|
+
* Dry run (`apply: false`) reports what WOULD move and changes nothing.
|
|
17195
|
+
*/
|
|
17196
|
+
var RawSecretMigrationInputSchema = object({
|
|
17197
|
+
/** `false` (the default of the script) = report only. */
|
|
17198
|
+
apply: boolean() });
|
|
17199
|
+
var RawSecretMigrationReportSchema = object({
|
|
17200
|
+
apply: boolean(),
|
|
17201
|
+
/** Rows that can carry a secret (a profile, an enrolment). */
|
|
17202
|
+
rows: number().int(),
|
|
17203
|
+
/** Rows whose secret was plaintext when the run started. */
|
|
17204
|
+
raw: number().int(),
|
|
17205
|
+
/** Rows that already held a keychain marker when the run started. */
|
|
17206
|
+
markers: number().int(),
|
|
17207
|
+
/** Plaintext rows moved by THIS run (always 0 on a dry run). */
|
|
17208
|
+
migrated: number().int(),
|
|
17209
|
+
/** Plaintext rows left in place because the move or its read-back failed. */
|
|
17210
|
+
failed: number().int(),
|
|
17211
|
+
/** After the run: rows still holding plaintext. */
|
|
17212
|
+
remainingRaw: number().int(),
|
|
17213
|
+
/** After the run: markers the keychain could not resolve right now. */
|
|
17214
|
+
unresolvedMarkers: number().int(),
|
|
17215
|
+
/**
|
|
17216
|
+
* A second, redundant copy of the secrets' rows that the run found (and, on
|
|
17217
|
+
* `apply`, deleted after verifying the first). Owners with a single copy omit it.
|
|
17218
|
+
*/
|
|
17219
|
+
redundantCopies: number().int().optional(),
|
|
17220
|
+
/** True when nothing is raw and every marker resolves. */
|
|
17221
|
+
verified: boolean()
|
|
17222
|
+
});
|
|
16828
17223
|
/** The block id behind a generated addon/runner id, or null when the id belongs
|
|
16829
17224
|
* to something else. The inverse of {@link coreBlockAddonId}. */
|
|
16830
17225
|
function coreBlockIdFromAddonId(addonId) {
|
|
@@ -17058,6 +17453,9 @@ method(object({}), object({ blocks: array(CoreBlockSchema) }), { auth: "admin" }
|
|
|
17058
17453
|
}), SettingsUpdateResultSchema, {
|
|
17059
17454
|
kind: "mutation",
|
|
17060
17455
|
auth: "admin"
|
|
17456
|
+
}), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
|
|
17457
|
+
kind: "mutation",
|
|
17458
|
+
auth: "admin"
|
|
17061
17459
|
}), method(object({}), object({ libs: array(object({
|
|
17062
17460
|
filePath: string(),
|
|
17063
17461
|
content: string()
|
|
@@ -17320,6 +17718,222 @@ id: union([string(), number()]) }), {
|
|
|
17320
17718
|
kind: "mutation",
|
|
17321
17719
|
auth: "admin"
|
|
17322
17720
|
});
|
|
17721
|
+
/**
|
|
17722
|
+
* records - an addon's own facts and documents (D881): ledgers, audit rows,
|
|
17723
|
+
* config documents, mirrors. The third storage API next to `ctx.settings`
|
|
17724
|
+
* (operator intent, D870) and device-history (numbers over time, D850).
|
|
17725
|
+
*
|
|
17726
|
+
* Who the OWNER is: `callerAddonId`, stamped by the transport on a call that
|
|
17727
|
+
* crossed a process and stated by a hub in-process caller (`ctx.records` does
|
|
17728
|
+
* that with the addon id closed over). It is deliberately NOT in any input
|
|
17729
|
+
* schema, so a session can never supply it, and a call with no stamp is refused
|
|
17730
|
+
* `records/no-caller`. A kind is readable and writable only by its owner; other
|
|
17731
|
+
* addons go through the owner's capability.
|
|
17732
|
+
*
|
|
17733
|
+
* Every read is three-way: a row, `null`, or the call THROWS. A failed read is
|
|
17734
|
+
* never `[]`. Secret fields are never on the wire: a read shows the
|
|
17735
|
+
* redaction token, `secretRefs` hands the owner's `ctx.secrets` the refs it
|
|
17736
|
+
* resolves itself, and a write may carry only a keychain marker bound to the
|
|
17737
|
+
* row's own ref.
|
|
17738
|
+
*
|
|
17739
|
+
* Internal: addons reach it through `ctx.records`, never directly.
|
|
17740
|
+
*/
|
|
17741
|
+
var RecordIdSchema = string().min(1).max(256);
|
|
17742
|
+
/** A JSON object body. Size is the engine's check (`maxDataBytes`), not a schema's. */
|
|
17743
|
+
var RecordBodySchema = record(string(), unknown());
|
|
17744
|
+
var RecordInputSchema = object({
|
|
17745
|
+
id: RecordIdSchema,
|
|
17746
|
+
/** The device this row belongs to (D865 removal, per-device reads). */
|
|
17747
|
+
deviceId: number().int().optional(),
|
|
17748
|
+
/** The domain clock, ms: observed / created / opened. */
|
|
17749
|
+
at: number().int().optional(),
|
|
17750
|
+
/** Producer-set expiry, ms. Refused on a kind whose retention is an engine TTL. */
|
|
17751
|
+
expiresAt: number().int().optional(),
|
|
17752
|
+
data: RecordBodySchema
|
|
17753
|
+
});
|
|
17754
|
+
var RecordViewSchema = object({
|
|
17755
|
+
id: string(),
|
|
17756
|
+
deviceId: number().int().nullable(),
|
|
17757
|
+
at: number().nullable(),
|
|
17758
|
+
expiresAt: number().nullable(),
|
|
17759
|
+
rev: number().int(),
|
|
17760
|
+
updatedAt: number(),
|
|
17761
|
+
data: RecordBodySchema
|
|
17762
|
+
});
|
|
17763
|
+
/** Declared index fields only. Anything else does not compile, by design. */
|
|
17764
|
+
var RecordWhereSchema = record(RecordFieldPathSchema, union([
|
|
17765
|
+
string(),
|
|
17766
|
+
number(),
|
|
17767
|
+
boolean(),
|
|
17768
|
+
object({ in: array(union([
|
|
17769
|
+
string(),
|
|
17770
|
+
number(),
|
|
17771
|
+
boolean()
|
|
17772
|
+
])).min(1).max(RECORD_BATCH_MAX) }),
|
|
17773
|
+
object({
|
|
17774
|
+
gt: union([string(), number()]).optional(),
|
|
17775
|
+
gte: union([string(), number()]).optional(),
|
|
17776
|
+
lt: union([string(), number()]).optional(),
|
|
17777
|
+
lte: union([string(), number()]).optional()
|
|
17778
|
+
}).refine((r) => Object.keys(r).length > 0, { message: "name at least one bound" })
|
|
17779
|
+
]));
|
|
17780
|
+
var KindShape = { kind: RecordKindNameSchema };
|
|
17781
|
+
var TimeWindowShape = {
|
|
17782
|
+
deviceId: number().int().optional(),
|
|
17783
|
+
atFrom: number().optional(),
|
|
17784
|
+
atTo: number().optional()
|
|
17785
|
+
};
|
|
17786
|
+
var RecordQueryInputSchema = object({
|
|
17787
|
+
...KindShape,
|
|
17788
|
+
...TimeWindowShape,
|
|
17789
|
+
where: RecordWhereSchema.optional(),
|
|
17790
|
+
/** Without `where`: `at` (default for a kind with a clock) or `id`. With `where` the order is the index's. */
|
|
17791
|
+
order: _enum(["at", "id"]).optional(),
|
|
17792
|
+
desc: boolean().optional(),
|
|
17793
|
+
limit: number().int().min(1).max(RECORD_QUERY_MAX).default(100),
|
|
17794
|
+
/** Opaque keyset cursor from a previous answer. There is no offset. */
|
|
17795
|
+
cursor: string().min(1).optional()
|
|
17796
|
+
});
|
|
17797
|
+
var RecordQueryResultSchema = object({
|
|
17798
|
+
records: array(RecordViewSchema),
|
|
17799
|
+
nextCursor: string().nullable()
|
|
17800
|
+
});
|
|
17801
|
+
var RecordKindStateSchema = _enum([
|
|
17802
|
+
"created",
|
|
17803
|
+
"unchanged",
|
|
17804
|
+
"updated"
|
|
17805
|
+
]);
|
|
17806
|
+
var DeclareKindResultSchema = object({
|
|
17807
|
+
kindId: number().int(),
|
|
17808
|
+
state: RecordKindStateSchema,
|
|
17809
|
+
createdIndexes: array(string()),
|
|
17810
|
+
/** The boot guard: the kind is empty while its legacy table still holds rows. */
|
|
17811
|
+
adoptionPending: object({
|
|
17812
|
+
legacyTable: string(),
|
|
17813
|
+
legacyRows: number().int()
|
|
17814
|
+
}).nullable()
|
|
17815
|
+
});
|
|
17816
|
+
/** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
|
|
17817
|
+
var SecretRefsList = array(string());
|
|
17818
|
+
var RecordSecretRefsSchema = record(string(), record(string(), string()));
|
|
17819
|
+
method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
|
|
17820
|
+
kind: "mutation",
|
|
17821
|
+
auth: "admin"
|
|
17822
|
+
}), method(object({
|
|
17823
|
+
...KindShape,
|
|
17824
|
+
id: RecordIdSchema
|
|
17825
|
+
}), RecordViewSchema.nullable(), { auth: "admin" }), method(object({
|
|
17826
|
+
...KindShape,
|
|
17827
|
+
ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
|
|
17828
|
+
}), array(RecordViewSchema), { auth: "admin" }), method(object({
|
|
17829
|
+
...KindShape,
|
|
17830
|
+
ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
|
|
17831
|
+
}), RecordSecretRefsSchema, { auth: "admin" }), method(object({
|
|
17832
|
+
...KindShape,
|
|
17833
|
+
record: RecordInputSchema,
|
|
17834
|
+
/** Compare-and-set. `0` means "the row must not exist". */
|
|
17835
|
+
ifRev: number().int().min(0).optional()
|
|
17836
|
+
}), object({
|
|
17837
|
+
rev: number().int(),
|
|
17838
|
+
releasedRefs: SecretRefsList
|
|
17839
|
+
}), {
|
|
17840
|
+
kind: "mutation",
|
|
17841
|
+
auth: "admin"
|
|
17842
|
+
}), method(object({
|
|
17843
|
+
...KindShape,
|
|
17844
|
+
records: array(RecordInputSchema).min(1).max(RECORD_BATCH_MAX)
|
|
17845
|
+
}), object({
|
|
17846
|
+
count: number().int(),
|
|
17847
|
+
releasedRefs: SecretRefsList
|
|
17848
|
+
}), {
|
|
17849
|
+
kind: "mutation",
|
|
17850
|
+
auth: "admin"
|
|
17851
|
+
}), method(object({
|
|
17852
|
+
...KindShape,
|
|
17853
|
+
id: RecordIdSchema,
|
|
17854
|
+
data: RecordBodySchema,
|
|
17855
|
+
at: number().int().nullable().optional(),
|
|
17856
|
+
expiresAt: number().int().nullable().optional(),
|
|
17857
|
+
ifRev: number().int().min(1).optional()
|
|
17858
|
+
}), object({
|
|
17859
|
+
rev: number().int(),
|
|
17860
|
+
releasedRefs: SecretRefsList
|
|
17861
|
+
}), {
|
|
17862
|
+
kind: "mutation",
|
|
17863
|
+
auth: "admin"
|
|
17864
|
+
}), method(object({
|
|
17865
|
+
...KindShape,
|
|
17866
|
+
id: RecordIdSchema
|
|
17867
|
+
}), object({
|
|
17868
|
+
deleted: boolean(),
|
|
17869
|
+
secretRefs: SecretRefsList
|
|
17870
|
+
}), {
|
|
17871
|
+
kind: "mutation",
|
|
17872
|
+
auth: "admin"
|
|
17873
|
+
}), method(object({
|
|
17874
|
+
...KindShape,
|
|
17875
|
+
ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
|
|
17876
|
+
}), object({
|
|
17877
|
+
deleted: number().int(),
|
|
17878
|
+
secretRefs: SecretRefsList
|
|
17879
|
+
}), {
|
|
17880
|
+
kind: "mutation",
|
|
17881
|
+
auth: "admin"
|
|
17882
|
+
}), method(RecordQueryInputSchema, RecordQueryResultSchema, { auth: "admin" }), method(object({
|
|
17883
|
+
...KindShape,
|
|
17884
|
+
...TimeWindowShape,
|
|
17885
|
+
where: RecordWhereSchema.optional()
|
|
17886
|
+
}), object({ count: number().int() }), { auth: "admin" }), method(object({
|
|
17887
|
+
...KindShape,
|
|
17888
|
+
deviceId: number().int().optional(),
|
|
17889
|
+
from: number(),
|
|
17890
|
+
to: number(),
|
|
17891
|
+
bucketMs: number().int().positive()
|
|
17892
|
+
}), object({ buckets: array(object({
|
|
17893
|
+
bucketStart: number(),
|
|
17894
|
+
count: number().int()
|
|
17895
|
+
})) }), { auth: "admin" }), method(object({
|
|
17896
|
+
...KindShape,
|
|
17897
|
+
op: _enum([
|
|
17898
|
+
"sum",
|
|
17899
|
+
"min",
|
|
17900
|
+
"max",
|
|
17901
|
+
"count"
|
|
17902
|
+
]),
|
|
17903
|
+
field: RecordFieldPathSchema.optional(),
|
|
17904
|
+
groupBy: RecordFieldPathSchema.optional(),
|
|
17905
|
+
where: RecordWhereSchema.optional()
|
|
17906
|
+
}), object({ rows: array(object({
|
|
17907
|
+
group: union([
|
|
17908
|
+
string(),
|
|
17909
|
+
number(),
|
|
17910
|
+
_null()
|
|
17911
|
+
]),
|
|
17912
|
+
value: number().nullable()
|
|
17913
|
+
})) }), { auth: "admin" }), method(object({
|
|
17914
|
+
...KindShape,
|
|
17915
|
+
deviceId: number().int().optional(),
|
|
17916
|
+
atBefore: number().optional(),
|
|
17917
|
+
where: RecordWhereSchema.optional()
|
|
17918
|
+
}), object({
|
|
17919
|
+
deleted: number().int(),
|
|
17920
|
+
secretRefs: SecretRefsList
|
|
17921
|
+
}), {
|
|
17922
|
+
kind: "mutation",
|
|
17923
|
+
auth: "admin"
|
|
17924
|
+
}), method(object({
|
|
17925
|
+
deviceId: number().int(),
|
|
17926
|
+
kinds: array(RecordKindNameSchema).optional()
|
|
17927
|
+
}), object({
|
|
17928
|
+
deleted: record(string(), number().int()),
|
|
17929
|
+
secretRefs: SecretRefsList
|
|
17930
|
+
}), {
|
|
17931
|
+
kind: "mutation",
|
|
17932
|
+
auth: "admin"
|
|
17933
|
+
}), method(object(KindShape), object({ id: number().int() }), {
|
|
17934
|
+
kind: "mutation",
|
|
17935
|
+
auth: "admin"
|
|
17936
|
+
});
|
|
17323
17937
|
/** One table of the settings database. */
|
|
17324
17938
|
var StorageTableSchema = object({
|
|
17325
17939
|
/** The table's full name, e.g. `recorder:addon-settings` or `addon-device-settings`. */
|
|
@@ -17332,6 +17946,28 @@ var StorageTableSchema = object({
|
|
|
17332
17946
|
/** Declared by an addon since this engine process started (a running addon claims it). */
|
|
17333
17947
|
declaredThisBoot: boolean()
|
|
17334
17948
|
});
|
|
17949
|
+
/** One declared record kind (D881) as System -> Data shows it. */
|
|
17950
|
+
var StorageKindSchema = object({
|
|
17951
|
+
owner: string(),
|
|
17952
|
+
kind: string(),
|
|
17953
|
+
database: _enum(["settings", "events"]),
|
|
17954
|
+
class: string(),
|
|
17955
|
+
state: _enum([
|
|
17956
|
+
"declared",
|
|
17957
|
+
"orphaned",
|
|
17958
|
+
"dropped"
|
|
17959
|
+
]),
|
|
17960
|
+
/** `null` when the caller asked for no counts (`counts: false`). */
|
|
17961
|
+
rows: number().int().nonnegative().nullable(),
|
|
17962
|
+
/** Rows x the average size of a sample; null for an empty kind. */
|
|
17963
|
+
bytesEstimate: number().int().nonnegative().nullable(),
|
|
17964
|
+
writeTrigger: string(),
|
|
17965
|
+
retention: RecordRetentionSchema,
|
|
17966
|
+
/** `true` when the kind is an entry kind (the generic entries UI lists it). */
|
|
17967
|
+
entry: boolean(),
|
|
17968
|
+
/** The whole declaration, secret paths and entry descriptor included (the entries service builds its handle from it). */
|
|
17969
|
+
declaration: RecordKindDeclarationSchema
|
|
17970
|
+
});
|
|
17335
17971
|
method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: array(StorageTableSchema) }), { auth: "admin" }), method(object({
|
|
17336
17972
|
collection: string().min(1),
|
|
17337
17973
|
expectRows: number().int().nonnegative()
|
|
@@ -17341,6 +17977,87 @@ method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: arr
|
|
|
17341
17977
|
}), {
|
|
17342
17978
|
kind: "mutation",
|
|
17343
17979
|
auth: "admin"
|
|
17980
|
+
}), method(object({
|
|
17981
|
+
owner: string().min(1).optional(),
|
|
17982
|
+
/** `false` skips the per-kind row count (a catalog read only). Default true. */
|
|
17983
|
+
counts: boolean().optional()
|
|
17984
|
+
}), object({ kinds: array(StorageKindSchema) }), { auth: "admin" }), method(RecordQueryInputSchema.extend({
|
|
17985
|
+
owner: string().min(1),
|
|
17986
|
+
kind: RecordKindNameSchema
|
|
17987
|
+
}), RecordQueryResultSchema, { auth: "admin" }), method(object({
|
|
17988
|
+
owner: string().min(1),
|
|
17989
|
+
kind: RecordKindNameSchema,
|
|
17990
|
+
records: array(RecordInputSchema).max(RECORD_BATCH_MAX),
|
|
17991
|
+
/** The LAST batch: the copy is complete, the boot guard stops asking. */
|
|
17992
|
+
complete: boolean().optional()
|
|
17993
|
+
}).refine((input) => input.records.length > 0 || input.complete === true, { message: "records must be non-empty unless complete is true" }), object({ adopted: number().int() }), {
|
|
17994
|
+
kind: "mutation",
|
|
17995
|
+
auth: "admin"
|
|
17996
|
+
}), method(object({
|
|
17997
|
+
collection: string().min(1),
|
|
17998
|
+
cursor: string().optional(),
|
|
17999
|
+
limit: number().int().min(1).max(1e3).optional()
|
|
18000
|
+
}), object({
|
|
18001
|
+
rows: array(object({
|
|
18002
|
+
id: string(),
|
|
18003
|
+
data: record(string(), unknown())
|
|
18004
|
+
})),
|
|
18005
|
+
nextCursor: string().nullable()
|
|
18006
|
+
}), { auth: "admin" }), method(object({ collection: string().min(1) }), object({ adopted: boolean() }), { auth: "admin" });
|
|
18007
|
+
/**
|
|
18008
|
+
* record-entries - the ONE admin surface for every list of user-created entries
|
|
18009
|
+
* (D881): notification targets, brokers, LLM profiles, anything an addon
|
|
18010
|
+
* declares as an ENTRY kind (`entry: { title }` in `defineRecordKinds`).
|
|
18011
|
+
*
|
|
18012
|
+
* The UI is generic. `listEntryKinds` hands it, per kind, the JSON Schema of
|
|
18013
|
+
* the entry body with `secret: true` on every credential field, so a password
|
|
18014
|
+
* field is derived from the schema and never from a name. `putEntry` takes the
|
|
18015
|
+
* redaction token for an untouched secret (the stored value is kept), a string
|
|
18016
|
+
* for a new one, and the clear instruction to remove one. A read never carries
|
|
18017
|
+
* a secret value, and a locked keychain refuses the write with
|
|
18018
|
+
* `records/secret-unavailable` instead of storing plaintext.
|
|
18019
|
+
*
|
|
18020
|
+
* Hub-only, served in-process (it acts for each entry's owner on the keychain).
|
|
18021
|
+
*/
|
|
18022
|
+
var EntryKindInfoSchema = object({
|
|
18023
|
+
owner: string(),
|
|
18024
|
+
kind: RecordKindNameSchema,
|
|
18025
|
+
title: string(),
|
|
18026
|
+
nameField: string(),
|
|
18027
|
+
/** JSON Schema of the body; `secret: true` marks a password field. */
|
|
18028
|
+
fields: record(string(), unknown()),
|
|
18029
|
+
secretPaths: array(string()),
|
|
18030
|
+
rows: number().int().nonnegative()
|
|
18031
|
+
});
|
|
18032
|
+
var EntryViewSchema = object({
|
|
18033
|
+
id: RecordIdSchema,
|
|
18034
|
+
name: string(),
|
|
18035
|
+
rev: number().int(),
|
|
18036
|
+
updatedAt: number(),
|
|
18037
|
+
/** Secret fields hold the redaction token. */
|
|
18038
|
+
data: RecordBodySchema
|
|
18039
|
+
});
|
|
18040
|
+
var EntryAddress = {
|
|
18041
|
+
owner: string().min(1),
|
|
18042
|
+
kind: RecordKindNameSchema
|
|
18043
|
+
};
|
|
18044
|
+
method(object({}), object({ kinds: array(EntryKindInfoSchema) }), { auth: "admin" }), method(object({ ...EntryAddress }), object({ entries: array(EntryViewSchema) }), { auth: "admin" }), method(object({
|
|
18045
|
+
...EntryAddress,
|
|
18046
|
+
id: RecordIdSchema.optional(),
|
|
18047
|
+
data: RecordBodySchema,
|
|
18048
|
+
ifRev: number().int().min(1).optional()
|
|
18049
|
+
}), object({
|
|
18050
|
+
id: string(),
|
|
18051
|
+
rev: number().int()
|
|
18052
|
+
}), {
|
|
18053
|
+
kind: "mutation",
|
|
18054
|
+
auth: "admin"
|
|
18055
|
+
}), method(object({
|
|
18056
|
+
...EntryAddress,
|
|
18057
|
+
id: RecordIdSchema
|
|
18058
|
+
}), object({ deleted: boolean() }), {
|
|
18059
|
+
kind: "mutation",
|
|
18060
|
+
auth: "admin"
|
|
17344
18061
|
});
|
|
17345
18062
|
/**
|
|
17346
18063
|
* `keychain` — the hub's encrypted store of secret values (D787).
|
|
@@ -40486,36 +41203,6 @@ method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, {
|
|
|
40486
41203
|
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
40487
41204
|
});
|
|
40488
41205
|
/**
|
|
40489
|
-
* The report of a one-shot "move this owner's plaintext secrets into the
|
|
40490
|
-
* keychain" run (D878). COUNTS only - never a value, never a ref.
|
|
40491
|
-
*
|
|
40492
|
-
* The owner runs it on its own rows, through its own write path; an operator
|
|
40493
|
-
* script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
|
|
40494
|
-
* Dry run (`apply: false`) reports what WOULD move and changes nothing.
|
|
40495
|
-
*/
|
|
40496
|
-
var RawSecretMigrationInputSchema = object({
|
|
40497
|
-
/** `false` (the default of the script) = report only. */
|
|
40498
|
-
apply: boolean() });
|
|
40499
|
-
var RawSecretMigrationReportSchema = object({
|
|
40500
|
-
apply: boolean(),
|
|
40501
|
-
/** Rows that can carry a secret (a profile, an enrolment). */
|
|
40502
|
-
rows: number().int(),
|
|
40503
|
-
/** Rows whose secret was plaintext when the run started. */
|
|
40504
|
-
raw: number().int(),
|
|
40505
|
-
/** Rows that already held a keychain marker when the run started. */
|
|
40506
|
-
markers: number().int(),
|
|
40507
|
-
/** Plaintext rows moved by THIS run (always 0 on a dry run). */
|
|
40508
|
-
migrated: number().int(),
|
|
40509
|
-
/** Plaintext rows left in place because the move or its read-back failed. */
|
|
40510
|
-
failed: number().int(),
|
|
40511
|
-
/** After the run: rows still holding plaintext. */
|
|
40512
|
-
remainingRaw: number().int(),
|
|
40513
|
-
/** After the run: markers the keychain could not resolve right now. */
|
|
40514
|
-
unresolvedMarkers: number().int(),
|
|
40515
|
-
/** True when nothing is raw and every marker resolves. */
|
|
40516
|
-
verified: boolean()
|
|
40517
|
-
});
|
|
40518
|
-
/**
|
|
40519
41206
|
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
40520
41207
|
* methods concat-fan across providers; single-row methods route to ONE
|
|
40521
41208
|
* provider by the `addonId` in the call input (the notification-output
|
|
@@ -43711,6 +44398,7 @@ var NcThrottleSchema = object({
|
|
|
43711
44398
|
var NC_CONFIRM_MIN_TIMEOUT_MS = 1e3;
|
|
43712
44399
|
var NC_CONFIRM_MAX_TIMEOUT_MS = 2e4;
|
|
43713
44400
|
var NC_CONFIRM_DEFAULT_TIMEOUT_MS = 8e3;
|
|
44401
|
+
var NC_CONFIRM_DEFAULT_MAX_IMAGE_PX = 448;
|
|
43714
44402
|
/** Comparison the model's COUNT must satisfy for the notification to fire. */
|
|
43715
44403
|
var NcConfirmExpectSchema = object({
|
|
43716
44404
|
op: _enum([
|
|
@@ -68541,13 +69229,14 @@ var BaseDevice = class {
|
|
|
68541
69229
|
get state() {
|
|
68542
69230
|
if (!this._stateProxyCache) {
|
|
68543
69231
|
const cache = {};
|
|
68544
|
-
const handler = { get: (
|
|
69232
|
+
const handler = { get: (target, key) => {
|
|
68545
69233
|
const k = key;
|
|
68546
|
-
|
|
69234
|
+
const existing = Reflect.get(target, k);
|
|
69235
|
+
if (existing !== void 0) return existing;
|
|
68547
69236
|
const cap = DEVICE_LOCAL_STATE_CAPS[k];
|
|
68548
69237
|
if (!cap) return void 0;
|
|
68549
69238
|
const proxy = this.sliceProxy(cap);
|
|
68550
|
-
|
|
69239
|
+
Reflect.set(target, k, proxy);
|
|
68551
69240
|
return proxy;
|
|
68552
69241
|
} };
|
|
68553
69242
|
this._stateProxyCache = new Proxy(cache, handler);
|
|
@@ -68746,7 +69435,7 @@ var BaseDevice = class {
|
|
|
68746
69435
|
async updateSourceInfo(patch) {
|
|
68747
69436
|
const next = mergeSourceInfo(this.sourceInfo, patch);
|
|
68748
69437
|
this._sourceInfoCache = Object.freeze({ ...next });
|
|
68749
|
-
const action = this.ctx.api
|
|
69438
|
+
const action = this.ctx.api.deviceManager?.setMetadata;
|
|
68750
69439
|
if (action) try {
|
|
68751
69440
|
await action.mutate({
|
|
68752
69441
|
deviceId: this.id,
|
|
@@ -68781,7 +69470,7 @@ var BaseDevice = class {
|
|
|
68781
69470
|
* device boot on a meta refresh.
|
|
68782
69471
|
*/
|
|
68783
69472
|
async refreshFeatures() {
|
|
68784
|
-
const action = this.ctx.api
|
|
69473
|
+
const action = this.ctx.api.deviceManager?.registerDevice;
|
|
68785
69474
|
if (!action) return;
|
|
68786
69475
|
try {
|
|
68787
69476
|
await action.mutate({
|
|
@@ -70378,6 +71067,12 @@ Object.freeze({
|
|
|
70378
71067
|
addonId: null,
|
|
70379
71068
|
access: "view"
|
|
70380
71069
|
},
|
|
71070
|
+
"coreBlocks.migrateRawSecrets": {
|
|
71071
|
+
capName: "core-blocks",
|
|
71072
|
+
capScope: "system",
|
|
71073
|
+
addonId: null,
|
|
71074
|
+
access: "create"
|
|
71075
|
+
},
|
|
70381
71076
|
"coreBlocks.restart": {
|
|
70382
71077
|
capName: "core-blocks",
|
|
70383
71078
|
capScope: "system",
|
|
@@ -75130,6 +75825,30 @@ Object.freeze({
|
|
|
75130
75825
|
addonId: null,
|
|
75131
75826
|
access: "create"
|
|
75132
75827
|
},
|
|
75828
|
+
"recordEntries.deleteEntry": {
|
|
75829
|
+
capName: "record-entries",
|
|
75830
|
+
capScope: "system",
|
|
75831
|
+
addonId: null,
|
|
75832
|
+
access: "delete"
|
|
75833
|
+
},
|
|
75834
|
+
"recordEntries.listEntries": {
|
|
75835
|
+
capName: "record-entries",
|
|
75836
|
+
capScope: "system",
|
|
75837
|
+
addonId: null,
|
|
75838
|
+
access: "view"
|
|
75839
|
+
},
|
|
75840
|
+
"recordEntries.listEntryKinds": {
|
|
75841
|
+
capName: "record-entries",
|
|
75842
|
+
capScope: "system",
|
|
75843
|
+
addonId: null,
|
|
75844
|
+
access: "view"
|
|
75845
|
+
},
|
|
75846
|
+
"recordEntries.putEntry": {
|
|
75847
|
+
capName: "record-entries",
|
|
75848
|
+
capScope: "system",
|
|
75849
|
+
addonId: null,
|
|
75850
|
+
access: "create"
|
|
75851
|
+
},
|
|
75133
75852
|
"recording.getAvailability": {
|
|
75134
75853
|
capName: "recording",
|
|
75135
75854
|
capScope: "device",
|
|
@@ -75430,6 +76149,102 @@ Object.freeze({
|
|
|
75430
76149
|
addonId: null,
|
|
75431
76150
|
access: "view"
|
|
75432
76151
|
},
|
|
76152
|
+
"records.aggregate": {
|
|
76153
|
+
capName: "records",
|
|
76154
|
+
capScope: "system",
|
|
76155
|
+
addonId: null,
|
|
76156
|
+
access: "view"
|
|
76157
|
+
},
|
|
76158
|
+
"records.allocateId": {
|
|
76159
|
+
capName: "records",
|
|
76160
|
+
capScope: "system",
|
|
76161
|
+
addonId: null,
|
|
76162
|
+
access: "create"
|
|
76163
|
+
},
|
|
76164
|
+
"records.count": {
|
|
76165
|
+
capName: "records",
|
|
76166
|
+
capScope: "system",
|
|
76167
|
+
addonId: null,
|
|
76168
|
+
access: "view"
|
|
76169
|
+
},
|
|
76170
|
+
"records.declareKinds": {
|
|
76171
|
+
capName: "records",
|
|
76172
|
+
capScope: "system",
|
|
76173
|
+
addonId: null,
|
|
76174
|
+
access: "create"
|
|
76175
|
+
},
|
|
76176
|
+
"records.delete": {
|
|
76177
|
+
capName: "records",
|
|
76178
|
+
capScope: "system",
|
|
76179
|
+
addonId: null,
|
|
76180
|
+
access: "delete"
|
|
76181
|
+
},
|
|
76182
|
+
"records.deleteDevice": {
|
|
76183
|
+
capName: "records",
|
|
76184
|
+
capScope: "system",
|
|
76185
|
+
addonId: null,
|
|
76186
|
+
access: "delete"
|
|
76187
|
+
},
|
|
76188
|
+
"records.deleteMany": {
|
|
76189
|
+
capName: "records",
|
|
76190
|
+
capScope: "system",
|
|
76191
|
+
addonId: null,
|
|
76192
|
+
access: "delete"
|
|
76193
|
+
},
|
|
76194
|
+
"records.deleteWhere": {
|
|
76195
|
+
capName: "records",
|
|
76196
|
+
capScope: "system",
|
|
76197
|
+
addonId: null,
|
|
76198
|
+
access: "delete"
|
|
76199
|
+
},
|
|
76200
|
+
"records.get": {
|
|
76201
|
+
capName: "records",
|
|
76202
|
+
capScope: "system",
|
|
76203
|
+
addonId: null,
|
|
76204
|
+
access: "view"
|
|
76205
|
+
},
|
|
76206
|
+
"records.getMany": {
|
|
76207
|
+
capName: "records",
|
|
76208
|
+
capScope: "system",
|
|
76209
|
+
addonId: null,
|
|
76210
|
+
access: "view"
|
|
76211
|
+
},
|
|
76212
|
+
"records.histogram": {
|
|
76213
|
+
capName: "records",
|
|
76214
|
+
capScope: "system",
|
|
76215
|
+
addonId: null,
|
|
76216
|
+
access: "view"
|
|
76217
|
+
},
|
|
76218
|
+
"records.patch": {
|
|
76219
|
+
capName: "records",
|
|
76220
|
+
capScope: "system",
|
|
76221
|
+
addonId: null,
|
|
76222
|
+
access: "create"
|
|
76223
|
+
},
|
|
76224
|
+
"records.put": {
|
|
76225
|
+
capName: "records",
|
|
76226
|
+
capScope: "system",
|
|
76227
|
+
addonId: null,
|
|
76228
|
+
access: "create"
|
|
76229
|
+
},
|
|
76230
|
+
"records.putMany": {
|
|
76231
|
+
capName: "records",
|
|
76232
|
+
capScope: "system",
|
|
76233
|
+
addonId: null,
|
|
76234
|
+
access: "create"
|
|
76235
|
+
},
|
|
76236
|
+
"records.query": {
|
|
76237
|
+
capName: "records",
|
|
76238
|
+
capScope: "system",
|
|
76239
|
+
addonId: null,
|
|
76240
|
+
access: "view"
|
|
76241
|
+
},
|
|
76242
|
+
"records.secretRefs": {
|
|
76243
|
+
capName: "records",
|
|
76244
|
+
capScope: "system",
|
|
76245
|
+
addonId: null,
|
|
76246
|
+
access: "view"
|
|
76247
|
+
},
|
|
75433
76248
|
"sceneMonitor.captureReference": {
|
|
75434
76249
|
capName: "scene-monitor",
|
|
75435
76250
|
capScope: "device",
|
|
@@ -75862,18 +76677,48 @@ Object.freeze({
|
|
|
75862
76677
|
addonId: null,
|
|
75863
76678
|
access: "create"
|
|
75864
76679
|
},
|
|
76680
|
+
"storageAdmin.adoptRecords": {
|
|
76681
|
+
capName: "storage-admin",
|
|
76682
|
+
capScope: "system",
|
|
76683
|
+
addonId: null,
|
|
76684
|
+
access: "create"
|
|
76685
|
+
},
|
|
75865
76686
|
"storageAdmin.dropCollection": {
|
|
75866
76687
|
capName: "storage-admin",
|
|
75867
76688
|
capScope: "system",
|
|
75868
76689
|
addonId: null,
|
|
75869
76690
|
access: "delete"
|
|
75870
76691
|
},
|
|
76692
|
+
"storageAdmin.isAdoptedLegacyTable": {
|
|
76693
|
+
capName: "storage-admin",
|
|
76694
|
+
capScope: "system",
|
|
76695
|
+
addonId: null,
|
|
76696
|
+
access: "view"
|
|
76697
|
+
},
|
|
76698
|
+
"storageAdmin.listKinds": {
|
|
76699
|
+
capName: "storage-admin",
|
|
76700
|
+
capScope: "system",
|
|
76701
|
+
addonId: null,
|
|
76702
|
+
access: "view"
|
|
76703
|
+
},
|
|
75871
76704
|
"storageAdmin.listTables": {
|
|
75872
76705
|
capName: "storage-admin",
|
|
75873
76706
|
capScope: "system",
|
|
75874
76707
|
addonId: null,
|
|
75875
76708
|
access: "view"
|
|
75876
76709
|
},
|
|
76710
|
+
"storageAdmin.readLegacyCollection": {
|
|
76711
|
+
capName: "storage-admin",
|
|
76712
|
+
capScope: "system",
|
|
76713
|
+
addonId: null,
|
|
76714
|
+
access: "view"
|
|
76715
|
+
},
|
|
76716
|
+
"storageAdmin.readRecords": {
|
|
76717
|
+
capName: "storage-admin",
|
|
76718
|
+
capScope: "system",
|
|
76719
|
+
addonId: null,
|
|
76720
|
+
access: "view"
|
|
76721
|
+
},
|
|
75877
76722
|
"storageEvictable.evict": {
|
|
75878
76723
|
capName: "storage-evictable",
|
|
75879
76724
|
capScope: "system",
|
|
@@ -79468,6 +80313,37 @@ Object.freeze({
|
|
|
79468
80313
|
form: "single",
|
|
79469
80314
|
optional: false
|
|
79470
80315
|
}],
|
|
80316
|
+
"records.count": [{
|
|
80317
|
+
name: "deviceId",
|
|
80318
|
+
form: "single",
|
|
80319
|
+
optional: true
|
|
80320
|
+
}],
|
|
80321
|
+
"records.deleteDevice": [{
|
|
80322
|
+
name: "deviceId",
|
|
80323
|
+
form: "single",
|
|
80324
|
+
optional: false
|
|
80325
|
+
}],
|
|
80326
|
+
"records.deleteWhere": [{
|
|
80327
|
+
name: "deviceId",
|
|
80328
|
+
form: "single",
|
|
80329
|
+
optional: true
|
|
80330
|
+
}],
|
|
80331
|
+
"records.histogram": [{
|
|
80332
|
+
name: "deviceId",
|
|
80333
|
+
form: "single",
|
|
80334
|
+
optional: true
|
|
80335
|
+
}],
|
|
80336
|
+
"records.putMany": [{
|
|
80337
|
+
name: "records",
|
|
80338
|
+
form: "object-array",
|
|
80339
|
+
optional: false,
|
|
80340
|
+
itemField: "deviceId"
|
|
80341
|
+
}],
|
|
80342
|
+
"records.query": [{
|
|
80343
|
+
name: "deviceId",
|
|
80344
|
+
form: "single",
|
|
80345
|
+
optional: true
|
|
80346
|
+
}],
|
|
79471
80347
|
"sceneMonitor.captureReference": [{
|
|
79472
80348
|
name: "deviceId",
|
|
79473
80349
|
form: "single",
|
|
@@ -79584,6 +80460,17 @@ Object.freeze({
|
|
|
79584
80460
|
form: "single",
|
|
79585
80461
|
optional: false
|
|
79586
80462
|
}],
|
|
80463
|
+
"storageAdmin.adoptRecords": [{
|
|
80464
|
+
name: "records",
|
|
80465
|
+
form: "object-array",
|
|
80466
|
+
optional: false,
|
|
80467
|
+
itemField: "deviceId"
|
|
80468
|
+
}],
|
|
80469
|
+
"storageAdmin.readRecords": [{
|
|
80470
|
+
name: "deviceId",
|
|
80471
|
+
form: "single",
|
|
80472
|
+
optional: true
|
|
80473
|
+
}],
|
|
79587
80474
|
"streamBroker.acquireEgressTranscode": [{
|
|
79588
80475
|
name: "deviceId",
|
|
79589
80476
|
form: "single",
|
|
@@ -84056,4 +84943,4 @@ function buildClipModelRegistry(entries) {
|
|
|
84056
84943
|
/** The built-in catalog's registry. */
|
|
84057
84944
|
var BUILTIN_CLIP_MODELS = buildClipModelRegistry(CLIP_IMAGE_MODELS);
|
|
84058
84945
|
//#endregion
|
|
84059
|
-
export { MotionTriggeredBySchema as $,
|
|
84946
|
+
export { MotionTriggeredBySchema as $, strictObject as $i, deriveDetailCropRect as $n, retrainRevisionConflictMessage as $r, OPS_LOG_DEFAULT_LIMIT as $t, DetectionSourceSchema as A, BaseAddon as Ai, TrackSourceSchema as An, isScheduleActive as Ar, NcAlarmSensorsSchema as At, FailureCounters as B, normalizeNodeId as Bi, assertTimelapseCadences as Bn, parseProcStatus as Br, NcRuleTargetSchema as Bt, CoverStateSchema as C, zoneAnalyticsCapability as Ci, TimelapseRuleInputSchema as Cn, isEventKindLabelKey as Cr, NC_SYSTEM_EVENT_KIND_GROUP_SPECS as Ct, DETECTION_MACRO_CLASSES as D, isSourceCap as Di, TrackRelationKindSchema as Dn, isMediaOwnerType as Dr, NcAlarmConfigSchema as Dt, DEFAULT_TIMELAPSE_PREVIEW_TEXT as E, evaluateSensorEdge as Ei, TrackPuritySchema as En, isLabelSupplyStepId as Er, NC_TEMPLATE_VARS as Et, EVENT_KIND_BY_CAP as F, defineCustomActions as Fi, applyBlockingEdit as Fn, linkedStepOf as Fr, NcRuleActionSchema as Ft, LockStateSchema as G, boolean as Gi, calendarEventLocalSpan as Gn, readMotionTriggeredBy as Gr, NcSnoozeSchema as Gt, LabelAttributionSchema as H, ZodObject as Hi, audioModeOf as Hn, pipelineAnalyticsCapability as Hr, NcScheduleSchema as Ht, EVENT_OWNER_TYPES as I, defineRecordKinds as Ii, applyModeDelaysEdits as In, mayWriteToLocation as Ir, NcRuleActionsSchema as It, MAX_BIRTH_LATENCY_PROXY_MS as J, looseObject as Ji, consumableLowPercentOf as Jn, resolveClipSearchMinScore as Jr, NcSystemEventKindSchema as Jt, MAX_ARCHIVED_DEBUG_NOTES as K, discriminatedUnion as Ki, classifyRetrainReview as Kn, readTimelapseGeneratedAt as Kr, NcSnoozeSuppressedSchema as Kt, EXPORT_DENSE_MAX_RANGES as L, hydrateSchema as Li, applyNonBlockingEdit as Ln, memoizePinnedFfmpeg as Lr, NcRuleInputSchema as Lt, EMBEDDING_REQUIREMENTS_FAILED as M, RECORD_MAX_DATA_BYTES as Mi, addonWidgetsSourceCapability as Mn, isSystemEventSummaryRule as Mr, NcConditionDescriptorSchema as Mt, EMBEDDING_REQUIREMENTS_UNAVAILABLE as N, createEvent as Ni, alarmDeviceSecureOnArm as Nn, isVectorIndexDimConflict as Nr, NcConditionsSchema as Nt, DETECTION_PIPELINE_CAP_NAME as O, DeviceType as Oi, TrackRelationSchema as On, isRetiredClearKey as Or, NcAlarmPostTriggeredActionSchema as Ot, EVENT_DENSITY_BATCH_MAX as P, customAction as Pi, alarmPanelCapability as Pn, kebabToCamel as Pr, NcLegacyRuleActionSequenceSchema as Pt, MediaFileKindEnum as Q, record as Qi, deleteAlarmProfile as Qn, resolvePoolMemoryPolicy as Qr, NcTemplateVarDescriptorSchema as Qt, FIRST_LEVEL_MACRO_CLASSES as R, isDeviceScopedCap as Ri, applySecureOnArmEdit as Rn, notificationRulesCapability as Rr, NcRulePatchSchema as Rt, ClearTrackRelationResultSchema as S, viewerLinkBaseOf as Si, TRACK_RELATIONS_DEFAULT_LIMIT as Sn, isDetectionMacroClass as Sr, NC_SNOOZE_MAX_MINUTES as St, DEFAULT_EVENT_COLOR as T, canonicalHash as Ti, TimelapseRuleSchema as Tn, isKnownTemplateVar as Tr, NC_TAXONOMY as Tt, ListTrackRelationsInputSchema as U, _enum as Ui, buildEventKindDescriptor as Un, plateGalleryCapability as Ur, NcSharedSequenceSchema as Ut, LABEL_SUPPLY_MACRO as V, sleep as Vi, audioMetricsCapability as Vn, pickFaceRescoreIntervalMinutes as Vr, NcRuleUpdateInputSchema as Vt, ListTrackRelationsResultSchema as W, array as Wi, buildViewerLink as Wn, readDeviceStateFrom as Wr, NcSnoozeInputSchema as Wt, MAX_TRACK_RELATIONS as X, object as Xi, cosineSimilarity as Xn, resolveModeDelays as Xr, NcTemplatePreviewInputSchema as Xt, MAX_TRACK_PURITIES as Y, number as Yi, coreBlockIdFromAddonId as Yn, resolveLocationMode as Yr, NcTaxonomySchema as Yt, MOTION_CLOSE_AFTER_MS as Z, partialRecord as Zi, createAlarmProfile as Zn, resolveModeNotifyPolicy as Zr, NcTemplatePreviewSchema as Zt, BIRTH_DECISION_DEFAULT_LIMIT as _, systemEventSummaryScheduleOf as _i, SceneMonitorSchema as _n, gifFromMp4Args as _r, NC_DEFAULT_SNOOZE_MINUTES as _t, CLIP_EMBEDDING_STEP_ID as a, EventCategory as aa, ruleKindOf as ai, RetrainDismissedSchema as an, embeddingEncoderCapability as ar, NC_ALARM_SYSTEM_EVENT_KINDS as at, COCO_TO_MACRO as b, templateVarsFor as bi, SetTrackRelationInputSchema as bn, isAudioClassName as br, NC_GROUPING_MIN_SEC as bt, readClusterModelPinStrict as c, sensorRaisedOf as ci, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX as cn, embeddingRequirementsFailedError as cr, NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT as ct, APPEARANCE_BLOCKS as d, subKindsOf as di, SCENE_DEFAULT_CHECK_INTERVAL_SEC as dn, ensureAlarmProfiles as dr, NC_CLIP_RETENTION_MAX_SEC as dt, string as ea, rootSupplyServes as ei, OpsLogEntrySchema as en, derivePostTriggeredAction as er, NC_ALARM_DEFAULT_PROFILE_ID as et, APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT as f, summarizeReview as fi, SCENE_DEFAULT_OBSERVATION_SPACING_SEC as fn, eventKindLabel as fr, NC_CONDITION_CATALOG as ft, ArchivedDebugNoteSchema as g, systemEventFilterApplies as gi, SCENE_RESET_RECAPTURES as gn, gifDeriveSpeed as gr, NC_CONSUMABLE_SYSTEM_EVENT_KINDS as gt, AlarmArmModeSchema as h, systemEventFamilyProblems as hi, SCENE_DIVERGED as hn, failureContributionCapability as hr, NC_CONSUMABLE_LOW_PERCENT_DEFAULT as ht, CLIP_TEXT_MODELS as i, unknown as ia, ruleGroupingApplies as ii, RebuildObjectEmbeddingsRefusalSchema as in, deviceRemovalHookCapability as ir, NC_ALARM_NOTIFY_FIELDS as it, EMBEDDING_MODEL_FAILED as j, CamProfileSchema as ji, activateAlarmProfile as jn, isSystemDelivery as jr, NcAlarmSettingsPatchSchema as jt, DeclaredDevices as k, errMsg as ki, TrackSideSchema as kn, isRootSuppliableStepId as kr, NcAlarmSensorsInputSchema as kt, resolveClusterModelPin as l, servedTemplateVars as li, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS as ln, embeddingRequirementsUnavailableError as lr, NC_CLIP_POST_ROLL_DEFAULT_SEC as lt, AUDIO_MACRO_LABELS as m, systemEventDeliveryProblems as mi, SCENE_DEFAULT_UNCOVERED_POLICY as mn, faceGalleryCapability as mr, NC_CONFIRM_DEFAULT_TIMEOUT_MS as mt, DEFAULT_CLIP_MODEL as n, tuple as na, ruleBelongsToAlarm as ni, RECORDING_EXPORT_MAX_READ_BYTES as nn, describeSystemEventDeliveryProblem as nr, NC_ALARM_DELAY_FIELDS as nt, CLUSTER_MODEL_OWNER_ADDON_ID as o, sceneMonitorCapability as oi, RetrainOriginSchema as on, embeddingModelFailedError as or, NC_ALARM_TRIGGERED_MAX_SEC as ot, ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT as p, syncActiveAlarmProfileSettings as pi, SCENE_DEFAULT_QUIET_SECONDS as pn, evictionPolicyOfLocation as pr, NC_CONFIRM_DEFAULT_MAX_IMAGE_PX as pt, MAX_BIRTH_DECISION_RECORDS as q, literal as qi, cloneAlarmSettings as qn, renameAlarmProfile as qr, NcStateSummarySectionIdSchema as qt, CLIP_IMAGE_MODELS as r, union as ra, ruleDeviceCompatCapQueries as ri, RECORDING_SOURCE_CAMSTACK_ADDON as rn, describeSystemEventFamilyProblem as rr, NC_ALARM_DELAY_MAX_SEC as rt, FACE_EMBEDDING_STEP_ID as s, secureActuationFor as si, RetrainStatusSchema as sn, embeddingRefusalOf as sr, NC_AUDIO_CONFIRM_HITS_DEFAULT as st, BUILTIN_CLIP_MODELS as t, templateLiteral as ta, ruleAutoTriggersAlarm as ti, PoolMemoryWatchdog as tn, deriveRecordingMode as tr, NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC as tt, APPEARANCE_BIN_COUNT as u, storageOccupancyCapability as ui, SCENE_DEFAULT_ANCHOR_THRESHOLD as un, encodeVectorBase64 as ur, NC_CLIP_PRE_ROLL_DEFAULT_SEC as ut, BaseDevice as v, systemEventSummarySplitOf as vi, SetTrackPurityInputSchema as vn, isAlarmControllableCap as vr, NC_GROUPING_DEFAULT_SEC as vt, DEFAULT_DETAIL_CROP_CONVENTION as w, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as wi, TimelapseRulePatchSchema as wn, isEventOwnerType as wr, NC_TANK_SYSTEM_EVENT_KINDS as wt, ClearTrackRelationInputSchema as x, vectorDimFromBase64 as xi, TIMELAPSE_DENSE_FLOOR_SEC as xn, isDefaultAlarmProfileId as xr, NC_SENSOR_TRANSITION_KINDS as xt, BirthDecisionRecordSchema as y, templateCarriesSummary as yi, SetTrackPurityResultSchema as yn, isAppLinkBase as yr, NC_GROUPING_MAX_SEC as yt, FULL_IMAGE_BBOX as z, nodePin as zi, armRemovalReconcile as zn, occupancyScope as zr, NcRuleSchema as zt };
|