@camstack/addon-provider-hikvision 1.2.144 → 1.2.145

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 (3) hide show
  1. package/dist/addon.js +296 -71
  2. package/dist/addon.mjs +296 -71
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -5413,7 +5413,7 @@ var ZodIssueCode = {
5413
5413
  var ZodFirstPartyTypeKind;
5414
5414
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5415
5415
  //#endregion
5416
- //#region ../types/dist/sleep-DXKLNFvA.mjs
5416
+ //#region ../types/dist/sleep-C16NCZR2.mjs
5417
5417
  /**
5418
5418
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5419
5419
  * window to float samples (D455).
@@ -10802,57 +10802,15 @@ var ClipSearchStrictnessSchema = _enum([
10802
10802
  "balanced",
10803
10803
  "strict"
10804
10804
  ]);
10805
- new Set([
10806
- {
10807
- id: "person",
10808
- name: "Person"
10809
- },
10810
- {
10811
- id: "vehicle",
10812
- name: "Vehicle"
10813
- },
10814
- {
10815
- id: "animal",
10816
- name: "Animal"
10817
- },
10818
- {
10819
- id: "package",
10820
- name: "Package"
10821
- }
10822
- ].map((l) => l.id));
10823
- var COCO_TO_MACRO = {
10824
- mapping: {
10825
- person: "person",
10826
- bicycle: "vehicle",
10827
- car: "vehicle",
10828
- motorcycle: "vehicle",
10829
- airplane: "vehicle",
10830
- bus: "vehicle",
10831
- train: "vehicle",
10832
- truck: "vehicle",
10833
- boat: "vehicle",
10834
- bird: "animal",
10835
- cat: "animal",
10836
- dog: "animal",
10837
- horse: "animal",
10838
- sheep: "animal",
10839
- cow: "animal",
10840
- elephant: "animal",
10841
- bear: "animal",
10842
- zebra: "animal",
10843
- giraffe: "animal",
10844
- suitcase: "package",
10845
- backpack: "package",
10846
- handbag: "package"
10847
- },
10848
- preserveOriginal: false
10849
- };
10850
- /** Steps a root detector may declare it fills. */
10851
- var FILLABLE_STEP_IDS = [
10805
+ /** Steps whose effect a root label can BE. */
10806
+ var LABEL_SUPPLY_STEP_IDS = [
10852
10807
  "animal-classifier",
10853
10808
  "vehicle-classifier",
10854
10809
  "package-detection"
10855
10810
  ];
10811
+ /** Steps whose box a root detection can BE. */
10812
+ var CROP_SUPPLY_STEP_IDS = ["plate-detection", "face-detection"];
10813
+ [...LABEL_SUPPLY_STEP_IDS, ...CROP_SUPPLY_STEP_IDS];
10856
10814
  var MODEL_FORMATS = [
10857
10815
  "onnx",
10858
10816
  "coreml",
@@ -10985,12 +10943,35 @@ var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { wei
10985
10943
  /** True when the weights or their data forbid commercial use. */
10986
10944
  nonCommercial: boolean().optional()
10987
10945
  }));
10988
- /** One `fillsClassifierEffects` entry — see `ModelCatalogEntry.fillsClassifierEffects`. */
10989
- var FillsClassifierEffectSchema = object({
10990
- stepId: _enum(FILLABLE_STEP_IDS),
10946
+ /**
10947
+ * One step a ROOT detector can supply from its own output (D730) — see
10948
+ * `ModelCatalogEntry.suppliesSteps`.
10949
+ *
10950
+ * - `label`: the root's raw class IS the step's answer. `labelToEffect` maps
10951
+ * the root's label to the step's vocabulary; `uncovered` is the vocabulary
10952
+ * the root cannot produce (shown as unavailable, never a blocker).
10953
+ * - `crop`: the root draws the box the step would have found (`license_plate`
10954
+ * for plate-detection, `face` for face-detection). The box becomes a detail
10955
+ * child of the `parentMacro` detection that contains it — never a track.
10956
+ */
10957
+ var RootStepSupplySchema = discriminatedUnion("kind", [object({
10958
+ kind: literal("label"),
10959
+ stepId: _enum(LABEL_SUPPLY_STEP_IDS),
10991
10960
  labelToEffect: record(string(), string()),
10992
10961
  uncovered: array(string()).readonly()
10993
- });
10962
+ }), object({
10963
+ kind: literal("crop"),
10964
+ stepId: _enum(CROP_SUPPLY_STEP_IDS),
10965
+ rootLabels: array(string()).readonly(),
10966
+ parentMacro: _enum(["vehicle", "person"]),
10967
+ childClass: _enum(["plate", "face"]),
10968
+ /**
10969
+ * The root's smaller input side, stamped on read by `rootSuppliesOf` from
10970
+ * the model entry — what a step's `minRootInputPx` gate judges. Never
10971
+ * stored by an import.
10972
+ */
10973
+ rootInputPx: number().int().positive().optional()
10974
+ })]);
10994
10975
  var ModelCatalogEntrySchema = object({
10995
10976
  id: string(),
10996
10977
  name: string(),
@@ -11117,15 +11098,15 @@ var ModelCatalogEntrySchema = object({
11117
11098
  */
11118
11099
  classMap: DetectionCatalogClassMapSchema.optional(),
11119
11100
  /**
11120
- * The pipeline steps this ROOT detector already does the work of (D715):
11121
- * its labels name the effect the step exists to produce (`deer` for
11122
- * `animal-classifier`, `package` for `package-detection`). Derived from the
11123
- * labelmap by `deriveClassifierFills`, never hand-written; a COCO model
11124
- * declares none. Whether a declaration is honoured is the step's own
11125
- * `labelLink` policy (`resolveLabelLink`). `labelToEffect` values are in
11126
- * `FILLABLE_STEP_VOCABULARIES` (guard `check-label-link-vocabulary`).
11101
+ * The pipeline steps this ROOT detector can supply from its own output
11102
+ * (D730): its labels name a step's effect (`deer` for `animal-classifier`)
11103
+ * or draw a step's box (`license_plate` for `plate-detection`). Computed at
11104
+ * import from THIS model's labelmap by `deriveRootSupplies`, never written
11105
+ * by hand and never assumed per family; a row without it is derived on read
11106
+ * (`rootSuppliesOf`). Whether a camera uses it is the step's own
11107
+ * `useRootModel` flag (`resolveRootSupply`).
11127
11108
  */
11128
- fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional(),
11109
+ suppliesSteps: array(RootStepSupplySchema).readonly().optional(),
11129
11110
  /**
11130
11111
  * The model's CLIP feature-space contract (text encoder, dimension, vector
11131
11112
  * index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
@@ -16707,6 +16688,12 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
16707
16688
  kind: "mutation",
16708
16689
  auth: "admin"
16709
16690
  });
16691
+ var HUB_ADDRESS_ROLES = [
16692
+ "appConnections",
16693
+ "notificationTaps",
16694
+ "internal",
16695
+ "publicEndpoint"
16696
+ ];
16710
16697
  /**
16711
16698
  * Transport bounds for AI capability methods.
16712
16699
  *
@@ -18469,6 +18456,51 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
18469
18456
  kind: "mutation",
18470
18457
  auth: "admin"
18471
18458
  });
18459
+ new Set([
18460
+ {
18461
+ id: "person",
18462
+ name: "Person"
18463
+ },
18464
+ {
18465
+ id: "vehicle",
18466
+ name: "Vehicle"
18467
+ },
18468
+ {
18469
+ id: "animal",
18470
+ name: "Animal"
18471
+ },
18472
+ {
18473
+ id: "package",
18474
+ name: "Package"
18475
+ }
18476
+ ].map((l) => l.id));
18477
+ var COCO_TO_MACRO = {
18478
+ mapping: {
18479
+ person: "person",
18480
+ bicycle: "vehicle",
18481
+ car: "vehicle",
18482
+ motorcycle: "vehicle",
18483
+ airplane: "vehicle",
18484
+ bus: "vehicle",
18485
+ train: "vehicle",
18486
+ truck: "vehicle",
18487
+ boat: "vehicle",
18488
+ bird: "animal",
18489
+ cat: "animal",
18490
+ dog: "animal",
18491
+ horse: "animal",
18492
+ sheep: "animal",
18493
+ cow: "animal",
18494
+ elephant: "animal",
18495
+ bear: "animal",
18496
+ zebra: "animal",
18497
+ giraffe: "animal",
18498
+ suitcase: "package",
18499
+ backpack: "package",
18500
+ handbag: "package"
18501
+ },
18502
+ preserveOriginal: false
18503
+ };
18472
18504
  var AUDIO_MACRO_LABELS = [
18473
18505
  {
18474
18506
  id: "speech",
@@ -20871,7 +20903,13 @@ var NcAlarmModeDelaysListSchema = array(object({
20871
20903
  * Absent = false (logged, not sent). Even when true it is not sent when that same sensor
20872
20904
  * is the one that starts the entry delay — the entry-delay notification already names it.
20873
20905
  */
20874
- notifySensorRewatched: boolean().optional()
20906
+ notifySensorRewatched: boolean().optional(),
20907
+ /**
20908
+ * D735: notify "ignored" when a sensor this arm bypassed really MOVED while armed (its own
20909
+ * change time is after the arm) and set nothing off. Absent = false (logged, not sent). A
20910
+ * re-sync, a recovery from `unavailable` or a duplicate is never announced, switch or not.
20911
+ */
20912
+ notifySensorIgnored: boolean().optional()
20875
20913
  })).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
20876
20914
  var NcAlarmModeDelaysEditListSchema = array(object({
20877
20915
  mode: AlarmArmModeSchema,
@@ -20884,7 +20922,9 @@ var NcAlarmModeDelaysEditListSchema = array(object({
20884
20922
  /** D706: set the switch, or `null` to clear it (back to the default, false). */
20885
20923
  notifyDuringEntryDelay: boolean().nullable().optional(),
20886
20924
  /** D706: set the switch, or `null` to clear it (back to the default, false). */
20887
- notifySensorRewatched: boolean().nullable().optional()
20925
+ notifySensorRewatched: boolean().nullable().optional(),
20926
+ /** D735: set the switch, or `null` to clear it (back to the default, false). */
20927
+ notifySensorIgnored: boolean().nullable().optional()
20888
20928
  })).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
20889
20929
  /** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
20890
20930
  var NcAlarmNonBlockingEditSchema = object({
@@ -23783,6 +23823,34 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
23783
23823
  timestamp: number()
23784
23824
  });
23785
23825
  /**
23826
+ * A root model's boxes standing in for one crop-kind step's own inference
23827
+ * (D730) — see `runPipeline.suppliedRoot`.
23828
+ */
23829
+ var SuppliedRootOutputSchema = object({
23830
+ stepId: string(),
23831
+ /** The root model that drew the boxes — stamped on the result. */
23832
+ modelId: string(),
23833
+ detections: array(object({
23834
+ /** `[x1, y1, x2, y2]` in the pixels of the call's image. */
23835
+ bbox: tuple([
23836
+ number(),
23837
+ number(),
23838
+ number(),
23839
+ number()
23840
+ ]),
23841
+ score: number(),
23842
+ /**
23843
+ * Five facial landmarks in the same pixels — a face the step's own
23844
+ * detector already re-found inside a root face box (D730), so its
23845
+ * embedder child aligns it exactly as it aligns any detected face.
23846
+ */
23847
+ landmarks: array(object({
23848
+ x: number(),
23849
+ y: number()
23850
+ })).optional()
23851
+ })).min(1)
23852
+ });
23853
+ /**
23786
23854
  * Reference to the frame's retained NATIVE surface + the parent crop's placement
23787
23855
  * within the frame, so the executor can re-cut a leaf child ROI at native
23788
23856
  * resolution on the detail plane. See the `runPipeline` `nativeCropRef` field.
@@ -23913,7 +23981,7 @@ var PipelineModelOptionSchema = object({
23913
23981
  legacy: boolean().optional(),
23914
23982
  provider: ModelProviderIdSchema.optional(),
23915
23983
  defaultConfidence: number().optional(),
23916
- fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional()
23984
+ suppliesSteps: array(RootStepSupplySchema).readonly().optional()
23917
23985
  });
23918
23986
  var ConfigFieldBridge = custom();
23919
23987
  var PipelineAddonSchemaSchema = object({
@@ -24181,7 +24249,16 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
24181
24249
  * `device-not-servable`), and nothing reaches the camera's live
24182
24250
  * trace stream. Absent ⇒ unchanged behaviour.
24183
24251
  */
24184
- replay: literal(true).optional()
24252
+ replay: literal(true).optional(),
24253
+ /**
24254
+ * Root-supplied detections for the tree's ROOT step (D730). Set by
24255
+ * `runDetailSubtree` when the camera's root model supplies a crop-kind
24256
+ * step (a Frigate+ `license_plate` for `plate-detection`): the step is
24257
+ * NOT inferred, these boxes are its output, and its children (the plate
24258
+ * reader) run on them through their own crop policy. Boxes are in the
24259
+ * PIXELS of the image this call carries. Absent ⇒ the root step runs.
24260
+ */
24261
+ suppliedRoot: SuppliedRootOutputSchema.optional()
24185
24262
  }), PipelineRunResultBridge, { kind: "mutation" }), method(object({
24186
24263
  steps: array(PipelineStepInputSchema).min(1),
24187
24264
  frames: array(FrameInputSchema).min(1).max(255),
@@ -25323,7 +25400,22 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
25323
25400
  */
25324
25401
  cropJpeg: string().optional(),
25325
25402
  parent: DetailParentSchema,
25326
- steps: array(string()).optional()
25403
+ steps: array(string()).optional(),
25404
+ /**
25405
+ * The camera's root model already drew this step's boxes (D730): a
25406
+ * `license_plate` inside the parent vehicle. The named step is NOT
25407
+ * inferred — these FRAME-space boxes are its output — and its
25408
+ * requested children (the plate reader) run on them. Absent ⇒ every
25409
+ * requested step infers as before.
25410
+ */
25411
+ supplied: object({
25412
+ stepId: string(),
25413
+ modelId: string(),
25414
+ boxes: array(object({
25415
+ bbox: NativeCropBboxSchema,
25416
+ score: number()
25417
+ })).min(1)
25418
+ }).optional()
25327
25419
  }), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" }), method(object({
25328
25420
  /** Catalog step id, e.g. `clip-embedding`. */
25329
25421
  stepId: string(),
@@ -29175,6 +29267,14 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
29175
29267
  */
29176
29268
  alive: boolean()
29177
29269
  })), method(object({
29270
+ deviceId: number().int().nonnegative(),
29271
+ sessionId: string(),
29272
+ downlinkMbps: number().nonnegative()
29273
+ }), object({
29274
+ outcome: _enum(["switching", "held"]),
29275
+ tier: CamProfileSchema.nullable(),
29276
+ reason: string()
29277
+ }), { kind: "mutation" }), method(object({
29178
29278
  deviceId: number().int().nonnegative(),
29179
29279
  sessionId: string()
29180
29280
  }), WebrtcSessionDebugSchema, { kind: "query" });
