@camstack/addon-auth 1.2.127 → 1.2.128

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10577,57 +10577,15 @@ 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 = [
10580
+ /** Steps whose effect a root label can BE. */
10581
+ var LABEL_SUPPLY_STEP_IDS = [
10627
10582
  "animal-classifier",
10628
10583
  "vehicle-classifier",
10629
10584
  "package-detection"
10630
10585
  ];
10586
+ /** Steps whose box a root detection can BE. */
10587
+ var CROP_SUPPLY_STEP_IDS = ["plate-detection", "face-detection"];
10588
+ [...LABEL_SUPPLY_STEP_IDS, ...CROP_SUPPLY_STEP_IDS];
10631
10589
  var MODEL_FORMATS = [
10632
10590
  "onnx",
10633
10591
  "coreml",
@@ -10760,12 +10718,35 @@ var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { wei
10760
10718
  /** True when the weights or their data forbid commercial use. */
10761
10719
  nonCommercial: boolean().optional()
10762
10720
  }));
10763
- /** One `fillsClassifierEffects` entry — see `ModelCatalogEntry.fillsClassifierEffects`. */
10764
- var FillsClassifierEffectSchema = object({
10765
- stepId: _enum(FILLABLE_STEP_IDS),
10721
+ /**
10722
+ * One step a ROOT detector can supply from its own output (D730) — see
10723
+ * `ModelCatalogEntry.suppliesSteps`.
10724
+ *
10725
+ * - `label`: the root's raw class IS the step's answer. `labelToEffect` maps
10726
+ * the root's label to the step's vocabulary; `uncovered` is the vocabulary
10727
+ * the root cannot produce (shown as unavailable, never a blocker).
10728
+ * - `crop`: the root draws the box the step would have found (`license_plate`
10729
+ * for plate-detection, `face` for face-detection). The box becomes a detail
10730
+ * child of the `parentMacro` detection that contains it — never a track.
10731
+ */
10732
+ var RootStepSupplySchema = discriminatedUnion("kind", [object({
10733
+ kind: literal("label"),
10734
+ stepId: _enum(LABEL_SUPPLY_STEP_IDS),
10766
10735
  labelToEffect: record(string(), string()),
10767
10736
  uncovered: array(string()).readonly()
10768
- });
10737
+ }), object({
10738
+ kind: literal("crop"),
10739
+ stepId: _enum(CROP_SUPPLY_STEP_IDS),
10740
+ rootLabels: array(string()).readonly(),
10741
+ parentMacro: _enum(["vehicle", "person"]),
10742
+ childClass: _enum(["plate", "face"]),
10743
+ /**
10744
+ * The root's smaller input side, stamped on read by `rootSuppliesOf` from
10745
+ * the model entry — what a step's `minRootInputPx` gate judges. Never
10746
+ * stored by an import.
10747
+ */
10748
+ rootInputPx: number().int().positive().optional()
10749
+ })]);
10769
10750
  var ModelCatalogEntrySchema = object({
10770
10751
  id: string(),
10771
10752
  name: string(),
@@ -10892,15 +10873,15 @@ var ModelCatalogEntrySchema = object({
10892
10873
  */
10893
10874
  classMap: DetectionCatalogClassMapSchema.optional(),
10894
10875
  /**
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`).
10876
+ * The pipeline steps this ROOT detector can supply from its own output
10877
+ * (D730): its labels name a step's effect (`deer` for `animal-classifier`)
10878
+ * or draw a step's box (`license_plate` for `plate-detection`). Computed at
10879
+ * import from THIS model's labelmap by `deriveRootSupplies`, never written
10880
+ * by hand and never assumed per family; a row without it is derived on read
10881
+ * (`rootSuppliesOf`). Whether a camera uses it is the step's own
10882
+ * `useRootModel` flag (`resolveRootSupply`).
10902
10883
  */
10903
- fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional(),
10884
+ suppliesSteps: array(RootStepSupplySchema).readonly().optional(),
10904
10885
  /**
10905
10886
  * The model's CLIP feature-space contract (text encoder, dimension, vector
10906
10887
  * index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
@@ -17881,6 +17862,51 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
17881
17862
  kind: "mutation",
17882
17863
  auth: "admin"
17883
17864
  });
17865
+ new Set([
17866
+ {
17867
+ id: "person",
17868
+ name: "Person"
17869
+ },
17870
+ {
17871
+ id: "vehicle",
17872
+ name: "Vehicle"
17873
+ },
17874
+ {
17875
+ id: "animal",
17876
+ name: "Animal"
17877
+ },
17878
+ {
17879
+ id: "package",
17880
+ name: "Package"
17881
+ }
17882
+ ].map((l) => l.id));
17883
+ var COCO_TO_MACRO = {
17884
+ mapping: {
17885
+ person: "person",
17886
+ bicycle: "vehicle",
17887
+ car: "vehicle",
17888
+ motorcycle: "vehicle",
17889
+ airplane: "vehicle",
17890
+ bus: "vehicle",
17891
+ train: "vehicle",
17892
+ truck: "vehicle",
17893
+ boat: "vehicle",
17894
+ bird: "animal",
17895
+ cat: "animal",
17896
+ dog: "animal",
17897
+ horse: "animal",
17898
+ sheep: "animal",
17899
+ cow: "animal",
17900
+ elephant: "animal",
17901
+ bear: "animal",
17902
+ zebra: "animal",
17903
+ giraffe: "animal",
17904
+ suitcase: "package",
17905
+ backpack: "package",
17906
+ handbag: "package"
17907
+ },
17908
+ preserveOriginal: false
17909
+ };
17884
17910
  var AUDIO_MACRO_LABELS = [
17885
17911
  {
17886
17912
  id: "speech",
@@ -18638,6 +18664,8 @@ var NcSystemEventKindSchema = _enum([
18638
18664
  "stream-offline",
18639
18665
  "node-online",
18640
18666
  "node-offline",
18667
+ "node-restarting",
18668
+ "node-updating",
18641
18669
  "node-inference-unavailable",
18642
18670
  "detection-blind",
18643
18671
  "addon-crash-loop",
@@ -23155,6 +23183,34 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
23155
23183
  timestamp: number()
23156
23184
  });
23157
23185
  /**
23186
+ * A root model's boxes standing in for one crop-kind step's own inference
23187
+ * (D730) — see `runPipeline.suppliedRoot`.
23188
+ */
23189
+ var SuppliedRootOutputSchema = object({
23190
+ stepId: string(),
23191
+ /** The root model that drew the boxes — stamped on the result. */
23192
+ modelId: string(),
23193
+ detections: array(object({
23194
+ /** `[x1, y1, x2, y2]` in the pixels of the call's image. */
23195
+ bbox: tuple([
23196
+ number(),
23197
+ number(),
23198
+ number(),
23199
+ number()
23200
+ ]),
23201
+ score: number(),
23202
+ /**
23203
+ * Five facial landmarks in the same pixels — a face the step's own
23204
+ * detector already re-found inside a root face box (D730), so its
23205
+ * embedder child aligns it exactly as it aligns any detected face.
23206
+ */
23207
+ landmarks: array(object({
23208
+ x: number(),
23209
+ y: number()
23210
+ })).optional()
23211
+ })).min(1)
23212
+ });
23213
+ /**
23158
23214
  * Reference to the frame's retained NATIVE surface + the parent crop's placement
23159
23215
  * within the frame, so the executor can re-cut a leaf child ROI at native
23160
23216
  * resolution on the detail plane. See the `runPipeline` `nativeCropRef` field.
@@ -23285,7 +23341,7 @@ var PipelineModelOptionSchema = object({
23285
23341
  legacy: boolean().optional(),
23286
23342
  provider: ModelProviderIdSchema.optional(),
23287
23343
  defaultConfidence: number().optional(),
23288
- fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional()
23344
+ suppliesSteps: array(RootStepSupplySchema).readonly().optional()
23289
23345
  });
23290
23346
  var ConfigFieldBridge = custom();
23291
23347
  var PipelineAddonSchemaSchema = object({
@@ -23553,7 +23609,16 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
23553
23609
  * `device-not-servable`), and nothing reaches the camera's live
23554
23610
  * trace stream. Absent ⇒ unchanged behaviour.
23555
23611
  */
23556
- replay: literal(true).optional()
23612
+ replay: literal(true).optional(),
23613
+ /**
23614
+ * Root-supplied detections for the tree's ROOT step (D730). Set by
23615
+ * `runDetailSubtree` when the camera's root model supplies a crop-kind
23616
+ * step (a Frigate+ `license_plate` for `plate-detection`): the step is
23617
+ * NOT inferred, these boxes are its output, and its children (the plate
23618
+ * reader) run on them through their own crop policy. Boxes are in the
23619
+ * PIXELS of the image this call carries. Absent ⇒ the root step runs.
23620
+ */
23621
+ suppliedRoot: SuppliedRootOutputSchema.optional()
23557
23622
  }), PipelineRunResultBridge, { kind: "mutation" }), method(object({
23558
23623
  steps: array(PipelineStepInputSchema).min(1),
23559
23624
  frames: array(FrameInputSchema).min(1).max(255),
@@ -24655,7 +24720,22 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
24655
24720
  */
24656
24721
  cropJpeg: string().optional(),
24657
24722
  parent: DetailParentSchema,
24658
- steps: array(string()).optional()
24723
+ steps: array(string()).optional(),
24724
+ /**
24725
+ * The camera's root model already drew this step's boxes (D730): a
24726
+ * `license_plate` inside the parent vehicle. The named step is NOT
24727
+ * inferred — these FRAME-space boxes are its output — and its
24728
+ * requested children (the plate reader) run on them. Absent ⇒ every
24729
+ * requested step infers as before.
24730
+ */
24731
+ supplied: object({
24732
+ stepId: string(),
24733
+ modelId: string(),
24734
+ boxes: array(object({
24735
+ bbox: NativeCropBboxSchema,
24736
+ score: number()
24737
+ })).min(1)
24738
+ }).optional()
24659
24739
  }), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" }), method(object({
24660
24740
  /** Catalog step id, e.g. `clip-embedding`. */
24661
24741
  stepId: string(),
@@ -30768,6 +30848,27 @@ var ViewerEndpointsSchema = object({
30768
30848
  /** What the ranking currently resolves to (may be empty if nothing is up). */
30769
30849
  resolved: array(string()).readonly()
30770
30850
  });
30851
+ /**
30852
+ * One audience's hub address (see `hub-address.ts`): the operator's stored
30853
+ * override, the address in use, and where it came from.
30854
+ */
30855
+ var HubAddressSnapshotSchema = object({
30856
+ /** The operator's override, or null for automatic. */
30857
+ override: string().nullable(),
30858
+ /** The address in use, or null when nothing qualifies (never loopback). */
30859
+ resolved: string().nullable(),
30860
+ source: _enum([
30861
+ "override",
30862
+ "auto",
30863
+ "none"
30864
+ ])
30865
+ });
30866
+ var HubAddressesSchema = object({
30867
+ /** "Hub address for agents" — agents' bundle/model pulls, LAN devices. */
30868
+ cluster: HubAddressSnapshotSchema,
30869
+ /** "Public address for sign-in links" — e-mail links, OIDC, WebAuthn, OAuth2. */
30870
+ browser: HubAddressSnapshotSchema
30871
+ });
30771
30872
  var AllowedAddressesSchema = object({
30772
30873
  /**
30773
30874
  * Allowlist of interface addresses operators have explicitly opted
@@ -30814,7 +30915,13 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
30814
30915
  * an address notification links can be flagged with, not a hub
30815
30916
  * route. Default `false`: racers and rankers never see it. */
30816
30917
  includeAppLink: boolean().optional()
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, {
30918
+ }), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }), method(_void(), HubAddressesSchema), method(object({
30919
+ audience: _enum(["cluster", "browser"]),
30920
+ baseUrl: string().nullable()
30921
+ }), HubAddressesSchema, {
30922
+ kind: "mutation",
30923
+ auth: "admin"
30924
+ }), 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, {
30818
30925
  kind: "mutation",
30819
30926
  auth: "admin"
30820
30927
  }), method(object({
@@ -31204,7 +31311,8 @@ object({
31204
31311
  * writes this slice (not even a boot seed), and neither does the runner's
31205
31312
  * phase machine: its phase is "a session is attached" for every on-motion
31206
31313
  * session, not motion, and it now has its own `DetectionPhaseTransition`.
31207
- * A provider's `isDetected` answers from the hub's slice.
31314
+ * A provider's `isDetected` and `getStatus` answer from the hub's slice
31315
+ * (`hubMotionNativeProvider`).
31208
31316
  * - **Sensors** (Home Assistant binary sensors, Homematic, Matter, Alexa
31209
31317
  * imports) — the provider pushes both edges itself, from the upstream
31210
31318
  * system's own state change. That is the sensor's own fact.
@@ -39281,6 +39389,12 @@ Object.freeze({
39281
39389
  addonId: null,
39282
39390
  access: "view"
39283
39391
  },
39392
+ "localNetwork.getHubAddresses": {
39393
+ capName: "local-network",
39394
+ capScope: "system",
39395
+ addonId: null,
39396
+ access: "view"
39397
+ },
39284
39398
  "localNetwork.getNotificationEndpoint": {
39285
39399
  capName: "local-network",
39286
39400
  capScope: "system",
@@ -39335,6 +39449,12 @@ Object.freeze({
39335
39449
  addonId: null,
39336
39450
  access: "create"
39337
39451
  },
39452
+ "localNetwork.setHubAddress": {
39453
+ capName: "local-network",
39454
+ capScope: "system",
39455
+ addonId: null,
39456
+ access: "create"
39457
+ },
39338
39458
  "localNetwork.setNotificationEndpoint": {
39339
39459
  capName: "local-network",
39340
39460
  capScope: "system",
@@ -47734,6 +47854,8 @@ new Map(Object.entries({
47734
47854
  "detection-blind": "device-events",
47735
47855
  "node-online": "system",
47736
47856
  "node-offline": "system",
47857
+ "node-restarting": "system",
47858
+ "node-updating": "system",
47737
47859
  "node-inference-unavailable": "system",
47738
47860
  "addon-crash-loop": "system",
47739
47861
  "addon-update-available": "system",
@@ -47811,6 +47933,7 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
47811
47933
  kinds: [
47812
47934
  "node-offline",
47813
47935
  "node-online",
47936
+ "node-restarting",
47814
47937
  "node-inference-unavailable"
47815
47938
  ]
47816
47939
  },
@@ -47832,6 +47955,7 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
47832
47955
  label: "Server & container updates",
47833
47956
  kinds: [
47834
47957
  "server-update-available",
47958
+ "node-updating",
47835
47959
  "server-updated",
47836
47960
  "wrapper-update-available"
47837
47961
  ]
@@ -47979,6 +48103,7 @@ var STATE_SUMMARY_SECTION_VARS = [
47979
48103
  kinds: [
47980
48104
  "node-offline",
47981
48105
  "node-online",
48106
+ "node-restarting",
47982
48107
  "node-inference-unavailable"
47983
48108
  ]
47984
48109
  },
@@ -48000,6 +48125,7 @@ var STATE_SUMMARY_SECTION_VARS = [
48000
48125
  example: "server 1.2.377 → 1.2.378",
48001
48126
  kinds: [
48002
48127
  "server-update-available",
48128
+ "node-updating",
48003
48129
  "server-updated",
48004
48130
  "wrapper-update-available"
48005
48131
  ]
@@ -48032,7 +48158,7 @@ var STATE_SUMMARY_VARS = [
48032
48158
  {
48033
48159
  name: "summarySection",
48034
48160
  label: "Summary: this section",
48035
- description: "The section a per-section summary row is about (D698); on a summary sent as one message, every section it reports, comma-separated.",
48161
+ description: "The section a per-section summary row is about; on a summary sent as one message, every section it reports, comma-separated.",
48036
48162
  example: "Batterie scariche",
48037
48163
  group: "system",
48038
48164
  families: ["rule"],
@@ -48639,4 +48765,14 @@ DEFAULT_NATIVE_LEASE_SETTINGS.admission;
48639
48765
  var MB = 1024 * 1024;
48640
48766
  1024 * MB, 3072 * MB;
48641
48767
  //#endregion
48642
- export { loginMethodCapability as a, BaseAddon as c, number as d, object as f, buildAddonRouteProvider as i, array as l, addonWidgetsSourceCapability as n, userPasskeysCapability as o, string as p, authProviderCapability as r, errMsg as s, addonRoutesCapability as t, boolean as u };
48768
+ //#region src/hub-browser-origin.ts
48769
+ async function hubBrowserOrigin(localNetwork, logger) {
48770
+ try {
48771
+ return (await localNetwork.getHubAddresses.query()).browser.resolved;
48772
+ } catch (err) {
48773
+ logger.warn("hub address unavailable from local-network — using the localhost default", { meta: { error: err instanceof Error ? err.message : String(err) } });
48774
+ return null;
48775
+ }
48776
+ }
48777
+ //#endregion
48778
+ export { buildAddonRouteProvider as a, errMsg as c, boolean as d, number as f, authProviderCapability as i, BaseAddon as l, string as m, addonRoutesCapability as n, loginMethodCapability as o, object as p, addonWidgetsSourceCapability as r, userPasskeysCapability as s, hubBrowserOrigin as t, array as u };