@camstack/addon-auth 1.2.26 → 1.2.27
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-WXZYDzKC.mjs → dist-C50pLI-l.mjs} +138 -56
- package/dist/{dist-DwFrw_t5.js → dist-D3OyX5g7.js} +138 -56
- package/dist/magic-link/auth-magic-link.addon.js +1 -1
- package/dist/magic-link/auth-magic-link.addon.mjs +1 -1
- package/dist/oidc/auth-oidc.addon.js +1 -1
- package/dist/oidc/auth-oidc.addon.mjs +1 -1
- package/dist/webauthn/{_virtual_mf-localSharedImportMap___mfe_internal__addon_auth_webauthn_widgets-CntHiwqk.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_auth_webauthn_widgets-DdcGPUS2.mjs} +3 -3
- package/dist/webauthn/auth-webauthn.addon.js +1 -1
- package/dist/webauthn/auth-webauthn.addon.mjs +1 -1
- package/dist/webauthn/{hostInit-DrrKBB1l.mjs → hostInit-ByjjEiko.mjs} +3 -3
- package/dist/webauthn/remoteEntry.js +1 -1
- package/package.json +1 -1
|
@@ -7680,7 +7680,7 @@ var RecordingBandSchema = object({
|
|
|
7680
7680
|
postBufferSec: number().min(0).optional()
|
|
7681
7681
|
});
|
|
7682
7682
|
({
|
|
7683
|
-
preBufferSec:
|
|
7683
|
+
preBufferSec: 15,
|
|
7684
7684
|
postBufferSec: 30
|
|
7685
7685
|
}).postBufferSec * 1e3;
|
|
7686
7686
|
/**
|
|
@@ -13665,128 +13665,103 @@ var COCO_TO_MACRO = {
|
|
|
13665
13665
|
var AUDIO_MACRO_LABELS = [
|
|
13666
13666
|
{
|
|
13667
13667
|
id: "speech",
|
|
13668
|
-
name: "Speech"
|
|
13669
|
-
icon: "🗣️"
|
|
13668
|
+
name: "Speech"
|
|
13670
13669
|
},
|
|
13671
13670
|
{
|
|
13672
13671
|
id: "scream",
|
|
13673
|
-
name: "Scream / Shout"
|
|
13674
|
-
icon: "😱"
|
|
13672
|
+
name: "Scream / Shout"
|
|
13675
13673
|
},
|
|
13676
13674
|
{
|
|
13677
13675
|
id: "crying",
|
|
13678
|
-
name: "Crying / Baby"
|
|
13679
|
-
icon: "😢"
|
|
13676
|
+
name: "Crying / Baby"
|
|
13680
13677
|
},
|
|
13681
13678
|
{
|
|
13682
13679
|
id: "laughter",
|
|
13683
|
-
name: "Laughter"
|
|
13684
|
-
icon: "😂"
|
|
13680
|
+
name: "Laughter"
|
|
13685
13681
|
},
|
|
13686
13682
|
{
|
|
13687
13683
|
id: "music",
|
|
13688
|
-
name: "Music"
|
|
13689
|
-
icon: "🎵"
|
|
13684
|
+
name: "Music"
|
|
13690
13685
|
},
|
|
13691
13686
|
{
|
|
13692
13687
|
id: "dog",
|
|
13693
|
-
name: "Dog"
|
|
13694
|
-
icon: "🐕"
|
|
13688
|
+
name: "Dog"
|
|
13695
13689
|
},
|
|
13696
13690
|
{
|
|
13697
13691
|
id: "cat",
|
|
13698
|
-
name: "Cat"
|
|
13699
|
-
icon: "🐈"
|
|
13692
|
+
name: "Cat"
|
|
13700
13693
|
},
|
|
13701
13694
|
{
|
|
13702
13695
|
id: "bird",
|
|
13703
|
-
name: "Bird"
|
|
13704
|
-
icon: "🐦"
|
|
13696
|
+
name: "Bird"
|
|
13705
13697
|
},
|
|
13706
13698
|
{
|
|
13707
13699
|
id: "animal",
|
|
13708
|
-
name: "Animal (other)"
|
|
13709
|
-
icon: "🐾"
|
|
13700
|
+
name: "Animal (other)"
|
|
13710
13701
|
},
|
|
13711
13702
|
{
|
|
13712
13703
|
id: "alarm",
|
|
13713
|
-
name: "Alarm / Siren"
|
|
13714
|
-
icon: "🚨"
|
|
13704
|
+
name: "Alarm / Siren"
|
|
13715
13705
|
},
|
|
13716
13706
|
{
|
|
13717
13707
|
id: "doorbell",
|
|
13718
|
-
name: "Doorbell / Knock"
|
|
13719
|
-
icon: "🔔"
|
|
13708
|
+
name: "Doorbell / Knock"
|
|
13720
13709
|
},
|
|
13721
13710
|
{
|
|
13722
13711
|
id: "glass_breaking",
|
|
13723
|
-
name: "Glass Breaking"
|
|
13724
|
-
icon: "💥"
|
|
13712
|
+
name: "Glass Breaking"
|
|
13725
13713
|
},
|
|
13726
13714
|
{
|
|
13727
13715
|
id: "gunshot",
|
|
13728
|
-
name: "Gunshot / Explosion"
|
|
13729
|
-
icon: "💣"
|
|
13716
|
+
name: "Gunshot / Explosion"
|
|
13730
13717
|
},
|
|
13731
13718
|
{
|
|
13732
13719
|
id: "vehicle",
|
|
13733
|
-
name: "Vehicle"
|
|
13734
|
-
icon: "🚗"
|
|
13720
|
+
name: "Vehicle"
|
|
13735
13721
|
},
|
|
13736
13722
|
{
|
|
13737
13723
|
id: "siren",
|
|
13738
|
-
name: "Emergency Siren"
|
|
13739
|
-
icon: "🚑"
|
|
13724
|
+
name: "Emergency Siren"
|
|
13740
13725
|
},
|
|
13741
13726
|
{
|
|
13742
13727
|
id: "fire",
|
|
13743
|
-
name: "Fire / Smoke"
|
|
13744
|
-
icon: "🔥"
|
|
13728
|
+
name: "Fire / Smoke"
|
|
13745
13729
|
},
|
|
13746
13730
|
{
|
|
13747
13731
|
id: "water",
|
|
13748
|
-
name: "Water"
|
|
13749
|
-
icon: "💧"
|
|
13732
|
+
name: "Water"
|
|
13750
13733
|
},
|
|
13751
13734
|
{
|
|
13752
13735
|
id: "wind",
|
|
13753
|
-
name: "Wind / Weather"
|
|
13754
|
-
icon: "🌬️"
|
|
13736
|
+
name: "Wind / Weather"
|
|
13755
13737
|
},
|
|
13756
13738
|
{
|
|
13757
13739
|
id: "door",
|
|
13758
|
-
name: "Door"
|
|
13759
|
-
icon: "🚪"
|
|
13740
|
+
name: "Door"
|
|
13760
13741
|
},
|
|
13761
13742
|
{
|
|
13762
13743
|
id: "footsteps",
|
|
13763
|
-
name: "Footsteps"
|
|
13764
|
-
icon: "👣"
|
|
13744
|
+
name: "Footsteps"
|
|
13765
13745
|
},
|
|
13766
13746
|
{
|
|
13767
13747
|
id: "crowd",
|
|
13768
|
-
name: "Crowd / Chatter"
|
|
13769
|
-
icon: "👥"
|
|
13748
|
+
name: "Crowd / Chatter"
|
|
13770
13749
|
},
|
|
13771
13750
|
{
|
|
13772
13751
|
id: "telephone",
|
|
13773
|
-
name: "Telephone"
|
|
13774
|
-
icon: "📞"
|
|
13752
|
+
name: "Telephone"
|
|
13775
13753
|
},
|
|
13776
13754
|
{
|
|
13777
13755
|
id: "engine",
|
|
13778
|
-
name: "Engine / Motor"
|
|
13779
|
-
icon: "⚙️"
|
|
13756
|
+
name: "Engine / Motor"
|
|
13780
13757
|
},
|
|
13781
13758
|
{
|
|
13782
13759
|
id: "tools",
|
|
13783
|
-
name: "Tools / Construction"
|
|
13784
|
-
icon: "🔨"
|
|
13760
|
+
name: "Tools / Construction"
|
|
13785
13761
|
},
|
|
13786
13762
|
{
|
|
13787
13763
|
id: "silence",
|
|
13788
|
-
name: "Silence"
|
|
13789
|
-
icon: "🤫"
|
|
13764
|
+
name: "Silence"
|
|
13790
13765
|
}
|
|
13791
13766
|
];
|
|
13792
13767
|
var YAMNET_TO_MACRO = {
|
|
@@ -16250,7 +16225,7 @@ var TrackEnvelopeSchema = object({
|
|
|
16250
16225
|
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
16251
16226
|
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
16252
16227
|
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
16253
|
-
* zonesVisited, bestEventId, envelope, hasFace, hasRider) and returns `positions` /
|
|
16228
|
+
* zonesVisited, bestEventId, envelope, hasFace, hasEmbeddedFace, hasRider) and returns `positions` /
|
|
16254
16229
|
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
16255
16230
|
* `getTrack`. Mirrors the event-store `projection` convention
|
|
16256
16231
|
* (`getObjectEvents` et al.).
|
|
@@ -16545,6 +16520,35 @@ var TrackSchema = object({
|
|
|
16545
16520
|
*/
|
|
16546
16521
|
hasFace: boolean().optional(),
|
|
16547
16522
|
/**
|
|
16523
|
+
* This track has a face row IN THE GALLERY: a crop **and** an embedding — a
|
|
16524
|
+
* face an operator could ASSIGN to an identity.
|
|
16525
|
+
*
|
|
16526
|
+
* The STRICT twin of {@link hasFace}, and the pair only earns its keep
|
|
16527
|
+
* because the two disagree. `hasFace` is stamped at the TOP of the face
|
|
16528
|
+
* branch, before every gate, and means no more than "a face detector produced
|
|
16529
|
+
* a face detail". This one is stamped at the single moment the gallery row
|
|
16530
|
+
* LANDS — after `FaceRecognizer.onTrackEnd` successfully persists it, i.e.
|
|
16531
|
+
* past the embedding-magnitude verdict, the `minFacePx` detection gate, the
|
|
16532
|
+
* candidate gate, the imageless-track drop (no crop was ever captured) and
|
|
16533
|
+
* the crop-store drop. Everything between the detector and that insert can
|
|
16534
|
+
* legitimately refuse the face, so a flag written any earlier promises the
|
|
16535
|
+
* operator something to assign and delivers nothing.
|
|
16536
|
+
*
|
|
16537
|
+
* **Independent of recognition.** A face collected but never auto-matched is
|
|
16538
|
+
* still assignable — it is in fact the face an operator most wants to reach —
|
|
16539
|
+
* so this is NOT gated on `recognizedIdentityId`. Recognition lands in
|
|
16540
|
+
* `subLabel`; this says only that the raw material exists.
|
|
16541
|
+
*
|
|
16542
|
+
* **Set once, never cleared.** A track that produced a gallery row produced
|
|
16543
|
+
* one; deleting the row later is the gallery's business, not this flag's.
|
|
16544
|
+
*
|
|
16545
|
+
* **Absent ≠ false**, the same rule as {@link hasFace}: every row written
|
|
16546
|
+
* before the column omits it, and so does every server that predates the
|
|
16547
|
+
* field. A consumer must test `=== true` and render nothing otherwise —
|
|
16548
|
+
* never infer "no assignable face".
|
|
16549
|
+
*/
|
|
16550
|
+
hasEmbeddedFace: boolean().optional(),
|
|
16551
|
+
/**
|
|
16548
16552
|
* This subject CONTAINS a folded rider — a person the rider-pairing step
|
|
16549
16553
|
* ([D34](../decisions/adr-0034.md)) removed from the frame BEFORE the tracker,
|
|
16550
16554
|
* so the passage is tracked once and as a VEHICLE.
|
|
@@ -17894,6 +17898,32 @@ var DetailResultSchema = object({
|
|
|
17894
17898
|
/** FRAME-space bbox (already mapped back from crop space). */
|
|
17895
17899
|
bbox: NativeCropBboxSchema.optional(),
|
|
17896
17900
|
embedding: string().optional(),
|
|
17901
|
+
/**
|
|
17902
|
+
* L2 magnitude of the RAW pre-normalization embedding. Additive and optional
|
|
17903
|
+
* so an older runner that does not send it degrades to "unmeasurable", which
|
|
17904
|
+
* the consuming gate treats as accept — never as reject.
|
|
17905
|
+
*/
|
|
17906
|
+
embeddingMagnitude: number().optional(),
|
|
17907
|
+
/**
|
|
17908
|
+
* Model that produced `embedding` — the SAME contract `labelModelId` has for
|
|
17909
|
+
* `label`, and for the same reason: the producing node is the only side that
|
|
17910
|
+
* knows which model actually ran, and re-deriving it downstream is exactly
|
|
17911
|
+
* the inference this model exists to forbid.
|
|
17912
|
+
*
|
|
17913
|
+
* Additive and optional, so a runner that predates it degrades to
|
|
17914
|
+
* "unmeasurable" rather than to a wrong answer — the consumer falls back to
|
|
17915
|
+
* its previous assumption instead of refusing.
|
|
17916
|
+
*
|
|
17917
|
+
* Its absence was not cosmetic. `FaceRecognizer` needs the probe's model id
|
|
17918
|
+
* to use `face-matcher`'s same-model gate (`sample.modelId !== probe.modelId`);
|
|
17919
|
+
* with nothing on the wire it took the id from the GALLERY, so the gate
|
|
17920
|
+
* compared the gallery against itself and could never fire. That turned the
|
|
17921
|
+
* one guard protecting the face feature space into a tautology, and it is
|
|
17922
|
+
* why swapping `face-embedding`'s model would NOT have stranded the enrolled
|
|
17923
|
+
* gallery as the catalog comment predicts — it would have scored the new
|
|
17924
|
+
* model's vectors against the old model's samples in one cosine space.
|
|
17925
|
+
*/
|
|
17926
|
+
embeddingModelId: string().optional(),
|
|
17897
17927
|
label: string().optional(),
|
|
17898
17928
|
/**
|
|
17899
17929
|
* The tier `label` occupies, copied VERBATIM from the producing step's
|
|
@@ -19304,6 +19334,7 @@ DeviceType.Camera, method(object({
|
|
|
19304
19334
|
isBattery: boolean(),
|
|
19305
19335
|
reason: _enum([
|
|
19306
19336
|
"disabled",
|
|
19337
|
+
"offline",
|
|
19307
19338
|
"sleeping",
|
|
19308
19339
|
"unreachable",
|
|
19309
19340
|
"waking"
|
|
@@ -19349,9 +19380,17 @@ targets: array(object({
|
|
|
19349
19380
|
sleeping: boolean(),
|
|
19350
19381
|
/** Current device state rendered over the cached frame. State images
|
|
19351
19382
|
* remain authoritative even when their photographic background is
|
|
19352
|
-
* old; null means the link must carry a current camera frame.
|
|
19383
|
+
* old; null means the link must carry a current camera frame.
|
|
19384
|
+
*
|
|
19385
|
+
* **This is the ONLY source a surface may derive an inactive tile
|
|
19386
|
+
* from.** A client that reads a device's `online`/`disabled` flags and
|
|
19387
|
+
* draws its own verdict will disagree with the pixels it is painting
|
|
19388
|
+
* — the frame comes from here, and so must the sentence over it
|
|
19389
|
+
* (D190). Pair with `ageMs` for the age of the photograph behind the
|
|
19390
|
+
* state. */
|
|
19353
19391
|
stateReason: _enum([
|
|
19354
19392
|
"disabled",
|
|
19393
|
+
"offline",
|
|
19355
19394
|
"sleeping",
|
|
19356
19395
|
"unreachable",
|
|
19357
19396
|
"waking"
|
|
@@ -33554,7 +33593,6 @@ var NC_AUDIO_DEFAULTS = {
|
|
|
33554
33593
|
hitPercent: 60,
|
|
33555
33594
|
samplingSeconds: 10
|
|
33556
33595
|
};
|
|
33557
|
-
new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
|
|
33558
33596
|
new Set(["devices", "classes"]);
|
|
33559
33597
|
NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
|
|
33560
33598
|
/**
|
|
@@ -33788,6 +33826,39 @@ TimelapseRuleInputSchema.extend({
|
|
|
33788
33826
|
createdAt: number(),
|
|
33789
33827
|
updatedAt: number()
|
|
33790
33828
|
});
|
|
33829
|
+
Object.freeze(Object.fromEntries([{
|
|
33830
|
+
stepId: "face-embedding",
|
|
33831
|
+
label: "Face recognition model",
|
|
33832
|
+
defaultModelId: "arcface-r100",
|
|
33833
|
+
indexName: "the enrolled face gallery",
|
|
33834
|
+
options: [
|
|
33835
|
+
{
|
|
33836
|
+
id: "arcface-r100",
|
|
33837
|
+
label: "ArcFace (ResNet34)"
|
|
33838
|
+
},
|
|
33839
|
+
{
|
|
33840
|
+
id: "auraface-r100",
|
|
33841
|
+
label: "AuraFace R100"
|
|
33842
|
+
},
|
|
33843
|
+
{
|
|
33844
|
+
id: "inception-resnet-v1",
|
|
33845
|
+
label: "Inception ResNet V1"
|
|
33846
|
+
}
|
|
33847
|
+
]
|
|
33848
|
+
}, {
|
|
33849
|
+
stepId: "clip-embedding",
|
|
33850
|
+
label: "Semantic search model",
|
|
33851
|
+
defaultModelId: "mobileclip-s1",
|
|
33852
|
+
indexName: "the object semantic-search index",
|
|
33853
|
+
options: [{
|
|
33854
|
+
id: "mobileclip-s1",
|
|
33855
|
+
label: "MobileCLIP S1"
|
|
33856
|
+
}, {
|
|
33857
|
+
id: "mobileclip-s2",
|
|
33858
|
+
label: "MobileCLIP S2"
|
|
33859
|
+
}]
|
|
33860
|
+
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
33861
|
+
string().min(1);
|
|
33791
33862
|
object({
|
|
33792
33863
|
/**
|
|
33793
33864
|
* Fraction of the box's own size added on EACH side before cutting.
|
|
@@ -33808,10 +33879,21 @@ object({
|
|
|
33808
33879
|
*/
|
|
33809
33880
|
square: boolean()
|
|
33810
33881
|
});
|
|
33811
|
-
|
|
33882
|
+
/**
|
|
33883
|
+
* The convention in force when nobody has configured one — byte-for-byte the
|
|
33884
|
+
* behaviour of the pre-unification LIVE path (`DETAIL_CROP_PADDING_RATIO`).
|
|
33885
|
+
*/
|
|
33886
|
+
var DEFAULT_DETAIL_CROP_CONVENTION = {
|
|
33812
33887
|
paddingRatio: .15,
|
|
33813
33888
|
square: false
|
|
33814
|
-
}
|
|
33889
|
+
};
|
|
33890
|
+
Object.freeze({
|
|
33891
|
+
x: 0,
|
|
33892
|
+
y: 0,
|
|
33893
|
+
w: 1,
|
|
33894
|
+
h: 1
|
|
33895
|
+
});
|
|
33896
|
+
DEFAULT_DETAIL_CROP_CONVENTION.paddingRatio;
|
|
33815
33897
|
/**
|
|
33816
33898
|
* WHICH delivered frames the decode worker retains a native copy of.
|
|
33817
33899
|
*
|
|
@@ -7680,7 +7680,7 @@ var RecordingBandSchema = object({
|
|
|
7680
7680
|
postBufferSec: number().min(0).optional()
|
|
7681
7681
|
});
|
|
7682
7682
|
({
|
|
7683
|
-
preBufferSec:
|
|
7683
|
+
preBufferSec: 15,
|
|
7684
7684
|
postBufferSec: 30
|
|
7685
7685
|
}).postBufferSec * 1e3;
|
|
7686
7686
|
/**
|
|
@@ -13665,128 +13665,103 @@ var COCO_TO_MACRO = {
|
|
|
13665
13665
|
var AUDIO_MACRO_LABELS = [
|
|
13666
13666
|
{
|
|
13667
13667
|
id: "speech",
|
|
13668
|
-
name: "Speech"
|
|
13669
|
-
icon: "🗣️"
|
|
13668
|
+
name: "Speech"
|
|
13670
13669
|
},
|
|
13671
13670
|
{
|
|
13672
13671
|
id: "scream",
|
|
13673
|
-
name: "Scream / Shout"
|
|
13674
|
-
icon: "😱"
|
|
13672
|
+
name: "Scream / Shout"
|
|
13675
13673
|
},
|
|
13676
13674
|
{
|
|
13677
13675
|
id: "crying",
|
|
13678
|
-
name: "Crying / Baby"
|
|
13679
|
-
icon: "😢"
|
|
13676
|
+
name: "Crying / Baby"
|
|
13680
13677
|
},
|
|
13681
13678
|
{
|
|
13682
13679
|
id: "laughter",
|
|
13683
|
-
name: "Laughter"
|
|
13684
|
-
icon: "😂"
|
|
13680
|
+
name: "Laughter"
|
|
13685
13681
|
},
|
|
13686
13682
|
{
|
|
13687
13683
|
id: "music",
|
|
13688
|
-
name: "Music"
|
|
13689
|
-
icon: "🎵"
|
|
13684
|
+
name: "Music"
|
|
13690
13685
|
},
|
|
13691
13686
|
{
|
|
13692
13687
|
id: "dog",
|
|
13693
|
-
name: "Dog"
|
|
13694
|
-
icon: "🐕"
|
|
13688
|
+
name: "Dog"
|
|
13695
13689
|
},
|
|
13696
13690
|
{
|
|
13697
13691
|
id: "cat",
|
|
13698
|
-
name: "Cat"
|
|
13699
|
-
icon: "🐈"
|
|
13692
|
+
name: "Cat"
|
|
13700
13693
|
},
|
|
13701
13694
|
{
|
|
13702
13695
|
id: "bird",
|
|
13703
|
-
name: "Bird"
|
|
13704
|
-
icon: "🐦"
|
|
13696
|
+
name: "Bird"
|
|
13705
13697
|
},
|
|
13706
13698
|
{
|
|
13707
13699
|
id: "animal",
|
|
13708
|
-
name: "Animal (other)"
|
|
13709
|
-
icon: "🐾"
|
|
13700
|
+
name: "Animal (other)"
|
|
13710
13701
|
},
|
|
13711
13702
|
{
|
|
13712
13703
|
id: "alarm",
|
|
13713
|
-
name: "Alarm / Siren"
|
|
13714
|
-
icon: "🚨"
|
|
13704
|
+
name: "Alarm / Siren"
|
|
13715
13705
|
},
|
|
13716
13706
|
{
|
|
13717
13707
|
id: "doorbell",
|
|
13718
|
-
name: "Doorbell / Knock"
|
|
13719
|
-
icon: "🔔"
|
|
13708
|
+
name: "Doorbell / Knock"
|
|
13720
13709
|
},
|
|
13721
13710
|
{
|
|
13722
13711
|
id: "glass_breaking",
|
|
13723
|
-
name: "Glass Breaking"
|
|
13724
|
-
icon: "💥"
|
|
13712
|
+
name: "Glass Breaking"
|
|
13725
13713
|
},
|
|
13726
13714
|
{
|
|
13727
13715
|
id: "gunshot",
|
|
13728
|
-
name: "Gunshot / Explosion"
|
|
13729
|
-
icon: "💣"
|
|
13716
|
+
name: "Gunshot / Explosion"
|
|
13730
13717
|
},
|
|
13731
13718
|
{
|
|
13732
13719
|
id: "vehicle",
|
|
13733
|
-
name: "Vehicle"
|
|
13734
|
-
icon: "🚗"
|
|
13720
|
+
name: "Vehicle"
|
|
13735
13721
|
},
|
|
13736
13722
|
{
|
|
13737
13723
|
id: "siren",
|
|
13738
|
-
name: "Emergency Siren"
|
|
13739
|
-
icon: "🚑"
|
|
13724
|
+
name: "Emergency Siren"
|
|
13740
13725
|
},
|
|
13741
13726
|
{
|
|
13742
13727
|
id: "fire",
|
|
13743
|
-
name: "Fire / Smoke"
|
|
13744
|
-
icon: "🔥"
|
|
13728
|
+
name: "Fire / Smoke"
|
|
13745
13729
|
},
|
|
13746
13730
|
{
|
|
13747
13731
|
id: "water",
|
|
13748
|
-
name: "Water"
|
|
13749
|
-
icon: "💧"
|
|
13732
|
+
name: "Water"
|
|
13750
13733
|
},
|
|
13751
13734
|
{
|
|
13752
13735
|
id: "wind",
|
|
13753
|
-
name: "Wind / Weather"
|
|
13754
|
-
icon: "🌬️"
|
|
13736
|
+
name: "Wind / Weather"
|
|
13755
13737
|
},
|
|
13756
13738
|
{
|
|
13757
13739
|
id: "door",
|
|
13758
|
-
name: "Door"
|
|
13759
|
-
icon: "🚪"
|
|
13740
|
+
name: "Door"
|
|
13760
13741
|
},
|
|
13761
13742
|
{
|
|
13762
13743
|
id: "footsteps",
|
|
13763
|
-
name: "Footsteps"
|
|
13764
|
-
icon: "👣"
|
|
13744
|
+
name: "Footsteps"
|
|
13765
13745
|
},
|
|
13766
13746
|
{
|
|
13767
13747
|
id: "crowd",
|
|
13768
|
-
name: "Crowd / Chatter"
|
|
13769
|
-
icon: "👥"
|
|
13748
|
+
name: "Crowd / Chatter"
|
|
13770
13749
|
},
|
|
13771
13750
|
{
|
|
13772
13751
|
id: "telephone",
|
|
13773
|
-
name: "Telephone"
|
|
13774
|
-
icon: "📞"
|
|
13752
|
+
name: "Telephone"
|
|
13775
13753
|
},
|
|
13776
13754
|
{
|
|
13777
13755
|
id: "engine",
|
|
13778
|
-
name: "Engine / Motor"
|
|
13779
|
-
icon: "⚙️"
|
|
13756
|
+
name: "Engine / Motor"
|
|
13780
13757
|
},
|
|
13781
13758
|
{
|
|
13782
13759
|
id: "tools",
|
|
13783
|
-
name: "Tools / Construction"
|
|
13784
|
-
icon: "🔨"
|
|
13760
|
+
name: "Tools / Construction"
|
|
13785
13761
|
},
|
|
13786
13762
|
{
|
|
13787
13763
|
id: "silence",
|
|
13788
|
-
name: "Silence"
|
|
13789
|
-
icon: "🤫"
|
|
13764
|
+
name: "Silence"
|
|
13790
13765
|
}
|
|
13791
13766
|
];
|
|
13792
13767
|
var YAMNET_TO_MACRO = {
|
|
@@ -16250,7 +16225,7 @@ var TrackEnvelopeSchema = object({
|
|
|
16250
16225
|
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
16251
16226
|
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
16252
16227
|
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
16253
|
-
* zonesVisited, bestEventId, envelope, hasFace, hasRider) and returns `positions` /
|
|
16228
|
+
* zonesVisited, bestEventId, envelope, hasFace, hasEmbeddedFace, hasRider) and returns `positions` /
|
|
16254
16229
|
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
16255
16230
|
* `getTrack`. Mirrors the event-store `projection` convention
|
|
16256
16231
|
* (`getObjectEvents` et al.).
|
|
@@ -16545,6 +16520,35 @@ var TrackSchema = object({
|
|
|
16545
16520
|
*/
|
|
16546
16521
|
hasFace: boolean().optional(),
|
|
16547
16522
|
/**
|
|
16523
|
+
* This track has a face row IN THE GALLERY: a crop **and** an embedding — a
|
|
16524
|
+
* face an operator could ASSIGN to an identity.
|
|
16525
|
+
*
|
|
16526
|
+
* The STRICT twin of {@link hasFace}, and the pair only earns its keep
|
|
16527
|
+
* because the two disagree. `hasFace` is stamped at the TOP of the face
|
|
16528
|
+
* branch, before every gate, and means no more than "a face detector produced
|
|
16529
|
+
* a face detail". This one is stamped at the single moment the gallery row
|
|
16530
|
+
* LANDS — after `FaceRecognizer.onTrackEnd` successfully persists it, i.e.
|
|
16531
|
+
* past the embedding-magnitude verdict, the `minFacePx` detection gate, the
|
|
16532
|
+
* candidate gate, the imageless-track drop (no crop was ever captured) and
|
|
16533
|
+
* the crop-store drop. Everything between the detector and that insert can
|
|
16534
|
+
* legitimately refuse the face, so a flag written any earlier promises the
|
|
16535
|
+
* operator something to assign and delivers nothing.
|
|
16536
|
+
*
|
|
16537
|
+
* **Independent of recognition.** A face collected but never auto-matched is
|
|
16538
|
+
* still assignable — it is in fact the face an operator most wants to reach —
|
|
16539
|
+
* so this is NOT gated on `recognizedIdentityId`. Recognition lands in
|
|
16540
|
+
* `subLabel`; this says only that the raw material exists.
|
|
16541
|
+
*
|
|
16542
|
+
* **Set once, never cleared.** A track that produced a gallery row produced
|
|
16543
|
+
* one; deleting the row later is the gallery's business, not this flag's.
|
|
16544
|
+
*
|
|
16545
|
+
* **Absent ≠ false**, the same rule as {@link hasFace}: every row written
|
|
16546
|
+
* before the column omits it, and so does every server that predates the
|
|
16547
|
+
* field. A consumer must test `=== true` and render nothing otherwise —
|
|
16548
|
+
* never infer "no assignable face".
|
|
16549
|
+
*/
|
|
16550
|
+
hasEmbeddedFace: boolean().optional(),
|
|
16551
|
+
/**
|
|
16548
16552
|
* This subject CONTAINS a folded rider — a person the rider-pairing step
|
|
16549
16553
|
* ([D34](../decisions/adr-0034.md)) removed from the frame BEFORE the tracker,
|
|
16550
16554
|
* so the passage is tracked once and as a VEHICLE.
|
|
@@ -17894,6 +17898,32 @@ var DetailResultSchema = object({
|
|
|
17894
17898
|
/** FRAME-space bbox (already mapped back from crop space). */
|
|
17895
17899
|
bbox: NativeCropBboxSchema.optional(),
|
|
17896
17900
|
embedding: string().optional(),
|
|
17901
|
+
/**
|
|
17902
|
+
* L2 magnitude of the RAW pre-normalization embedding. Additive and optional
|
|
17903
|
+
* so an older runner that does not send it degrades to "unmeasurable", which
|
|
17904
|
+
* the consuming gate treats as accept — never as reject.
|
|
17905
|
+
*/
|
|
17906
|
+
embeddingMagnitude: number().optional(),
|
|
17907
|
+
/**
|
|
17908
|
+
* Model that produced `embedding` — the SAME contract `labelModelId` has for
|
|
17909
|
+
* `label`, and for the same reason: the producing node is the only side that
|
|
17910
|
+
* knows which model actually ran, and re-deriving it downstream is exactly
|
|
17911
|
+
* the inference this model exists to forbid.
|
|
17912
|
+
*
|
|
17913
|
+
* Additive and optional, so a runner that predates it degrades to
|
|
17914
|
+
* "unmeasurable" rather than to a wrong answer — the consumer falls back to
|
|
17915
|
+
* its previous assumption instead of refusing.
|
|
17916
|
+
*
|
|
17917
|
+
* Its absence was not cosmetic. `FaceRecognizer` needs the probe's model id
|
|
17918
|
+
* to use `face-matcher`'s same-model gate (`sample.modelId !== probe.modelId`);
|
|
17919
|
+
* with nothing on the wire it took the id from the GALLERY, so the gate
|
|
17920
|
+
* compared the gallery against itself and could never fire. That turned the
|
|
17921
|
+
* one guard protecting the face feature space into a tautology, and it is
|
|
17922
|
+
* why swapping `face-embedding`'s model would NOT have stranded the enrolled
|
|
17923
|
+
* gallery as the catalog comment predicts — it would have scored the new
|
|
17924
|
+
* model's vectors against the old model's samples in one cosine space.
|
|
17925
|
+
*/
|
|
17926
|
+
embeddingModelId: string().optional(),
|
|
17897
17927
|
label: string().optional(),
|
|
17898
17928
|
/**
|
|
17899
17929
|
* The tier `label` occupies, copied VERBATIM from the producing step's
|
|
@@ -19304,6 +19334,7 @@ DeviceType.Camera, method(object({
|
|
|
19304
19334
|
isBattery: boolean(),
|
|
19305
19335
|
reason: _enum([
|
|
19306
19336
|
"disabled",
|
|
19337
|
+
"offline",
|
|
19307
19338
|
"sleeping",
|
|
19308
19339
|
"unreachable",
|
|
19309
19340
|
"waking"
|
|
@@ -19349,9 +19380,17 @@ targets: array(object({
|
|
|
19349
19380
|
sleeping: boolean(),
|
|
19350
19381
|
/** Current device state rendered over the cached frame. State images
|
|
19351
19382
|
* remain authoritative even when their photographic background is
|
|
19352
|
-
* old; null means the link must carry a current camera frame.
|
|
19383
|
+
* old; null means the link must carry a current camera frame.
|
|
19384
|
+
*
|
|
19385
|
+
* **This is the ONLY source a surface may derive an inactive tile
|
|
19386
|
+
* from.** A client that reads a device's `online`/`disabled` flags and
|
|
19387
|
+
* draws its own verdict will disagree with the pixels it is painting
|
|
19388
|
+
* — the frame comes from here, and so must the sentence over it
|
|
19389
|
+
* (D190). Pair with `ageMs` for the age of the photograph behind the
|
|
19390
|
+
* state. */
|
|
19353
19391
|
stateReason: _enum([
|
|
19354
19392
|
"disabled",
|
|
19393
|
+
"offline",
|
|
19355
19394
|
"sleeping",
|
|
19356
19395
|
"unreachable",
|
|
19357
19396
|
"waking"
|
|
@@ -33554,7 +33593,6 @@ var NC_AUDIO_DEFAULTS = {
|
|
|
33554
33593
|
hitPercent: 60,
|
|
33555
33594
|
samplingSeconds: 10
|
|
33556
33595
|
};
|
|
33557
|
-
new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
|
|
33558
33596
|
new Set(["devices", "classes"]);
|
|
33559
33597
|
NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
|
|
33560
33598
|
/**
|
|
@@ -33788,6 +33826,39 @@ TimelapseRuleInputSchema.extend({
|
|
|
33788
33826
|
createdAt: number(),
|
|
33789
33827
|
updatedAt: number()
|
|
33790
33828
|
});
|
|
33829
|
+
Object.freeze(Object.fromEntries([{
|
|
33830
|
+
stepId: "face-embedding",
|
|
33831
|
+
label: "Face recognition model",
|
|
33832
|
+
defaultModelId: "arcface-r100",
|
|
33833
|
+
indexName: "the enrolled face gallery",
|
|
33834
|
+
options: [
|
|
33835
|
+
{
|
|
33836
|
+
id: "arcface-r100",
|
|
33837
|
+
label: "ArcFace (ResNet34)"
|
|
33838
|
+
},
|
|
33839
|
+
{
|
|
33840
|
+
id: "auraface-r100",
|
|
33841
|
+
label: "AuraFace R100"
|
|
33842
|
+
},
|
|
33843
|
+
{
|
|
33844
|
+
id: "inception-resnet-v1",
|
|
33845
|
+
label: "Inception ResNet V1"
|
|
33846
|
+
}
|
|
33847
|
+
]
|
|
33848
|
+
}, {
|
|
33849
|
+
stepId: "clip-embedding",
|
|
33850
|
+
label: "Semantic search model",
|
|
33851
|
+
defaultModelId: "mobileclip-s1",
|
|
33852
|
+
indexName: "the object semantic-search index",
|
|
33853
|
+
options: [{
|
|
33854
|
+
id: "mobileclip-s1",
|
|
33855
|
+
label: "MobileCLIP S1"
|
|
33856
|
+
}, {
|
|
33857
|
+
id: "mobileclip-s2",
|
|
33858
|
+
label: "MobileCLIP S2"
|
|
33859
|
+
}]
|
|
33860
|
+
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
33861
|
+
string().min(1);
|
|
33791
33862
|
object({
|
|
33792
33863
|
/**
|
|
33793
33864
|
* Fraction of the box's own size added on EACH side before cutting.
|
|
@@ -33808,10 +33879,21 @@ object({
|
|
|
33808
33879
|
*/
|
|
33809
33880
|
square: boolean()
|
|
33810
33881
|
});
|
|
33811
|
-
|
|
33882
|
+
/**
|
|
33883
|
+
* The convention in force when nobody has configured one — byte-for-byte the
|
|
33884
|
+
* behaviour of the pre-unification LIVE path (`DETAIL_CROP_PADDING_RATIO`).
|
|
33885
|
+
*/
|
|
33886
|
+
var DEFAULT_DETAIL_CROP_CONVENTION = {
|
|
33812
33887
|
paddingRatio: .15,
|
|
33813
33888
|
square: false
|
|
33814
|
-
}
|
|
33889
|
+
};
|
|
33890
|
+
Object.freeze({
|
|
33891
|
+
x: 0,
|
|
33892
|
+
y: 0,
|
|
33893
|
+
w: 1,
|
|
33894
|
+
h: 1
|
|
33895
|
+
});
|
|
33896
|
+
DEFAULT_DETAIL_CROP_CONVENTION.paddingRatio;
|
|
33815
33897
|
/**
|
|
33816
33898
|
* WHICH delivered frames the decode worker retains a native copy of.
|
|
33817
33899
|
*
|
|
@@ -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-D3OyX5g7.js");
|
|
7
7
|
//#region src/magic-link/auth-magic-link.addon.ts
|
|
8
8
|
/**
|
|
9
9
|
* Magic-link authentication addon.
|
|
@@ -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-C50pLI-l.mjs";
|
|
2
2
|
//#region src/magic-link/auth-magic-link.addon.ts
|
|
3
3
|
/**
|
|
4
4
|
* Magic-link authentication addon.
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
6
|
+
const require_dist = require("../dist-D3OyX5g7.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
8
|
node_crypto = require_chunk.__toESM(node_crypto);
|
|
9
9
|
//#region node_modules/jose/dist/webapi/lib/buffer_utils.js
|
|
@@ -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-C50pLI-l.mjs";
|
|
2
2
|
import * as crypto$1 from "node:crypto";
|
|
3
3
|
//#region node_modules/jose/dist/webapi/lib/buffer_utils.js
|
|
4
4
|
var encoder = new TextEncoder();
|
|
@@ -3,7 +3,7 @@ import "./dist-CYZr2fwk.mjs";
|
|
|
3
3
|
var e = {
|
|
4
4
|
"@camstack/sdk": {
|
|
5
5
|
name: "@camstack/sdk",
|
|
6
|
-
version: "1.2.
|
|
6
|
+
version: "1.2.26",
|
|
7
7
|
scope: ["default"],
|
|
8
8
|
loaded: !1,
|
|
9
9
|
from: "addon_auth_webauthn_widgets",
|
|
@@ -18,7 +18,7 @@ var e = {
|
|
|
18
18
|
},
|
|
19
19
|
"@camstack/types": {
|
|
20
20
|
name: "@camstack/types",
|
|
21
|
-
version: "1.2.
|
|
21
|
+
version: "1.2.94",
|
|
22
22
|
scope: ["default"],
|
|
23
23
|
loaded: !1,
|
|
24
24
|
from: "addon_auth_webauthn_widgets",
|
|
@@ -33,7 +33,7 @@ var e = {
|
|
|
33
33
|
},
|
|
34
34
|
"@camstack/ui-library": {
|
|
35
35
|
name: "@camstack/ui-library",
|
|
36
|
-
version: "1.2.
|
|
36
|
+
version: "1.2.64",
|
|
37
37
|
scope: ["default"],
|
|
38
38
|
loaded: !1,
|
|
39
39
|
from: "addon_auth_webauthn_widgets",
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
6
|
+
const require_dist = require("../dist-D3OyX5g7.js");
|
|
7
7
|
let stream = require("stream");
|
|
8
8
|
stream = require_chunk.__toESM(stream, 1);
|
|
9
9
|
let http = require("http");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as loginMethodCapability, c as BaseAddon, d as number, f as object, l as array, n as addonWidgetsSourceCapability, o as userPasskeysCapability, p as string, u as boolean } from "../dist-
|
|
1
|
+
import { a as loginMethodCapability, c as BaseAddon, d as number, f as object, l as array, n as addonWidgetsSourceCapability, o as userPasskeysCapability, p as string, u as boolean } from "../dist-C50pLI-l.mjs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import Stream from "stream";
|
|
4
4
|
import http from "http";
|
|
@@ -36,7 +36,7 @@ async function r() {
|
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
"@camstack/types": {
|
|
39
|
-
version: "1.2.
|
|
39
|
+
version: "1.2.94",
|
|
40
40
|
scope: "default",
|
|
41
41
|
shareConfig: {
|
|
42
42
|
singleton: !0,
|
|
@@ -45,7 +45,7 @@ async function r() {
|
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
"@camstack/sdk": {
|
|
48
|
-
version: "1.2.
|
|
48
|
+
version: "1.2.26",
|
|
49
49
|
scope: "default",
|
|
50
50
|
shareConfig: {
|
|
51
51
|
singleton: !0,
|
|
@@ -81,7 +81,7 @@ async function r() {
|
|
|
81
81
|
}
|
|
82
82
|
},
|
|
83
83
|
"@camstack/ui-library": {
|
|
84
|
-
version: "1.2.
|
|
84
|
+
version: "1.2.64",
|
|
85
85
|
scope: "default",
|
|
86
86
|
shareConfig: {
|
|
87
87
|
singleton: !0,
|
|
@@ -30,7 +30,7 @@ async function d(e) {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
async function f() {
|
|
33
|
-
return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_auth_webauthn_widgets-
|
|
33
|
+
return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_auth_webauthn_widgets-DdcGPUS2.mjs")).catch((e) => {
|
|
34
34
|
throw l = void 0, e;
|
|
35
35
|
}), l;
|
|
36
36
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-auth",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.27",
|
|
4
4
|
"description": "Authentication bundle — magic-link, OIDC, and WebAuthn/passkey. Multi-entry npm package shipping 3 addons under a single bundle; each addon keeps its own id, capabilities, and runner.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|