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