@camstack/addon-osd-manager 0.1.171 → 0.1.173

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.
Files changed (18) hide show
  1. package/dist/{MotionZonesSettings-CCNLHmnl.mjs → MotionZonesSettings-Defmk1_y.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-CUsqDja_.mjs → PrivacyMaskSettings-BvoZqvLa.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-C8o2i3G6.mjs → SceneMonitorEditor-BpGYI0fJ.mjs} +3 -3
  4. package/dist/_stub.js +11 -11
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-Cf3xN1-E.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-CDfzrXpG.mjs} +4 -4
  6. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BS5tM9oN.mjs +26 -0
  7. package/dist/{hostInit-C1oxS9dH.mjs → hostInit-kFlrSCmy.mjs} +3 -3
  8. package/dist/index.js +170 -79
  9. package/dist/index.mjs +170 -79
  10. package/dist/{player-overlays-Bwe6_9ow.mjs → player-overlays-DyRrf3TB.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-eWIsQGEg.mjs → responsive-DN_ft4Sw.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-BDpWrVsR.mjs → scene-monitor-copy-oZ4tEpuB.mjs} +1 -1
  14. package/dist/{square-CzU7Lokp.mjs → square-DDimePix.mjs} +1 -1
  15. package/dist/{trash-2-DLk6p3tf.mjs → trash-2-BA-4lwFu.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-D-Cxu36Z.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-BOqFnQMX.mjs} +1 -1
  17. package/package.json +1 -1
  18. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Bszex2Bz.mjs +0 -26
package/dist/index.js CHANGED
@@ -10566,6 +10566,57 @@ var ClipSearchStrictnessSchema = _enum([
10566
10566
  "balanced",
10567
10567
  "strict"
10568
10568
  ]);
10569
+ new Set([
10570
+ {
10571
+ id: "person",
10572
+ name: "Person"
10573
+ },
10574
+ {
10575
+ id: "vehicle",
10576
+ name: "Vehicle"
10577
+ },
10578
+ {
10579
+ id: "animal",
10580
+ name: "Animal"
10581
+ },
10582
+ {
10583
+ id: "package",
10584
+ name: "Package"
10585
+ }
10586
+ ].map((l) => l.id));
10587
+ var COCO_TO_MACRO = {
10588
+ mapping: {
10589
+ person: "person",
10590
+ bicycle: "vehicle",
10591
+ car: "vehicle",
10592
+ motorcycle: "vehicle",
10593
+ airplane: "vehicle",
10594
+ bus: "vehicle",
10595
+ train: "vehicle",
10596
+ truck: "vehicle",
10597
+ boat: "vehicle",
10598
+ bird: "animal",
10599
+ cat: "animal",
10600
+ dog: "animal",
10601
+ horse: "animal",
10602
+ sheep: "animal",
10603
+ cow: "animal",
10604
+ elephant: "animal",
10605
+ bear: "animal",
10606
+ zebra: "animal",
10607
+ giraffe: "animal",
10608
+ suitcase: "package",
10609
+ backpack: "package",
10610
+ handbag: "package"
10611
+ },
10612
+ preserveOriginal: false
10613
+ };
10614
+ /** Steps a root detector may declare it fills. */
10615
+ var FILLABLE_STEP_IDS = [
10616
+ "animal-classifier",
10617
+ "vehicle-classifier",
10618
+ "package-detection"
10619
+ ];
10569
10620
  var MODEL_FORMATS = [
10570
10621
  "onnx",
10571
10622
  "coreml",
@@ -10698,6 +10749,12 @@ var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { wei
10698
10749
  /** True when the weights or their data forbid commercial use. */
10699
10750
  nonCommercial: boolean().optional()
10700
10751
  }));