@@ -32986,7 +33086,8 @@ var ConnectionEndpointSchema = object({
32986
33086
  "lan-ipv6",
32987
33087
  "public",
32988
33088
  "loopback",
32989
- "app-link"
33089
+ "app-link",
33090
+ "custom"
32990
33091
  ]),
32991
33092
  /**
32992
33093
  * Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
@@ -33055,7 +33156,7 @@ var GetConnectionEndpointsResultSchema = object({
33055
33156
  localPort: AdvertisedLocalPortSchema
33056
33157
  });
33057
33158
  /**
33058
- * The address flagged for notification links. `baseUrl: null` = AUTO, which
33159
+ * The address flagged for notification taps (`notificationTaps`). `baseUrl: null` = AUTO, which
33059
33160
  * since D709 is the CamStack app link; `resolved` reports the effective value,
33060
33161
  * so the UI can show it either way.
33061
33162
  */
@@ -33088,6 +33189,72 @@ var ViewerEndpointsSchema = object({
33088
33189
  /** What the ranking currently resolves to (may be empty if nothing is up). */
33089
33190
  resolved: array(string()).readonly()
33090
33191
  });
33192
+ /**
33193
+ * DEPRECATED compatibility shape of `getHubAddresses` (D729 amendment, kept
33194
+ * for addons built against it): `cluster` is the `internal` role, `browser`
33195
+ * the `publicEndpoint` role; `override` is the flagged address.
33196
+ */
33197
+ var HubAddressSnapshotSchema = object({
33198
+ override: string().nullable(),
33199
+ resolved: string().nullable(),
33200
+ source: _enum([
33201
+ "override",
33202
+ "auto",
33203
+ "none"
33204
+ ])
33205
+ });
33206
+ var HubAddressesSchema = object({
33207
+ cluster: HubAddressSnapshotSchema,
33208
+ browser: HubAddressSnapshotSchema
33209
+ });
33210
+ /**
33211
+ * What an address is used for (`hub-address.ts`, D734). `appConnections` is
33212
+ * many-valued; `notificationTaps`, `publicEndpoint` and `internal` are carried
33213
+ * by at most one address.
33214
+ */
33215
+ var HubAddressRoleSchema = _enum(HUB_ADDRESS_ROLES);
33216
+ var RoleSourceSchema = _enum([
33217
+ "flagged",
33218
+ "auto",
33219
+ "none"
33220
+ ]);
33221
+ /** One single-valued role: the flagged address, the one in use, and why. */
33222
+ var HubAddressRoleResolutionSchema = object({
33223
+ /** The address carrying the flag, or null = automatic. */
33224
+ flagged: string().nullable(),
33225
+ /** The address in use, or null when nothing qualifies (never loopback). */
33226
+ resolved: string().nullable(),
33227
+ source: RoleSourceSchema
33228
+ });
33229
+ var HubAppConnectionsResolutionSchema = object({
33230
+ /** The addresses flagged `appConnections`, or empty = automatic. */
33231
+ flagged: array(string()).readonly(),
33232
+ /** What the apps race right now. */
33233
+ resolved: array(string()).readonly(),
33234
+ source: RoleSourceSchema
33235
+ });
33236
+ var HubAddressBookSchema = object({
33237
+ rows: array(ConnectionEndpointSchema.extend({
33238
+ /** In the hub's detected palette right now. */
33239
+ detected: boolean(),
33240
+ /** Entered by the operator (removable). */
33241
+ custom: boolean(),
33242
+ /** The roles explicitly flagged on this address. */
33243
+ flags: array(HubAddressRoleSchema).readonly(),
33244
+ /** The roles this address serves right now — flagged or automatic. */
33245
+ inUse: array(HubAddressRoleSchema).readonly(),
33246
+ /** The roles this address may be flagged with. */
33247
+ eligible: array(HubAddressRoleSchema).readonly()
33248
+ })).readonly(),
33249
+ roles: object({
33250
+ appConnections: HubAppConnectionsResolutionSchema,
33251
+ notificationTaps: HubAddressRoleResolutionSchema,
33252
+ internal: HubAddressRoleResolutionSchema,
33253
+ publicEndpoint: HubAddressRoleResolutionSchema
33254
+ }),
33255
+ /** The `hub=` an app link carries (D709), or null. */
33256
+ appLinkHub: string().nullable()
33257
+ });
33091
33258
  var AllowedAddressesSchema = object({
33092
33259
  /**
33093
33260
  * Allowlist of interface addresses operators have explicitly opted
@@ -33131,10 +33298,27 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
33131
33298
  * tunnel always emits `https://` regardless. */
33132
33299
  scheme: _enum(["http", "https"]).optional(),
33133
33300
  /** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
33134
- * an address notification links can be flagged with, not a hub
33301
+ * an address notification taps can be flagged with, not a hub
33135
33302
  * route. Default `false`: racers and rankers never see it. */
33136
33303
  includeAppLink: boolean().optional()
33137
- }), 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, {
33304
+ }), 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(object({ scheme: _enum(["http", "https"]).optional() }).optional(), HubAddressBookSchema), method(object({
33305
+ baseUrl: string(),
33306
+ label: string().max(80)
33307
+ }), HubAddressBookSchema, {
33308
+ kind: "mutation",
33309
+ auth: "admin"
33310
+ }), method(object({ baseUrl: string() }), HubAddressBookSchema, {
33311
+ kind: "mutation",
33312
+ auth: "admin"
33313
+ }), method(object({
33314
+ role: HubAddressRoleSchema,
33315
+ baseUrl: string().nullable(),
33316
+ enabled: boolean(),
33317
+ acceptInsecureHttp: boolean().optional()
33318
+ }), HubAddressBookSchema, {
33319
+ kind: "mutation",
33320
+ auth: "admin"
33321
+ }), method(_void(), HubAddressesSchema), 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, {
33138
33322
  kind: "mutation",
33139
33323
  auth: "admin"
33140
33324
  }), method(object({
@@ -45168,12 +45352,24 @@ Object.freeze({
45168
45352
  addonId: null,
45169
45353
  access: "view"
45170
45354
  },
45355
+ "localNetwork.addCustomAddress": {
45356
+ capName: "local-network",
45357
+ capScope: "system",
45358
+ addonId: null,
45359
+ access: "create"
45360
+ },
45171
45361
  "localNetwork.downloadCa": {
45172
45362
  capName: "local-network",
45173
45363
  capScope: "system",
45174
45364
  addonId: null,
45175
45365
  access: "view"
45176
45366
  },
45367
+ "localNetwork.getAddresses": {
45368
+ capName: "local-network",
45369
+ capScope: "system",
45370
+ addonId: null,
45371
+ access: "view"
45372
+ },
45177
45373
  "localNetwork.getAllowedAddresses": {
45178
45374
  capName: "local-network",
45179
45375
  capScope: "system",
@@ -45186,6 +45382,12 @@ Object.freeze({
45186
45382
  addonId: null,
45187
45383
  access: "view"
45188
45384
  },
45385
+ "localNetwork.getHubAddresses": {
45386
+ capName: "local-network",
45387
+ capScope: "system",
45388
+ addonId: null,
45389
+ access: "view"
45390
+ },
45189
45391
  "localNetwork.getNotificationEndpoint": {
45190
45392
  capName: "local-network",
45191
45393
  capScope: "system",
@@ -45222,6 +45424,12 @@ Object.freeze({
45222
45424
  addonId: null,
45223
45425
  access: "create"
45224
45426
  },
45427
+ "localNetwork.removeCustomAddress": {
45428
+ capName: "local-network",
45429
+ capScope: "system",
45430
+ addonId: null,
45431
+ access: "delete"
45432
+ },
45225
45433
  "localNetwork.resetAllowlistToBestMatch": {
45226
45434
  capName: "local-network",
45227
45435
  capScope: "system",
@@ -45234,6 +45442,12 @@ Object.freeze({
45234
45442
  addonId: null,
45235
45443
  access: "create"
45236
45444
  },
45445
+ "localNetwork.setAddressRole": {
45446
+ capName: "local-network",
45447
+ capScope: "system",
45448
+ addonId: null,
45449
+ access: "create"
45450
+ },
45237
45451
  "localNetwork.setAllowedAddresses": {
45238
45452
  capName: "local-network",
45239
45453
  capScope: "system",
@@ -49488,6 +49702,12 @@ Object.freeze({
49488
49702
  addonId: null,
49489
49703
  access: "create"
49490
49704
  },
49705
+ "webrtcSession.applyDownlinkProbe": {
49706
+ capName: "webrtc-session",
49707
+ capScope: "device",
49708
+ addonId: null,
49709
+ access: "create"
49710
+ },
49491
49711
  "webrtcSession.closeSession": {
49492
49712
  capName: "webrtc-session",
49493
49713
  capScope: "device",
@@ -53628,6 +53848,11 @@ Object.freeze({
53628
53848
  form: "single",
53629
53849
  optional: false
53630
53850
  }],
53851
+ "webrtcSession.applyDownlinkProbe": [{
53852
+ name: "deviceId",
53853
+ form: "single",
53854
+ optional: false
53855
+ }],
53631
53856
  "webrtcSession.closeSession": [{
53632
53857
  name: "deviceId",
53633
53858
  form: "single",
@@ -54161,7 +54386,7 @@ var STATE_SUMMARY_VARS = [
54161
54386
  {
54162
54387
  name: "summarySection",
54163
54388
  label: "Summary: this section",
54164
- description: "The section a per-section summary row is about (D698); on a summary sent as one message, every section it reports, comma-separated.",
54389
+ description: "The section a per-section summary row is about; on a summary sent as one message, every section it reports, comma-separated.",
54165
54390
  example: "Batterie scariche",
54166
54391
  group: "system",
54167
54392
  families: ["rule"],
@@ -55677,7 +55902,7 @@ function createClipStreamHandler(deps) {
55677
55902
  * Node-only (`node:child_process`), so it lives under `@camstack/types/node`.
55678
55903
  */
55679
55904
  /** The detail a site refusing for want of a binary puts in its refusal. */
55680
- var NO_PINNED_FFMPEG_DETAIL = "no pinned ffmpeg on this node (D540)";
55905
+ var NO_PINNED_FFMPEG_DETAIL = "no pinned ffmpeg on this node";
55681
55906
  /**
55682
55907
  * {@link pinnedFfmpegSpawner}, asked at the point of use through the node's
55683
55908
  * resolver (`memoizePinnedFfmpeg`). A site that keeps the RESOLVER rather than
package/dist/addon.mjs CHANGED
@@ -5392,7 +5392,7 @@ var ZodIssueCode = {
5392
5392
  var ZodFirstPartyTypeKind;
5393
5393
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5394
5394
  //#endregion
5395
- //#region ../types/dist/sleep-DXKLNFvA.mjs
5395
+ //#region ../types/dist/sleep-C16NCZR2.mjs
5396
5396
  /**
5397
5397
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5398
5398
  * window to float samples (D455).
@@ -10781,57 +10781,15 @@ var ClipSearchStrictnessSchema = _enum([
10781
10781
  "balanced",
10782
10782
  "strict"
10783
10783
  ]);
10784
- new Set([
10785
- {
10786
- id: "person",
10787
- name: "Person"
10788
- },
10789
- {
10790
- id: "vehicle",
10791
- name: "Vehicle"
10792
- },
10793
- {
10794
- id: "animal",
10795
- name: "Animal"
10796
- },
10797
- {
10798
- id: "package",
10799
- name: "Package"
10800
- }
10801
- ].map((l) => l.id));
10802
- var COCO_TO_MACRO = {
10803
- mapping: {
10804
- person: "person",
10805
- bicycle: "vehicle",
10806
- car: "vehicle",
10807
- motorcycle: "vehicle",
10808
- airplane: "vehicle",
10809
- bus: "vehicle",
10810
- train: "vehicle",
10811
- truck: "vehicle",
10812
- boat: "vehicle",
10813
- bird: "animal",
10814
- cat: "animal",
10815
- dog: "animal",
10816
- horse: "animal",
10817
- sheep: "animal",
10818
- cow: "animal",
10819
- elephant: "animal",
10820
- bear: "animal",
10821
- zebra: "animal",
10822
- giraffe: "animal",
10823
- suitcase: "package",
10824
- backpack: "package",
10825
- handbag: "package"
10826
- },
10827
- preserveOriginal: false
10828
- };
10829
- /** Steps a root detector may declare it fills. */
10830
- var FILLABLE_STEP_IDS = [
10784
+ /** Steps whose effect a root label can BE. */
10785
+ var LABEL_SUPPLY_STEP_IDS = [
10831
10786
  "animal-classifier",
10832
10787
  "vehicle-classifier",
10833
10788
  "package-detection"
10834
10789
  ];
10790
+ /** Steps whose box a root detection can BE. */
10791
+ var CROP_SUPPLY_STEP_IDS = ["plate-detection", "face-detection"];
10792
+ [...LABEL_SUPPLY_STEP_IDS, ...CROP_SUPPLY_STEP_IDS];
10835
10793
  var MODEL_FORMATS = [
10836
10794
  "onnx",
10837
10795
  "coreml",
@@ -10964,12 +10922,35 @@ var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { wei
10964
10922
  /** True when the weights or their data forbid commercial use. */
10965
10923
  nonCommercial: boolean().optional()
10966
10924
  }));
10967
- /** One `fillsClassifierEffects` entry — see `ModelCatalogEntry.fillsClassifierEffects`. */
10968
- var FillsClassifierEffectSchema = object({
10969
- stepId: _enum(FILLABLE_STEP_IDS),
10925
+ /**
10926
+ * One step a ROOT detector can supply from its own output (D730) — see
10927
+ * `ModelCatalogEntry.suppliesSteps`.
10928
+ *
10929
+ * - `label`: the root's raw class IS the step's answer. `labelToEffect` maps
10930
+ * the root's label to the step's vocabulary; `uncovered` is the vocabulary
10931
+ * the root cannot produce (shown as unavailable, never a blocker).
10932
+ * - `crop`: the root draws the box the step would have found (`license_plate`
10933
+ * for plate-detection, `face` for face-detection). The box becomes a detail
10934
+ * child of the `parentMacro` detection that contains it — never a track.
10935
+ */
10936
+ var RootStepSupplySchema = discriminatedUnion("kind", [object({
10937
+ kind: literal("label"),
10938
+ stepId: _enum(LABEL_SUPPLY_STEP_IDS),
10970
10939
  labelToEffect: record(string(), string()),
10971
10940
  uncovered: array(string()).readonly()
10972
- });
10941
+ }), object({
10942
+ kind: literal("crop"),
10943
+ stepId: _enum(CROP_SUPPLY_STEP_IDS),
10944
+ rootLabels: array(string()).readonly(),
10945
+ parentMacro: _enum(["vehicle", "person"]),
10946
+ childClass: _enum(["plate", "face"]),
10947
+ /**
10948
+ * The root's smaller input side, stamped on read by `rootSuppliesOf` from
10949
+ * the model entry — what a step's `minRootInputPx` gate judges. Never
10950
+ * stored by an import.
10951
+ */
10952
+ rootInputPx: number().int().positive().optional()
10953
+ })]);
10973
10954
  var ModelCatalogEntrySchema = object({
10974
10955
  id: string(),
10975
10956
  name: string(),
@@ -11096,15 +11077,15 @@ var ModelCatalogEntrySchema = object({
11096
11077
  */
11097
11078
  classMap: DetectionCatalogClassMapSchema.optional(),
11098
11079
  /**
11099
- * The pipeline steps this ROOT detector already does the work of (D715):
11100
- * its labels name the effect the step exists to produce (`deer` for
11101
- * `animal-classifier`, `package` for `package-detection`). Derived from the
11102
- * labelmap by `deriveClassifierFills`, never hand-written; a COCO model
11103
- * declares none. Whether a declaration is honoured is the step's own
11104
- * `labelLink` policy (`resolveLabelLink`). `labelToEffect` values are in
11105
- * `FILLABLE_STEP_VOCABULARIES` (guard `check-label-link-vocabulary`).
11080
+ * The pipeline steps this ROOT detector can supply from its own output
11081
+ * (D730): its labels name a step's effect (`deer` for `animal-classifier`)
11082
+ * or draw a step's box (`license_plate` for `plate-detection`). Computed at
11083
+ * import from THIS model's labelmap by `deriveRootSupplies`, never written
11084
+ * by hand and never assumed per family; a row without it is derived on read
11085
+ * (`rootSuppliesOf`). Whether a camera uses it is the step's own
11086
+ * `useRootModel` flag (`resolveRootSupply`).
11106
11087
  */
11107
- fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional(),
11088
+ suppliesSteps: array(RootStepSupplySchema).readonly().optional(),
11108
11089
  /**
11109
11090
  * The model's CLIP feature-space contract (text encoder, dimension, vector
11110
11091
  * index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
@@ -16686,6 +16667,12 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
16686
16667
  kind: "mutation",
16687
16668
  auth: "admin"
16688
16669
  });
16670
+ var HUB_ADDRESS_ROLES = [
16671
+ "appConnections",
16672
+ "notificationTaps",
16673
+ "internal",
16674
+ "publicEndpoint"
16675
+ ];
16689
16676
  /**
16690
16677
  * Transport bounds for AI capability methods.
16691
16678
  *
@@ -18448,6 +18435,51 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
18448
18435
  kind: "mutation",
18449
18436
  auth: "admin"
18450
18437
  });
18438
+ new Set([
18439
+ {
18440
+ id: "person",
18441
+ name: "Person"
18442
+ },
18443
+ {
18444
+ id: "vehicle",
18445
+ name: "Vehicle"
18446
+ },
18447
+ {
18448
+ id: "animal",
18449
+ name: "Animal"
18450
+ },
18451
+ {
18452
+ id: "package",
18453
+ name: "Package"
18454
+ }
18455
+ ].map((l) => l.id));
18456
+ var COCO_TO_MACRO = {
18457
+ mapping: {
18458
+ person: "person",
18459
+ bicycle: "vehicle",
18460
+ car: "vehicle",
18461
+ motorcycle: "vehicle",
18462
+ airplane: "vehicle",
18463
+ bus: "vehicle",
18464
+ train: "vehicle",
18465
+ truck: "vehicle",
18466
+ boat: "vehicle",
18467
+ bird: "animal",
18468
+ cat: "animal",
18469
+ dog: "animal",
18470
+ horse: "animal",
18471
+ sheep: "animal",
18472
+ cow: "animal",
18473
+ elephant: "animal",
18474
+ bear: "animal",
18475
+ zebra: "animal",
18476
+ giraffe: "animal",
18477
+ suitcase: "package",
18478
+ backpack: "package",
18479
+ handbag: "package"
18480
+ },
18481
+ preserveOriginal: false
18482
+ };
18451
18483
  var AUDIO_MACRO_LABELS = [
18452
18484
  {
18453
18485
  id: "speech",
@@ -20850,7 +20882,13 @@ var NcAlarmModeDelaysListSchema = array(object({
20850
20882
  * Absent = false (logged, not sent). Even when true it is not sent when that same sensor
20851
20883
  * is the one that starts the entry delay — the entry-delay notification already names it.
20852
20884
  */
20853
- notifySensorRewatched: boolean().optional()
20885
+ notifySensorRewatched: boolean().optional(),
20886
+ /**
20887
+ * D735: notify "ignored" when a sensor this arm bypassed really MOVED while armed (its own
20888
+ * change time is after the arm) and set nothing off. Absent = false (logged, not sent). A
20889
+ * re-sync, a recovery from `unavailable` or a duplicate is never announced, switch or not.
20890
+ */
20891
+ notifySensorIgnored: boolean().optional()
20854
20892
  })).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
20855
20893
  var NcAlarmModeDelaysEditListSchema = array(object({
20856
20894
  mode: AlarmArmModeSchema,
@@ -20863,7 +20901,9 @@ var NcAlarmModeDelaysEditListSchema = array(object({
20863
20901
  /** D706: set the switch, or `null` to clear it (back to the default, false). */
20864
20902
  notifyDuringEntryDelay: boolean().nullable().optional(),
20865
20903
  /** D706: set the switch, or `null` to clear it (back to the default, false). */
20866
- notifySensorRewatched: boolean().nullable().optional()
20904
+ notifySensorRewatched: boolean().nullable().optional(),
20905
+ /** D735: set the switch, or `null` to clear it (back to the default, false). */
20906
+ notifySensorIgnored: boolean().nullable().optional()
20867
20907
  })).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
20868
20908
  /** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
20869
20909
  var NcAlarmNonBlockingEditSchema = object({
@@ -23762,6 +23802,34 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
23762
23802
  timestamp: number()
23763
23803
  });
23764
23804
  /**
23805
+ * A root model's boxes standing in for one crop-kind step's own inference
23806
+ * (D730) — see `runPipeline.suppliedRoot`.
23807
+ */
23808
+ var SuppliedRootOutputSchema = object({
23809
+ stepId: string(),
23810
+ /** The root model that drew the boxes — stamped on the result. */
23811
+ modelId: string(),
23812
+ detections: array(object({
23813
+ /** `[x1, y1, x2, y2]` in the pixels of the call's image. */
23814
+ bbox: tuple([
23815
+ number(),
23816
+ number(),
23817
+ number(),
23818
+ number()
23819
+ ]),
23820
+ score: number(),
23821
+ /**
23822
+ * Five facial landmarks in the same pixels — a face the step's own
23823
+ * detector already re-found inside a root face box (D730), so its
23824
+ * embedder child aligns it exactly as it aligns any detected face.
23825
+ */
23826
+ landmarks: array(object({
23827
+ x: number(),
23828
+ y: number()
23829
+ })).optional()
23830
+ })).min(1)
23831
+ });
23832
+ /**
23765
23833
  * Reference to the frame's retained NATIVE surface + the parent crop's placement
23766
23834
  * within the frame, so the executor can re-cut a leaf child ROI at native
23767
23835
  * resolution on the detail plane. See the `runPipeline` `nativeCropRef` field.
@@ -23892,7 +23960,7 @@ var PipelineModelOptionSchema = object({
23892
23960
  legacy: boolean().optional(),
23893
23961
  provider: ModelProviderIdSchema.optional(),
23894
23962
  defaultConfidence: number().optional(),
23895
- fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional()
23963
+ suppliesSteps: array(RootStepSupplySchema).readonly().optional()
23896
23964
  });
23897
23965
  var ConfigFieldBridge = custom();
23898
23966
  var PipelineAddonSchemaSchema = object({
@@ -24160,7 +24228,16 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
24160
24228
  * `device-not-servable`), and nothing reaches the camera's live
24161
24229
  * trace stream. Absent ⇒ unchanged behaviour.
24162
24230
  */
24163
- replay: literal(true).optional()
24231
+ replay: literal(true).optional(),
24232
+ /**
24233
+ * Root-supplied detections for the tree's ROOT step (D730). Set by
24234
+ * `runDetailSubtree` when the camera's root model supplies a crop-kind
24235
+ * step (a Frigate+ `license_plate` for `plate-detection`): the step is
24236
+ * NOT inferred, these boxes are its output, and its children (the plate
24237
+ * reader) run on them through their own crop policy. Boxes are in the
24238
+ * PIXELS of the image this call carries. Absent ⇒ the root step runs.
24239
+ */
24240
+ suppliedRoot: SuppliedRootOutputSchema.optional()
24164
24241
  }), PipelineRunResultBridge, { kind: "mutation" }), method(object({
24165
24242
  steps: array(PipelineStepInputSchema).min(1),
24166
24243
  frames: array(FrameInputSchema).min(1).max(255),
@@ -25302,7 +25379,22 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
25302
25379
  */
25303
25380
  cropJpeg: string().optional(),
25304
25381
  parent: DetailParentSchema,
25305
- steps: array(string()).optional()
25382
+ steps: array(string()).optional(),
25383
+ /**
25384
+ * The camera's root model already drew this step's boxes (D730): a
25385
+ * `license_plate` inside the parent vehicle. The named step is NOT
25386
+ * inferred — these FRAME-space boxes are its output — and its
25387
+ * requested children (the plate reader) run on them. Absent ⇒ every
25388
+ * requested step infers as before.
25389
+ */
25390
+ supplied: object({
25391
+ stepId: string(),
25392
+ modelId: string(),
25393
+ boxes: array(object({
25394
+ bbox: NativeCropBboxSchema,
25395
+ score: number()
25396
+ })).min(1)
25397
+ }).optional()
25306
25398
  }), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" }), method(object({
25307
25399
  /** Catalog step id, e.g. `clip-embedding`. */
25308
25400
  stepId: string(),
@@ -29154,6 +29246,14 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
29154
29246
  */
29155
29247
  alive: boolean()
29156
29248
  })), method(object({
29249
+ deviceId: number().int().nonnegative(),
29250
+ sessionId: string(),
29251
+ downlinkMbps: number().nonnegative()
29252
+ }), object({
29253
+ outcome: _enum(["switching", "held"]),
29254
+ tier: CamProfileSchema.nullable(),
29255
+ reason: string()
29256
+ }), { kind: "mutation" }), method(object({
29157
29257
  deviceId: number().int().nonnegative(),
29158
29258
  sessionId: string()
29159
29259
  }), WebrtcSessionDebugSchema, { kind: "query" });
@@ -32965,7 +33065,8 @@ var ConnectionEndpointSchema = object({
32965
33065
  "lan-ipv6",
32966
33066
  "public",
32967
33067
  "loopback",
32968
- "app-link"
33068
+ "app-link",
33069
+ "custom"
32969
33070
  ]),
32970
33071
  /**
32971
33072
  * Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
@@ -33034,7 +33135,7 @@ var GetConnectionEndpointsResultSchema = object({
33034
33135
  localPort: AdvertisedLocalPortSchema
33035
33136
  });
33036
33137
  /**
33037
- * The address flagged for notification links. `baseUrl: null` = AUTO, which
33138
+ * The address flagged for notification taps (`notificationTaps`). `baseUrl: null` = AUTO, which
33038
33139
  * since D709 is the CamStack app link; `resolved` reports the effective value,
33039
33140
  * so the UI can show it either way.
33040
33141
  */
@@ -33067,6 +33168,72 @@ var ViewerEndpointsSchema = object({
33067
33168
  /** What the ranking currently resolves to (may be empty if nothing is up). */
33068
33169
  resolved: array(string()).readonly()
33069
33170
  });
33171
+ /**
33172
+ * DEPRECATED compatibility shape of `getHubAddresses` (D729 amendment, kept
33173
+ * for addons built against it): `cluster` is the `internal` role, `browser`
33174
+ * the `publicEndpoint` role; `override` is the flagged address.
33175
+ */
33176
+ var HubAddressSnapshotSchema = object({
33177
+ override: string().nullable(),
33178
+ resolved: string().nullable(),
33179
+ source: _enum([
33180
+ "override",
33181
+ "auto",
33182
+ "none"
33183
+ ])
33184
+ });
33185
+ var HubAddressesSchema = object({
33186
+ cluster: HubAddressSnapshotSchema,
33187
+ browser: HubAddressSnapshotSchema
33188
+ });
33189
+ /**
33190
+ * What an address is used for (`hub-address.ts`, D734). `appConnections` is
33191
+ * many-valued; `notificationTaps`, `publicEndpoint` and `internal` are carried
33192
+ * by at most one address.
33193
+ */
33194
+ var HubAddressRoleSchema = _enum(HUB_ADDRESS_ROLES);
33195
+ var RoleSourceSchema = _enum([
33196
+ "flagged",
33197
+ "auto",
33198
+ "none"
33199
+ ]);
33200
+ /** One single-valued role: the flagged address, the one in use, and why. */
33201
+ var HubAddressRoleResolutionSchema = object({
33202
+ /** The address carrying the flag, or null = automatic. */
33203
+ flagged: string().nullable(),
33204
+ /** The address in use, or null when nothing qualifies (never loopback). */
33205
+ resolved: string().nullable(),
33206
+ source: RoleSourceSchema
33207
+ });
33208
+ var HubAppConnectionsResolutionSchema = object({
33209
+ /** The addresses flagged `appConnections`, or empty = automatic. */
33210
+ flagged: array(string()).readonly(),
33211
+ /** What the apps race right now. */
33212
+ resolved: array(string()).readonly(),
33213
+ source: RoleSourceSchema
33214
+ });
33215
+ var HubAddressBookSchema = object({
33216
+ rows: array(ConnectionEndpointSchema.extend({
33217
+ /** In the hub's detected palette right now. */
33218
+ detected: boolean(),
33219
+ /** Entered by the operator (removable). */
33220
+ custom: boolean(),
33221
+ /** The roles explicitly flagged on this address. */
33222
+ flags: array(HubAddressRoleSchema).readonly(),
33223
+ /** The roles this address serves right now — flagged or automatic. */
33224
+ inUse: array(HubAddressRoleSchema).readonly(),
33225
+ /** The roles this address may be flagged with. */
33226
+ eligible: array(HubAddressRoleSchema).readonly()
33227
+ })).readonly(),
33228
+ roles: object({
33229
+ appConnections: HubAppConnectionsResolutionSchema,
33230
+ notificationTaps: HubAddressRoleResolutionSchema,
33231
+ internal: HubAddressRoleResolutionSchema,
33232
+ publicEndpoint: HubAddressRoleResolutionSchema
33233
+ }),
33234
+ /** The `hub=` an app link carries (D709), or null. */
33235
+ appLinkHub: string().nullable()
33236
+ });
33070
33237
  var AllowedAddressesSchema = object({
33071
33238
  /**
33072
33239
  * Allowlist of interface addresses operators have explicitly opted
@@ -33110,10 +33277,27 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
33110
33277
  * tunnel always emits `https://` regardless. */
33111
33278
  scheme: _enum(["http", "https"]).optional(),
33112
33279
  /** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
33113
- * an address notification links can be flagged with, not a hub
33280
+ * an address notification taps can be flagged with, not a hub
33114
33281
  * route. Default `false`: racers and rankers never see it. */
33115
33282
  includeAppLink: boolean().optional()
33116
- }), 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, {
33283
+ }), 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(object({ scheme: _enum(["http", "https"]).optional() }).optional(), HubAddressBookSchema), method(object({
33284
+ baseUrl: string(),
33285
+ label: string().max(80)
33286
+ }), HubAddressBookSchema, {
33287
+ kind: "mutation",
33288
+ auth: "admin"
33289
+ }), method(object({ baseUrl: string() }), HubAddressBookSchema, {
33290
+ kind: "mutation",
33291
+ auth: "admin"
33292
+ }), method(object({
33293
+ role: HubAddressRoleSchema,
33294
+ baseUrl: string().nullable(),
33295
+ enabled: boolean(),
33296
+ acceptInsecureHttp: boolean().optional()
33297
+ }), HubAddressBookSchema, {
33298
+ kind: "mutation",
33299
+ auth: "admin"
33300
+ }), method(_void(), HubAddressesSchema), 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, {
33117
33301
  kind: "mutation",
33118
33302
  auth: "admin"
33119
33303
  }), method(object({
@@ -45147,12 +45331,24 @@ Object.freeze({
45147
45331
  addonId: null,
45148
45332
  access: "view"
45149
45333
  },
45334
+ "localNetwork.addCustomAddress": {
45335
+ capName: "local-network",
45336
+ capScope: "system",
45337
+ addonId: null,
45338
+ access: "create"
45339
+ },
45150
45340
  "localNetwork.downloadCa": {
45151
45341
  capName: "local-network",
45152
45342
  capScope: "system",
45153
45343
  addonId: null,
45154
45344
  access: "view"
45155
45345
  },
45346
+ "localNetwork.getAddresses": {
45347
+ capName: "local-network",
45348
+ capScope: "system",
45349
+ addonId: null,
45350
+ access: "view"
45351
+ },
45156
45352
  "localNetwork.getAllowedAddresses": {
45157
45353
  capName: "local-network",
45158
45354
  capScope: "system",
@@ -45165,6 +45361,12 @@ Object.freeze({
45165
45361
  addonId: null,
45166
45362
  access: "view"
45167
45363
  },
45364
+ "localNetwork.getHubAddresses": {
45365
+ capName: "local-network",
45366
+ capScope: "system",
45367
+ addonId: null,
45368
+ access: "view"
45369
+ },
45168
45370
  "localNetwork.getNotificationEndpoint": {
45169
45371
  capName: "local-network",
45170
45372
  capScope: "system",
@@ -45201,6 +45403,12 @@ Object.freeze({
45201
45403
  addonId: null,
45202
45404
  access: "create"
45203
45405
  },
45406
+ "localNetwork.removeCustomAddress": {
45407
+ capName: "local-network",
45408
+ capScope: "system",
45409
+ addonId: null,
45410
+ access: "delete"
45411
+ },
45204
45412
  "localNetwork.resetAllowlistToBestMatch": {
45205
45413
  capName: "local-network",
45206
45414
  capScope: "system",
@@ -45213,6 +45421,12 @@ Object.freeze({
45213
45421
  addonId: null,
45214
45422
  access: "create"
45215
45423
  },
45424
+ "localNetwork.setAddressRole": {
45425
+ capName: "local-network",
45426
+ capScope: "system",
45427
+ addonId: null,
45428
+ access: "create"
45429
+ },
45216
45430
  "localNetwork.setAllowedAddresses": {
45217
45431
  capName: "local-network",
45218
45432
  capScope: "system",
@@ -49467,6 +49681,12 @@ Object.freeze({
49467
49681
  addonId: null,
49468
49682
  access: "create"
49469
49683
  },
49684
+ "webrtcSession.applyDownlinkProbe": {
49685
+ capName: "webrtc-session",
49686
+ capScope: "device",
49687
+ addonId: null,
49688
+ access: "create"
49689
+ },
49470
49690
  "webrtcSession.closeSession": {
49471
49691
  capName: "webrtc-session",
49472
49692
  capScope: "device",
@@ -53607,6 +53827,11 @@ Object.freeze({
53607
53827
  form: "single",
53608
53828
  optional: false
53609
53829
  }],
53830
+ "webrtcSession.applyDownlinkProbe": [{
53831
+ name: "deviceId",
53832
+ form: "single",
53833
+ optional: false
53834
+ }],
53610
53835
  "webrtcSession.closeSession": [{
53611
53836
  name: "deviceId",
53612
53837
  form: "single",
@@ -54140,7 +54365,7 @@ var STATE_SUMMARY_VARS = [
54140
54365
  {
54141
54366
  name: "summarySection",
54142
54367
  label: "Summary: this section",
54143
- description: "The section a per-section summary row is about (D698); on a summary sent as one message, every section it reports, comma-separated.",
54368
+ description: "The section a per-section summary row is about; on a summary sent as one message, every section it reports, comma-separated.",
54144
54369
  example: "Batterie scariche",
54145
54370
  group: "system",
54146
54371
  families: ["rule"],
@@ -55656,7 +55881,7 @@ function createClipStreamHandler(deps) {
55656
55881
  * Node-only (`node:child_process`), so it lives under `@camstack/types/node`.
55657
55882
  */
55658
55883
  /** The detail a site refusing for want of a binary puts in its refusal. */
55659
- var NO_PINNED_FFMPEG_DETAIL = "no pinned ffmpeg on this node (D540)";
55884
+ var NO_PINNED_FFMPEG_DETAIL = "no pinned ffmpeg on this node";
55660
55885
  /**
55661
55886
  * {@link pinnedFfmpegSpawner}, asked at the point of use through the node's
55662
55887
  * resolver (`memoizePinnedFfmpeg`). A site that keeps the RESOLVER rather than
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-hikvision",
3
- "version": "1.2.144",
3
+ "version": "1.2.145",
4
4
  "description": "Hikvision camera device provider addon for CamStack — ISAPI over HTTP(S) with digest auth (snapshot, alarm stream, RTSP discovery)",
5
5
  "keywords": [
6
6
  "camstack",