@camstack/addon-pipeline 1.2.374 → 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/audio-analyzer/index.js +3 -3
- package/dist/audio-analyzer/index.mjs +3 -3
- package/dist/{custom-model-catalog-1LDuDw8S.mjs → custom-model-catalog-CK9GK3N5.mjs} +2 -2
- package/dist/{custom-model-catalog-W0DHDhfo.js → custom-model-catalog-DgyafyuW.js} +2 -2
- package/dist/detection-pipeline/index.js +4 -4
- package/dist/detection-pipeline/index.mjs +4 -4
- package/dist/{dist-CmdLCb_F.mjs → dist-BaHsDOWa.mjs} +1124 -29
- package/dist/{dist-CBEUVjTS.js → dist-BqI10eLV.js} +1129 -28
- package/dist/{model-catalogs-BnCdB2A3.mjs → model-catalogs-DM5sVj1T.mjs} +1 -1
- package/dist/{model-catalogs-D5YksA5A.js → model-catalogs-DhGVt_sH.js} +1 -1
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/{node-C3r8kiOo.mjs → node-B0a0dXhg.mjs} +38 -3
- package/dist/{node-DMgi6pND.js → node-CgwqjGz0.js} +42 -1
- package/dist/pipeline-runner/index.js +4 -4
- package/dist/pipeline-runner/index.mjs +4 -4
- package/dist/{process-memory-GFR7fxpJ.js → process-memory-C0zbWvwD.js} +1 -1
- package/dist/{process-memory-X0ws1SGJ.mjs → process-memory-sfdcLVkW.mjs} +1 -1
- package/dist/recorder/index.js +357 -516
- package/dist/recorder/index.mjs +357 -516
- package/dist/{segment-demux-js-CSQVhbFI.js → segment-demux-js-B9lL2VCC.js} +1 -1
- package/dist/{segment-demux-js-IKEO1XBz.mjs → segment-demux-js-BB4CUAB5.mjs} +1 -1
- package/dist/stream-broker/_stub.js +2 -2
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DPFTlVoW.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-CbN9DjoK.mjs} +3 -3
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Boq8JqyD.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-B25q1OKG.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-BOp1_Hhk.mjs → hostInit-BSYHAfPt.mjs} +3 -3
- package/dist/stream-broker/index.js +556 -32
- package/dist/stream-broker/index.mjs +556 -32
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B7wsxLrK.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-BohOb2Cl.mjs +0 -26
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from "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";
|
|
@@ -4105,6 +4123,12 @@ var numberProcessor = (schema, ctx, _json, _params) => {
|
|
|
4105
4123
|
var booleanProcessor = (_schema, _ctx, json, _params) => {
|
|
4106
4124
|
json.type = "boolean";
|
|
4107
4125
|
};
|
|
4126
|
+
var bigintProcessor = (_schema, ctx, _json, _params) => {
|
|
4127
|
+
if (ctx.unrepresentable === "throw") throw new Error("BigInt cannot be represented in JSON Schema");
|
|
4128
|
+
};
|
|
4129
|
+
var symbolProcessor = (_schema, ctx, _json, _params) => {
|
|
4130
|
+
if (ctx.unrepresentable === "throw") throw new Error("Symbols cannot be represented in JSON Schema");
|
|
4131
|
+
};
|
|
4108
4132
|
var nullProcessor = (_schema, ctx, json, _params) => {
|
|
4109
4133
|
if (ctx.target === "openapi-3.0") {
|
|
4110
4134
|
json.type = "string";
|
|
@@ -4112,12 +4136,17 @@ var nullProcessor = (_schema, ctx, json, _params) => {
|
|
|
4112
4136
|
json.enum = [null];
|
|
4113
4137
|
} else json.type = "null";
|
|
4114
4138
|
};
|
|
4139
|
+
var undefinedProcessor = (_schema, ctx, _json, _params) => {
|
|
4140
|
+
if (ctx.unrepresentable === "throw") throw new Error("Undefined cannot be represented in JSON Schema");
|
|
4141
|
+
};
|
|
4115
4142
|
var voidProcessor = (_schema, ctx, _json, _params) => {
|
|
4116
4143
|
if (ctx.unrepresentable === "throw") throw new Error("Void cannot be represented in JSON Schema");
|
|
4117
4144
|
};
|
|
4118
4145
|
var neverProcessor = (_schema, _ctx, json, _params) => {
|
|
4119
4146
|
json.not = {};
|
|
4120
4147
|
};
|
|
4148
|
+
var anyProcessor = (_schema, _ctx, _json, _params) => {};
|
|
4149
|
+
var unknownProcessor = (_schema, _ctx, _json, _params) => {};
|
|
4121
4150
|
var dateProcessor = (_schema, ctx, _json, _params) => {
|
|
4122
4151
|
if (ctx.unrepresentable === "throw") throw new Error("Date cannot be represented in JSON Schema");
|
|
4123
4152
|
};
|
|
@@ -4149,12 +4178,53 @@ var literalProcessor = (schema, ctx, json, _params) => {
|
|
|
4149
4178
|
json.enum = vals;
|
|
4150
4179
|
}
|
|
4151
4180
|
};
|
|
4181
|
+
var nanProcessor = (_schema, ctx, _json, _params) => {
|
|
4182
|
+
if (ctx.unrepresentable === "throw") throw new Error("NaN cannot be represented in JSON Schema");
|
|
4183
|
+
};
|
|
4184
|
+
var templateLiteralProcessor = (schema, _ctx, json, _params) => {
|
|
4185
|
+
const _json = json;
|
|
4186
|
+
const pattern = schema._zod.pattern;
|
|
4187
|
+
if (!pattern) throw new Error("Pattern not found in template literal");
|
|
4188
|
+
_json.type = "string";
|
|
4189
|
+
_json.pattern = pattern.source;
|
|
4190
|
+
};
|
|
4191
|
+
var fileProcessor = (schema, _ctx, json, _params) => {
|
|
4192
|
+
const _json = json;
|
|
4193
|
+
const file = {
|
|
4194
|
+
type: "string",
|
|
4195
|
+
format: "binary",
|
|
4196
|
+
contentEncoding: "binary"
|
|
4197
|
+
};
|
|
4198
|
+
const { minimum, maximum, mime } = schema._zod.bag;
|
|
4199
|
+
if (minimum !== void 0) file.minLength = minimum;
|
|
4200
|
+
if (maximum !== void 0) file.maxLength = maximum;
|
|
4201
|
+
if (mime) if (mime.length === 1) {
|
|
4202
|
+
file.contentMediaType = mime[0];
|
|
4203
|
+
Object.assign(_json, file);
|
|
4204
|
+
} else {
|
|
4205
|
+
Object.assign(_json, file);
|
|
4206
|
+
_json.anyOf = mime.map((m) => ({ contentMediaType: m }));
|
|
4207
|
+
}
|
|
4208
|
+
else Object.assign(_json, file);
|
|
4209
|
+
};
|
|
4210
|
+
var successProcessor = (_schema, _ctx, json, _params) => {
|
|
4211
|
+
json.type = "boolean";
|
|
4212
|
+
};
|
|
4152
4213
|
var customProcessor = (_schema, ctx, _json, _params) => {
|
|
4153
4214
|
if (ctx.unrepresentable === "throw") throw new Error("Custom types cannot be represented in JSON Schema");
|
|
4154
4215
|
};
|
|
4216
|
+
var functionProcessor = (_schema, ctx, _json, _params) => {
|
|
4217
|
+
if (ctx.unrepresentable === "throw") throw new Error("Function types cannot be represented in JSON Schema");
|
|
4218
|
+
};
|
|
4155
4219
|
var transformProcessor = (_schema, ctx, _json, _params) => {
|
|
4156
4220
|
if (ctx.unrepresentable === "throw") throw new Error("Transforms cannot be represented in JSON Schema");
|
|
4157
4221
|
};
|
|
4222
|
+
var mapProcessor = (_schema, ctx, _json, _params) => {
|
|
4223
|
+
if (ctx.unrepresentable === "throw") throw new Error("Map cannot be represented in JSON Schema");
|
|
4224
|
+
};
|
|
4225
|
+
var setProcessor = (_schema, ctx, _json, _params) => {
|
|
4226
|
+
if (ctx.unrepresentable === "throw") throw new Error("Set cannot be represented in JSON Schema");
|
|
4227
|
+
};
|
|
4158
4228
|
var arrayProcessor = (schema, ctx, _json, params) => {
|
|
4159
4229
|
const json = _json;
|
|
4160
4230
|
const def = schema._zod.def;
|
|
@@ -4359,6 +4429,12 @@ var readonlyProcessor = (schema, ctx, json, params) => {
|
|
|
4359
4429
|
seen.ref = def.innerType;
|
|
4360
4430
|
json.readOnly = true;
|
|
4361
4431
|
};
|
|
4432
|
+
var promiseProcessor = (schema, ctx, _json, params) => {
|
|
4433
|
+
const def = schema._zod.def;
|
|
4434
|
+
process(def.innerType, ctx, params);
|
|
4435
|
+
const seen = ctx.seen.get(schema);
|
|
4436
|
+
seen.ref = def.innerType;
|
|
4437
|
+
};
|
|
4362
4438
|
var optionalProcessor = (schema, ctx, _json, params) => {
|
|
4363
4439
|
const def = schema._zod.def;
|
|
4364
4440
|
process(def.innerType, ctx, params);
|
|
@@ -4371,6 +4447,81 @@ var lazyProcessor = (schema, ctx, _json, params) => {
|
|
|
4371
4447
|
const seen = ctx.seen.get(schema);
|
|
4372
4448
|
seen.ref = innerType;
|
|
4373
4449
|
};
|
|
4450
|
+
var allProcessors = {
|
|
4451
|
+
string: stringProcessor,
|
|
4452
|
+
number: numberProcessor,
|
|
4453
|
+
boolean: booleanProcessor,
|
|
4454
|
+
bigint: bigintProcessor,
|
|
4455
|
+
symbol: symbolProcessor,
|
|
4456
|
+
null: nullProcessor,
|
|
4457
|
+
undefined: undefinedProcessor,
|
|
4458
|
+
void: voidProcessor,
|
|
4459
|
+
never: neverProcessor,
|
|
4460
|
+
any: anyProcessor,
|
|
4461
|
+
unknown: unknownProcessor,
|
|
4462
|
+
date: dateProcessor,
|
|
4463
|
+
enum: enumProcessor,
|
|
4464
|
+
literal: literalProcessor,
|
|
4465
|
+
nan: nanProcessor,
|
|
4466
|
+
template_literal: templateLiteralProcessor,
|
|
4467
|
+
file: fileProcessor,
|
|
4468
|
+
success: successProcessor,
|
|
4469
|
+
custom: customProcessor,
|
|
4470
|
+
function: functionProcessor,
|
|
4471
|
+
transform: transformProcessor,
|
|
4472
|
+
map: mapProcessor,
|
|
4473
|
+
set: setProcessor,
|
|
4474
|
+
array: arrayProcessor,
|
|
4475
|
+
object: objectProcessor,
|
|
4476
|
+
union: unionProcessor,
|
|
4477
|
+
intersection: intersectionProcessor,
|
|
4478
|
+
tuple: tupleProcessor,
|
|
4479
|
+
record: recordProcessor,
|
|
4480
|
+
nullable: nullableProcessor,
|
|
4481
|
+
nonoptional: nonoptionalProcessor,
|
|
4482
|
+
default: defaultProcessor,
|
|
4483
|
+
prefault: prefaultProcessor,
|
|
4484
|
+
catch: catchProcessor,
|
|
4485
|
+
pipe: pipeProcessor,
|
|
4486
|
+
readonly: readonlyProcessor,
|
|
4487
|
+
promise: promiseProcessor,
|
|
4488
|
+
optional: optionalProcessor,
|
|
4489
|
+
lazy: lazyProcessor
|
|
4490
|
+
};
|
|
4491
|
+
function toJSONSchema(input, params) {
|
|
4492
|
+
if ("_idmap" in input) {
|
|
4493
|
+
const registry = input;
|
|
4494
|
+
const ctx = initializeContext({
|
|
4495
|
+
...params,
|
|
4496
|
+
processors: allProcessors
|
|
4497
|
+
});
|
|
4498
|
+
const defs = {};
|
|
4499
|
+
for (const entry of registry._idmap.entries()) {
|
|
4500
|
+
const [_, schema] = entry;
|
|
4501
|
+
process(schema, ctx);
|
|
4502
|
+
}
|
|
4503
|
+
const schemas = {};
|
|
4504
|
+
ctx.external = {
|
|
4505
|
+
registry,
|
|
4506
|
+
uri: params?.uri,
|
|
4507
|
+
defs
|
|
4508
|
+
};
|
|
4509
|
+
for (const entry of registry._idmap.entries()) {
|
|
4510
|
+
const [key, schema] = entry;
|
|
4511
|
+
extractDefs(ctx, schema);
|
|
4512
|
+
schemas[key] = finalize(ctx, schema);
|
|
4513
|
+
}
|
|
4514
|
+
if (Object.keys(defs).length > 0) schemas.__shared = { [ctx.target === "draft-2020-12" ? "$defs" : "definitions"]: defs };
|
|
4515
|
+
return { schemas };
|
|
4516
|
+
}
|
|
4517
|
+
const ctx = initializeContext({
|
|
4518
|
+
...params,
|
|
4519
|
+
processors: allProcessors
|
|
4520
|
+
});
|
|
4521
|
+
process(input, ctx);
|
|
4522
|
+
extractDefs(ctx, input);
|
|
4523
|
+
return finalize(ctx, input);
|
|
4524
|
+
}
|
|
4374
4525
|
//#endregion
|
|
4375
4526
|
//#region ../../node_modules/zod/v4/classic/iso.js
|
|
4376
4527
|
var ZodISODateTime = /*@__PURE__*/ $constructor("ZodISODateTime", (inst, def) => {
|
|
@@ -5387,7 +5538,7 @@ var ZodIssueCode = {
|
|
|
5387
5538
|
var ZodFirstPartyTypeKind;
|
|
5388
5539
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5389
5540
|
//#endregion
|
|
5390
|
-
//#region ../types/dist/sleep-
|
|
5541
|
+
//#region ../types/dist/sleep-bZIhUvjd.mjs
|
|
5391
5542
|
/**
|
|
5392
5543
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5393
5544
|
* window to float samples (D455).
|
|
@@ -5536,7 +5687,7 @@ function isKeychainStoredField(field) {
|
|
|
5536
5687
|
var SECRET_CLEAR = { $secretClear: true };
|
|
5537
5688
|
/** The `'***'` token D634 redaction writes for non-admins. */
|
|
5538
5689
|
var LEGACY_DEVICE_REDACTION = "***";
|
|
5539
|
-
function isRecord$
|
|
5690
|
+
function isRecord$5(value) {
|
|
5540
5691
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5541
5692
|
}
|
|
5542
5693
|
function makeSecretMarker(ref) {
|
|
@@ -5547,12 +5698,12 @@ function makeSecretMarker(ref) {
|
|
|
5547
5698
|
}
|
|
5548
5699
|
/** A stored marker: an object whose `$secret` is a non-empty string. */
|
|
5549
5700
|
function isSecretMarker(value) {
|
|
5550
|
-
if (!isRecord$
|
|
5701
|
+
if (!isRecord$5(value)) return false;
|
|
5551
5702
|
const ref = value["$secret"];
|
|
5552
5703
|
return typeof ref === "string" && ref.length > 0;
|
|
5553
5704
|
}
|
|
5554
5705
|
function isSecretClear(value) {
|
|
5555
|
-
return isRecord$
|
|
5706
|
+
return isRecord$5(value) && value["$secretClear"] === true;
|
|
5556
5707
|
}
|
|
5557
5708
|
/**
|
|
5558
5709
|
* The UI view of a stored secret field value: a marker becomes "set", inline
|
|
@@ -6178,7 +6329,7 @@ var KeychainWriteRefusedError = class extends Error {
|
|
|
6178
6329
|
}
|
|
6179
6330
|
};
|
|
6180
6331
|
var KEEP = { kind: "keep" };
|
|
6181
|
-
function isRecord$
|
|
6332
|
+
function isRecord$4(value) {
|
|
6182
6333
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6183
6334
|
}
|
|
6184
6335
|
function defaultMintId() {
|
|
@@ -6191,7 +6342,7 @@ function collectSecretMarkerRefs(value, out = []) {
|
|
|
6191
6342
|
return out;
|
|
6192
6343
|
}
|
|
6193
6344
|
if (Array.isArray(value)) for (const item of value) collectSecretMarkerRefs(item, out);
|
|
6194
|
-
else if (isRecord$
|
|
6345
|
+
else if (isRecord$4(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
|
|
6195
6346
|
return out;
|
|
6196
6347
|
}
|
|
6197
6348
|
async function storedValueEquals(secrets, marker, candidate) {
|
|
@@ -6246,7 +6397,7 @@ function rowId(row, idKey) {
|
|
|
6246
6397
|
return null;
|
|
6247
6398
|
}
|
|
6248
6399
|
async function writeArray(ctx, node, incoming, stored, fieldPath) {
|
|
6249
|
-
const storedRows = Array.isArray(stored) ? stored.filter(isRecord$
|
|
6400
|
+
const storedRows = Array.isArray(stored) ? stored.filter(isRecord$4) : [];
|
|
6250
6401
|
if (!Array.isArray(incoming)) {
|
|
6251
6402
|
ctx.deletes.push(...collectSecretMarkerRefs(storedRows));
|
|
6252
6403
|
return {
|
|
@@ -6262,7 +6413,7 @@ async function writeArray(ctx, node, incoming, stored, fieldPath) {
|
|
|
6262
6413
|
const kept = /* @__PURE__ */ new Set();
|
|
6263
6414
|
const rows = [];
|
|
6264
6415
|
for (const row of incoming) {
|
|
6265
|
-
if (!isRecord$
|
|
6416
|
+
if (!isRecord$4(row)) {
|
|
6266
6417
|
rows.push(row);
|
|
6267
6418
|
continue;
|
|
6268
6419
|
}
|
|
@@ -6287,7 +6438,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
|
|
|
6287
6438
|
case "leaf": return writeLeaf(ctx, incoming, stored, fieldPath);
|
|
6288
6439
|
case "array": return writeArray(ctx, node, incoming, stored, fieldPath);
|
|
6289
6440
|
case "object": {
|
|
6290
|
-
if (!isRecord$
|
|
6441
|
+
if (!isRecord$4(incoming)) {
|
|
6291
6442
|
if (incoming === void 0) return KEEP;
|
|
6292
6443
|
ctx.deletes.push(...collectSecretMarkerRefs(stored));
|
|
6293
6444
|
return {
|
|
@@ -6295,7 +6446,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
|
|
|
6295
6446
|
value: incoming
|
|
6296
6447
|
};
|
|
6297
6448
|
}
|
|
6298
|
-
const storedObj = isRecord$
|
|
6449
|
+
const storedObj = isRecord$4(stored) ? stored : {};
|
|
6299
6450
|
return {
|
|
6300
6451
|
kind: "value",
|
|
6301
6452
|
value: await writeMembers(ctx, node.children, incoming, storedObj, (m) => `${fieldPath}.${m}`)
|
|
@@ -6418,7 +6569,7 @@ async function resolveSecretMarkers(value, secrets, options = {}) {
|
|
|
6418
6569
|
value: items
|
|
6419
6570
|
};
|
|
6420
6571
|
}
|
|
6421
|
-
if (isRecord$
|
|
6572
|
+
if (isRecord$4(v)) {
|
|
6422
6573
|
const out = {};
|
|
6423
6574
|
for (const [k, child] of Object.entries(v)) {
|
|
6424
6575
|
const s = substitute(child);
|
|
@@ -6450,7 +6601,7 @@ var SecretOverwriteRefusedError = class extends Error {
|
|
|
6450
6601
|
this.name = "SecretOverwriteRefusedError";
|
|
6451
6602
|
}
|
|
6452
6603
|
};
|
|
6453
|
-
function isRecord(value) {
|
|
6604
|
+
function isRecord$3(value) {
|
|
6454
6605
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6455
6606
|
}
|
|
6456
6607
|
function resolvedValue(pass, marker) {
|
|
@@ -6479,7 +6630,7 @@ function inArray(pass, incoming, stored) {
|
|
|
6479
6630
|
return incoming.map((item, index) => {
|
|
6480
6631
|
const twin = stored[index];
|
|
6481
6632
|
if (isSecretMarker(twin)) return typeof item === "string" && item === resolvedValue(pass, twin) ? twin : item;
|
|
6482
|
-
if (isRecord(item) && isRecord(twin)) return inArrayRow(pass, item, twin);
|
|
6633
|
+
if (isRecord$3(item) && isRecord$3(twin)) return inArrayRow(pass, item, twin);
|
|
6483
6634
|
if (Array.isArray(item) && Array.isArray(twin)) return inArray(pass, item, twin);
|
|
6484
6635
|
return item;
|
|
6485
6636
|
});
|
|
@@ -6490,7 +6641,7 @@ function inArrayRow(pass, incoming, stored) {
|
|
|
6490
6641
|
const twin = stored[key];
|
|
6491
6642
|
if (isSecretMarker(twin)) {
|
|
6492
6643
|
if (typeof value === "string" && value === resolvedValue(pass, twin)) out[key] = twin;
|
|
6493
|
-
} else if (isRecord(value) && isRecord(twin)) out[key] = inArrayRow(pass, value, twin);
|
|
6644
|
+
} else if (isRecord$3(value) && isRecord$3(twin)) out[key] = inArrayRow(pass, value, twin);
|
|
6494
6645
|
else if (Array.isArray(value) && Array.isArray(twin)) out[key] = inArray(pass, value, twin);
|
|
6495
6646
|
}
|
|
6496
6647
|
return out;
|
|
@@ -6498,7 +6649,7 @@ function inArrayRow(pass, incoming, stored) {
|
|
|
6498
6649
|
async function walk(pass, incoming, stored) {
|
|
6499
6650
|
if (isSecretMarker(stored)) return atMarker(pass, incoming, stored);
|
|
6500
6651
|
if (Array.isArray(incoming) && Array.isArray(stored)) return inArray(pass, incoming, stored);
|
|
6501
|
-
if (!isRecord(incoming) || !isRecord(stored)) return incoming;
|
|
6652
|
+
if (!isRecord$3(incoming) || !isRecord$3(stored)) return incoming;
|
|
6502
6653
|
const out = { ...incoming };
|
|
6503
6654
|
for (const [key, value] of Object.entries(incoming)) out[key] = await walk(pass, value, stored[key]);
|
|
6504
6655
|
return out;
|
|
@@ -6529,7 +6680,7 @@ async function restoreUnchangedSecrets(input) {
|
|
|
6529
6680
|
function isJsonEqual(a, b) {
|
|
6530
6681
|
if (Object.is(a, b)) return true;
|
|
6531
6682
|
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)) {
|
|
6683
|
+
if (isRecord$3(a) && isRecord$3(b)) {
|
|
6533
6684
|
const keys = Object.keys(a);
|
|
6534
6685
|
if (keys.length !== Object.keys(b).length) return false;
|
|
6535
6686
|
return keys.every((k) => Object.prototype.hasOwnProperty.call(b, k) && isJsonEqual(a[k], b[k]));
|
|
@@ -6553,7 +6704,7 @@ function markerKeysOf(blob, owner) {
|
|
|
6553
6704
|
}
|
|
6554
6705
|
function nodeFromStored(value, owner) {
|
|
6555
6706
|
if (isSecretMarker(value)) return isSecretRefOwnedBy(value.$secret, owner) ? { kind: "leaf" } : null;
|
|
6556
|
-
if (!isRecord(value)) return null;
|
|
6707
|
+
if (!isRecord$3(value)) return null;
|
|
6557
6708
|
const children = /* @__PURE__ */ new Map();
|
|
6558
6709
|
for (const [key, child] of Object.entries(value)) {
|
|
6559
6710
|
const node = nodeFromStored(child, owner);
|
|
@@ -7341,7 +7492,7 @@ var BaseAddon = class {
|
|
|
7341
7492
|
if (!ctx) return;
|
|
7342
7493
|
const addonId = ctx.id;
|
|
7343
7494
|
setImmediate(() => {
|
|
7344
|
-
ctx.api.addons
|
|
7495
|
+
ctx.api.addons.restartAddon.mutate({ addonId }).then(() => {
|
|
7345
7496
|
ctx.logger.info("addon auto-restart triggered by restart-required setting change", { meta: { changedFields: patchKeys.filter((k) => restartKeys.has(k)) } });
|
|
7346
7497
|
}).catch((err) => {
|
|
7347
7498
|
ctx.logger.error("addon auto-restart failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
|
|
@@ -7835,6 +7986,303 @@ var PeerBytesTicketSchema = object({
|
|
|
7835
7986
|
*/
|
|
7836
7987
|
declaredBytes: number().int().nonnegative().nullable()
|
|
7837
7988
|
});
|
|
7989
|
+
/** Limits and names of `ctx.records` (D881). One authority; the engine and the facade read it. */
|
|
7990
|
+
/** The files a kind may live in. `history` is device-history's (D850), never records. */
|
|
7991
|
+
var RECORD_DATABASES = ["settings", "events"];
|
|
7992
|
+
/** The classes of a kind: the `@durable` vocabulary, one authority (replaces the annotation). */
|
|
7993
|
+
var RECORD_CLASSES = [
|
|
7994
|
+
"config",
|
|
7995
|
+
"ledger",
|
|
7996
|
+
"audit",
|
|
7997
|
+
"mirror",
|
|
7998
|
+
"ephemeral"
|
|
7999
|
+
];
|
|
8000
|
+
var RECORD_DEFAULT_MAX_DATA_BYTES = 64 * 1024;
|
|
8001
|
+
var RECORD_MAX_DATA_BYTES = 1024 * 1024;
|
|
8002
|
+
var RECORD_BATCH_MAX = 1e3;
|
|
8003
|
+
var RECORD_QUERY_MAX = 1e3;
|
|
8004
|
+
/** A kind in the `settings` file may not bound itself above this (D447: high volume is `events`). */
|
|
8005
|
+
var RECORD_SETTINGS_MAX_ROWS = 5e4;
|
|
8006
|
+
var PREFIX = "records/";
|
|
8007
|
+
/** The base of every records failure. `detail` is the human part of the message. */
|
|
8008
|
+
var RecordsError = class extends Error {
|
|
8009
|
+
code;
|
|
8010
|
+
detail;
|
|
8011
|
+
constructor(code, detail) {
|
|
8012
|
+
super(`${PREFIX}${code}: ${detail}`);
|
|
8013
|
+
this.name = "RecordsError";
|
|
8014
|
+
this.code = code;
|
|
8015
|
+
this.detail = detail;
|
|
8016
|
+
}
|
|
8017
|
+
};
|
|
8018
|
+
var InvalidRecordError = class extends RecordsError {
|
|
8019
|
+
constructor(detail) {
|
|
8020
|
+
super("invalid-record", detail);
|
|
8021
|
+
this.name = "InvalidRecordError";
|
|
8022
|
+
}
|
|
8023
|
+
};
|
|
8024
|
+
/** A kind declaration the engine refuses (non-additive change, bad shape, wrong file). */
|
|
8025
|
+
var DeclarationRefusedError = class extends RecordsError {
|
|
8026
|
+
constructor(detail) {
|
|
8027
|
+
super("declaration-refused", detail);
|
|
8028
|
+
this.name = "DeclarationRefusedError";
|
|
8029
|
+
}
|
|
8030
|
+
};
|
|
8031
|
+
function defOf(schema) {
|
|
8032
|
+
const zodBag = Reflect.get(schema, "_zod");
|
|
8033
|
+
if (typeof zodBag !== "object" || zodBag === null) return {};
|
|
8034
|
+
const def = Reflect.get(zodBag, "def");
|
|
8035
|
+
if (typeof def !== "object" || def === null) return {};
|
|
8036
|
+
return def;
|
|
8037
|
+
}
|
|
8038
|
+
function declaredHere(schema) {
|
|
8039
|
+
return globalRegistry.get(schema)?.secret === true;
|
|
8040
|
+
}
|
|
8041
|
+
/** Wrapper kinds whose `innerType` is the field itself. */
|
|
8042
|
+
var WRAPPERS = new Set([
|
|
8043
|
+
"optional",
|
|
8044
|
+
"nullable",
|
|
8045
|
+
"default",
|
|
8046
|
+
"prefault",
|
|
8047
|
+
"catch",
|
|
8048
|
+
"readonly",
|
|
8049
|
+
"nonoptional"
|
|
8050
|
+
]);
|
|
8051
|
+
/**
|
|
8052
|
+
* The schema layers that make up ONE field: the schema itself and every
|
|
8053
|
+
* wrapper below it (optional / default / nullable / readonly / catch), plus
|
|
8054
|
+
* both sides of a pipe (`z.preprocess` puts the real schema on `out`,
|
|
8055
|
+
* `.transform` on `in`).
|
|
8056
|
+
*/
|
|
8057
|
+
function layersOf(schema) {
|
|
8058
|
+
const out = [];
|
|
8059
|
+
const queue = [schema];
|
|
8060
|
+
while (queue.length > 0) {
|
|
8061
|
+
const s = queue.shift();
|
|
8062
|
+
if (!s || out.includes(s)) continue;
|
|
8063
|
+
out.push(s);
|
|
8064
|
+
const def = defOf(s);
|
|
8065
|
+
if (def.type !== void 0 && WRAPPERS.has(def.type) && def.innerType) queue.push(def.innerType);
|
|
8066
|
+
if (def.type === "pipe") {
|
|
8067
|
+
if (def.in) queue.push(def.in);
|
|
8068
|
+
if (def.out) queue.push(def.out);
|
|
8069
|
+
}
|
|
8070
|
+
}
|
|
8071
|
+
return out;
|
|
8072
|
+
}
|
|
8073
|
+
/** True when any layer of this field declares `.meta({ secret: true })`. */
|
|
8074
|
+
function isZodSecret(schema) {
|
|
8075
|
+
return layersOf(schema).some(declaredHere);
|
|
8076
|
+
}
|
|
8077
|
+
/**
|
|
8078
|
+
* Every declared secret path in a config schema: dotted keys, `[]` for "each
|
|
8079
|
+
* element of this array" (`connection.password`, `rows[].token`). A declared
|
|
8080
|
+
* object or array is reported as one path and not descended into — everything
|
|
8081
|
+
* under it is secret.
|
|
8082
|
+
*/
|
|
8083
|
+
function collectZodSecretPaths(schema, prefix = "") {
|
|
8084
|
+
if (isZodSecret(schema)) return prefix.length > 0 ? [prefix] : [];
|
|
8085
|
+
const paths = [];
|
|
8086
|
+
for (const layer of layersOf(schema)) {
|
|
8087
|
+
const def = defOf(layer);
|
|
8088
|
+
if (def.type === "object" && def.shape) for (const [key, child] of Object.entries(def.shape)) paths.push(...collectZodSecretPaths(child, prefix ? `${prefix}.${key}` : key));
|
|
8089
|
+
else if (def.type === "array" && def.element) paths.push(...collectZodSecretPaths(def.element, `${prefix}[]`));
|
|
8090
|
+
else if (def.type === "union" && def.options) for (const option of def.options) paths.push(...collectZodSecretPaths(option, prefix));
|
|
8091
|
+
else if (def.type === "intersection") {
|
|
8092
|
+
if (def.left) paths.push(...collectZodSecretPaths(def.left, prefix));
|
|
8093
|
+
if (def.right) paths.push(...collectZodSecretPaths(def.right, prefix));
|
|
8094
|
+
}
|
|
8095
|
+
}
|
|
8096
|
+
return [...new Set(paths)];
|
|
8097
|
+
}
|
|
8098
|
+
/**
|
|
8099
|
+
* Secret fields of a record, addressed the way a Zod schema declares them
|
|
8100
|
+
* (`collectZodSecretPaths`): dotted keys, `[]` for "each element of this array"
|
|
8101
|
+
* (`auth.accessToken`, `headers[].value`).
|
|
8102
|
+
*
|
|
8103
|
+
* Array elements are matched by a DECLARED id key (`secretArrayKeys`:
|
|
8104
|
+
* `{ headers: 'name' }`), never by index, so reordering a list keeps every
|
|
8105
|
+
* keychain ref (the same rule as `arrayItemFieldPath`). The concrete path of a
|
|
8106
|
+
* leaf names its element: `headers[X-Api].value`.
|
|
8107
|
+
*
|
|
8108
|
+
* Pure and browser-safe. Nothing here mutates: every transform returns a new value.
|
|
8109
|
+
*/
|
|
8110
|
+
/** The array prefixes (declared form, e.g. `headers` or `a.headers`) of a path. */
|
|
8111
|
+
function parseSecretPath(path) {
|
|
8112
|
+
if (path.length === 0) throw new InvalidRecordError("an empty secret path");
|
|
8113
|
+
return path.split(".").map((raw) => {
|
|
8114
|
+
const each = raw.endsWith("[]");
|
|
8115
|
+
const key = each ? raw.slice(0, -2) : raw;
|
|
8116
|
+
if (key.length === 0) throw new InvalidRecordError(`secret path "${path}" has an empty segment`);
|
|
8117
|
+
return {
|
|
8118
|
+
key,
|
|
8119
|
+
each
|
|
8120
|
+
};
|
|
8121
|
+
});
|
|
8122
|
+
}
|
|
8123
|
+
/** The declared array prefixes of `path` that need an id key (`headers`, `a.rows`). */
|
|
8124
|
+
function secretArrayPrefixes(path) {
|
|
8125
|
+
const segments = parseSecretPath(path);
|
|
8126
|
+
const prefixes = [];
|
|
8127
|
+
const walked = [];
|
|
8128
|
+
for (const segment of segments) {
|
|
8129
|
+
walked.push(segment.key);
|
|
8130
|
+
if (segment.each) prefixes.push(walked.join("."));
|
|
8131
|
+
}
|
|
8132
|
+
return prefixes;
|
|
8133
|
+
}
|
|
8134
|
+
/**
|
|
8135
|
+
* Record kinds (D881): the declaration an addon makes of one kind of fact, the
|
|
8136
|
+
* Zod row schema that describes it, and the helper that turns the two into the
|
|
8137
|
+
* JSON the engine stores.
|
|
8138
|
+
*
|
|
8139
|
+
* A kind is declared ONCE, next to the code that owns it, and the engine's
|
|
8140
|
+
* reconciler creates its indexes - nothing creates DDL at runtime from a write.
|
|
8141
|
+
* Everything the generic machinery needs (secret fields, the entry descriptor)
|
|
8142
|
+
* is DERIVED from the Zod schema: `.meta({ secret: true })` marks a credential,
|
|
8143
|
+
* never a field name (D879).
|
|
8144
|
+
*/
|
|
8145
|
+
/** A JSON field path: `trackId`, `auth.accessToken`. Charset-restricted: it is rendered into DDL. */
|
|
8146
|
+
var RecordFieldPathSchema = string().regex(/^[A-Za-z_][A-Za-z0-9_]{0,63}(\.[A-Za-z_][A-Za-z0-9_]{0,63}){0,3}$/);
|
|
8147
|
+
var RecordIndexSchema = object({
|
|
8148
|
+
name: string().regex(/^[a-z][a-z0-9_]{0,31}$/),
|
|
8149
|
+
fields: array(RecordFieldPathSchema).min(1).max(4),
|
|
8150
|
+
unique: boolean().optional()
|
|
8151
|
+
}).strict();
|
|
8152
|
+
var RecordRetentionSchema = union([
|
|
8153
|
+
object({
|
|
8154
|
+
ttlMs: number().int().positive(),
|
|
8155
|
+
from: _enum(["at", "write"])
|
|
8156
|
+
}).strict(),
|
|
8157
|
+
object({
|
|
8158
|
+
maxRows: number().int().positive().optional(),
|
|
8159
|
+
maxRowsPerDevice: number().int().positive().optional()
|
|
8160
|
+
}).strict().refine((r) => r.maxRows !== void 0 || r.maxRowsPerDevice !== void 0, { message: "name maxRows, maxRowsPerDevice or both" }),
|
|
8161
|
+
object({
|
|
8162
|
+
owner: string().min(1),
|
|
8163
|
+
reason: string().min(1)
|
|
8164
|
+
}).strict(),
|
|
8165
|
+
object({ none: string().min(1) }).strict()
|
|
8166
|
+
]);
|
|
8167
|
+
/** The descriptor a generic entries UI reads (D881 "generic entries"). */
|
|
8168
|
+
var EntryDescriptorSchema = object({
|
|
8169
|
+
title: string().min(1),
|
|
8170
|
+
/** The record body field shown as the entry's name. */
|
|
8171
|
+
nameField: string().min(1),
|
|
8172
|
+
/** JSON Schema of the entry body; `secret: true` marks a password field. */
|
|
8173
|
+
fields: record(string(), unknown())
|
|
8174
|
+
}).strict();
|
|
8175
|
+
/** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
|
|
8176
|
+
var RecordKindDeclarationSchema = object({
|
|
8177
|
+
database: _enum(RECORD_DATABASES).default("settings"),
|
|
8178
|
+
class: _enum(RECORD_CLASSES),
|
|
8179
|
+
writeTrigger: string().min(1),
|
|
8180
|
+
device: _enum([
|
|
8181
|
+
"required",
|
|
8182
|
+
"optional",
|
|
8183
|
+
"none"
|
|
8184
|
+
]).default("none"),
|
|
8185
|
+
at: _enum(["required", "none"]).default("none"),
|
|
8186
|
+
indexes: array(RecordIndexSchema).max(8).default([]),
|
|
8187
|
+
retention: RecordRetentionSchema,
|
|
8188
|
+
deviceRemoval: _enum(["delete", "none"]).default("none"),
|
|
8189
|
+
maxDataBytes: number().int().positive().max(RECORD_MAX_DATA_BYTES).default(RECORD_DEFAULT_MAX_DATA_BYTES),
|
|
8190
|
+
/** Derived from the Zod schema; never written by hand. */
|
|
8191
|
+
secretPaths: array(string().min(1)).default([]),
|
|
8192
|
+
/** The id key of each array that carries a secret (`{ headers: 'name' }`). */
|
|
8193
|
+
secretArrayKeys: record(string(), string()).default({}),
|
|
8194
|
+
/** The legacy table this kind adopts from; the boot guard reads it (D853: no migration code). */
|
|
8195
|
+
adoptsFrom: string().min(1).optional(),
|
|
8196
|
+
/** Kinds that must agree through `transact` sit in one file under one family name. */
|
|
8197
|
+
transactFamily: string().min(1).optional(),
|
|
8198
|
+
entry: EntryDescriptorSchema.optional()
|
|
8199
|
+
}).strict();
|
|
8200
|
+
/** The kind names: lower-case, dash separated, short enough for an index name. */
|
|
8201
|
+
var RecordKindNameSchema = string().regex(/^[a-z][a-z0-9-]{0,47}$/);
|
|
8202
|
+
/** Cross-field rules a declaration must satisfy. Throws {@link DeclarationRefusedError}. */
|
|
8203
|
+
function assertValidDeclaration(name, decl) {
|
|
8204
|
+
const refuse = (why) => {
|
|
8205
|
+
throw new DeclarationRefusedError(`kind "${name}": ${why}`);
|
|
8206
|
+
};
|
|
8207
|
+
if (!RecordKindNameSchema.safeParse(name).success) refuse("the name must be lower-case-dashed");
|
|
8208
|
+
const seen = /* @__PURE__ */ new Set();
|
|
8209
|
+
for (const index of decl.indexes) {
|
|
8210
|
+
if (seen.has(index.name)) refuse(`index name "${index.name}" is declared twice`);
|
|
8211
|
+
seen.add(index.name);
|
|
8212
|
+
}
|
|
8213
|
+
const { retention } = decl;
|
|
8214
|
+
const hasSecrets = decl.secretPaths.length > 0;
|
|
8215
|
+
if ("ttlMs" in retention) {
|
|
8216
|
+
if (retention.from === "at" && decl.at !== "required") refuse("a ttl from \"at\" needs at: \"required\"");
|
|
8217
|
+
if (hasSecrets) refuse("a kind with secret fields cannot use engine TTL (its keychain values would be orphaned)");
|
|
8218
|
+
}
|
|
8219
|
+
if ("maxRows" in retention || "maxRowsPerDevice" in retention) {
|
|
8220
|
+
if (retention.maxRowsPerDevice !== void 0 && decl.device !== "required") refuse("maxRowsPerDevice needs device: \"required\"");
|
|
8221
|
+
if (decl.at !== "required") refuse("a row bound trims the oldest \"at\": it needs at: \"required\"");
|
|
8222
|
+
if (hasSecrets) refuse("a kind with secret fields cannot use an engine row bound");
|
|
8223
|
+
const bound = Math.max(retention.maxRows ?? 0, retention.maxRowsPerDevice ?? 0);
|
|
8224
|
+
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)`);
|
|
8225
|
+
}
|
|
8226
|
+
if (decl.deviceRemoval === "delete" && decl.device === "none") refuse("deviceRemoval: \"delete\" needs a device: \"required\" or \"optional\"");
|
|
8227
|
+
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`);
|
|
8228
|
+
}
|
|
8229
|
+
function bodyFieldsOf(schema) {
|
|
8230
|
+
return { ...toJSONSchema(schema, {
|
|
8231
|
+
unrepresentable: "any",
|
|
8232
|
+
io: "input"
|
|
8233
|
+
}) };
|
|
8234
|
+
}
|
|
8235
|
+
function isRecordLike(value) {
|
|
8236
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
8237
|
+
}
|
|
8238
|
+
/** Does every branch of the body schema carry `field`? (A discriminated union has several.) */
|
|
8239
|
+
function hasNameField(json, field) {
|
|
8240
|
+
const branches = json["oneOf"] ?? json["anyOf"];
|
|
8241
|
+
if (Array.isArray(branches)) return branches.length > 0 && branches.every((b) => isRecordLike(b) && hasNameField(b, field));
|
|
8242
|
+
const properties = json["properties"];
|
|
8243
|
+
return isRecordLike(properties) && Object.prototype.hasOwnProperty.call(properties, field);
|
|
8244
|
+
}
|
|
8245
|
+
/**
|
|
8246
|
+
* Declare the kinds of a package. The keys are the kind names. The result is
|
|
8247
|
+
* what `ctx.records.declare` sends to the engine and what `ctx.records.kind`
|
|
8248
|
+
* types its handle from.
|
|
8249
|
+
*/
|
|
8250
|
+
function defineRecordKinds(specs) {
|
|
8251
|
+
const out = {};
|
|
8252
|
+
for (const [name, spec] of Object.entries(specs)) {
|
|
8253
|
+
const secretPaths = collectZodSecretPaths(spec.schema);
|
|
8254
|
+
const nameField = spec.entry?.nameField ?? "name";
|
|
8255
|
+
const fields = bodyFieldsOf(spec.schema);
|
|
8256
|
+
if (spec.entry !== void 0 && !hasNameField(fields, nameField)) throw new DeclarationRefusedError(`kind "${name}": an entry kind's schema needs a "${nameField}" field`);
|
|
8257
|
+
const parsed = RecordKindDeclarationSchema.parse({
|
|
8258
|
+
database: spec.database,
|
|
8259
|
+
class: spec.class,
|
|
8260
|
+
writeTrigger: spec.writeTrigger,
|
|
8261
|
+
device: spec.device,
|
|
8262
|
+
at: spec.at,
|
|
8263
|
+
indexes: spec.indexes === void 0 ? void 0 : [...spec.indexes],
|
|
8264
|
+
retention: spec.retention,
|
|
8265
|
+
deviceRemoval: spec.deviceRemoval,
|
|
8266
|
+
maxDataBytes: spec.maxDataBytes,
|
|
8267
|
+
secretPaths: [...secretPaths],
|
|
8268
|
+
secretArrayKeys: spec.secretArrayKeys === void 0 ? void 0 : { ...spec.secretArrayKeys },
|
|
8269
|
+
adoptsFrom: spec.adoptsFrom,
|
|
8270
|
+
transactFamily: spec.transactFamily,
|
|
8271
|
+
entry: spec.entry === void 0 ? void 0 : {
|
|
8272
|
+
title: spec.entry.title,
|
|
8273
|
+
nameField,
|
|
8274
|
+
fields
|
|
8275
|
+
}
|
|
8276
|
+
});
|
|
8277
|
+
assertValidDeclaration(name, parsed);
|
|
8278
|
+
out[name] = {
|
|
8279
|
+
name,
|
|
8280
|
+
schema: spec.schema,
|
|
8281
|
+
declaration: parsed
|
|
8282
|
+
};
|
|
8283
|
+
}
|
|
8284
|
+
return out;
|
|
8285
|
+
}
|
|
7838
8286
|
/** Shared Zod schemas used across streaming capabilities. */
|
|
7839
8287
|
var CamProfileSchema = _enum([
|
|
7840
8288
|
"high",
|
|
@@ -8601,7 +9049,7 @@ function sleep(ms) {
|
|
|
8601
9049
|
return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
|
|
8602
9050
|
}
|
|
8603
9051
|
//#endregion
|
|
8604
|
-
//#region ../types/dist/err-msg
|
|
9052
|
+
//#region ../types/dist/err-msg--2RrYiLO.mjs
|
|
8605
9053
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
8606
9054
|
DeviceType["Camera"] = "camera";
|
|
8607
9055
|
DeviceType["Hub"] = "hub";
|
|
@@ -8870,6 +9318,9 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
8870
9318
|
/** Virtual HA toggle (input_boolean.*) — distinguishable from a
|
|
8871
9319
|
* real Switch device for UI rendering / export adapters. */
|
|
8872
9320
|
DeviceRole["BinaryHelper"] = "binary-helper";
|
|
9321
|
+
/** A smart plug: a `switch` whose source says it is an outlet (HA
|
|
9322
|
+
* `device_class: outlet`). The Alexa export shows it as a SMARTPLUG. */
|
|
9323
|
+
DeviceRole["Outlet"] = "outlet";
|
|
8873
9324
|
/** Generic motion / occupancy / moving event source. Distinct from
|
|
8874
9325
|
* the camera accessory PirSensor role: that one is a camera child;
|
|
8875
9326
|
* this is a standalone HA / 3rd-party motion sensor. */
|
|
@@ -8947,7 +9398,7 @@ function errMsg(err) {
|
|
|
8947
9398
|
return String(err);
|
|
8948
9399
|
}
|
|
8949
9400
|
//#endregion
|
|
8950
|
-
//#region ../types/dist/composition-
|
|
9401
|
+
//#region ../types/dist/composition-DOwQB_Ua.mjs
|
|
8951
9402
|
var AUDIO_ENCODER_BY_CODEC = {
|
|
8952
9403
|
opus: "libopus",
|
|
8953
9404
|
aac: "aac",
|
|
@@ -18410,6 +18861,41 @@ var ComposableCapabilitiesSchema = object({ caps: array(object({
|
|
|
18410
18861
|
keyField: string()
|
|
18411
18862
|
}).optional()
|
|
18412
18863
|
})) });
|
|
18864
|
+
/**
|
|
18865
|
+
* The report of a one-shot "move this owner's plaintext secrets into the
|
|
18866
|
+
* keychain" run (D878). COUNTS only - never a value, never a ref.
|
|
18867
|
+
*
|
|
18868
|
+
* The owner runs it on its own rows, through its own write path; an operator
|
|
18869
|
+
* script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
|
|
18870
|
+
* Dry run (`apply: false`) reports what WOULD move and changes nothing.
|
|
18871
|
+
*/
|
|
18872
|
+
var RawSecretMigrationInputSchema = object({
|
|
18873
|
+
/** `false` (the default of the script) = report only. */
|
|
18874
|
+
apply: boolean() });
|
|
18875
|
+
var RawSecretMigrationReportSchema = object({
|
|
18876
|
+
apply: boolean(),
|
|
18877
|
+
/** Rows that can carry a secret (a profile, an enrolment). */
|
|
18878
|
+
rows: number().int(),
|
|
18879
|
+
/** Rows whose secret was plaintext when the run started. */
|
|
18880
|
+
raw: number().int(),
|
|
18881
|
+
/** Rows that already held a keychain marker when the run started. */
|
|
18882
|
+
markers: number().int(),
|
|
18883
|
+
/** Plaintext rows moved by THIS run (always 0 on a dry run). */
|
|
18884
|
+
migrated: number().int(),
|
|
18885
|
+
/** Plaintext rows left in place because the move or its read-back failed. */
|
|
18886
|
+
failed: number().int(),
|
|
18887
|
+
/** After the run: rows still holding plaintext. */
|
|
18888
|
+
remainingRaw: number().int(),
|
|
18889
|
+
/** After the run: markers the keychain could not resolve right now. */
|
|
18890
|
+
unresolvedMarkers: number().int(),
|
|
18891
|
+
/**
|
|
18892
|
+
* A second, redundant copy of the secrets' rows that the run found (and, on
|
|
18893
|
+
* `apply`, deleted after verifying the first). Owners with a single copy omit it.
|
|
18894
|
+
*/
|
|
18895
|
+
redundantCopies: number().int().optional(),
|
|
18896
|
+
/** True when nothing is raw and every marker resolves. */
|
|
18897
|
+
verified: boolean()
|
|
18898
|
+
});
|
|
18413
18899
|
/** Where a block runs. The operator chooses — a block driving a device on an
|
|
18414
18900
|
* agent is the reason placement is not fixed to the hub. */
|
|
18415
18901
|
var CoreBlockPlacementSchema = union([literal("hub"), string().min(1)]);
|
|
@@ -18636,6 +19122,9 @@ method(object({}), object({ blocks: array(CoreBlockSchema) }), { auth: "admin" }
|
|
|
18636
19122
|
}), SettingsUpdateResultSchema, {
|
|
18637
19123
|
kind: "mutation",
|
|
18638
19124
|
auth: "admin"
|
|
19125
|
+
}), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
|
|
19126
|
+
kind: "mutation",
|
|
19127
|
+
auth: "admin"
|
|
18639
19128
|
}), method(object({}), object({ libs: array(object({
|
|
18640
19129
|
filePath: string(),
|
|
18641
19130
|
content: string()
|
|
@@ -18898,6 +19387,222 @@ id: union([string(), number()]) }), {
|
|
|
18898
19387
|
kind: "mutation",
|
|
18899
19388
|
auth: "admin"
|
|
18900
19389
|
});
|
|
19390
|
+
/**
|
|
19391
|
+
* records - an addon's own facts and documents (D881): ledgers, audit rows,
|
|
19392
|
+
* config documents, mirrors. The third storage API next to `ctx.settings`
|
|
19393
|
+
* (operator intent, D870) and device-history (numbers over time, D850).
|
|
19394
|
+
*
|
|
19395
|
+
* Who the OWNER is: `callerAddonId`, stamped by the transport on a call that
|
|
19396
|
+
* crossed a process and stated by a hub in-process caller (`ctx.records` does
|
|
19397
|
+
* that with the addon id closed over). It is deliberately NOT in any input
|
|
19398
|
+
* schema, so a session can never supply it, and a call with no stamp is refused
|
|
19399
|
+
* `records/no-caller`. A kind is readable and writable only by its owner; other
|
|
19400
|
+
* addons go through the owner's capability.
|
|
19401
|
+
*
|
|
19402
|
+
* Every read is three-way: a row, `null`, or the call THROWS. A failed read is
|
|
19403
|
+
* never `[]`. Secret fields are never on the wire: a read shows the
|
|
19404
|
+
* redaction token, `secretRefs` hands the owner's `ctx.secrets` the refs it
|
|
19405
|
+
* resolves itself, and a write may carry only a keychain marker bound to the
|
|
19406
|
+
* row's own ref.
|
|
19407
|
+
*
|
|
19408
|
+
* Internal: addons reach it through `ctx.records`, never directly.
|
|
19409
|
+
*/
|
|
19410
|
+
var RecordIdSchema = string().min(1).max(256);
|
|
19411
|
+
/** A JSON object body. Size is the engine's check (`maxDataBytes`), not a schema's. */
|
|
19412
|
+
var RecordBodySchema = record(string(), unknown());
|
|
19413
|
+
var RecordInputSchema = object({
|
|
19414
|
+
id: RecordIdSchema,
|
|
19415
|
+
/** The device this row belongs to (D865 removal, per-device reads). */
|
|
19416
|
+
deviceId: number().int().optional(),
|
|
19417
|
+
/** The domain clock, ms: observed / created / opened. */
|
|
19418
|
+
at: number().int().optional(),
|
|
19419
|
+
/** Producer-set expiry, ms. Refused on a kind whose retention is an engine TTL. */
|
|
19420
|
+
expiresAt: number().int().optional(),
|
|
19421
|
+
data: RecordBodySchema
|
|
19422
|
+
});
|
|
19423
|
+
var RecordViewSchema = object({
|
|
19424
|
+
id: string(),
|
|
19425
|
+
deviceId: number().int().nullable(),
|
|
19426
|
+
at: number().nullable(),
|
|
19427
|
+
expiresAt: number().nullable(),
|
|
19428
|
+
rev: number().int(),
|
|
19429
|
+
updatedAt: number(),
|
|
19430
|
+
data: RecordBodySchema
|
|
19431
|
+
});
|
|
19432
|
+
/** Declared index fields only. Anything else does not compile, by design. */
|
|
19433
|
+
var RecordWhereSchema = record(RecordFieldPathSchema, union([
|
|
19434
|
+
string(),
|
|
19435
|
+
number(),
|
|
19436
|
+
boolean(),
|
|
19437
|
+
object({ in: array(union([
|
|
19438
|
+
string(),
|
|
19439
|
+
number(),
|
|
19440
|
+
boolean()
|
|
19441
|
+
])).min(1).max(RECORD_BATCH_MAX) }),
|
|
19442
|
+
object({
|
|
19443
|
+
gt: union([string(), number()]).optional(),
|
|
19444
|
+
gte: union([string(), number()]).optional(),
|
|
19445
|
+
lt: union([string(), number()]).optional(),
|
|
19446
|
+
lte: union([string(), number()]).optional()
|
|
19447
|
+
}).refine((r) => Object.keys(r).length > 0, { message: "name at least one bound" })
|
|
19448
|
+
]));
|
|
19449
|
+
var KindShape = { kind: RecordKindNameSchema };
|
|
19450
|
+
var TimeWindowShape = {
|
|
19451
|
+
deviceId: number().int().optional(),
|
|
19452
|
+
atFrom: number().optional(),
|
|
19453
|
+
atTo: number().optional()
|
|
19454
|
+
};
|
|
19455
|
+
var RecordQueryInputSchema = object({
|
|
19456
|
+
...KindShape,
|
|
19457
|
+
...TimeWindowShape,
|
|
19458
|
+
where: RecordWhereSchema.optional(),
|
|
19459
|
+
/** Without `where`: `at` (default for a kind with a clock) or `id`. With `where` the order is the index's. */
|
|
19460
|
+
order: _enum(["at", "id"]).optional(),
|
|
19461
|
+
desc: boolean().optional(),
|
|
19462
|
+
limit: number().int().min(1).max(RECORD_QUERY_MAX).default(100),
|
|
19463
|
+
/** Opaque keyset cursor from a previous answer. There is no offset. */
|
|
19464
|
+
cursor: string().min(1).optional()
|
|
19465
|
+
});
|
|
19466
|
+
var RecordQueryResultSchema = object({
|
|
19467
|
+
records: array(RecordViewSchema),
|
|
19468
|
+
nextCursor: string().nullable()
|
|
19469
|
+
});
|
|
19470
|
+
var RecordKindStateSchema = _enum([
|
|
19471
|
+
"created",
|
|
19472
|
+
"unchanged",
|
|
19473
|
+
"updated"
|
|
19474
|
+
]);
|
|
19475
|
+
var DeclareKindResultSchema = object({
|
|
19476
|
+
kindId: number().int(),
|
|
19477
|
+
state: RecordKindStateSchema,
|
|
19478
|
+
createdIndexes: array(string()),
|
|
19479
|
+
/** The boot guard: the kind is empty while its legacy table still holds rows. */
|
|
19480
|
+
adoptionPending: object({
|
|
19481
|
+
legacyTable: string(),
|
|
19482
|
+
legacyRows: number().int()
|
|
19483
|
+
}).nullable()
|
|
19484
|
+
});
|
|
19485
|
+
/** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
|
|
19486
|
+
var SecretRefsList = array(string());
|
|
19487
|
+
var RecordSecretRefsSchema = record(string(), record(string(), string()));
|
|
19488
|
+
method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
|
|
19489
|
+
kind: "mutation",
|
|
19490
|
+
auth: "admin"
|
|
19491
|
+
}), method(object({
|
|
19492
|
+
...KindShape,
|
|
19493
|
+
id: RecordIdSchema
|
|
19494
|
+
}), RecordViewSchema.nullable(), { auth: "admin" }), method(object({
|
|
19495
|
+
...KindShape,
|
|
19496
|
+
ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
|
|
19497
|
+
}), array(RecordViewSchema), { auth: "admin" }), method(object({
|
|
19498
|
+
...KindShape,
|
|
19499
|
+
ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
|
|
19500
|
+
}), RecordSecretRefsSchema, { auth: "admin" }), method(object({
|
|
19501
|
+
...KindShape,
|
|
19502
|
+
record: RecordInputSchema,
|
|
19503
|
+
/** Compare-and-set. `0` means "the row must not exist". */
|
|
19504
|
+
ifRev: number().int().min(0).optional()
|
|
19505
|
+
}), object({
|
|
19506
|
+
rev: number().int(),
|
|
19507
|
+
releasedRefs: SecretRefsList
|
|
19508
|
+
}), {
|
|
19509
|
+
kind: "mutation",
|
|
19510
|
+
auth: "admin"
|
|
19511
|
+
}), method(object({
|
|
19512
|
+
...KindShape,
|
|
19513
|
+
records: array(RecordInputSchema).min(1).max(RECORD_BATCH_MAX)
|
|
19514
|
+
}), object({
|
|
19515
|
+
count: number().int(),
|
|
19516
|
+
releasedRefs: SecretRefsList
|
|
19517
|
+
}), {
|
|
19518
|
+
kind: "mutation",
|
|
19519
|
+
auth: "admin"
|
|
19520
|
+
}), method(object({
|
|
19521
|
+
...KindShape,
|
|
19522
|
+
id: RecordIdSchema,
|
|
19523
|
+
data: RecordBodySchema,
|
|
19524
|
+
at: number().int().nullable().optional(),
|
|
19525
|
+
expiresAt: number().int().nullable().optional(),
|
|
19526
|
+
ifRev: number().int().min(1).optional()
|
|
19527
|
+
}), object({
|
|
19528
|
+
rev: number().int(),
|
|
19529
|
+
releasedRefs: SecretRefsList
|
|
19530
|
+
}), {
|
|
19531
|
+
kind: "mutation",
|
|
19532
|
+
auth: "admin"
|
|
19533
|
+
}), method(object({
|
|
19534
|
+
...KindShape,
|
|
19535
|
+
id: RecordIdSchema
|
|
19536
|
+
}), object({
|
|
19537
|
+
deleted: boolean(),
|
|
19538
|
+
secretRefs: SecretRefsList
|
|
19539
|
+
}), {
|
|
19540
|
+
kind: "mutation",
|
|
19541
|
+
auth: "admin"
|
|
19542
|
+
}), method(object({
|
|
19543
|
+
...KindShape,
|
|
19544
|
+
ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
|
|
19545
|
+
}), object({
|
|
19546
|
+
deleted: number().int(),
|
|
19547
|
+
secretRefs: SecretRefsList
|
|
19548
|
+
}), {
|
|
19549
|
+
kind: "mutation",
|
|
19550
|
+
auth: "admin"
|
|
19551
|
+
}), method(RecordQueryInputSchema, RecordQueryResultSchema, { auth: "admin" }), method(object({
|
|
19552
|
+
...KindShape,
|
|
19553
|
+
...TimeWindowShape,
|
|
19554
|
+
where: RecordWhereSchema.optional()
|
|
19555
|
+
}), object({ count: number().int() }), { auth: "admin" }), method(object({
|
|
19556
|
+
...KindShape,
|
|
19557
|
+
deviceId: number().int().optional(),
|
|
19558
|
+
from: number(),
|
|
19559
|
+
to: number(),
|
|
19560
|
+
bucketMs: number().int().positive()
|
|
19561
|
+
}), object({ buckets: array(object({
|
|
19562
|
+
bucketStart: number(),
|
|
19563
|
+
count: number().int()
|
|
19564
|
+
})) }), { auth: "admin" }), method(object({
|
|
19565
|
+
...KindShape,
|
|
19566
|
+
op: _enum([
|
|
19567
|
+
"sum",
|
|
19568
|
+
"min",
|
|
19569
|
+
"max",
|
|
19570
|
+
"count"
|
|
19571
|
+
]),
|
|
19572
|
+
field: RecordFieldPathSchema.optional(),
|
|
19573
|
+
groupBy: RecordFieldPathSchema.optional(),
|
|
19574
|
+
where: RecordWhereSchema.optional()
|
|
19575
|
+
}), object({ rows: array(object({
|
|
19576
|
+
group: union([
|
|
19577
|
+
string(),
|
|
19578
|
+
number(),
|
|
19579
|
+
_null()
|
|
19580
|
+
]),
|
|
19581
|
+
value: number().nullable()
|
|
19582
|
+
})) }), { auth: "admin" }), method(object({
|
|
19583
|
+
...KindShape,
|
|
19584
|
+
deviceId: number().int().optional(),
|
|
19585
|
+
atBefore: number().optional(),
|
|
19586
|
+
where: RecordWhereSchema.optional()
|
|
19587
|
+
}), object({
|
|
19588
|
+
deleted: number().int(),
|
|
19589
|
+
secretRefs: SecretRefsList
|
|
19590
|
+
}), {
|
|
19591
|
+
kind: "mutation",
|
|
19592
|
+
auth: "admin"
|
|
19593
|
+
}), method(object({
|
|
19594
|
+
deviceId: number().int(),
|
|
19595
|
+
kinds: array(RecordKindNameSchema).optional()
|
|
19596
|
+
}), object({
|
|
19597
|
+
deleted: record(string(), number().int()),
|
|
19598
|
+
secretRefs: SecretRefsList
|
|
19599
|
+
}), {
|
|
19600
|
+
kind: "mutation",
|
|
19601
|
+
auth: "admin"
|
|
19602
|
+
}), method(object(KindShape), object({ id: number().int() }), {
|
|
19603
|
+
kind: "mutation",
|
|
19604
|
+
auth: "admin"
|
|
19605
|
+
});
|
|
18901
19606
|
/** One table of the settings database. */
|
|
18902
19607
|
var StorageTableSchema = object({
|
|
18903
19608
|
/** The table's full name, e.g. `recorder:addon-settings` or `addon-device-settings`. */
|
|
@@ -18910,6 +19615,28 @@ var StorageTableSchema = object({
|
|
|
18910
19615
|
/** Declared by an addon since this engine process started (a running addon claims it). */
|
|
18911
19616
|
declaredThisBoot: boolean()
|
|
18912
19617
|
});
|
|
19618
|
+
/** One declared record kind (D881) as System -> Data shows it. */
|
|
19619
|
+
var StorageKindSchema = object({
|
|
19620
|
+
owner: string(),
|
|
19621
|
+
kind: string(),
|
|
19622
|
+
database: _enum(["settings", "events"]),
|
|
19623
|
+
class: string(),
|
|
19624
|
+
state: _enum([
|
|
19625
|
+
"declared",
|
|
19626
|
+
"orphaned",
|
|
19627
|
+
"dropped"
|
|
19628
|
+
]),
|
|
19629
|
+
/** `null` when the caller asked for no counts (`counts: false`). */
|
|
19630
|
+
rows: number().int().nonnegative().nullable(),
|
|
19631
|
+
/** Rows x the average size of a sample; null for an empty kind. */
|
|
19632
|
+
bytesEstimate: number().int().nonnegative().nullable(),
|
|
19633
|
+
writeTrigger: string(),
|
|
19634
|
+
retention: RecordRetentionSchema,
|
|
19635
|
+
/** `true` when the kind is an entry kind (the generic entries UI lists it). */
|
|
19636
|
+
entry: boolean(),
|
|
19637
|
+
/** The whole declaration, secret paths and entry descriptor included (the entries service builds its handle from it). */
|
|
19638
|
+
declaration: RecordKindDeclarationSchema
|
|
19639
|
+
});
|
|
18913
19640
|
method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: array(StorageTableSchema) }), { auth: "admin" }), method(object({
|
|
18914
19641
|
collection: string().min(1),
|
|
18915
19642
|
expectRows: number().int().nonnegative()
|
|
@@ -18919,6 +19646,87 @@ method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: arr
|
|
|
18919
19646
|
}), {
|
|
18920
19647
|
kind: "mutation",
|
|
18921
19648
|
auth: "admin"
|
|
19649
|
+
}), method(object({
|
|
19650
|
+
owner: string().min(1).optional(),
|
|
19651
|
+
/** `false` skips the per-kind row count (a catalog read only). Default true. */
|
|
19652
|
+
counts: boolean().optional()
|
|
19653
|
+
}), object({ kinds: array(StorageKindSchema) }), { auth: "admin" }), method(RecordQueryInputSchema.extend({
|
|
19654
|
+
owner: string().min(1),
|
|
19655
|
+
kind: RecordKindNameSchema
|
|
19656
|
+
}), RecordQueryResultSchema, { auth: "admin" }), method(object({
|
|
19657
|
+
owner: string().min(1),
|
|
19658
|
+
kind: RecordKindNameSchema,
|
|
19659
|
+
records: array(RecordInputSchema).max(RECORD_BATCH_MAX),
|
|
19660
|
+
/** The LAST batch: the copy is complete, the boot guard stops asking. */
|
|
19661
|
+
complete: boolean().optional()
|
|
19662
|
+
}).refine((input) => input.records.length > 0 || input.complete === true, { message: "records must be non-empty unless complete is true" }), object({ adopted: number().int() }), {
|
|
19663
|
+
kind: "mutation",
|
|
19664
|
+
auth: "admin"
|
|
19665
|
+
}), method(object({
|
|
19666
|
+
collection: string().min(1),
|
|
19667
|
+
cursor: string().optional(),
|
|
19668
|
+
limit: number().int().min(1).max(1e3).optional()
|
|
19669
|
+
}), object({
|
|
19670
|
+
rows: array(object({
|
|
19671
|
+
id: string(),
|
|
19672
|
+
data: record(string(), unknown())
|
|
19673
|
+
})),
|
|
19674
|
+
nextCursor: string().nullable()
|
|
19675
|
+
}), { auth: "admin" }), method(object({ collection: string().min(1) }), object({ adopted: boolean() }), { auth: "admin" });
|
|
19676
|
+
/**
|
|
19677
|
+
* record-entries - the ONE admin surface for every list of user-created entries
|
|
19678
|
+
* (D881): notification targets, brokers, LLM profiles, anything an addon
|
|
19679
|
+
* declares as an ENTRY kind (`entry: { title }` in `defineRecordKinds`).
|
|
19680
|
+
*
|
|
19681
|
+
* The UI is generic. `listEntryKinds` hands it, per kind, the JSON Schema of
|
|
19682
|
+
* the entry body with `secret: true` on every credential field, so a password
|
|
19683
|
+
* field is derived from the schema and never from a name. `putEntry` takes the
|
|
19684
|
+
* redaction token for an untouched secret (the stored value is kept), a string
|
|
19685
|
+
* for a new one, and the clear instruction to remove one. A read never carries
|
|
19686
|
+
* a secret value, and a locked keychain refuses the write with
|
|
19687
|
+
* `records/secret-unavailable` instead of storing plaintext.
|
|
19688
|
+
*
|
|
19689
|
+
* Hub-only, served in-process (it acts for each entry's owner on the keychain).
|
|
19690
|
+
*/
|
|
19691
|
+
var EntryKindInfoSchema = object({
|
|
19692
|
+
owner: string(),
|
|
19693
|
+
kind: RecordKindNameSchema,
|
|
19694
|
+
title: string(),
|
|
19695
|
+
nameField: string(),
|
|
19696
|
+
/** JSON Schema of the body; `secret: true` marks a password field. */
|
|
19697
|
+
fields: record(string(), unknown()),
|
|
19698
|
+
secretPaths: array(string()),
|
|
19699
|
+
rows: number().int().nonnegative()
|
|
19700
|
+
});
|
|
19701
|
+
var EntryViewSchema = object({
|
|
19702
|
+
id: RecordIdSchema,
|
|
19703
|
+
name: string(),
|
|
19704
|
+
rev: number().int(),
|
|
19705
|
+
updatedAt: number(),
|
|
19706
|
+
/** Secret fields hold the redaction token. */
|
|
19707
|
+
data: RecordBodySchema
|
|
19708
|
+
});
|
|
19709
|
+
var EntryAddress = {
|
|
19710
|
+
owner: string().min(1),
|
|
19711
|
+
kind: RecordKindNameSchema
|
|
19712
|
+
};
|
|
19713
|
+
method(object({}), object({ kinds: array(EntryKindInfoSchema) }), { auth: "admin" }), method(object({ ...EntryAddress }), object({ entries: array(EntryViewSchema) }), { auth: "admin" }), method(object({
|
|
19714
|
+
...EntryAddress,
|
|
19715
|
+
id: RecordIdSchema.optional(),
|
|
19716
|
+
data: RecordBodySchema,
|
|
19717
|
+
ifRev: number().int().min(1).optional()
|
|
19718
|
+
}), object({
|
|
19719
|
+
id: string(),
|
|
19720
|
+
rev: number().int()
|
|
19721
|
+
}), {
|
|
19722
|
+
kind: "mutation",
|
|
19723
|
+
auth: "admin"
|
|
19724
|
+
}), method(object({
|
|
19725
|
+
...EntryAddress,
|
|
19726
|
+
id: RecordIdSchema
|
|
19727
|
+
}), object({ deleted: boolean() }), {
|
|
19728
|
+
kind: "mutation",
|
|
19729
|
+
auth: "admin"
|
|
18922
19730
|
});
|
|
18923
19731
|
/**
|
|
18924
19732
|
* `keychain` — the hub's encrypted store of secret values (D787).
|
|
@@ -42007,6 +42815,9 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
|
42007
42815
|
}), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
42008
42816
|
kind: "mutation",
|
|
42009
42817
|
auth: "admin"
|
|
42818
|
+
}), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
|
|
42819
|
+
kind: "mutation",
|
|
42820
|
+
auth: "admin"
|
|
42010
42821
|
}), method(ProfileRefInputSchema, _void(), {
|
|
42011
42822
|
kind: "mutation",
|
|
42012
42823
|
auth: "admin"
|
|
@@ -53263,6 +54074,41 @@ var ServerRollbackInfoSchema = object({
|
|
|
53263
54074
|
atMs: number(),
|
|
53264
54075
|
reason: string()
|
|
53265
54076
|
});
|
|
54077
|
+
/**
|
|
54078
|
+
* The runner boot check (D877): the runners this node PLANNED (hub: one per
|
|
54079
|
+
* `resolveRunnerId` over its forked addons; agent: the runners its process
|
|
54080
|
+
* service holds, because only the hub plans) against the states the process
|
|
54081
|
+
* service reports. Kept in memory, recomputed by the same one-shot check after
|
|
54082
|
+
* every boot, served on `getServerPackageStatus`.
|
|
54083
|
+
*
|
|
54084
|
+
* `failed` is the D6 breaker's terminal state, `refused` a deterministic Init
|
|
54085
|
+
* refusal (an addon that said "I will not start, and here is why"), `missing` a
|
|
54086
|
+
* planned runner the process service has no entry for.
|
|
54087
|
+
*/
|
|
54088
|
+
var RunnerRefusalSchema = object({
|
|
54089
|
+
runnerId: string(),
|
|
54090
|
+
addonIds: array(string()),
|
|
54091
|
+
reason: string()
|
|
54092
|
+
});
|
|
54093
|
+
var RunnerBootCheckSchema = object({
|
|
54094
|
+
checkedAtMs: number(),
|
|
54095
|
+
/** Runners planned for this node. */
|
|
54096
|
+
expected: number(),
|
|
54097
|
+
/** Planned runners whose process is `running`. */
|
|
54098
|
+
running: number(),
|
|
54099
|
+
failed: array(string()),
|
|
54100
|
+
refused: array(RunnerRefusalSchema),
|
|
54101
|
+
missing: array(string()),
|
|
54102
|
+
/**
|
|
54103
|
+
* Runners still on their way: `starting`, or `crashed` waiting on a backoff
|
|
54104
|
+
* respawn. The check is FINAL only when this is empty; until then nothing is
|
|
54105
|
+
* pushed and the verdict is re-evaluated on the next runner state change.
|
|
54106
|
+
* Optional for version skew (absent = settled).
|
|
54107
|
+
*/
|
|
54108
|
+
pending: array(string()).optional(),
|
|
54109
|
+
/** True when the plan is the hub's (`missing` is then meaningful); false on an agent. */
|
|
54110
|
+
planKnown: boolean()
|
|
54111
|
+
});
|
|
53266
54112
|
var ServerPackageStatusSchema = object({
|
|
53267
54113
|
/** Root package name (`@camstack/server` on the hub). */
|
|
53268
54114
|
packageName: string(),
|
|
@@ -53325,7 +54171,14 @@ var ServerPackageStatusSchema = object({
|
|
|
53325
54171
|
* for version skew: an older provider's payload simply omits it, and an
|
|
53326
54172
|
* absent wrapper is unknown — never `native`.
|
|
53327
54173
|
*/
|
|
53328
|
-
wrapper: WrapperIdentitySchema.optional()
|
|
54174
|
+
wrapper: WrapperIdentitySchema.optional(),
|
|
54175
|
+
/**
|
|
54176
|
+
* What this node PLANNED to run against what its process service reports
|
|
54177
|
+
* (D877). Absent until the one-shot boot check has run (~60 s after boot) and
|
|
54178
|
+
* on a provider that predates it. Absent is "not checked yet", never "all
|
|
54179
|
+
* well": a consumer that needs the answer treats it as pending.
|
|
54180
|
+
*/
|
|
54181
|
+
runners: RunnerBootCheckSchema.optional()
|
|
53329
54182
|
});
|
|
53330
54183
|
var ServerUpdateCheckResultSchema = object({
|
|
53331
54184
|
packageName: string(),
|
|
@@ -53376,6 +54229,13 @@ var ServerUpdateOutcomeSchema = _enum([
|
|
|
53376
54229
|
"refused",
|
|
53377
54230
|
"failed"
|
|
53378
54231
|
]);
|
|
54232
|
+
/** One addon the pre-flight found the target version would refuse (D877). */
|
|
54233
|
+
var UpdateBlockerSchema = object({
|
|
54234
|
+
addonId: string(),
|
|
54235
|
+
reason: string(),
|
|
54236
|
+
/** What the operator does about it. */
|
|
54237
|
+
remedy: string()
|
|
54238
|
+
});
|
|
53379
54239
|
var ServerUpdateActionResultSchema = object({
|
|
53380
54240
|
accepted: boolean(),
|
|
53381
54241
|
targetVersion: string().nullable(),
|
|
@@ -53393,14 +54253,27 @@ var ServerUpdateActionResultSchema = object({
|
|
|
53393
54253
|
* The failure itself, verbatim enough to act on (the npm output for a
|
|
53394
54254
|
* staging install). Non-null only for `failed`.
|
|
53395
54255
|
*/
|
|
53396
|
-
error: string().nullable().optional()
|
|
54256
|
+
error: string().nullable().optional(),
|
|
54257
|
+
/**
|
|
54258
|
+
* The addons the target version would refuse to start on this node's live
|
|
54259
|
+
* store (D877), present when the pre-flight refused the update
|
|
54260
|
+
* (`reason: 'addon-would-refuse'`). Optional for version skew.
|
|
54261
|
+
*/
|
|
54262
|
+
blockers: array(UpdateBlockerSchema).optional()
|
|
53397
54263
|
});
|
|
53398
54264
|
method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), ServerUpdateCheckResultSchema, {
|
|
53399
54265
|
kind: "mutation",
|
|
53400
54266
|
auth: "admin"
|
|
53401
|
-
}), method(object({
|
|
53402
|
-
/** Explicit target version; omitted = latest from the registry. */
|
|
53403
|
-
version: string().optional()
|
|
54267
|
+
}), method(object({
|
|
54268
|
+
/** Explicit target version; omitted = latest from the registry. */
|
|
54269
|
+
version: string().optional(),
|
|
54270
|
+
/**
|
|
54271
|
+
* Apply even though the pre-flight (D877) found addons the target would
|
|
54272
|
+
* refuse to start. Off by default: those addons stay down until the
|
|
54273
|
+
* remedy is run, which is the incident this gate exists to prevent.
|
|
54274
|
+
*/
|
|
54275
|
+
acknowledgeRefusals: boolean().optional()
|
|
54276
|
+
}), ServerUpdateActionResultSchema, {
|
|
53404
54277
|
kind: "mutation",
|
|
53405
54278
|
auth: "admin",
|
|
53406
54279
|
timeoutMs: 16 * 6e4
|
|
@@ -56227,7 +57100,9 @@ var ManifestShapeSchema = object({
|
|
|
56227
57100
|
var AddonProcessSchema = object({
|
|
56228
57101
|
pid: number().optional(),
|
|
56229
57102
|
mode: string(),
|
|
56230
|
-
state: string()
|
|
57103
|
+
state: string(),
|
|
57104
|
+
/** Why the runner is `refused` (an addon's own words), when it is (D877). */
|
|
57105
|
+
reason: string().optional()
|
|
56231
57106
|
});
|
|
56232
57107
|
/**
|
|
56233
57108
|
* Per-addon health snapshot from the kernel's AddonHealthMonitor.
|
|
@@ -57319,6 +58194,12 @@ object({
|
|
|
57319
58194
|
/** Horizontal louver swing on/off. Null when the device has no
|
|
57320
58195
|
* horizontal swing surface (gate with `DeviceFeature.ClimateSwingHorizontal`). */
|
|
57321
58196
|
swingHorizontal: boolean().nullable(),
|
|
58197
|
+
/** Lowest setpoint the device accepts, Celsius. Absent / null = not reported. */
|
|
58198
|
+
minTemp: number().nullable().optional(),
|
|
58199
|
+
/** Highest setpoint the device accepts, Celsius. Absent / null = not reported. */
|
|
58200
|
+
maxTemp: number().nullable().optional(),
|
|
58201
|
+
/** Setpoint granularity, Celsius (0.5, 1). Absent / null = not reported. */
|
|
58202
|
+
tempStep: number().positive().nullable().optional(),
|
|
57322
58203
|
/** Ms epoch when the slice was last updated (push or command). */
|
|
57323
58204
|
lastFetchedAt: number()
|
|
57324
58205
|
});
|
|
@@ -64863,7 +65744,11 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
64863
65744
|
kind: "mutation",
|
|
64864
65745
|
auth: "admin",
|
|
64865
65746
|
access: "delete"
|
|
64866
|
-
}), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(
|
|
65747
|
+
}), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
|
|
65748
|
+
kind: "mutation",
|
|
65749
|
+
auth: "admin",
|
|
65750
|
+
access: "create"
|
|
65751
|
+
}), method(object({
|
|
64867
65752
|
userId: string(),
|
|
64868
65753
|
code: string()
|
|
64869
65754
|
}), object({ valid: boolean() }), {
|
|
@@ -67082,6 +67967,12 @@ Object.freeze({
|
|
|
67082
67967
|
addonId: null,
|
|
67083
67968
|
access: "view"
|
|
67084
67969
|
},
|
|
67970
|
+
"coreBlocks.migrateRawSecrets": {
|
|
67971
|
+
capName: "core-blocks",
|
|
67972
|
+
capScope: "system",
|
|
67973
|
+
addonId: null,
|
|
67974
|
+
access: "create"
|
|
67975
|
+
},
|
|
67085
67976
|
"coreBlocks.restart": {
|
|
67086
67977
|
capName: "core-blocks",
|
|
67087
67978
|
capScope: "system",
|
|
@@ -68942,6 +69833,12 @@ Object.freeze({
|
|
|
68942
69833
|
addonId: null,
|
|
68943
69834
|
access: "view"
|
|
68944
69835
|
},
|
|
69836
|
+
"llm.migrateRawSecrets": {
|
|
69837
|
+
capName: "llm",
|
|
69838
|
+
capScope: "system",
|
|
69839
|
+
addonId: null,
|
|
69840
|
+
access: "create"
|
|
69841
|
+
},
|
|
68945
69842
|
"llm.resolveModelRef": {
|
|
68946
69843
|
capName: "llm",
|
|
68947
69844
|
capScope: "system",
|
|
@@ -71828,6 +72725,30 @@ Object.freeze({
|
|
|
71828
72725
|
addonId: null,
|
|
71829
72726
|
access: "create"
|
|
71830
72727
|
},
|
|
72728
|
+
"recordEntries.deleteEntry": {
|
|
72729
|
+
capName: "record-entries",
|
|
72730
|
+
capScope: "system",
|
|
72731
|
+
addonId: null,
|
|
72732
|
+
access: "delete"
|
|
72733
|
+
},
|
|
72734
|
+
"recordEntries.listEntries": {
|
|
72735
|
+
capName: "record-entries",
|
|
72736
|
+
capScope: "system",
|
|
72737
|
+
addonId: null,
|
|
72738
|
+
access: "view"
|
|
72739
|
+
},
|
|
72740
|
+
"recordEntries.listEntryKinds": {
|
|
72741
|
+
capName: "record-entries",
|
|
72742
|
+
capScope: "system",
|
|
72743
|
+
addonId: null,
|
|
72744
|
+
access: "view"
|
|
72745
|
+
},
|
|
72746
|
+
"recordEntries.putEntry": {
|
|
72747
|
+
capName: "record-entries",
|
|
72748
|
+
capScope: "system",
|
|
72749
|
+
addonId: null,
|
|
72750
|
+
access: "create"
|
|
72751
|
+
},
|
|
71831
72752
|
"recording.getAvailability": {
|
|
71832
72753
|
capName: "recording",
|
|
71833
72754
|
capScope: "device",
|
|
@@ -72128,6 +73049,102 @@ Object.freeze({
|
|
|
72128
73049
|
addonId: null,
|
|
72129
73050
|
access: "view"
|
|
72130
73051
|
},
|
|
73052
|
+
"records.aggregate": {
|
|
73053
|
+
capName: "records",
|
|
73054
|
+
capScope: "system",
|
|
73055
|
+
addonId: null,
|
|
73056
|
+
access: "view"
|
|
73057
|
+
},
|
|
73058
|
+
"records.allocateId": {
|
|
73059
|
+
capName: "records",
|
|
73060
|
+
capScope: "system",
|
|
73061
|
+
addonId: null,
|
|
73062
|
+
access: "create"
|
|
73063
|
+
},
|
|
73064
|
+
"records.count": {
|
|
73065
|
+
capName: "records",
|
|
73066
|
+
capScope: "system",
|
|
73067
|
+
addonId: null,
|
|
73068
|
+
access: "view"
|
|
73069
|
+
},
|
|
73070
|
+
"records.declareKinds": {
|
|
73071
|
+
capName: "records",
|
|
73072
|
+
capScope: "system",
|
|
73073
|
+
addonId: null,
|
|
73074
|
+
access: "create"
|
|
73075
|
+
},
|
|
73076
|
+
"records.delete": {
|
|
73077
|
+
capName: "records",
|
|
73078
|
+
capScope: "system",
|
|
73079
|
+
addonId: null,
|
|
73080
|
+
access: "delete"
|
|
73081
|
+
},
|
|
73082
|
+
"records.deleteDevice": {
|
|
73083
|
+
capName: "records",
|
|
73084
|
+
capScope: "system",
|
|
73085
|
+
addonId: null,
|
|
73086
|
+
access: "delete"
|
|
73087
|
+
},
|
|
73088
|
+
"records.deleteMany": {
|
|
73089
|
+
capName: "records",
|
|
73090
|
+
capScope: "system",
|
|
73091
|
+
addonId: null,
|
|
73092
|
+
access: "delete"
|
|
73093
|
+
},
|
|
73094
|
+
"records.deleteWhere": {
|
|
73095
|
+
capName: "records",
|
|
73096
|
+
capScope: "system",
|
|
73097
|
+
addonId: null,
|
|
73098
|
+
access: "delete"
|
|
73099
|
+
},
|
|
73100
|
+
"records.get": {
|
|
73101
|
+
capName: "records",
|
|
73102
|
+
capScope: "system",
|
|
73103
|
+
addonId: null,
|
|
73104
|
+
access: "view"
|
|
73105
|
+
},
|
|
73106
|
+
"records.getMany": {
|
|
73107
|
+
capName: "records",
|
|
73108
|
+
capScope: "system",
|
|
73109
|
+
addonId: null,
|
|
73110
|
+
access: "view"
|
|
73111
|
+
},
|
|
73112
|
+
"records.histogram": {
|
|
73113
|
+
capName: "records",
|
|
73114
|
+
capScope: "system",
|
|
73115
|
+
addonId: null,
|
|
73116
|
+
access: "view"
|
|
73117
|
+
},
|
|
73118
|
+
"records.patch": {
|
|
73119
|
+
capName: "records",
|
|
73120
|
+
capScope: "system",
|
|
73121
|
+
addonId: null,
|
|
73122
|
+
access: "create"
|
|
73123
|
+
},
|
|
73124
|
+
"records.put": {
|
|
73125
|
+
capName: "records",
|
|
73126
|
+
capScope: "system",
|
|
73127
|
+
addonId: null,
|
|
73128
|
+
access: "create"
|
|
73129
|
+
},
|
|
73130
|
+
"records.putMany": {
|
|
73131
|
+
capName: "records",
|
|
73132
|
+
capScope: "system",
|
|
73133
|
+
addonId: null,
|
|
73134
|
+
access: "create"
|
|
73135
|
+
},
|
|
73136
|
+
"records.query": {
|
|
73137
|
+
capName: "records",
|
|
73138
|
+
capScope: "system",
|
|
73139
|
+
addonId: null,
|
|
73140
|
+
access: "view"
|
|
73141
|
+
},
|
|
73142
|
+
"records.secretRefs": {
|
|
73143
|
+
capName: "records",
|
|
73144
|
+
capScope: "system",
|
|
73145
|
+
addonId: null,
|
|
73146
|
+
access: "view"
|
|
73147
|
+
},
|
|
72131
73148
|
"sceneMonitor.captureReference": {
|
|
72132
73149
|
capName: "scene-monitor",
|
|
72133
73150
|
capScope: "device",
|
|
@@ -72560,18 +73577,48 @@ Object.freeze({
|
|
|
72560
73577
|
addonId: null,
|
|
72561
73578
|
access: "create"
|
|
72562
73579
|
},
|
|
73580
|
+
"storageAdmin.adoptRecords": {
|
|
73581
|
+
capName: "storage-admin",
|
|
73582
|
+
capScope: "system",
|
|
73583
|
+
addonId: null,
|
|
73584
|
+
access: "create"
|
|
73585
|
+
},
|
|
72563
73586
|
"storageAdmin.dropCollection": {
|
|
72564
73587
|
capName: "storage-admin",
|
|
72565
73588
|
capScope: "system",
|
|
72566
73589
|
addonId: null,
|
|
72567
73590
|
access: "delete"
|
|
72568
73591
|
},
|
|
73592
|
+
"storageAdmin.isAdoptedLegacyTable": {
|
|
73593
|
+
capName: "storage-admin",
|
|
73594
|
+
capScope: "system",
|
|
73595
|
+
addonId: null,
|
|
73596
|
+
access: "view"
|
|
73597
|
+
},
|
|
73598
|
+
"storageAdmin.listKinds": {
|
|
73599
|
+
capName: "storage-admin",
|
|
73600
|
+
capScope: "system",
|
|
73601
|
+
addonId: null,
|
|
73602
|
+
access: "view"
|
|
73603
|
+
},
|
|
72569
73604
|
"storageAdmin.listTables": {
|
|
72570
73605
|
capName: "storage-admin",
|
|
72571
73606
|
capScope: "system",
|
|
72572
73607
|
addonId: null,
|
|
72573
73608
|
access: "view"
|
|
72574
73609
|
},
|
|
73610
|
+
"storageAdmin.readLegacyCollection": {
|
|
73611
|
+
capName: "storage-admin",
|
|
73612
|
+
capScope: "system",
|
|
73613
|
+
addonId: null,
|
|
73614
|
+
access: "view"
|
|
73615
|
+
},
|
|
73616
|
+
"storageAdmin.readRecords": {
|
|
73617
|
+
capName: "storage-admin",
|
|
73618
|
+
capScope: "system",
|
|
73619
|
+
addonId: null,
|
|
73620
|
+
access: "view"
|
|
73621
|
+
},
|
|
72575
73622
|
"storageEvictable.evict": {
|
|
72576
73623
|
capName: "storage-evictable",
|
|
72577
73624
|
capScope: "system",
|
|
@@ -73484,6 +74531,12 @@ Object.freeze({
|
|
|
73484
74531
|
addonId: null,
|
|
73485
74532
|
access: "view"
|
|
73486
74533
|
},
|
|
74534
|
+
"userManagement.migrateRawSecrets": {
|
|
74535
|
+
capName: "user-management",
|
|
74536
|
+
capScope: "system",
|
|
74537
|
+
addonId: null,
|
|
74538
|
+
access: "create"
|
|
74539
|
+
},
|
|
73487
74540
|
"userManagement.oauthExchangeCode": {
|
|
73488
74541
|
capName: "user-management",
|
|
73489
74542
|
capScope: "system",
|
|
@@ -76160,6 +77213,37 @@ Object.freeze({
|
|
|
76160
77213
|
form: "single",
|
|
76161
77214
|
optional: false
|
|
76162
77215
|
}],
|
|
77216
|
+
"records.count": [{
|
|
77217
|
+
name: "deviceId",
|
|
77218
|
+
form: "single",
|
|
77219
|
+
optional: true
|
|
77220
|
+
}],
|
|
77221
|
+
"records.deleteDevice": [{
|
|
77222
|
+
name: "deviceId",
|
|
77223
|
+
form: "single",
|
|
77224
|
+
optional: false
|
|
77225
|
+
}],
|
|
77226
|
+
"records.deleteWhere": [{
|
|
77227
|
+
name: "deviceId",
|
|
77228
|
+
form: "single",
|
|
77229
|
+
optional: true
|
|
77230
|
+
}],
|
|
77231
|
+
"records.histogram": [{
|
|
77232
|
+
name: "deviceId",
|
|
77233
|
+
form: "single",
|
|
77234
|
+
optional: true
|
|
77235
|
+
}],
|
|
77236
|
+
"records.putMany": [{
|
|
77237
|
+
name: "records",
|
|
77238
|
+
form: "object-array",
|
|
77239
|
+
optional: false,
|
|
77240
|
+
itemField: "deviceId"
|
|
77241
|
+
}],
|
|
77242
|
+
"records.query": [{
|
|
77243
|
+
name: "deviceId",
|
|
77244
|
+
form: "single",
|
|
77245
|
+
optional: true
|
|
77246
|
+
}],
|
|
76163
77247
|
"sceneMonitor.captureReference": [{
|
|
76164
77248
|
name: "deviceId",
|
|
76165
77249
|
form: "single",
|
|
@@ -76276,6 +77360,17 @@ Object.freeze({
|
|
|
76276
77360
|
form: "single",
|
|
76277
77361
|
optional: false
|
|
76278
77362
|
}],
|
|
77363
|
+
"storageAdmin.adoptRecords": [{
|
|
77364
|
+
name: "records",
|
|
77365
|
+
form: "object-array",
|
|
77366
|
+
optional: false,
|
|
77367
|
+
itemField: "deviceId"
|
|
77368
|
+
}],
|
|
77369
|
+
"storageAdmin.readRecords": [{
|
|
77370
|
+
name: "deviceId",
|
|
77371
|
+
form: "single",
|
|
77372
|
+
optional: true
|
|
77373
|
+
}],
|
|
76279
77374
|
"streamBroker.acquireEgressTranscode": [{
|
|
76280
77375
|
name: "deviceId",
|
|
76281
77376
|
form: "single",
|
|
@@ -78997,4 +80092,4 @@ function armRemovalReconcile(opts) {
|
|
|
78997
80092
|
return () => clearInterval(timer);
|
|
78998
80093
|
}
|
|
78999
80094
|
//#endregion
|
|
79000
|
-
export { audioAnalyzerCapability as $,
|
|
80095
|
+
export { audioAnalyzerCapability as $, sleep as $n, recordingArchiveCapability as $t, NativeLeaseAdmissionSchema as A, errMsg as An, gifFromMp4Args as At, RECORDING_SOURCE_CAMSTACK_ADDON as B, defineCustomActions as Bn, memoizePinnedFfmpeg as Bt, EVENT_PAD_MS as C, Fmp4BoxSplitter as Cn, evictionPolicyForMode as Ct, G711_SCALE_CORRECTION_DB as D, isSoftwareDecode as Dn, ffmpegRate as Dt, FailureCounters as E, invocationFromEncodeProfile as En, failureContributionCapability as Et, PoolMemoryWatchdog as F, HF_REPO as Fn, loadContributionCapability as Ft, VIDEOCLIPS_MAX_OFFER_BYTES as G, isEvent as Gn, overlayClusterStepSettings as Gt, RecordingConfigSchema as H, expandAudioChunkToF32le as Hn, modeMayWrite as Ht, RATE_CONTROL_RELAXED as I, MODEL_FORMATS as In, logChannelsCapability as It, addonWidgetsSourceCapability as J, makeSourceBrokerId as Jn, pickDetailCropConvention as Jt, VISIT_MERGE_GAP_MS as K, isSecretMarker as Kn, parseProcStatus as Kt, RATE_CONTROL_TIGHT as L, audioChunkBytesPerSample as Ln, mapAudioLabelToMacro as Lt, NodeBenchRunnerInputSchema as M, BaseAddon as Mn, isFirstLevelMacroClass as Mt, OpsLogEntrySchema as N, CAM_PROFILE_ORDER as Nn, linkedLabelStepId as Nt, LABEL_SUPPLY_MACRO as O, DeviceFeature as On, gbToBytes as Ot, PIPELINE_RAMP as P, CamProfileSchema as Pn, linkedStepOf as Pt, audioAnalysisCapability as Q, selectAssignedProfileSlots as Qn, rankStreams as Qt, RECORDING_EXPORT_MAX_READ_BYTES as R, createEvent as Rn, mayReadLocation as Rt, EVENT_OWNER_TYPES as S, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as Sn, evaluateZoneRules as St, ExportRecordSchema as T, evaluateSensorEdge as Tn, exportSubjectOf as Tt, RecordingSignalStatusSchema as U, hfModelUrl as Un, modelBindingKey as Ut, ROOT_SUPPLIABLE_STEP_IDS as V, defineRecordKinds as Vn, migrateLegacyDeviceSignalConfig as Vt, RingBuffer as W, hydrateSchema as Wn, motionDetectionCapability as Wt, applyModelBoundSettings as X, nodePin as Xn, pipelineExecutorCapability as Xt, allowedSuppliedEffect as Y, maskUrlCredentials as Yn, pickNativeLeaseOverride as Yt, armRemovalReconcile as Z, parseProfileBrokerId as Zn, pipelineRunnerCapability as Zt, DEFAULT_DETAIL_CROP_CONVENTION as _, stripRetiredBandPreBufferSec as _n, detectionPipelineCapability as _t, BackgroundRunRegistry as a, resolveEgressDecodeHwAccel as an, lazy as ar, clipExportFailure as at, DEVICE_BACKEND_TO_FORMAT as b, webrtcSessionCapability as bn, egressTransportFromRequest as bt, CLIP_STILL_REASON_CODE_HEADER as c, resolvePoolMemoryPolicy as cn, object as cr, containingParentIndex as ct, CLUSTER_MODEL_SCOPED_STEPS as d, rootSuppliesOf as dn, string as dr, declareLogChannel as dt, recordingCapability as en, userError as er, audioKindId as et, COCO_80_LABELS as f, runtimeDevices as fn, union as fr, defaultDeviceFor as ft, DEFAULT_CLUSTER_STEP_SETTINGS as g, streamBrokerCapability as gn, deriveRootFaceRefineRect as gt, DEFAULT_AUDIO_ANALYZER_CONFIG as h, storageOccupancyCapability as hn, deriveRecordingMode as ht, AUDIO_MACRO_LABELS as i, resolveCreateExportSubject as in, discriminatedUnion as ir, cameraStreamsCapability as it, NativeLeaseSettingsSchema as j, BOOT_RECOVERY_BACKOFF_MS as jn, inferModelProvider as jt, LABEL_SUPPLY_VOCABULARIES as k, DeviceType as kn, gifDeriveSpeed as kt, CLIP_STILL_REASON_HEADER as l, resolveRecordingProfiles as ln, preprocess as lr, createHwAccelCache as lt, CROP_SUPPLY_SOURCES as m, storageEvictableCapability as mn, deriveDetailCropRect as mt, APPLE_SA_TO_MACRO as n, recordingSignalCapability as nn, array as nr, buildBenchStepTree as nt, BatteryStatusSchema as o, resolveLocationMode as on, literal as or, clipExportFailureOf as ot, COCO_TO_MACRO as p, stepModelRunsOnFormat as pn, EventCategory as pr, deriveBatteryPresence as pt, YAMNET_TO_MACRO as q, makeProfileBrokerId as qn, pickClusterStepSettings as qt, AUDIO_BACKEND_CHOICES as r, resolveClusterStepModelId as rn, boolean as rr, cameraOwnsMotionViaSensor as rt, CLIP_BROKER_PACED_RATES as s, resolveModelBoundSetting as sn, number as sr, collectModelBoundKeys as st, APPEARANCE_BLOCKS as t, recordingExportCapability as tn, _enum as tr, batteryCapability as tt, CLIP_STREAM_TRANSPORT_HEADER as u, resolveRootSupply as un, record as ur, createLogChannelsProvider as ut, DEFAULT_EVENTS_BAND_BUFFER_SEC as v, supportedRuntimes as vn, deviceRemovalHookCapability as vt, EncodeProfileSchema as w, buildFfmpegArgs as wn, evictionPolicyOfLocation as wt, DEVICE_RAMP as x, AUDIO_PRESETS as xn, enumerateInferenceDevices as xt, DEFAULT_NATIVE_LEASE_SETTINGS as y, videoclipsCapability as yn, egressTranscodeSharingKey as yt, RECORDING_SOURCE_CAMSTACK as z, customAction as zn, mayWriteToLocation as zt };
|