10752
+ /** One `fillsClassifierEffects` entry — see `ModelCatalogEntry.fillsClassifierEffects`. */
10753
+ var FillsClassifierEffectSchema = object({
10754
+ stepId: _enum(FILLABLE_STEP_IDS),
10755
+ labelToEffect: record(string(), string()),
10756
+ uncovered: array(string()).readonly()
10757
+ });
10701
10758
  var ModelCatalogEntrySchema = object({
10702
10759
  id: string(),
10703
10760
  name: string(),
@@ -10824,6 +10881,16 @@ var ModelCatalogEntrySchema = object({
10824
10881
  */
10825
10882
  classMap: DetectionCatalogClassMapSchema.optional(),
10826
10883
  /**
10884
+ * The pipeline steps this ROOT detector already does the work of (D715):
10885
+ * its labels name the effect the step exists to produce (`deer` for
10886
+ * `animal-classifier`, `package` for `package-detection`). Derived from the
10887
+ * labelmap by `deriveClassifierFills`, never hand-written; a COCO model
10888
+ * declares none. Whether a declaration is honoured is the step's own
10889
+ * `labelLink` policy (`resolveLabelLink`). `labelToEffect` values are in
10890
+ * `FILLABLE_STEP_VOCABULARIES` (guard `check-label-link-vocabulary`).
10891
+ */
10892
+ fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional(),
10893
+ /**
10827
10894
  * The model's CLIP feature-space contract (text encoder, dimension, vector
10828
10895
  * index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
10829
10896
  * CLIP image encoder; its absence is what "not a CLIP model" means to the
@@ -15482,7 +15549,7 @@ var detectionPipelineCapability = {
15482
15549
  * This matters here more than anywhere else in the repo, because every provider
15483
15550
  * that knows a device's host knows its PASSWORD too: `{ host, port, username,
15484
15551
  * password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
15485
- * and `http://admin:hunter2@192.168.x.x/` is a URL a browser accepts. The
15552
+ * and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
15486
15553
  * camera's own page will ask for its own login. That is correct, and pre-
15487
15554
  * filling it is the operator's business, not ours.
15488
15555
  *
@@ -20410,51 +20477,6 @@ var notificationOutputCapability = {
20410
20477
  })
20411
20478
  }
20412
20479
  };
20413
- new Set([
20414
- {
20415
- id: "person",
20416
- name: "Person"
20417
- },
20418
- {
20419
- id: "vehicle",
20420
- name: "Vehicle"
20421
- },
20422
- {
20423
- id: "animal",
20424
- name: "Animal"
20425
- },
20426
- {
20427
- id: "package",
20428
- name: "Package"
20429
- }
20430
- ].map((l) => l.id));
20431
- var COCO_TO_MACRO = {
20432
- mapping: {
20433
- person: "person",
20434
- bicycle: "vehicle",
20435
- car: "vehicle",
20436
- motorcycle: "vehicle",
20437
- airplane: "vehicle",
20438
- bus: "vehicle",
20439
- train: "vehicle",
20440
- truck: "vehicle",
20441
- boat: "vehicle",
20442
- bird: "animal",
20443
- cat: "animal",
20444
- dog: "animal",
20445
- horse: "animal",
20446
- sheep: "animal",
20447
- cow: "animal",
20448
- elephant: "animal",
20449
- bear: "animal",
20450
- zebra: "animal",
20451
- giraffe: "animal",
20452
- suitcase: "package",
20453
- backpack: "package",
20454
- handbag: "package"
20455
- },
20456
- preserveOriginal: false
20457
- };
20458
20480
  var AUDIO_MACRO_LABELS = [
20459
20481
  {
20460
20482
  id: "speech",
@@ -22348,8 +22370,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
22348
22370
  disabledTargetIds: array(string()).default([])
22349
22371
  });
22350
22372
  /**
22351
- * The state-summary SECTIONS (D647 / D698): the D637 kind groups that report a
22352
- * still-true state. `backups-exports` and `alarm` are not sections — a completed
22373
+ * The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
22374
+ * report a still-true state. `addons` is the crash-looped addons only and
22375
+ * `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
22353
22376
  * job is not an open state, and the alarm stays instant.
22354
22377
  */
22355
22378
  var NcStateSummarySectionIdSchema = _enum([
@@ -22361,6 +22384,7 @@ var NcStateSummarySectionIdSchema = _enum([
22361
22384
  "detection-blind",
22362
22385
  "nodes",
22363
22386
  "addons",
22387
+ "addon-updates",
22364
22388
  "updates"
22365
22389
  ]);
22366
22390
  /** One section of a previewed state summary. `unavailable` = its state could not be read. */
@@ -23377,7 +23401,19 @@ var NcAlarmModeDelaysListSchema = array(object({
23377
23401
  * When this mode may be armed. Absent / null = always allowed (same as a
23378
23402
  * rule with no `schedule`). Evaluated with {@link isScheduleActive}.
23379
23403
  */
23380
- schedule: NcScheduleSchema.optional()
23404
+ schedule: NcScheduleSchema.optional(),
23405
+ /**
23406
+ * D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
23407
+ * intrusion naming the locations)? Absent = false — the entry-delay notification is the
23408
+ * only one, and the matches ride the triggered notification's mosaic (D705).
23409
+ */
23410
+ notifyDuringEntryDelay: boolean().optional(),
23411
+ /**
23412
+ * D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
23413
+ * Absent = false (logged, not sent). Even when true it is not sent when that same sensor
23414
+ * is the one that starts the entry delay — the entry-delay notification already names it.
23415
+ */
23416
+ notifySensorRewatched: boolean().optional()
23381
23417
  })).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
23382
23418
  var NcAlarmModeDelaysEditListSchema = array(object({
23383
23419
  mode: AlarmArmModeSchema,
@@ -23386,7 +23422,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
23386
23422
  triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
23387
23423
  postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
23388
23424
  /** Set a schedule, or `null` to clear (mode always allowed again). */
23389
- schedule: NcScheduleSchema.nullable().optional()
23425
+ schedule: NcScheduleSchema.nullable().optional(),
23426
+ /** D706: set the switch, or `null` to clear it (back to the default, false). */
23427
+ notifyDuringEntryDelay: boolean().nullable().optional(),
23428
+ /** D706: set the switch, or `null` to clear it (back to the default, false). */
23429
+ notifySensorRewatched: boolean().nullable().optional()
23390
23430
  })).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
23391
23431
  /** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
23392
23432
  var NcAlarmNonBlockingEditSchema = object({
@@ -27290,7 +27330,8 @@ var PipelineModelOptionSchema = object({
27290
27330
  group: ModelVariantGroupSchema.optional(),
27291
27331
  legacy: boolean().optional(),
27292
27332
  provider: ModelProviderIdSchema.optional(),
27293
- defaultConfidence: number().optional()
27333
+ defaultConfidence: number().optional(),
27334
+ fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional()
27294
27335
  });
27295
27336
  var ConfigFieldBridge = custom();
27296
27337
  var PipelineAddonSchemaSchema = object({
@@ -28319,6 +28360,22 @@ var MotionSourceEnum = _enum([
28319
28360
  "device-activity"
28320
28361
  ]);
28321
28362
  /**
28363
+ * What opened an on-motion detection SESSION: the motion source that passed the
28364
+ * camera's `motionSources` gate, and what raised it (the camera itself, or a
28365
+ * sensor the operator attached — D672). `sensorName` is the attached sensor's
28366
+ * device name as the orchestrator's camera-sensors resolution last read it;
28367
+ * absent when unknown or when the camera itself triggered.
28368
+ *
28369
+ * Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
28370
+ * can say what started the session (D672 rule 11, amended 2026-10-06). The
28371
+ * runner never decides anything on it.
28372
+ */
28373
+ var SessionTriggerSchema = object({
28374
+ source: MotionSourceEnum,
28375
+ triggeredBy: MotionTriggeredBySchema,
28376
+ sensorName: string().optional()
28377
+ });
28378
+ /**
28322
28379
  * List of motion sources active on a camera. Empty array is valid:
28323
28380
  * "no source" — happens for battery cams without firmware motion when
28324
28381
  * the operator hasn't opted into the SW analyzer (would hold the
@@ -28570,6 +28627,14 @@ var RunnerCameraConfigSchema = object({
28570
28627
  */
28571
28628
  motionSources: MotionSourcesSchema.default(["analyzer"]),
28572
28629
  /**
28630
+ * What opened this attach, on a SESSION attach only (see
28631
+ * {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
28632
+ * standing attach, an occupancy burst, a re-dispatch with no motion event
28633
+ * behind it, and every attach from an orchestrator older than the field — the
28634
+ * runner then names no source on the phase event.
28635
+ */
28636
+ sessionTrigger: SessionTriggerSchema.optional(),
28637
+ /**
28573
28638
  * WHICH root detector runs for this camera. The detection counterpart of
28574
28639
  * {@link motionSources}, same shape and same discipline: a per-camera list
28575
28640
  * of sources the system understands, vendor-agnostic, owned here.
@@ -37670,7 +37735,7 @@ var LocalInterfaceSchema = object({
37670
37735
  name: string(),
37671
37736
  family: _enum(["IPv4", "IPv6"]),
37672
37737
  address: string(),
37673
- /** CIDR shorthand (e.g. `192.168.x.x/24`). Empty when OS doesn't expose. */
37738
+ /** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
37674
37739
  cidr: string(),
37675
37740
  /** OS netmask. Stable across calls so the SDK can hash on it. */
37676
37741
  netmask: string(),
@@ -37724,7 +37789,8 @@ var ConnectionEndpointSchema = object({
37724
37789
  "lan-ipv4",
37725
37790
  "lan-ipv6",
37726
37791
  "public",
37727
- "loopback"
37792
+ "loopback",
37793
+ "app-link"
37728
37794
  ]),
37729
37795
  /**
37730
37796
  * Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
@@ -37793,15 +37859,27 @@ var GetConnectionEndpointsResultSchema = object({
37793
37859
  localPort: AdvertisedLocalPortSchema
37794
37860
  });
37795
37861
  /**
37796
- * The chosen outbound endpoint for notification artifacts. `baseUrl: null` =
37797
- * AUTO (resolved from the candidate ranking at send time); `resolved` reports
37798
- * what AUTO currently picks, so the UI can show the effective value either way.
37862
+ * The address flagged for notification links. `baseUrl: null` = AUTO, which
37863
+ * since D709 is the CamStack app link; `resolved` reports the effective value,
37864
+ * so the UI can show it either way.
37799
37865
  */
37800
37866
  var NotificationEndpointSchema = object({
37801
37867
  /** The operator's explicit choice, or null for AUTO. */
37802
37868
  baseUrl: string().nullable(),
37803
- /** What the ranking currently resolves to (null when nothing is reachable). */
37804
- resolved: string().nullable()
37869
+ /**
37870
+ * The effective flagged address: the explicit choice, else (AUTO) the
37871
+ * CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
37872
+ * answered the public tunnel / mesh here, or null.
37873
+ */
37874
+ resolved: string().nullable(),
37875
+ /**
37876
+ * The hub origin an app link carries as `hub=` (D709): the hub's best
37877
+ * public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
37878
+ * picked from this cap's own palette by `pickAppLinkHub`. `null` when the
37879
+ * hub advertises neither; the app link is then minted without `hub=`.
37880
+ * Absent on a pre-D709 hub.
37881
+ */
37882
+ appLinkHub: string().nullable()
37805
37883
  });
37806
37884
  /**
37807
37885
  * The URLs the SDK / viewer should race for API access. `baseUrls` empty =
@@ -37869,7 +37947,7 @@ var localNetworkCapability = {
37869
37947
  * every client a second authority on a socket only the hub binds. A viewer
37870
37948
  * configured with a port-less public URL (`https://camstack.example.top`)
37871
37949
  * infers 443 from the scheme, asks with 443, and was handed
37872
- * `https://192.168.x.x:443` for a hub listening on 4443. That candidate
37950
+ * `https://192.168.10.9:443` for a hub listening on 4443. That candidate
37873
37951
  * cannot ever answer, and losing its race reads in the log exactly like
37874
37952
  * "the LAN was tried and it was slower" — so an operator sitting on his own
37875
37953
  * WiFi stayed on the public tunnel for weeks, with the LAN candidate born
@@ -37902,13 +37980,21 @@ var localNetworkCapability = {
37902
37980
  * Pass `'https'` when the caller is itself loaded over HTTPS
37903
37981
  * to avoid mixed-content blocks in the browser. The public
37904
37982
  * tunnel always emits `https://` regardless. */
37905
- scheme: _enum(["http", "https"]).optional()
37983
+ scheme: _enum(["http", "https"]).optional(),
37984
+ /** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
37985
+ * an address notification links can be flagged with, not a hub
37986
+ * route. Default `false`: racers and rankers never see it. */
37987
+ includeAppLink: boolean().optional()
37906
37988
  }), GetConnectionEndpointsResultSchema),
37907
37989
  /**
37908
- * The endpoint OUTBOUND artifacts must be addressed by — notification
37909
- * attachment links and deep links. `baseUrl: null` means AUTO: the first
37910
- * public candidate (a configured origin, then a connected tunnel, then the
37911
- * LAN), never loopback.
37990
+ * The address notification links are flagged with. `baseUrl: null` means
37991
+ * AUTO, which is the CamStack app link (D709): viewer taps go through
37992
+ * `https://camstack.zentik.app/…?hub=<appLinkHub>` and open the app. Any
37993
+ * hub address the palette lists can be flagged instead; then viewer taps,
37994
+ * attachment links and action buttons all use it. Signed media and
37995
+ * buttons never use the app link — with it flagged (or AUTO) they keep
37996
+ * the ranked hub ladder (a configured origin, a connected tunnel, then
37997
+ * the LAN), never loopback.
37912
37998
  *
37913
37999
  * Why an explicit marker: the automatic ranking cannot know which of
37914
38000
  * several reachable addresses the RECIPIENT can actually open. A link is
@@ -38301,7 +38387,7 @@ var MeshPeerSchema = object({
38301
38387
  tags: array(string()).readonly(),
38302
38388
  /** True when the peer advertises itself as an exit-node candidate. */
38303
38389
  exitNodeOption: boolean(),
38304
- /** Subnet routes the peer advertises (e.g. `["192.168.x.x/24"]`). */
38390
+ /** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
38305
38391
  advertisedRoutes: array(string()).readonly(),
38306
38392
  /** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
38307
38393
  userLogin: string().nullable(),
@@ -57799,12 +57885,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
57799
57885
  {
57800
57886
  id: "addons",
57801
57887
  family: "system",
57802
- label: "Addons",
57803
- kinds: [
57804
- "addon-crash-loop",
57805
- "addon-update-available",
57806
- "addon-updated"
57807
- ]
57888
+ label: "Addons stopped",
57889
+ kinds: ["addon-crash-loop"]
57890
+ },
57891
+ {
57892
+ id: "addon-updates",
57893
+ family: "system",
57894
+ label: "Addon updates",
57895
+ kinds: ["addon-update-available", "addon-updated"]
57808
57896
  },
57809
57897
  {
57810
57898
  id: "updates",
@@ -58044,13 +58132,15 @@ var STATE_SUMMARY_SECTION_VARS = [
58044
58132
  },
58045
58133
  {
58046
58134
  name: "summaryAddons",
58047
- label: "Summary: addons",
58048
- example: "@camstack/addon-recorder 1.2.3 → 1.2.4",
58049
- kinds: [
58050
- "addon-crash-loop",
58051
- "addon-update-available",
58052
- "addon-updated"
58053
- ]
58135
+ label: "Summary: addons stopped",
58136
+ example: "hub — recorder stopped after repeated crashes",
58137
+ kinds: ["addon-crash-loop"]
58138
+ },
58139
+ {
58140
+ name: "summaryAddonUpdates",
58141
+ label: "Summary: addon updates",
58142
+ example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
58143
+ kinds: ["addon-update-available", "addon-updated"]
58054
58144
  },
58055
58145
  {
58056
58146
  name: "summaryUpdates",
@@ -58134,6 +58224,7 @@ var STATE_SUMMARY_VARS = [
58134
58224
  [...RULE_BODY_ONLY],
58135
58225
  [...RULE_TEXT],
58136
58226
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
58227
+ ([...RULE_TEXT], [...COMBINED_ALARM]),
58137
58228
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
58138
58229
  ([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
58139
58230
  ([...RULE_TEXT], [...CONSUMABLE]),
@@ -60289,7 +60380,7 @@ function toOsdPickerDevices(devices) {
60289
60380
  return devices.map((d) => ({
60290
60381
  id: d.id,
60291
60382
  name: d.name,
60292
- type: d.type ?? null,
60383
+ ...typeof d.type === "string" ? { type: d.type } : {},
60293
60384
  location: d.location ?? null,
60294
60385
  parentDeviceId: d.parentDeviceId ?? null
60295
60386
  }));