@camstack/addon-auth 1.2.126 → 1.2.127
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-Y4IbR-lV.js → dist-CrTS14S8.js} +191 -122
- package/dist/{dist-DoUGHO_G.mjs → dist-UznM2RaH.mjs} +191 -122
- package/dist/magic-link/auth-magic-link.addon.js +3 -3
- package/dist/magic-link/auth-magic-link.addon.mjs +3 -3
- package/dist/oidc/auth-oidc.addon.js +485 -943
- package/dist/oidc/auth-oidc.addon.mjs +485 -943
- 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-DLh4dk7u.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-BtyGSrb1.mjs +26 -0
- package/dist/webauthn/auth-webauthn.addon.js +6 -6
- package/dist/webauthn/auth-webauthn.addon.mjs +5 -5
- package/dist/webauthn/{hostInit-DYFGWxH_.mjs → hostInit-6Xuu_16a.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,57 @@ var ClipSearchStrictnessSchema = _enum([
|
|
|
10578
10578
|
"balanced",
|
|
10579
10579
|
"strict"
|
|
10580
10580
|
]);
|
|
10581
|
+
new Set([
|
|
10582
|
+
{
|
|
10583
|
+
id: "person",
|
|
10584
|
+
name: "Person"
|
|
10585
|
+
},
|
|
10586
|
+
{
|
|
10587
|
+
id: "vehicle",
|
|
10588
|
+
name: "Vehicle"
|
|
10589
|
+
},
|
|
10590
|
+
{
|
|
10591
|
+
id: "animal",
|
|
10592
|
+
name: "Animal"
|
|
10593
|
+
},
|
|
10594
|
+
{
|
|
10595
|
+
id: "package",
|
|
10596
|
+
name: "Package"
|
|
10597
|
+
}
|
|
10598
|
+
].map((l) => l.id));
|
|
10599
|
+
var COCO_TO_MACRO = {
|
|
10600
|
+
mapping: {
|
|
10601
|
+
person: "person",
|
|
10602
|
+
bicycle: "vehicle",
|
|
10603
|
+
car: "vehicle",
|
|
10604
|
+
motorcycle: "vehicle",
|
|
10605
|
+
airplane: "vehicle",
|
|
10606
|
+
bus: "vehicle",
|
|
10607
|
+
train: "vehicle",
|
|
10608
|
+
truck: "vehicle",
|
|
10609
|
+
boat: "vehicle",
|
|
10610
|
+
bird: "animal",
|
|
10611
|
+
cat: "animal",
|
|
10612
|
+
dog: "animal",
|
|
10613
|
+
horse: "animal",
|
|
10614
|
+
sheep: "animal",
|
|
10615
|
+
cow: "animal",
|
|
10616
|
+
elephant: "animal",
|
|
10617
|
+
bear: "animal",
|
|
10618
|
+
zebra: "animal",
|
|
10619
|
+
giraffe: "animal",
|
|
10620
|
+
suitcase: "package",
|
|
10621
|
+
backpack: "package",
|
|
10622
|
+
handbag: "package"
|
|
10623
|
+
},
|
|
10624
|
+
preserveOriginal: false
|
|
10625
|
+
};
|
|
10626
|
+
/** Steps a root detector may declare it fills. */
|
|
10627
|
+
var FILLABLE_STEP_IDS = [
|
|
10628
|
+
"animal-classifier",
|
|
10629
|
+
"vehicle-classifier",
|
|
10630
|
+
"package-detection"
|
|
10631
|
+
];
|
|
10581
10632
|
var MODEL_FORMATS = [
|
|
10582
10633
|
"onnx",
|
|
10583
10634
|
"coreml",
|
|
@@ -10647,11 +10698,11 @@ var ModelVariantGroupSchema = object({
|
|
|
10647
10698
|
/** Quantization axis. Omit ⇒ the fp32 base build. */
|
|
10648
10699
|
precision: _enum(["fp32", "int8"]).optional(),
|
|
10649
10700
|
/**
|
|
10650
|
-
*
|
|
10651
|
-
*
|
|
10652
|
-
*
|
|
10701
|
+
* Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
|
|
10702
|
+
* an alternate training of the same family (Scrypted `relu_test`); chip
|
|
10703
|
+
* label is "Test".
|
|
10653
10704
|
*/
|
|
10654
|
-
optimization: _enum(["standard", "
|
|
10705
|
+
optimization: _enum(["standard", "test"]).optional(),
|
|
10655
10706
|
/**
|
|
10656
10707
|
* Input-resolution axis (square input side, px). Omit ⇒ the family's native
|
|
10657
10708
|
* resolution (640 for yolo26). Reduced-input builds (320 / 256) are a big,
|
|
@@ -10674,9 +10725,10 @@ var ModelProviderIdSchema = _enum([
|
|
|
10674
10725
|
* are per upstream. A persisted custom-model row written when this field was a
|
|
10675
10726
|
* string still parses — the string is lifted into `{ weights }`.
|
|
10676
10727
|
*
|
|
10677
|
-
* Every licence surface (the
|
|
10678
|
-
*
|
|
10679
|
-
*
|
|
10728
|
+
* Every machine licence surface (`THIRD_PARTY_MODELS.md`, the Hugging Face
|
|
10729
|
+
* model table) is GENERATED from these records by
|
|
10730
|
+
* `scripts/gen-model-licenses.ts` (D661). Operator-facing docs live in
|
|
10731
|
+
* `camstack/docs` → `/docs/detection/models`.
|
|
10680
10732
|
*/
|
|
10681
10733
|
var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { weights: value } : value, object({
|
|
10682
10734
|
/** SPDX id of the WEIGHTS' terms, a `LicenseRef-*` for non-SPDX terms, or `UNKNOWN`. */
|
|
@@ -10709,6 +10761,12 @@ var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { wei
|
|
|
10709
10761
|
/** True when the weights or their data forbid commercial use. */
|
|
10710
10762
|
nonCommercial: boolean().optional()
|
|
10711
10763
|
}));
|
|
10764
|
+
/** One `fillsClassifierEffects` entry — see `ModelCatalogEntry.fillsClassifierEffects`. */
|
|
10765
|
+
var FillsClassifierEffectSchema = object({
|
|
10766
|
+
stepId: _enum(FILLABLE_STEP_IDS),
|
|
10767
|
+
labelToEffect: record(string(), string()),
|
|
10768
|
+
uncovered: array(string()).readonly()
|
|
10769
|
+
});
|
|
10712
10770
|
var ModelCatalogEntrySchema = object({
|
|
10713
10771
|
id: string(),
|
|
10714
10772
|
name: string(),
|
|
@@ -10835,6 +10893,16 @@ var ModelCatalogEntrySchema = object({
|
|
|
10835
10893
|
*/
|
|
10836
10894
|
classMap: DetectionCatalogClassMapSchema.optional(),
|
|
10837
10895
|
/**
|
|
10896
|
+
* The pipeline steps this ROOT detector already does the work of (D715):
|
|
10897
|
+
* its labels name the effect the step exists to produce (`deer` for
|
|
10898
|
+
* `animal-classifier`, `package` for `package-detection`). Derived from the
|
|
10899
|
+
* labelmap by `deriveClassifierFills`, never hand-written; a COCO model
|
|
10900
|
+
* declares none. Whether a declaration is honoured is the step's own
|
|
10901
|
+
* `labelLink` policy (`resolveLabelLink`). `labelToEffect` values are in
|
|
10902
|
+
* `FILLABLE_STEP_VOCABULARIES` (guard `check-label-link-vocabulary`).
|
|
10903
|
+
*/
|
|
10904
|
+
fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional(),
|
|
10905
|
+
/**
|
|
10838
10906
|
* The model's CLIP feature-space contract (text encoder, dimension, vector
|
|
10839
10907
|
* index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
|
|
10840
10908
|
* CLIP image encoder; its absence is what "not a CLIP model" means to the
|
|
@@ -14256,7 +14324,7 @@ DeviceType.Camera;
|
|
|
14256
14324
|
* This matters here more than anywhere else in the repo, because every provider
|
|
14257
14325
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
14258
14326
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
14259
|
-
* and `http://admin:hunter2@192.168.
|
|
14327
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
14260
14328
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
14261
14329
|
* filling it is the operator's business, not ours.
|
|
14262
14330
|
*
|
|
@@ -17248,7 +17316,7 @@ method(object({
|
|
|
17248
17316
|
timeoutMs: 6e5
|
|
17249
17317
|
});
|
|
17250
17318
|
method(object({
|
|
17251
|
-
|
|
17319
|
+
targetNodeId: string(),
|
|
17252
17320
|
modelId: string(),
|
|
17253
17321
|
format: _enum(MODEL_FORMATS),
|
|
17254
17322
|
entry: ModelCatalogEntrySchema
|
|
@@ -17814,51 +17882,6 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
|
|
|
17814
17882
|
kind: "mutation",
|
|
17815
17883
|
auth: "admin"
|
|
17816
17884
|
});
|
|
17817
|
-
new Set([
|
|
17818
|
-
{
|
|
17819
|
-
id: "person",
|
|
17820
|
-
name: "Person"
|
|
17821
|
-
},
|
|
17822
|
-
{
|
|
17823
|
-
id: "vehicle",
|
|
17824
|
-
name: "Vehicle"
|
|
17825
|
-
},
|
|
17826
|
-
{
|
|
17827
|
-
id: "animal",
|
|
17828
|
-
name: "Animal"
|
|
17829
|
-
},
|
|
17830
|
-
{
|
|
17831
|
-
id: "package",
|
|
17832
|
-
name: "Package"
|
|
17833
|
-
}
|
|
17834
|
-
].map((l) => l.id));
|
|
17835
|
-
var COCO_TO_MACRO = {
|
|
17836
|
-
mapping: {
|
|
17837
|
-
person: "person",
|
|
17838
|
-
bicycle: "vehicle",
|
|
17839
|
-
car: "vehicle",
|
|
17840
|
-
motorcycle: "vehicle",
|
|
17841
|
-
airplane: "vehicle",
|
|
17842
|
-
bus: "vehicle",
|
|
17843
|
-
train: "vehicle",
|
|
17844
|
-
truck: "vehicle",
|
|
17845
|
-
boat: "vehicle",
|
|
17846
|
-
bird: "animal",
|
|
17847
|
-
cat: "animal",
|
|
17848
|
-
dog: "animal",
|
|
17849
|
-
horse: "animal",
|
|
17850
|
-
sheep: "animal",
|
|
17851
|
-
cow: "animal",
|
|
17852
|
-
elephant: "animal",
|
|
17853
|
-
bear: "animal",
|
|
17854
|
-
zebra: "animal",
|
|
17855
|
-
giraffe: "animal",
|
|
17856
|
-
suitcase: "package",
|
|
17857
|
-
backpack: "package",
|
|
17858
|
-
handbag: "package"
|
|
17859
|
-
},
|
|
17860
|
-
preserveOriginal: false
|
|
17861
|
-
};
|
|
17862
17885
|
var AUDIO_MACRO_LABELS = [
|
|
17863
17886
|
{
|
|
17864
17887
|
id: "speech",
|
|
@@ -19714,8 +19737,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
19714
19737
|
disabledTargetIds: array(string()).default([])
|
|
19715
19738
|
});
|
|
19716
19739
|
/**
|
|
19717
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
19718
|
-
* still-true state. `
|
|
19740
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
19741
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
19742
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
19719
19743
|
* job is not an open state, and the alarm stays instant.
|
|
19720
19744
|
*/
|
|
19721
19745
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -19727,6 +19751,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
19727
19751
|
"detection-blind",
|
|
19728
19752
|
"nodes",
|
|
19729
19753
|
"addons",
|
|
19754
|
+
"addon-updates",
|
|
19730
19755
|
"updates"
|
|
19731
19756
|
]);
|
|
19732
19757
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -20207,7 +20232,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
20207
20232
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
20208
20233
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
20209
20234
|
*/
|
|
20210
|
-
schedule: NcScheduleSchema.optional()
|
|
20235
|
+
schedule: NcScheduleSchema.optional(),
|
|
20236
|
+
/**
|
|
20237
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
20238
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
20239
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
20240
|
+
*/
|
|
20241
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
20242
|
+
/**
|
|
20243
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
20244
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
20245
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
20246
|
+
*/
|
|
20247
|
+
notifySensorRewatched: boolean().optional()
|
|
20211
20248
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20212
20249
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20213
20250
|
mode: AlarmArmModeSchema,
|
|
@@ -20216,7 +20253,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
20216
20253
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
20217
20254
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
20218
20255
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
20219
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
20256
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
20257
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20258
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
20259
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20260
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
20220
20261
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20221
20262
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20222
20263
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -21177,39 +21218,19 @@ Object.freeze(Object.fromEntries([{
|
|
|
21177
21218
|
label: "Face recognition model",
|
|
21178
21219
|
defaultModelId: "auraface-r100",
|
|
21179
21220
|
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
|
-
]
|
|
21221
|
+
options: [{
|
|
21222
|
+
id: "auraface-r100",
|
|
21223
|
+
label: "AuraFace R100"
|
|
21224
|
+
}]
|
|
21194
21225
|
}, {
|
|
21195
21226
|
stepId: "clip-embedding",
|
|
21196
21227
|
label: "Semantic search model",
|
|
21197
|
-
defaultModelId: "
|
|
21228
|
+
defaultModelId: "siglip2-b16-224",
|
|
21198
21229
|
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
|
-
]
|
|
21230
|
+
options: [{
|
|
21231
|
+
id: "siglip2-b16-224",
|
|
21232
|
+
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21233
|
+
}]
|
|
21213
21234
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
21214
21235
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
21215
21236
|
stepId: "face-embedding",
|
|
@@ -23264,7 +23285,8 @@ var PipelineModelOptionSchema = object({
|
|
|
23264
23285
|
group: ModelVariantGroupSchema.optional(),
|
|
23265
23286
|
legacy: boolean().optional(),
|
|
23266
23287
|
provider: ModelProviderIdSchema.optional(),
|
|
23267
|
-
defaultConfidence: number().optional()
|
|
23288
|
+
defaultConfidence: number().optional(),
|
|
23289
|
+
fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional()
|
|
23268
23290
|
});
|
|
23269
23291
|
var ConfigFieldBridge = custom();
|
|
23270
23292
|
var PipelineAddonSchemaSchema = object({
|
|
@@ -24057,6 +24079,22 @@ var MotionSourceEnum = _enum([
|
|
|
24057
24079
|
"device-activity"
|
|
24058
24080
|
]);
|
|
24059
24081
|
/**
|
|
24082
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
24083
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
24084
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
24085
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
24086
|
+
* absent when unknown or when the camera itself triggered.
|
|
24087
|
+
*
|
|
24088
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
24089
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
24090
|
+
* runner never decides anything on it.
|
|
24091
|
+
*/
|
|
24092
|
+
var SessionTriggerSchema = object({
|
|
24093
|
+
source: MotionSourceEnum,
|
|
24094
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
24095
|
+
sensorName: string().optional()
|
|
24096
|
+
});
|
|
24097
|
+
/**
|
|
24060
24098
|
* List of motion sources active on a camera. Empty array is valid:
|
|
24061
24099
|
* "no source" — happens for battery cams without firmware motion when
|
|
24062
24100
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -24308,6 +24346,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
24308
24346
|
*/
|
|
24309
24347
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
24310
24348
|
/**
|
|
24349
|
+
* What opened this attach, on a SESSION attach only (see
|
|
24350
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
24351
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
24352
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
24353
|
+
* runner then names no source on the phase event.
|
|
24354
|
+
*/
|
|
24355
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
24356
|
+
/**
|
|
24311
24357
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
24312
24358
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
24313
24359
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -30566,7 +30612,7 @@ var LocalInterfaceSchema = object({
|
|
|
30566
30612
|
name: string(),
|
|
30567
30613
|
family: _enum(["IPv4", "IPv6"]),
|
|
30568
30614
|
address: string(),
|
|
30569
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
30615
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
30570
30616
|
cidr: string(),
|
|
30571
30617
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
30572
30618
|
netmask: string(),
|
|
@@ -30620,7 +30666,8 @@ var ConnectionEndpointSchema = object({
|
|
|
30620
30666
|
"lan-ipv4",
|
|
30621
30667
|
"lan-ipv6",
|
|
30622
30668
|
"public",
|
|
30623
|
-
"loopback"
|
|
30669
|
+
"loopback",
|
|
30670
|
+
"app-link"
|
|
30624
30671
|
]),
|
|
30625
30672
|
/**
|
|
30626
30673
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -30689,15 +30736,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
30689
30736
|
localPort: AdvertisedLocalPortSchema
|
|
30690
30737
|
});
|
|
30691
30738
|
/**
|
|
30692
|
-
* The
|
|
30693
|
-
*
|
|
30694
|
-
*
|
|
30739
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
30740
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
30741
|
+
* so the UI can show it either way.
|
|
30695
30742
|
*/
|
|
30696
30743
|
var NotificationEndpointSchema = object({
|
|
30697
30744
|
/** The operator's explicit choice, or null for AUTO. */
|
|
30698
30745
|
baseUrl: string().nullable(),
|
|
30699
|
-
/**
|
|
30700
|
-
|
|
30746
|
+
/**
|
|
30747
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
30748
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
30749
|
+
* answered the public tunnel / mesh here, or null.
|
|
30750
|
+
*/
|
|
30751
|
+
resolved: string().nullable(),
|
|
30752
|
+
/**
|
|
30753
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
30754
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
30755
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
30756
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
30757
|
+
* Absent on a pre-D709 hub.
|
|
30758
|
+
*/
|
|
30759
|
+
appLinkHub: string().nullable()
|
|
30701
30760
|
});
|
|
30702
30761
|
/**
|
|
30703
30762
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -30751,7 +30810,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
30751
30810
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
30752
30811
|
* to avoid mixed-content blocks in the browser. The public
|
|
30753
30812
|
* tunnel always emits `https://` regardless. */
|
|
30754
|
-
scheme: _enum(["http", "https"]).optional()
|
|
30813
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
30814
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
30815
|
+
* an address notification links can be flagged with, not a hub
|
|
30816
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
30817
|
+
includeAppLink: boolean().optional()
|
|
30755
30818
|
}), 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(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
|
|
30756
30819
|
kind: "mutation",
|
|
30757
30820
|
auth: "admin"
|
|
@@ -31012,7 +31075,7 @@ var MeshPeerSchema = object({
|
|
|
31012
31075
|
tags: array(string()).readonly(),
|
|
31013
31076
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
31014
31077
|
exitNodeOption: boolean(),
|
|
31015
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
31078
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
31016
31079
|
advertisedRoutes: array(string()).readonly(),
|
|
31017
31080
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
31018
31081
|
userLogin: string().nullable(),
|
|
@@ -31956,7 +32019,13 @@ var OsdStatusSchema = object({ overlays: array(object({
|
|
|
31956
32019
|
*/
|
|
31957
32020
|
availablePositions: array(OsdPositionEnum).readonly(),
|
|
31958
32021
|
/** Firmware does not allow editing the `text` field (e.g. timestamp). */
|
|
31959
|
-
readOnly: boolean().optional()
|
|
32022
|
+
readOnly: boolean().optional(),
|
|
32023
|
+
/**
|
|
32024
|
+
* Firmware text ceiling for this overlay. Absent = no known limit.
|
|
32025
|
+
* The OSD manager truncates here on every write — never stores its own
|
|
32026
|
+
* copy on the binding.
|
|
32027
|
+
*/
|
|
32028
|
+
maxCharacters: number().int().positive().optional()
|
|
31960
32029
|
})).readonly() });
|
|
31961
32030
|
var OsdOverlayPatchSchema = object({
|
|
31962
32031
|
enabled: boolean().optional(),
|
|
@@ -32007,7 +32076,9 @@ var OsdTemplateBindingSchema = object({
|
|
|
32007
32076
|
valuePath: string().min(1).max(64),
|
|
32008
32077
|
/** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
|
|
32009
32078
|
displayUnit: string().max(16).optional(),
|
|
32010
|
-
maxDecimals: number().int().min(0).max(4).default(1)
|
|
32079
|
+
maxDecimals: number().int().min(0).max(4).default(1),
|
|
32080
|
+
/** Raw value → display text (same shape as slot binding). Empty string hides. */
|
|
32081
|
+
valueMap: record(string(), string()).optional()
|
|
32011
32082
|
});
|
|
32012
32083
|
/**
|
|
32013
32084
|
* A named template: bindings (alias → leaf field) + a parser that
|
|
@@ -32057,18 +32128,11 @@ var OsdSlotBindingSchema = object({
|
|
|
32057
32128
|
source: OsdSourceSchema,
|
|
32058
32129
|
/** `${value}` and `${unit}` are substituted; every occurrence. */
|
|
32059
32130
|
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
32131
|
/**
|
|
32063
32132
|
* Decimal places for a numeric value. `0` yields an integer — the
|
|
32064
32133
|
* documented workaround for firmwares that reject `.` in overlay text.
|
|
32065
32134
|
*/
|
|
32066
32135
|
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
32136
|
/** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
|
|
32073
32137
|
valueMap: record(string(), string()).optional(),
|
|
32074
32138
|
/** Time windows in which the slot is shown. Absent = always. */
|
|
@@ -32077,9 +32141,7 @@ var OsdSlotBindingSchema = object({
|
|
|
32077
32141
|
* Display gate, in the notification centre's condition vocabulary.
|
|
32078
32142
|
* Only the keys reported by `getConditionSupport` are accepted.
|
|
32079
32143
|
*/
|
|
32080
|
-
conditions: NcConditionsSchema.optional()
|
|
32081
|
-
/** Rendered when the gate is closed or the value unreadable. Empty = hide. */
|
|
32082
|
-
fallbackText: string().max(64).default("")
|
|
32144
|
+
conditions: NcConditionsSchema.optional()
|
|
32083
32145
|
});
|
|
32084
32146
|
/** One camera slot, as the operator sees it: firmware truth + our binding. */
|
|
32085
32147
|
var OsdSlotViewSchema = object({
|
|
@@ -47756,12 +47818,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
47756
47818
|
{
|
|
47757
47819
|
id: "addons",
|
|
47758
47820
|
family: "system",
|
|
47759
|
-
label: "Addons",
|
|
47760
|
-
kinds: [
|
|
47761
|
-
|
|
47762
|
-
|
|
47763
|
-
|
|
47764
|
-
|
|
47821
|
+
label: "Addons stopped",
|
|
47822
|
+
kinds: ["addon-crash-loop"]
|
|
47823
|
+
},
|
|
47824
|
+
{
|
|
47825
|
+
id: "addon-updates",
|
|
47826
|
+
family: "system",
|
|
47827
|
+
label: "Addon updates",
|
|
47828
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
47765
47829
|
},
|
|
47766
47830
|
{
|
|
47767
47831
|
id: "updates",
|
|
@@ -47921,13 +47985,15 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
47921
47985
|
},
|
|
47922
47986
|
{
|
|
47923
47987
|
name: "summaryAddons",
|
|
47924
|
-
label: "Summary: addons",
|
|
47925
|
-
example: "
|
|
47926
|
-
kinds: [
|
|
47927
|
-
|
|
47928
|
-
|
|
47929
|
-
|
|
47930
|
-
|
|
47988
|
+
label: "Summary: addons stopped",
|
|
47989
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
47990
|
+
kinds: ["addon-crash-loop"]
|
|
47991
|
+
},
|
|
47992
|
+
{
|
|
47993
|
+
name: "summaryAddonUpdates",
|
|
47994
|
+
label: "Summary: addon updates",
|
|
47995
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
47996
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
47931
47997
|
},
|
|
47932
47998
|
{
|
|
47933
47999
|
name: "summaryUpdates",
|
|
@@ -48011,6 +48077,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
48011
48077
|
[...RULE_BODY_ONLY],
|
|
48012
48078
|
[...RULE_TEXT],
|
|
48013
48079
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
48080
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
48014
48081
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
48015
48082
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
48016
48083
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
@@ -48051,6 +48118,8 @@ var STATE_SUMMARY_VARS = [
|
|
|
48051
48118
|
[...RULE_TEXT],
|
|
48052
48119
|
[...RULE_TEXT],
|
|
48053
48120
|
[...RULE_TEXT],
|
|
48121
|
+
[...RULE_TEXT],
|
|
48122
|
+
[...RULE_TEXT],
|
|
48054
48123
|
...STATE_SUMMARY_VARS
|
|
48055
48124
|
];
|
|
48056
48125
|
new Set([
|