@camstack/addon-auth 1.2.126 → 1.2.128
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/{dist-DoUGHO_G.mjs → hub-browser-origin-DmRqQVDn.mjs} +288 -83
- package/dist/{dist-Y4IbR-lV.js → hub-browser-origin-XYN-h9Iy.js} +293 -82
- package/dist/magic-link/auth-magic-link.addon.js +13 -13
- package/dist/magic-link/auth-magic-link.addon.mjs +5 -5
- package/dist/oidc/auth-oidc.addon.js +498 -954
- package/dist/oidc/auth-oidc.addon.mjs +490 -946
- package/dist/webauthn/_stub.js +1 -1
- package/dist/webauthn/{_virtual_mf-localSharedImportMap___mfe_internal__addon_auth_webauthn_widgets-NDvjK4u_.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_auth_webauthn_widgets-YOLhEehy.mjs} +3 -3
- package/dist/webauthn/_virtual_mf___mfe_internal__addon_auth_webauthn_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CLLk0DJe.mjs +26 -0
- package/dist/webauthn/auth-webauthn.addon.js +40 -32
- package/dist/webauthn/auth-webauthn.addon.mjs +27 -19
- package/dist/webauthn/{hostInit-DYFGWxH_.mjs → hostInit-BYS4j9G0.mjs} +3 -3
- package/dist/webauthn/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/webauthn/_virtual_mf___mfe_internal__addon_auth_webauthn_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BV1VZzL3.mjs +0 -26
|
@@ -10578,6 +10578,15 @@ var ClipSearchStrictnessSchema = _enum([
|
|
|
10578
10578
|
"balanced",
|
|
10579
10579
|
"strict"
|
|
10580
10580
|
]);
|
|
10581
|
+
/** Steps whose effect a root label can BE. */
|
|
10582
|
+
var LABEL_SUPPLY_STEP_IDS = [
|
|
10583
|
+
"animal-classifier",
|
|
10584
|
+
"vehicle-classifier",
|
|
10585
|
+
"package-detection"
|
|
10586
|
+
];
|
|
10587
|
+
/** Steps whose box a root detection can BE. */
|
|
10588
|
+
var CROP_SUPPLY_STEP_IDS = ["plate-detection", "face-detection"];
|
|
10589
|
+
[...LABEL_SUPPLY_STEP_IDS, ...CROP_SUPPLY_STEP_IDS];
|
|
10581
10590
|
var MODEL_FORMATS = [
|
|
10582
10591
|
"onnx",
|
|
10583
10592
|
"coreml",
|
|
@@ -10647,11 +10656,11 @@ var ModelVariantGroupSchema = object({
|
|
|
10647
10656
|
/** Quantization axis. Omit ⇒ the fp32 base build. */
|
|
10648
10657
|
precision: _enum(["fp32", "int8"]).optional(),
|
|
10649
10658
|
/**
|
|
10650
|
-
*
|
|
10651
|
-
*
|
|
10652
|
-
*
|
|
10659
|
+
* Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
|
|
10660
|
+
* an alternate training of the same family (Scrypted `relu_test`); chip
|
|
10661
|
+
* label is "Test".
|
|
10653
10662
|
*/
|
|
10654
|
-
optimization: _enum(["standard", "
|
|
10663
|
+
optimization: _enum(["standard", "test"]).optional(),
|
|
10655
10664
|
/**
|
|
10656
10665
|
* Input-resolution axis (square input side, px). Omit ⇒ the family's native
|
|
10657
10666
|
* resolution (640 for yolo26). Reduced-input builds (320 / 256) are a big,
|
|
@@ -10674,9 +10683,10 @@ var ModelProviderIdSchema = _enum([
|
|
|
10674
10683
|
* are per upstream. A persisted custom-model row written when this field was a
|
|
10675
10684
|
* string still parses — the string is lifted into `{ weights }`.
|
|
10676
10685
|
*
|
|
10677
|
-
* Every licence surface (the
|
|
10678
|
-
*
|
|
10679
|
-
*
|
|
10686
|
+
* Every machine licence surface (`THIRD_PARTY_MODELS.md`, the Hugging Face
|
|
10687
|
+
* model table) is GENERATED from these records by
|
|
10688
|
+
* `scripts/gen-model-licenses.ts` (D661). Operator-facing docs live in
|
|
10689
|
+
* `camstack/docs` → `/docs/detection/models`.
|
|
10680
10690
|
*/
|
|
10681
10691
|
var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { weights: value } : value, object({
|
|
10682
10692
|
/** SPDX id of the WEIGHTS' terms, a `LicenseRef-*` for non-SPDX terms, or `UNKNOWN`. */
|
|
@@ -10709,6 +10719,35 @@ var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { wei
|
|
|
10709
10719
|
/** True when the weights or their data forbid commercial use. */
|
|
10710
10720
|
nonCommercial: boolean().optional()
|
|
10711
10721
|
}));
|
|
10722
|
+
/**
|
|
10723
|
+
* One step a ROOT detector can supply from its own output (D730) — see
|
|
10724
|
+
* `ModelCatalogEntry.suppliesSteps`.
|
|
10725
|
+
*
|
|
10726
|
+
* - `label`: the root's raw class IS the step's answer. `labelToEffect` maps
|
|
10727
|
+
* the root's label to the step's vocabulary; `uncovered` is the vocabulary
|
|
10728
|
+
* the root cannot produce (shown as unavailable, never a blocker).
|
|
10729
|
+
* - `crop`: the root draws the box the step would have found (`license_plate`
|
|
10730
|
+
* for plate-detection, `face` for face-detection). The box becomes a detail
|
|
10731
|
+
* child of the `parentMacro` detection that contains it — never a track.
|
|
10732
|
+
*/
|
|
10733
|
+
var RootStepSupplySchema = discriminatedUnion("kind", [object({
|
|
10734
|
+
kind: literal("label"),
|
|
10735
|
+
stepId: _enum(LABEL_SUPPLY_STEP_IDS),
|
|
10736
|
+
labelToEffect: record(string(), string()),
|
|
10737
|
+
uncovered: array(string()).readonly()
|
|
10738
|
+
}), object({
|
|
10739
|
+
kind: literal("crop"),
|
|
10740
|
+
stepId: _enum(CROP_SUPPLY_STEP_IDS),
|
|
10741
|
+
rootLabels: array(string()).readonly(),
|
|
10742
|
+
parentMacro: _enum(["vehicle", "person"]),
|
|
10743
|
+
childClass: _enum(["plate", "face"]),
|
|
10744
|
+
/**
|
|
10745
|
+
* The root's smaller input side, stamped on read by `rootSuppliesOf` from
|
|
10746
|
+
* the model entry — what a step's `minRootInputPx` gate judges. Never
|
|
10747
|
+
* stored by an import.
|
|
10748
|
+
*/
|
|
10749
|
+
rootInputPx: number().int().positive().optional()
|
|
10750
|
+
})]);
|
|
10712
10751
|
var ModelCatalogEntrySchema = object({
|
|
10713
10752
|
id: string(),
|
|
10714
10753
|
name: string(),
|
|
@@ -10835,6 +10874,16 @@ var ModelCatalogEntrySchema = object({
|
|
|
10835
10874
|
*/
|
|
10836
10875
|
classMap: DetectionCatalogClassMapSchema.optional(),
|
|
10837
10876
|
/**
|
|
10877
|
+
* The pipeline steps this ROOT detector can supply from its own output
|
|
10878
|
+
* (D730): its labels name a step's effect (`deer` for `animal-classifier`)
|
|
10879
|
+
* or draw a step's box (`license_plate` for `plate-detection`). Computed at
|
|
10880
|
+
* import from THIS model's labelmap by `deriveRootSupplies`, never written
|
|
10881
|
+
* by hand and never assumed per family; a row without it is derived on read
|
|
10882
|
+
* (`rootSuppliesOf`). Whether a camera uses it is the step's own
|
|
10883
|
+
* `useRootModel` flag (`resolveRootSupply`).
|
|
10884
|
+
*/
|
|
10885
|
+
suppliesSteps: array(RootStepSupplySchema).readonly().optional(),
|
|
10886
|
+
/**
|
|
10838
10887
|
* The model's CLIP feature-space contract (text encoder, dimension, vector
|
|
10839
10888
|
* index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
|
|
10840
10889
|
* CLIP image encoder; its absence is what "not a CLIP model" means to the
|
|
@@ -14256,7 +14305,7 @@ DeviceType.Camera;
|
|
|
14256
14305
|
* This matters here more than anywhere else in the repo, because every provider
|
|
14257
14306
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
14258
14307
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
14259
|
-
* and `http://admin:hunter2@192.168.
|
|
14308
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
14260
14309
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
14261
14310
|
* filling it is the operator's business, not ours.
|
|
14262
14311
|
*
|
|
@@ -17248,7 +17297,7 @@ method(object({
|
|
|
17248
17297
|
timeoutMs: 6e5
|
|
17249
17298
|
});
|
|
17250
17299
|
method(object({
|
|
17251
|
-
|
|
17300
|
+
targetNodeId: string(),
|
|
17252
17301
|
modelId: string(),
|
|
17253
17302
|
format: _enum(MODEL_FORMATS),
|
|
17254
17303
|
entry: ModelCatalogEntrySchema
|
|
@@ -18616,6 +18665,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
18616
18665
|
"stream-offline",
|
|
18617
18666
|
"node-online",
|
|
18618
18667
|
"node-offline",
|
|
18668
|
+
"node-restarting",
|
|
18669
|
+
"node-updating",
|
|
18619
18670
|
"node-inference-unavailable",
|
|
18620
18671
|
"detection-blind",
|
|
18621
18672
|
"addon-crash-loop",
|
|
@@ -19714,8 +19765,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
19714
19765
|
disabledTargetIds: array(string()).default([])
|
|
19715
19766
|
});
|
|
19716
19767
|
/**
|
|
19717
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
19718
|
-
* still-true state. `
|
|
19768
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
19769
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
19770
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
19719
19771
|
* job is not an open state, and the alarm stays instant.
|
|
19720
19772
|
*/
|
|
19721
19773
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -19727,6 +19779,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
19727
19779
|
"detection-blind",
|
|
19728
19780
|
"nodes",
|
|
19729
19781
|
"addons",
|
|
19782
|
+
"addon-updates",
|
|
19730
19783
|
"updates"
|
|
19731
19784
|
]);
|
|
19732
19785
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -20207,7 +20260,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
20207
20260
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
20208
20261
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
20209
20262
|
*/
|
|
20210
|
-
schedule: NcScheduleSchema.optional()
|
|
20263
|
+
schedule: NcScheduleSchema.optional(),
|
|
20264
|
+
/**
|
|
20265
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
20266
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
20267
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
20268
|
+
*/
|
|
20269
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
20270
|
+
/**
|
|
20271
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
20272
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
20273
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
20274
|
+
*/
|
|
20275
|
+
notifySensorRewatched: boolean().optional()
|
|
20211
20276
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20212
20277
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20213
20278
|
mode: AlarmArmModeSchema,
|
|
@@ -20216,7 +20281,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
20216
20281
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
20217
20282
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
20218
20283
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
20219
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
20284
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
20285
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20286
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
20287
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20288
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
20220
20289
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20221
20290
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20222
20291
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -21177,39 +21246,19 @@ Object.freeze(Object.fromEntries([{
|
|
|
21177
21246
|
label: "Face recognition model",
|
|
21178
21247
|
defaultModelId: "auraface-r100",
|
|
21179
21248
|
indexName: "the enrolled face gallery",
|
|
21180
|
-
options: [
|
|
21181
|
-
|
|
21182
|
-
|
|
21183
|
-
|
|
21184
|
-
},
|
|
21185
|
-
{
|
|
21186
|
-
id: "arcface-r100",
|
|
21187
|
-
label: "ArcFace (ResNet34)"
|
|
21188
|
-
},
|
|
21189
|
-
{
|
|
21190
|
-
id: "inception-resnet-v1",
|
|
21191
|
-
label: "Inception ResNet V1"
|
|
21192
|
-
}
|
|
21193
|
-
]
|
|
21249
|
+
options: [{
|
|
21250
|
+
id: "auraface-r100",
|
|
21251
|
+
label: "AuraFace R100"
|
|
21252
|
+
}]
|
|
21194
21253
|
}, {
|
|
21195
21254
|
stepId: "clip-embedding",
|
|
21196
21255
|
label: "Semantic search model",
|
|
21197
|
-
defaultModelId: "
|
|
21256
|
+
defaultModelId: "siglip2-b16-224",
|
|
21198
21257
|
indexName: "the object semantic-search index",
|
|
21199
|
-
options: [
|
|
21200
|
-
|
|
21201
|
-
|
|
21202
|
-
|
|
21203
|
-
},
|
|
21204
|
-
{
|
|
21205
|
-
id: "mobileclip-s2",
|
|
21206
|
-
label: "MobileCLIP S2"
|
|
21207
|
-
},
|
|
21208
|
-
{
|
|
21209
|
-
id: "siglip2-b16-224",
|
|
21210
|
-
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21211
|
-
}
|
|
21212
|
-
]
|
|
21258
|
+
options: [{
|
|
21259
|
+
id: "siglip2-b16-224",
|
|
21260
|
+
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21261
|
+
}]
|
|
21213
21262
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
21214
21263
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
21215
21264
|
stepId: "face-embedding",
|
|
@@ -23135,6 +23184,34 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
23135
23184
|
timestamp: number()
|
|
23136
23185
|
});
|
|
23137
23186
|
/**
|
|
23187
|
+
* A root model's boxes standing in for one crop-kind step's own inference
|
|
23188
|
+
* (D730) — see `runPipeline.suppliedRoot`.
|
|
23189
|
+
*/
|
|
23190
|
+
var SuppliedRootOutputSchema = object({
|
|
23191
|
+
stepId: string(),
|
|
23192
|
+
/** The root model that drew the boxes — stamped on the result. */
|
|
23193
|
+
modelId: string(),
|
|
23194
|
+
detections: array(object({
|
|
23195
|
+
/** `[x1, y1, x2, y2]` in the pixels of the call's image. */
|
|
23196
|
+
bbox: tuple([
|
|
23197
|
+
number(),
|
|
23198
|
+
number(),
|
|
23199
|
+
number(),
|
|
23200
|
+
number()
|
|
23201
|
+
]),
|
|
23202
|
+
score: number(),
|
|
23203
|
+
/**
|
|
23204
|
+
* Five facial landmarks in the same pixels — a face the step's own
|
|
23205
|
+
* detector already re-found inside a root face box (D730), so its
|
|
23206
|
+
* embedder child aligns it exactly as it aligns any detected face.
|
|
23207
|
+
*/
|
|
23208
|
+
landmarks: array(object({
|
|
23209
|
+
x: number(),
|
|
23210
|
+
y: number()
|
|
23211
|
+
})).optional()
|
|
23212
|
+
})).min(1)
|
|
23213
|
+
});
|
|
23214
|
+
/**
|
|
23138
23215
|
* Reference to the frame's retained NATIVE surface + the parent crop's placement
|
|
23139
23216
|
* within the frame, so the executor can re-cut a leaf child ROI at native
|
|
23140
23217
|
* resolution on the detail plane. See the `runPipeline` `nativeCropRef` field.
|
|
@@ -23264,7 +23341,8 @@ var PipelineModelOptionSchema = object({
|
|
|
23264
23341
|
group: ModelVariantGroupSchema.optional(),
|
|
23265
23342
|
legacy: boolean().optional(),
|
|
23266
23343
|
provider: ModelProviderIdSchema.optional(),
|
|
23267
|
-
defaultConfidence: number().optional()
|
|
23344
|
+
defaultConfidence: number().optional(),
|
|
23345
|
+
suppliesSteps: array(RootStepSupplySchema).readonly().optional()
|
|
23268
23346
|
});
|
|
23269
23347
|
var ConfigFieldBridge = custom();
|
|
23270
23348
|
var PipelineAddonSchemaSchema = object({
|
|
@@ -23532,7 +23610,16 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
23532
23610
|
* `device-not-servable`), and nothing reaches the camera's live
|
|
23533
23611
|
* trace stream. Absent ⇒ unchanged behaviour.
|
|
23534
23612
|
*/
|
|
23535
|
-
replay: literal(true).optional()
|
|
23613
|
+
replay: literal(true).optional(),
|
|
23614
|
+
/**
|
|
23615
|
+
* Root-supplied detections for the tree's ROOT step (D730). Set by
|
|
23616
|
+
* `runDetailSubtree` when the camera's root model supplies a crop-kind
|
|
23617
|
+
* step (a Frigate+ `license_plate` for `plate-detection`): the step is
|
|
23618
|
+
* NOT inferred, these boxes are its output, and its children (the plate
|
|
23619
|
+
* reader) run on them through their own crop policy. Boxes are in the
|
|
23620
|
+
* PIXELS of the image this call carries. Absent ⇒ the root step runs.
|
|
23621
|
+
*/
|
|
23622
|
+
suppliedRoot: SuppliedRootOutputSchema.optional()
|
|
23536
23623
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
23537
23624
|
steps: array(PipelineStepInputSchema).min(1),
|
|
23538
23625
|
frames: array(FrameInputSchema).min(1).max(255),
|
|
@@ -24057,6 +24144,22 @@ var MotionSourceEnum = _enum([
|
|
|
24057
24144
|
"device-activity"
|
|
24058
24145
|
]);
|
|
24059
24146
|
/**
|
|
24147
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
24148
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
24149
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
24150
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
24151
|
+
* absent when unknown or when the camera itself triggered.
|
|
24152
|
+
*
|
|
24153
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
24154
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
24155
|
+
* runner never decides anything on it.
|
|
24156
|
+
*/
|
|
24157
|
+
var SessionTriggerSchema = object({
|
|
24158
|
+
source: MotionSourceEnum,
|
|
24159
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
24160
|
+
sensorName: string().optional()
|
|
24161
|
+
});
|
|
24162
|
+
/**
|
|
24060
24163
|
* List of motion sources active on a camera. Empty array is valid:
|
|
24061
24164
|
* "no source" — happens for battery cams without firmware motion when
|
|
24062
24165
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -24308,6 +24411,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
24308
24411
|
*/
|
|
24309
24412
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
24310
24413
|
/**
|
|
24414
|
+
* What opened this attach, on a SESSION attach only (see
|
|
24415
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
24416
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
24417
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
24418
|
+
* runner then names no source on the phase event.
|
|
24419
|
+
*/
|
|
24420
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
24421
|
+
/**
|
|
24311
24422
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
24312
24423
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
24313
24424
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -24610,7 +24721,22 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
|
|
|
24610
24721
|
*/
|
|
24611
24722
|
cropJpeg: string().optional(),
|
|
24612
24723
|
parent: DetailParentSchema,
|
|
24613
|
-
steps: array(string()).optional()
|
|
24724
|
+
steps: array(string()).optional(),
|
|
24725
|
+
/**
|
|
24726
|
+
* The camera's root model already drew this step's boxes (D730): a
|
|
24727
|
+
* `license_plate` inside the parent vehicle. The named step is NOT
|
|
24728
|
+
* inferred — these FRAME-space boxes are its output — and its
|
|
24729
|
+
* requested children (the plate reader) run on them. Absent ⇒ every
|
|
24730
|
+
* requested step infers as before.
|
|
24731
|
+
*/
|
|
24732
|
+
supplied: object({
|
|
24733
|
+
stepId: string(),
|
|
24734
|
+
modelId: string(),
|
|
24735
|
+
boxes: array(object({
|
|
24736
|
+
bbox: NativeCropBboxSchema,
|
|
24737
|
+
score: number()
|
|
24738
|
+
})).min(1)
|
|
24739
|
+
}).optional()
|
|
24614
24740
|
}), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" }), method(object({
|
|
24615
24741
|
/** Catalog step id, e.g. `clip-embedding`. */
|
|
24616
24742
|
stepId: string(),
|
|
@@ -30566,7 +30692,7 @@ var LocalInterfaceSchema = object({
|
|
|
30566
30692
|
name: string(),
|
|
30567
30693
|
family: _enum(["IPv4", "IPv6"]),
|
|
30568
30694
|
address: string(),
|
|
30569
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
30695
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
30570
30696
|
cidr: string(),
|
|
30571
30697
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
30572
30698
|
netmask: string(),
|
|
@@ -30620,7 +30746,8 @@ var ConnectionEndpointSchema = object({
|
|
|
30620
30746
|
"lan-ipv4",
|
|
30621
30747
|
"lan-ipv6",
|
|
30622
30748
|
"public",
|
|
30623
|
-
"loopback"
|
|
30749
|
+
"loopback",
|
|
30750
|
+
"app-link"
|
|
30624
30751
|
]),
|
|
30625
30752
|
/**
|
|
30626
30753
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -30689,15 +30816,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
30689
30816
|
localPort: AdvertisedLocalPortSchema
|
|
30690
30817
|
});
|
|
30691
30818
|
/**
|
|
30692
|
-
* The
|
|
30693
|
-
*
|
|
30694
|
-
*
|
|
30819
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
30820
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
30821
|
+
* so the UI can show it either way.
|
|
30695
30822
|
*/
|
|
30696
30823
|
var NotificationEndpointSchema = object({
|
|
30697
30824
|
/** The operator's explicit choice, or null for AUTO. */
|
|
30698
30825
|
baseUrl: string().nullable(),
|
|
30699
|
-
/**
|
|
30700
|
-
|
|
30826
|
+
/**
|
|
30827
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
30828
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
30829
|
+
* answered the public tunnel / mesh here, or null.
|
|
30830
|
+
*/
|
|
30831
|
+
resolved: string().nullable(),
|
|
30832
|
+
/**
|
|
30833
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
30834
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
30835
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
30836
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
30837
|
+
* Absent on a pre-D709 hub.
|
|
30838
|
+
*/
|
|
30839
|
+
appLinkHub: string().nullable()
|
|
30701
30840
|
});
|
|
30702
30841
|
/**
|
|
30703
30842
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -30710,6 +30849,27 @@ var ViewerEndpointsSchema = object({
|
|
|
30710
30849
|
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
30711
30850
|
resolved: array(string()).readonly()
|
|
30712
30851
|
});
|
|
30852
|
+
/**
|
|
30853
|
+
* One audience's hub address (see `hub-address.ts`): the operator's stored
|
|
30854
|
+
* override, the address in use, and where it came from.
|
|
30855
|
+
*/
|
|
30856
|
+
var HubAddressSnapshotSchema = object({
|
|
30857
|
+
/** The operator's override, or null for automatic. */
|
|
30858
|
+
override: string().nullable(),
|
|
30859
|
+
/** The address in use, or null when nothing qualifies (never loopback). */
|
|
30860
|
+
resolved: string().nullable(),
|
|
30861
|
+
source: _enum([
|
|
30862
|
+
"override",
|
|
30863
|
+
"auto",
|
|
30864
|
+
"none"
|
|
30865
|
+
])
|
|
30866
|
+
});
|
|
30867
|
+
var HubAddressesSchema = object({
|
|
30868
|
+
/** "Hub address for agents" — agents' bundle/model pulls, LAN devices. */
|
|
30869
|
+
cluster: HubAddressSnapshotSchema,
|
|
30870
|
+
/** "Public address for sign-in links" — e-mail links, OIDC, WebAuthn, OAuth2. */
|
|
30871
|
+
browser: HubAddressSnapshotSchema
|
|
30872
|
+
});
|
|
30713
30873
|
var AllowedAddressesSchema = object({
|
|
30714
30874
|
/**
|
|
30715
30875
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -30751,8 +30911,18 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
30751
30911
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
30752
30912
|
* to avoid mixed-content blocks in the browser. The public
|
|
30753
30913
|
* tunnel always emits `https://` regardless. */
|
|
30754
|
-
scheme: _enum(["http", "https"]).optional()
|
|
30755
|
-
|
|
30914
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
30915
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
30916
|
+
* an address notification links can be flagged with, not a hub
|
|
30917
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
30918
|
+
includeAppLink: boolean().optional()
|
|
30919
|
+
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }), method(_void(), HubAddressesSchema), method(object({
|
|
30920
|
+
audience: _enum(["cluster", "browser"]),
|
|
30921
|
+
baseUrl: string().nullable()
|
|
30922
|
+
}), HubAddressesSchema, {
|
|
30923
|
+
kind: "mutation",
|
|
30924
|
+
auth: "admin"
|
|
30925
|
+
}), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
|
|
30756
30926
|
kind: "mutation",
|
|
30757
30927
|
auth: "admin"
|
|
30758
30928
|
}), method(object({
|
|
@@ -31012,7 +31182,7 @@ var MeshPeerSchema = object({
|
|
|
31012
31182
|
tags: array(string()).readonly(),
|
|
31013
31183
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
31014
31184
|
exitNodeOption: boolean(),
|
|
31015
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
31185
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
31016
31186
|
advertisedRoutes: array(string()).readonly(),
|
|
31017
31187
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
31018
31188
|
userLogin: string().nullable(),
|
|
@@ -31142,7 +31312,8 @@ object({
|
|
|
31142
31312
|
* writes this slice (not even a boot seed), and neither does the runner's
|
|
31143
31313
|
* phase machine: its phase is "a session is attached" for every on-motion
|
|
31144
31314
|
* session, not motion, and it now has its own `DetectionPhaseTransition`.
|
|
31145
|
-
* A provider's `isDetected`
|
|
31315
|
+
* A provider's `isDetected` and `getStatus` answer from the hub's slice
|
|
31316
|
+
* (`hubMotionNativeProvider`).
|
|
31146
31317
|
* - **Sensors** (Home Assistant binary sensors, Homematic, Matter, Alexa
|
|
31147
31318
|
* imports) — the provider pushes both edges itself, from the upstream
|
|
31148
31319
|
* system's own state change. That is the sensor's own fact.
|
|
@@ -31956,7 +32127,13 @@ var OsdStatusSchema = object({ overlays: array(object({
|
|
|
31956
32127
|
*/
|
|
31957
32128
|
availablePositions: array(OsdPositionEnum).readonly(),
|
|
31958
32129
|
/** Firmware does not allow editing the `text` field (e.g. timestamp). */
|
|
31959
|
-
readOnly: boolean().optional()
|
|
32130
|
+
readOnly: boolean().optional(),
|
|
32131
|
+
/**
|
|
32132
|
+
* Firmware text ceiling for this overlay. Absent = no known limit.
|
|
32133
|
+
* The OSD manager truncates here on every write — never stores its own
|
|
32134
|
+
* copy on the binding.
|
|
32135
|
+
*/
|
|
32136
|
+
maxCharacters: number().int().positive().optional()
|
|
31960
32137
|
})).readonly() });
|
|
31961
32138
|
var OsdOverlayPatchSchema = object({
|
|
31962
32139
|
enabled: boolean().optional(),
|
|
@@ -32007,7 +32184,9 @@ var OsdTemplateBindingSchema = object({
|
|
|
32007
32184
|
valuePath: string().min(1).max(64),
|
|
32008
32185
|
/** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
|
|
32009
32186
|
displayUnit: string().max(16).optional(),
|
|
32010
|
-
maxDecimals: number().int().min(0).max(4).default(1)
|
|
32187
|
+
maxDecimals: number().int().min(0).max(4).default(1),
|
|
32188
|
+
/** Raw value → display text (same shape as slot binding). Empty string hides. */
|
|
32189
|
+
valueMap: record(string(), string()).optional()
|
|
32011
32190
|
});
|
|
32012
32191
|
/**
|
|
32013
32192
|
* A named template: bindings (alias → leaf field) + a parser that
|
|
@@ -32057,18 +32236,11 @@ var OsdSlotBindingSchema = object({
|
|
|
32057
32236
|
source: OsdSourceSchema,
|
|
32058
32237
|
/** `${value}` and `${unit}` are substituted; every occurrence. */
|
|
32059
32238
|
template: string().max(96).default("${value}"),
|
|
32060
|
-
/** Truncate with an ellipsis past this length. Absent = no limit. */
|
|
32061
|
-
maxCharacters: number().int().min(4).max(64).optional(),
|
|
32062
32239
|
/**
|
|
32063
32240
|
* Decimal places for a numeric value. `0` yields an integer — the
|
|
32064
32241
|
* documented workaround for firmwares that reject `.` in overlay text.
|
|
32065
32242
|
*/
|
|
32066
32243
|
maxDecimals: number().int().min(0).max(4).default(1),
|
|
32067
|
-
/**
|
|
32068
|
-
* Appended via `${unit}` when no unit conversion produces a label.
|
|
32069
|
-
* Prefer `source.displayUnit` for converted device-state values.
|
|
32070
|
-
*/
|
|
32071
|
-
unitLabel: string().max(8).optional(),
|
|
32072
32244
|
/** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
|
|
32073
32245
|
valueMap: record(string(), string()).optional(),
|
|
32074
32246
|
/** Time windows in which the slot is shown. Absent = always. */
|
|
@@ -32077,9 +32249,7 @@ var OsdSlotBindingSchema = object({
|
|
|
32077
32249
|
* Display gate, in the notification centre's condition vocabulary.
|
|
32078
32250
|
* Only the keys reported by `getConditionSupport` are accepted.
|
|
32079
32251
|
*/
|
|
32080
|
-
conditions: NcConditionsSchema.optional()
|
|
32081
|
-
/** Rendered when the gate is closed or the value unreadable. Empty = hide. */
|
|
32082
|
-
fallbackText: string().max(64).default("")
|
|
32252
|
+
conditions: NcConditionsSchema.optional()
|
|
32083
32253
|
});
|
|
32084
32254
|
/** One camera slot, as the operator sees it: firmware truth + our binding. */
|
|
32085
32255
|
var OsdSlotViewSchema = object({
|
|
@@ -39220,6 +39390,12 @@ Object.freeze({
|
|
|
39220
39390
|
addonId: null,
|
|
39221
39391
|
access: "view"
|
|
39222
39392
|
},
|
|
39393
|
+
"localNetwork.getHubAddresses": {
|
|
39394
|
+
capName: "local-network",
|
|
39395
|
+
capScope: "system",
|
|
39396
|
+
addonId: null,
|
|
39397
|
+
access: "view"
|
|
39398
|
+
},
|
|
39223
39399
|
"localNetwork.getNotificationEndpoint": {
|
|
39224
39400
|
capName: "local-network",
|
|
39225
39401
|
capScope: "system",
|
|
@@ -39274,6 +39450,12 @@ Object.freeze({
|
|
|
39274
39450
|
addonId: null,
|
|
39275
39451
|
access: "create"
|
|
39276
39452
|
},
|
|
39453
|
+
"localNetwork.setHubAddress": {
|
|
39454
|
+
capName: "local-network",
|
|
39455
|
+
capScope: "system",
|
|
39456
|
+
addonId: null,
|
|
39457
|
+
access: "create"
|
|
39458
|
+
},
|
|
39277
39459
|
"localNetwork.setNotificationEndpoint": {
|
|
39278
39460
|
capName: "local-network",
|
|
39279
39461
|
capScope: "system",
|
|
@@ -47673,6 +47855,8 @@ new Map(Object.entries({
|
|
|
47673
47855
|
"detection-blind": "device-events",
|
|
47674
47856
|
"node-online": "system",
|
|
47675
47857
|
"node-offline": "system",
|
|
47858
|
+
"node-restarting": "system",
|
|
47859
|
+
"node-updating": "system",
|
|
47676
47860
|
"node-inference-unavailable": "system",
|
|
47677
47861
|
"addon-crash-loop": "system",
|
|
47678
47862
|
"addon-update-available": "system",
|
|
@@ -47750,18 +47934,21 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
47750
47934
|
kinds: [
|
|
47751
47935
|
"node-offline",
|
|
47752
47936
|
"node-online",
|
|
47937
|
+
"node-restarting",
|
|
47753
47938
|
"node-inference-unavailable"
|
|
47754
47939
|
]
|
|
47755
47940
|
},
|
|
47756
47941
|
{
|
|
47757
47942
|
id: "addons",
|
|
47758
47943
|
family: "system",
|
|
47759
|
-
label: "Addons",
|
|
47760
|
-
kinds: [
|
|
47761
|
-
|
|
47762
|
-
|
|
47763
|
-
|
|
47764
|
-
|
|
47944
|
+
label: "Addons stopped",
|
|
47945
|
+
kinds: ["addon-crash-loop"]
|
|
47946
|
+
},
|
|
47947
|
+
{
|
|
47948
|
+
id: "addon-updates",
|
|
47949
|
+
family: "system",
|
|
47950
|
+
label: "Addon updates",
|
|
47951
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
47765
47952
|
},
|
|
47766
47953
|
{
|
|
47767
47954
|
id: "updates",
|
|
@@ -47769,6 +47956,7 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
47769
47956
|
label: "Server & container updates",
|
|
47770
47957
|
kinds: [
|
|
47771
47958
|
"server-update-available",
|
|
47959
|
+
"node-updating",
|
|
47772
47960
|
"server-updated",
|
|
47773
47961
|
"wrapper-update-available"
|
|
47774
47962
|
]
|
|
@@ -47916,18 +48104,21 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
47916
48104
|
kinds: [
|
|
47917
48105
|
"node-offline",
|
|
47918
48106
|
"node-online",
|
|
48107
|
+
"node-restarting",
|
|
47919
48108
|
"node-inference-unavailable"
|
|
47920
48109
|
]
|
|
47921
48110
|
},
|
|
47922
48111
|
{
|
|
47923
48112
|
name: "summaryAddons",
|
|
47924
|
-
label: "Summary: addons",
|
|
47925
|
-
example: "
|
|
47926
|
-
kinds: [
|
|
47927
|
-
|
|
47928
|
-
|
|
47929
|
-
|
|
47930
|
-
|
|
48113
|
+
label: "Summary: addons stopped",
|
|
48114
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
48115
|
+
kinds: ["addon-crash-loop"]
|
|
48116
|
+
},
|
|
48117
|
+
{
|
|
48118
|
+
name: "summaryAddonUpdates",
|
|
48119
|
+
label: "Summary: addon updates",
|
|
48120
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
48121
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
47931
48122
|
},
|
|
47932
48123
|
{
|
|
47933
48124
|
name: "summaryUpdates",
|
|
@@ -47935,6 +48126,7 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
47935
48126
|
example: "server 1.2.377 → 1.2.378",
|
|
47936
48127
|
kinds: [
|
|
47937
48128
|
"server-update-available",
|
|
48129
|
+
"node-updating",
|
|
47938
48130
|
"server-updated",
|
|
47939
48131
|
"wrapper-update-available"
|
|
47940
48132
|
]
|
|
@@ -47967,7 +48159,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
47967
48159
|
{
|
|
47968
48160
|
name: "summarySection",
|
|
47969
48161
|
label: "Summary: this section",
|
|
47970
|
-
description: "The section a per-section summary row is about
|
|
48162
|
+
description: "The section a per-section summary row is about; on a summary sent as one message, every section it reports, comma-separated.",
|
|
47971
48163
|
example: "Batterie scariche",
|
|
47972
48164
|
group: "system",
|
|
47973
48165
|
families: ["rule"],
|
|
@@ -48011,6 +48203,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
48011
48203
|
[...RULE_BODY_ONLY],
|
|
48012
48204
|
[...RULE_TEXT],
|
|
48013
48205
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
48206
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
48014
48207
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
48015
48208
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
48016
48209
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
@@ -48051,6 +48244,8 @@ var STATE_SUMMARY_VARS = [
|
|
|
48051
48244
|
[...RULE_TEXT],
|
|
48052
48245
|
[...RULE_TEXT],
|
|
48053
48246
|
[...RULE_TEXT],
|
|
48247
|
+
[...RULE_TEXT],
|
|
48248
|
+
[...RULE_TEXT],
|
|
48054
48249
|
...STATE_SUMMARY_VARS
|
|
48055
48250
|
];
|
|
48056
48251
|
new Set([
|
|
@@ -48571,6 +48766,16 @@ DEFAULT_NATIVE_LEASE_SETTINGS.admission;
|
|
|
48571
48766
|
var MB = 1024 * 1024;
|
|
48572
48767
|
1024 * MB, 3072 * MB;
|
|
48573
48768
|
//#endregion
|
|
48769
|
+
//#region src/hub-browser-origin.ts
|
|
48770
|
+
async function hubBrowserOrigin(localNetwork, logger) {
|
|
48771
|
+
try {
|
|
48772
|
+
return (await localNetwork.getHubAddresses.query()).browser.resolved;
|
|
48773
|
+
} catch (err) {
|
|
48774
|
+
logger.warn("hub address unavailable from local-network — using the localhost default", { meta: { error: err instanceof Error ? err.message : String(err) } });
|
|
48775
|
+
return null;
|
|
48776
|
+
}
|
|
48777
|
+
}
|
|
48778
|
+
//#endregion
|
|
48574
48779
|
Object.defineProperty(exports, "BaseAddon", {
|
|
48575
48780
|
enumerable: true,
|
|
48576
48781
|
get: function() {
|
|
@@ -48619,6 +48824,12 @@ Object.defineProperty(exports, "errMsg", {
|
|
|
48619
48824
|
return errMsg;
|
|
48620
48825
|
}
|
|
48621
48826
|
});
|
|
48827
|
+
Object.defineProperty(exports, "hubBrowserOrigin", {
|
|
48828
|
+
enumerable: true,
|
|
48829
|
+
get: function() {
|
|
48830
|
+
return hubBrowserOrigin;
|
|
48831
|
+
}
|
|
48832
|
+
});
|
|
48622
48833
|
Object.defineProperty(exports, "loginMethodCapability", {
|
|
48623
48834
|
enumerable: true,
|
|
48624
48835
|
get: function() {
|