@camstack/addon-pipeline 1.2.120 → 1.2.122

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 (35) hide show
  1. package/dist/{addon-utils-MH-YN_oH.js → addon-utils-DjiHGIRF.js} +1 -1
  2. package/dist/audio-analyzer/index.js +3 -3
  3. package/dist/audio-analyzer/index.mjs +2 -2
  4. package/dist/detection-pipeline/index.js +5 -5
  5. package/dist/detection-pipeline/index.mjs +3 -3
  6. package/dist/{dist-CmqBKO-v.mjs → dist-B7rIp5qQ.mjs} +76 -22
  7. package/dist/{dist-CvpyuIHg.js → dist-DomdkRKL.js} +76 -22
  8. package/dist/{event-loop-stall-monitor-BOHxP7W6.js → event-loop-stall-monitor-ChA4AQ1D.js} +1 -1
  9. package/dist/{event-loop-stall-monitor-kh4gmJ-6.mjs → event-loop-stall-monitor-mvxKgrNV.mjs} +1 -1
  10. package/dist/{lazy-sharp-BzJLgOw9.js → lazy-sharp-BSeW3qY5.js} +1 -1
  11. package/dist/motion-wasm/index.js +2 -2
  12. package/dist/motion-wasm/index.mjs +1 -1
  13. package/dist/pipeline-runner/index.js +4 -4
  14. package/dist/pipeline-runner/index.mjs +3 -3
  15. package/dist/{process-memory-U6kkHBR7.js → process-memory-BtpLNnXq.js} +1 -1
  16. package/dist/{process-memory-C2vefk7-.mjs → process-memory-XHs-umae.mjs} +1 -1
  17. package/dist/recorder/index.js +125 -27
  18. package/dist/recorder/index.mjs +124 -26
  19. package/dist/{segment-demux-js-CTgNaQTI.js → segment-demux-js-CFIIJsfc.js} +1 -1
  20. package/dist/{segment-demux-js-xjK1LW_t.mjs → segment-demux-js-Cc5Jubdu.mjs} +1 -1
  21. package/dist/session-decode/decode-worker-child.js +2 -2
  22. package/dist/session-decode/decode-worker-child.mjs +1 -1
  23. package/dist/stream-broker/_stub.js +1 -1
  24. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BdP-MWLF.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-P-WP2KSi.mjs} +3 -3
  25. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Do2DEtRt.mjs +26 -0
  26. package/dist/stream-broker/demux-worker-child.js +1 -1
  27. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  28. package/dist/stream-broker/{hostInit-zKdlTmuo.mjs → hostInit-D6O20fld.mjs} +3 -3
  29. package/dist/stream-broker/index.js +35 -5
  30. package/dist/stream-broker/index.mjs +35 -5
  31. package/dist/stream-broker/remoteEntry.js +1 -1
  32. package/dist/{worker-protocol-CElzXfEW.mjs → worker-protocol-CrHJXGHV.mjs} +1 -1
  33. package/dist/{worker-protocol-DGYGCx9K.js → worker-protocol-DQ5DPOFD.js} +1 -1
  34. package/package.json +1 -1
  35. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-D-NFPV_g.mjs +0 -26
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-CvpyuIHg.js");
1
+ const require_dist = require("./dist-DomdkRKL.js");
2
2
  require("node:crypto");
3
3
  let node_path = require("node:path");
4
4
  node_path = require_dist.__toESM(node_path, 1);
@@ -2,9 +2,9 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-CvpyuIHg.js");
6
- const require_process_memory = require("../process-memory-U6kkHBR7.js");
7
- const require_addon_utils = require("../addon-utils-MH-YN_oH.js");
5
+ const require_dist = require("../dist-DomdkRKL.js");
6
+ const require_process_memory = require("../process-memory-BtpLNnXq.js");
7
+ const require_addon_utils = require("../addon-utils-DjiHGIRF.js");
8
8
  let node_path = require("node:path");
9
9
  node_path = require_dist.__toESM(node_path);
10
10
  let node_fs = require("node:fs");
@@ -1,6 +1,6 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { A as audioAnalyzerCapability, Dt as hydrateSchema, J as mapAudioLabelToMacro, St as BaseAddon, _ as HF_BASE_URL, gt as errMsg, k as audioAnalysisCapability, lt as resolvePoolMemoryPolicy, n as AUDIO_BACKEND_CHOICES, s as DEFAULT_AUDIO_ANALYZER_CONFIG, x as PoolMemoryWatchdog } from "../dist-CmqBKO-v.mjs";
3
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-C2vefk7-.mjs";
2
+ import { A as audioAnalyzerCapability, Dt as hydrateSchema, J as mapAudioLabelToMacro, St as BaseAddon, _ as HF_BASE_URL, gt as errMsg, k as audioAnalysisCapability, lt as resolvePoolMemoryPolicy, n as AUDIO_BACKEND_CHOICES, s as DEFAULT_AUDIO_ANALYZER_CONFIG, x as PoolMemoryWatchdog } from "../dist-B7rIp5qQ.mjs";
3
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-XHs-umae.mjs";
4
4
  import { i as downloadFile } from "../addon-utils-CgBCF-mE.mjs";
5
5
  import * as path$1 from "node:path";
6
6
  import * as fs from "node:fs";
@@ -2,11 +2,11 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-CvpyuIHg.js");
6
- const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-BOHxP7W6.js");
7
- const require_lazy_sharp = require("../lazy-sharp-BzJLgOw9.js");
8
- const require_process_memory = require("../process-memory-U6kkHBR7.js");
9
- const require_addon_utils = require("../addon-utils-MH-YN_oH.js");
5
+ const require_dist = require("../dist-DomdkRKL.js");
6
+ const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-ChA4AQ1D.js");
7
+ const require_lazy_sharp = require("../lazy-sharp-BSeW3qY5.js");
8
+ const require_process_memory = require("../process-memory-BtpLNnXq.js");
9
+ const require_addon_utils = require("../addon-utils-DjiHGIRF.js");
10
10
  let sharp = require("sharp");
11
11
  sharp = require_dist.__toESM(sharp);
12
12
  let node_child_process = require("node:child_process");
@@ -1,8 +1,8 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { $ as pickClusterStepModels, D as YAMNET_TO_MACRO, Dt as hydrateSchema, Et as createEvent, Ft as sleep, G as evaluateZoneRules, Gt as string, I as defaultDeviceFor$1, Kt as union, Lt as array, Mt as parseJsonUnknown, St as BaseAddon, Ut as object, V as detectionPipelineCapability, W as enumerateInferenceDevices, Z as overlayClusterStepSettings, c as DEFAULT_CLUSTER_STEP_MODELS, dt as runtimeDevices$1, et as pickClusterStepSettings, gt as errMsg, jt as nodePin, l as DEFAULT_CLUSTER_STEP_SETTINGS, lt as resolvePoolMemoryPolicy, mt as supportedRuntimes$1, p as DEVICE_BACKEND_TO_FORMAT, q as inferModelProvider, qt as EventCategory, rt as pipelineExecutorCapability, st as resolveClusterStepModelId, t as APPLE_SA_TO_MACRO, x as PoolMemoryWatchdog } from "../dist-CmqBKO-v.mjs";
3
- import { a as ALL_PIPELINE_STEPS, c as getDefaultModelForFormatFromDef, d as resolveModelForFormat, f as landmarkPrecisionVerdict, l as getStep, n as startEventLoopStallMonitor, o as ALL_STEPS, r as localFrameRegistry, s as getDefaultModelForFormat, u as getStepDefinition } from "../event-loop-stall-monitor-kh4gmJ-6.mjs";
2
+ import { $ as pickClusterStepModels, D as YAMNET_TO_MACRO, Dt as hydrateSchema, Et as createEvent, Ft as sleep, G as evaluateZoneRules, Gt as string, I as defaultDeviceFor$1, Kt as union, Lt as array, Mt as parseJsonUnknown, St as BaseAddon, Ut as object, V as detectionPipelineCapability, W as enumerateInferenceDevices, Z as overlayClusterStepSettings, c as DEFAULT_CLUSTER_STEP_MODELS, dt as runtimeDevices$1, et as pickClusterStepSettings, gt as errMsg, jt as nodePin, l as DEFAULT_CLUSTER_STEP_SETTINGS, lt as resolvePoolMemoryPolicy, mt as supportedRuntimes$1, p as DEVICE_BACKEND_TO_FORMAT, q as inferModelProvider, qt as EventCategory, rt as pipelineExecutorCapability, st as resolveClusterStepModelId, t as APPLE_SA_TO_MACRO, x as PoolMemoryWatchdog } from "../dist-B7rIp5qQ.mjs";
3
+ import { a as ALL_PIPELINE_STEPS, c as getDefaultModelForFormatFromDef, d as resolveModelForFormat, f as landmarkPrecisionVerdict, l as getStep, n as startEventLoopStallMonitor, o as ALL_STEPS, r as localFrameRegistry, s as getDefaultModelForFormat, u as getStepDefinition } from "../event-loop-stall-monitor-mvxKgrNV.mjs";
4
4
  import { t as getSharp } from "../lazy-sharp-6oymT_yf.mjs";
5
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-C2vefk7-.mjs";
5
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-XHs-umae.mjs";
6
6
  import { a as ensureModel, o as isModelDownloaded, r as deleteModelFromDisk } from "../addon-utils-CgBCF-mE.mjs";
7
7
  import sharp from "sharp";
8
8
  import { spawn } from "node:child_process";
@@ -5817,6 +5817,13 @@ var BaseAddon = class {
5817
5817
  _readinessGeneration = typeof crypto !== "undefined" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).slice(2, 14);
5818
5818
  /** Capability names this addon registered at init — used to emit matching `down` events on shutdown. */
5819
5819
  _registeredCapNames = [];
5820
+ /**
5821
+ * True only after `readAddonStore` actually answered. Constructor
5822
+ * defaults look like stored config when the store is down — a forked
5823
+ * addon that auto-starts from those defaults (cloudflare-tunnel quick
5824
+ * mode, 2026-08-25) is not "the operator chose this".
5825
+ */
5826
+ settingsStoreReady = false;
5820
5827
  /** Default config values. Provided via constructor. */
5821
5828
  defaults;
5822
5829
  constructor(defaults) {
@@ -6217,7 +6224,9 @@ var BaseAddon = class {
6217
6224
  ];
6218
6225
  let lastErr;
6219
6226
  for (let attempt = 0; attempt <= delaysMs.length; attempt++) try {
6220
- return await settings.readAddonStore() ?? {};
6227
+ const stored = await settings.readAddonStore() ?? {};
6228
+ this.settingsStoreReady = true;
6229
+ return stored;
6221
6230
  } catch (err) {
6222
6231
  lastErr = err;
6223
6232
  const msg = err instanceof Error ? err.message : String(err);
@@ -6225,6 +6234,7 @@ var BaseAddon = class {
6225
6234
  if (attempt === delaysMs.length) break;
6226
6235
  await new Promise((r) => setTimeout(r, delaysMs[attempt]));
6227
6236
  }
6237
+ this.settingsStoreReady = false;
6228
6238
  this._ctx?.logger?.warn?.("readAddonStore: settings-store unavailable after retries — using defaults", { meta: { error: lastErr instanceof Error ? lastErr.message : String(lastErr) } });
6229
6239
  return {};
6230
6240
  }
@@ -13249,6 +13259,27 @@ var LinkedDeviceSchema = object({
13249
13259
  features: array(string()),
13250
13260
  producesTrackedEvents: boolean().optional()
13251
13261
  });
13262
+ /** One camera's resolved linked set, tagged with the camera it belongs to.
13263
+ * The batch answer needs the tag; the single-device answer already has it
13264
+ * from the input, which is why `getLinkedDevices` keeps the untagged shape. */
13265
+ var LinkedDevicesForDeviceSchema = object({
13266
+ deviceId: number(),
13267
+ mode: LinkedDevicesModeSchema,
13268
+ devices: array(LinkedDeviceSchema)
13269
+ });
13270
+ /** One device's binding map — the shape `getBindings`, `getBindingsBatch` and
13271
+ * `getAllBindings` all answer in. Declared once: three copies of the same
13272
+ * object literal is exactly how the three drift apart. */
13273
+ var DeviceBindingsForDeviceSchema = object({
13274
+ deviceId: number(),
13275
+ entries: array(object({
13276
+ capName: string(),
13277
+ kind: _enum(["native", "wrapped"]),
13278
+ providerAddonId: string(),
13279
+ providerNodeId: string(),
13280
+ nativeAddonId: string()
13281
+ }))
13282
+ });
13252
13283
  var SavedDeviceRowSchema = object({
13253
13284
  /** Numeric id reserved at allocateDeviceId time. */
13254
13285
  id: number(),
@@ -13474,11 +13505,25 @@ method(object({
13474
13505
  projection: _enum(["full", "slim"]).optional(),
13475
13506
  /** Return only camera devices. Filtering server-side instead of
13476
13507
  * shipping 293 rows to find 12. */
13477
- isCamera: boolean().optional()
13508
+ isCamera: boolean().optional(),
13509
+ /**
13510
+ * Return only these device ids. For the caller that already KNOWS the
13511
+ * handful it wants and needs a field the id-bearing answer does not
13512
+ * carry — the viewer's linked-devices panel joins `type` and `online`
13513
+ * onto ~8 linked ids and, unfiltered, dragged the fleet across to do
13514
+ * it: 433 KB slim / 958 KB full for 967 devices, on a query that
13515
+ * refetches on the reconcile interval, on a phone.
13516
+ *
13517
+ * Safe to send at a hub that predates it: Zod STRIPS unknown input
13518
+ * keys rather than rejecting them (verified against the live hub
13519
+ * 2026-08-25 — 967 rows came back), so an old hub answers exactly what
13520
+ * it answers today and the caller filters as it already does.
13521
+ */
13522
+ deviceIds: array(number()).optional()
13478
13523
  }), array(DeviceInfoSchema)), method(object({ deviceId: number() }), DeviceInfoSchema.nullable()), method(object({ parentDeviceId: number() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }), object({
13479
13524
  mode: LinkedDevicesModeSchema,
13480
13525
  devices: array(LinkedDeviceSchema)
13481
- })), method(object({ deviceId: number() }), array(StreamSourceEntrySchema$1)), method(object({ deviceId: number() }), array(ConfigEntrySchema)), method(object({ deviceId: number() }), ConfigUISchemaOutput), method(object({
13526
+ })), method(object({ deviceIds: array(number()) }), array(LinkedDevicesForDeviceSchema)), method(object({ deviceId: number() }), array(StreamSourceEntrySchema$1)), method(object({ deviceId: number() }), array(ConfigEntrySchema)), method(object({ deviceId: number() }), ConfigUISchemaOutput), method(object({
13482
13527
  deviceId: number(),
13483
13528
  values: record(string(), unknown())
13484
13529
  }), object({ success: literal(true) }), {
@@ -13505,25 +13550,7 @@ method(object({
13505
13550
  }), method(object({ deviceId: number() }), array(StreamProbeResultSchema), {
13506
13551
  kind: "mutation",
13507
13552
  auth: "admin"
13508
- }), method(object({ deviceId: number() }), object({
13509
- deviceId: number(),
13510
- entries: array(object({
13511
- capName: string(),
13512
- kind: _enum(["native", "wrapped"]),
13513
- providerAddonId: string(),
13514
- providerNodeId: string(),
13515
- nativeAddonId: string()
13516
- }))
13517
- })), method(object({}), array(object({
13518
- deviceId: number(),
13519
- entries: array(object({
13520
- capName: string(),
13521
- kind: _enum(["native", "wrapped"]),
13522
- providerAddonId: string(),
13523
- providerNodeId: string(),
13524
- nativeAddonId: string()
13525
- }))
13526
- }))), method(object({
13553
+ }), method(object({ deviceId: number() }), DeviceBindingsForDeviceSchema), method(object({ deviceIds: array(number()) }), array(DeviceBindingsForDeviceSchema)), method(object({}), array(DeviceBindingsForDeviceSchema)), method(object({
13527
13554
  deviceId: number(),
13528
13555
  capName: string(),
13529
13556
  wrapperAddonId: string(),
@@ -30096,6 +30123,12 @@ Object.freeze({
30096
30123
  addonId: null,
30097
30124
  access: "view"
30098
30125
  },
30126
+ "deviceManager.getBindingsBatch": {
30127
+ capName: "device-manager",
30128
+ capScope: "system",
30129
+ addonId: null,
30130
+ access: "view"
30131
+ },
30099
30132
  "deviceManager.getChildren": {
30100
30133
  capName: "device-manager",
30101
30134
  capScope: "system",
@@ -30156,6 +30189,12 @@ Object.freeze({
30156
30189
  addonId: null,
30157
30190
  access: "view"
30158
30191
  },
30192
+ "deviceManager.getLinkedDevicesBatch": {
30193
+ capName: "device-manager",
30194
+ capScope: "system",
30195
+ addonId: null,
30196
+ access: "view"
30197
+ },
30159
30198
  "deviceManager.getRoleDisplayDefaults": {
30160
30199
  capName: "device-manager",
30161
30200
  capScope: "system",
@@ -34803,6 +34842,11 @@ Object.freeze({
34803
34842
  form: "single",
34804
34843
  optional: false
34805
34844
  }],
34845
+ "deviceManager.getBindingsBatch": [{
34846
+ name: "deviceIds",
34847
+ form: "array",
34848
+ optional: false
34849
+ }],
34806
34850
  "deviceManager.getChildren": [{
34807
34851
  name: "parentDeviceId",
34808
34852
  form: "single",
@@ -34848,6 +34892,11 @@ Object.freeze({
34848
34892
  form: "single",
34849
34893
  optional: false
34850
34894
  }],
34895
+ "deviceManager.getLinkedDevicesBatch": [{
34896
+ name: "deviceIds",
34897
+ form: "array",
34898
+ optional: false
34899
+ }],
34851
34900
  "deviceManager.getSettingsSchema": [{
34852
34901
  name: "deviceId",
34853
34902
  form: "single",
@@ -34868,6 +34917,11 @@ Object.freeze({
34868
34917
  form: "single",
34869
34918
  optional: false
34870
34919
  }],
34920
+ "deviceManager.listAll": [{
34921
+ name: "deviceIds",
34922
+ form: "array",
34923
+ optional: true
34924
+ }],
34871
34925
  "deviceManager.loadConfig": [{
34872
34926
  name: "deviceId",
34873
34927
  form: "single",
@@ -5840,6 +5840,13 @@ var BaseAddon = class {
5840
5840
  _readinessGeneration = typeof crypto !== "undefined" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).slice(2, 14);
5841
5841
  /** Capability names this addon registered at init — used to emit matching `down` events on shutdown. */
5842
5842
  _registeredCapNames = [];
5843
+ /**
5844
+ * True only after `readAddonStore` actually answered. Constructor
5845
+ * defaults look like stored config when the store is down — a forked
5846
+ * addon that auto-starts from those defaults (cloudflare-tunnel quick
5847
+ * mode, 2026-08-25) is not "the operator chose this".
5848
+ */
5849
+ settingsStoreReady = false;
5843
5850
  /** Default config values. Provided via constructor. */
5844
5851
  defaults;
5845
5852
  constructor(defaults) {
@@ -6240,7 +6247,9 @@ var BaseAddon = class {
6240
6247
  ];
6241
6248
  let lastErr;
6242
6249
  for (let attempt = 0; attempt <= delaysMs.length; attempt++) try {
6243
- return await settings.readAddonStore() ?? {};
6250
+ const stored = await settings.readAddonStore() ?? {};
6251
+ this.settingsStoreReady = true;
6252
+ return stored;
6244
6253
  } catch (err) {
6245
6254
  lastErr = err;
6246
6255
  const msg = err instanceof Error ? err.message : String(err);
@@ -6248,6 +6257,7 @@ var BaseAddon = class {
6248
6257
  if (attempt === delaysMs.length) break;
6249
6258
  await new Promise((r) => setTimeout(r, delaysMs[attempt]));
6250
6259
  }
6260
+ this.settingsStoreReady = false;
6251
6261
  this._ctx?.logger?.warn?.("readAddonStore: settings-store unavailable after retries — using defaults", { meta: { error: lastErr instanceof Error ? lastErr.message : String(lastErr) } });
6252
6262
  return {};
6253
6263
  }
@@ -13272,6 +13282,27 @@ var LinkedDeviceSchema = object({
13272
13282
  features: array(string()),
13273
13283
  producesTrackedEvents: boolean().optional()
13274
13284
  });
13285
+ /** One camera's resolved linked set, tagged with the camera it belongs to.
13286
+ * The batch answer needs the tag; the single-device answer already has it
13287
+ * from the input, which is why `getLinkedDevices` keeps the untagged shape. */
13288
+ var LinkedDevicesForDeviceSchema = object({
13289
+ deviceId: number(),
13290
+ mode: LinkedDevicesModeSchema,
13291
+ devices: array(LinkedDeviceSchema)
13292
+ });
13293
+ /** One device's binding map — the shape `getBindings`, `getBindingsBatch` and
13294
+ * `getAllBindings` all answer in. Declared once: three copies of the same
13295
+ * object literal is exactly how the three drift apart. */
13296
+ var DeviceBindingsForDeviceSchema = object({
13297
+ deviceId: number(),
13298
+ entries: array(object({
13299
+ capName: string(),
13300
+ kind: _enum(["native", "wrapped"]),
13301
+ providerAddonId: string(),
13302
+ providerNodeId: string(),
13303
+ nativeAddonId: string()
13304
+ }))
13305
+ });
13275
13306
  var SavedDeviceRowSchema = object({
13276
13307
  /** Numeric id reserved at allocateDeviceId time. */
13277
13308
  id: number(),
@@ -13497,11 +13528,25 @@ method(object({
13497
13528
  projection: _enum(["full", "slim"]).optional(),
13498
13529
  /** Return only camera devices. Filtering server-side instead of
13499
13530
  * shipping 293 rows to find 12. */
13500
- isCamera: boolean().optional()
13531
+ isCamera: boolean().optional(),
13532
+ /**
13533
+ * Return only these device ids. For the caller that already KNOWS the
13534
+ * handful it wants and needs a field the id-bearing answer does not
13535
+ * carry — the viewer's linked-devices panel joins `type` and `online`
13536
+ * onto ~8 linked ids and, unfiltered, dragged the fleet across to do
13537
+ * it: 433 KB slim / 958 KB full for 967 devices, on a query that
13538
+ * refetches on the reconcile interval, on a phone.
13539
+ *
13540
+ * Safe to send at a hub that predates it: Zod STRIPS unknown input
13541
+ * keys rather than rejecting them (verified against the live hub
13542
+ * 2026-08-25 — 967 rows came back), so an old hub answers exactly what
13543
+ * it answers today and the caller filters as it already does.
13544
+ */
13545
+ deviceIds: array(number()).optional()
13501
13546
  }), array(DeviceInfoSchema)), method(object({ deviceId: number() }), DeviceInfoSchema.nullable()), method(object({ parentDeviceId: number() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }), object({
13502
13547
  mode: LinkedDevicesModeSchema,
13503
13548
  devices: array(LinkedDeviceSchema)
13504
- })), method(object({ deviceId: number() }), array(StreamSourceEntrySchema$1)), method(object({ deviceId: number() }), array(ConfigEntrySchema)), method(object({ deviceId: number() }), ConfigUISchemaOutput), method(object({
13549
+ })), method(object({ deviceIds: array(number()) }), array(LinkedDevicesForDeviceSchema)), method(object({ deviceId: number() }), array(StreamSourceEntrySchema$1)), method(object({ deviceId: number() }), array(ConfigEntrySchema)), method(object({ deviceId: number() }), ConfigUISchemaOutput), method(object({
13505
13550
  deviceId: number(),
13506
13551
  values: record(string(), unknown())
13507
13552
  }), object({ success: literal(true) }), {
@@ -13528,25 +13573,7 @@ method(object({
13528
13573
  }), method(object({ deviceId: number() }), array(StreamProbeResultSchema), {
13529
13574
  kind: "mutation",
13530
13575
  auth: "admin"
13531
- }), method(object({ deviceId: number() }), object({
13532
- deviceId: number(),
13533
- entries: array(object({
13534
- capName: string(),
13535
- kind: _enum(["native", "wrapped"]),
13536
- providerAddonId: string(),
13537
- providerNodeId: string(),
13538
- nativeAddonId: string()
13539
- }))
13540
- })), method(object({}), array(object({
13541
- deviceId: number(),
13542
- entries: array(object({
13543
- capName: string(),
13544
- kind: _enum(["native", "wrapped"]),
13545
- providerAddonId: string(),
13546
- providerNodeId: string(),
13547
- nativeAddonId: string()
13548
- }))
13549
- }))), method(object({
13576
+ }), method(object({ deviceId: number() }), DeviceBindingsForDeviceSchema), method(object({ deviceIds: array(number()) }), array(DeviceBindingsForDeviceSchema)), method(object({}), array(DeviceBindingsForDeviceSchema)), method(object({
13550
13577
  deviceId: number(),
13551
13578
  capName: string(),
13552
13579
  wrapperAddonId: string(),
@@ -30119,6 +30146,12 @@ Object.freeze({
30119
30146
  addonId: null,
30120
30147
  access: "view"
30121
30148
  },
30149
+ "deviceManager.getBindingsBatch": {
30150
+ capName: "device-manager",
30151
+ capScope: "system",
30152
+ addonId: null,
30153
+ access: "view"
30154
+ },
30122
30155
  "deviceManager.getChildren": {
30123
30156
  capName: "device-manager",
30124
30157
  capScope: "system",
@@ -30179,6 +30212,12 @@ Object.freeze({
30179
30212
  addonId: null,
30180
30213
  access: "view"
30181
30214
  },
30215
+ "deviceManager.getLinkedDevicesBatch": {
30216
+ capName: "device-manager",
30217
+ capScope: "system",
30218
+ addonId: null,
30219
+ access: "view"
30220
+ },
30182
30221
  "deviceManager.getRoleDisplayDefaults": {
30183
30222
  capName: "device-manager",
30184
30223
  capScope: "system",
@@ -34826,6 +34865,11 @@ Object.freeze({
34826
34865
  form: "single",
34827
34866
  optional: false
34828
34867
  }],
34868
+ "deviceManager.getBindingsBatch": [{
34869
+ name: "deviceIds",
34870
+ form: "array",
34871
+ optional: false
34872
+ }],
34829
34873
  "deviceManager.getChildren": [{
34830
34874
  name: "parentDeviceId",
34831
34875
  form: "single",
@@ -34871,6 +34915,11 @@ Object.freeze({
34871
34915
  form: "single",
34872
34916
  optional: false
34873
34917
  }],
34918
+ "deviceManager.getLinkedDevicesBatch": [{
34919
+ name: "deviceIds",
34920
+ form: "array",
34921
+ optional: false
34922
+ }],
34874
34923
  "deviceManager.getSettingsSchema": [{
34875
34924
  name: "deviceId",
34876
34925
  form: "single",
@@ -34891,6 +34940,11 @@ Object.freeze({
34891
34940
  form: "single",
34892
34941
  optional: false
34893
34942
  }],
34943
+ "deviceManager.listAll": [{
34944
+ name: "deviceIds",
34945
+ form: "array",
34946
+ optional: true
34947
+ }],
34894
34948
  "deviceManager.loadConfig": [{
34895
34949
  name: "deviceId",
34896
34950
  form: "single",
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-CvpyuIHg.js");
1
+ const require_dist = require("./dist-DomdkRKL.js");
2
2
  let node_crypto = require("node:crypto");
3
3
  let node_perf_hooks = require("node:perf_hooks");
4
4
  //#region src/detection-pipeline/registry/model-catalogs.ts
@@ -1,4 +1,4 @@
1
- import { K as hfModelUrl, a as COCO_80_LABELS, j as audioKindId, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS } from "./dist-CmqBKO-v.mjs";
1
+ import { K as hfModelUrl, a as COCO_80_LABELS, j as audioKindId, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS } from "./dist-B7rIp5qQ.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { PerformanceObserver } from "node:perf_hooks";
4
4
  //#region src/detection-pipeline/registry/model-catalogs.ts
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-CvpyuIHg.js");
1
+ const require_dist = require("./dist-DomdkRKL.js");
2
2
  let node_url = require("node:url");
3
3
  let node_module = require("node:module");
4
4
  let node_path = require("node:path");
@@ -2,8 +2,8 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-CvpyuIHg.js");
6
- const require_lazy_sharp = require("../lazy-sharp-BzJLgOw9.js");
5
+ const require_dist = require("../dist-DomdkRKL.js");
6
+ const require_lazy_sharp = require("../lazy-sharp-BSeW3qY5.js");
7
7
  let node_path = require("node:path");
8
8
  let node_fs = require("node:fs");
9
9
  //#region src/motion-wasm/wasm-motion-detector.ts
@@ -1,4 +1,4 @@
1
- import { Dt as hydrateSchema, G as evaluateZoneRules, St as BaseAddon, Tt as DeviceType, X as motionDetectionCapability } from "../dist-CmqBKO-v.mjs";
1
+ import { Dt as hydrateSchema, G as evaluateZoneRules, St as BaseAddon, Tt as DeviceType, X as motionDetectionCapability } from "../dist-B7rIp5qQ.mjs";
2
2
  import { t as getSharp } from "../lazy-sharp-6oymT_yf.mjs";
3
3
  import { join } from "node:path";
4
4
  import { readFileSync } from "node:fs";
@@ -2,11 +2,11 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-CvpyuIHg.js");
6
- const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-BOHxP7W6.js");
7
- const require_worker_protocol = require("../worker-protocol-DGYGCx9K.js");
5
+ const require_dist = require("../dist-DomdkRKL.js");
6
+ const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-ChA4AQ1D.js");
7
+ const require_worker_protocol = require("../worker-protocol-DQ5DPOFD.js");
8
8
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
9
- const require_lazy_sharp = require("../lazy-sharp-BzJLgOw9.js");
9
+ const require_lazy_sharp = require("../lazy-sharp-BSeW3qY5.js");
10
10
  const require_restream_intent = require("../restream-intent-Cv9x3jmu.js");
11
11
  const require_remote_restream = require("../remote-restream-CO36Sr30.js");
12
12
  let sharp = require("sharp");
@@ -1,6 +1,6 @@
1
- import { Bt as lazy, Et as createEvent, F as customAction, Gt as string, Ht as number, It as _enum, L as defineCustomActions, Lt as array, Rt as boolean, St as BaseAddon, Ut as object, Vt as literal, gt as errMsg, it as pipelineRunnerCapability, jt as nodePin, nt as pickNativeLeaseOverride, p as DEVICE_BACKEND_TO_FORMAT, qt as EventCategory, tt as pickDetailCropConvention, u as DEFAULT_DETAIL_CROP_CONVENTION, z as deriveDetailCropRect } from "../dist-CmqBKO-v.mjs";
2
- import { i as resolveFrameViewGeometry, r as localFrameRegistry, t as attributeStall, u as getStepDefinition } from "../event-loop-stall-monitor-kh4gmJ-6.mjs";
3
- import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-CElzXfEW.mjs";
1
+ import { Bt as lazy, Et as createEvent, F as customAction, Gt as string, Ht as number, It as _enum, L as defineCustomActions, Lt as array, Rt as boolean, St as BaseAddon, Ut as object, Vt as literal, gt as errMsg, it as pipelineRunnerCapability, jt as nodePin, nt as pickNativeLeaseOverride, p as DEVICE_BACKEND_TO_FORMAT, qt as EventCategory, tt as pickDetailCropConvention, u as DEFAULT_DETAIL_CROP_CONVENTION, z as deriveDetailCropRect } from "../dist-B7rIp5qQ.mjs";
2
+ import { i as resolveFrameViewGeometry, r as localFrameRegistry, t as attributeStall, u as getStepDefinition } from "../event-loop-stall-monitor-mvxKgrNV.mjs";
3
+ import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-CrHJXGHV.mjs";
4
4
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
5
5
  import { t as getSharp } from "../lazy-sharp-6oymT_yf.mjs";
6
6
  import { n as withDetectionIntent } from "../restream-intent-B4BXZra7.mjs";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-CvpyuIHg.js");
1
+ const require_dist = require("./dist-DomdkRKL.js");
2
2
  let node_child_process = require("node:child_process");
3
3
  let node_fs = require("node:fs");
4
4
  node_fs = require_dist.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { Q as parseProcStatus } from "./dist-CmqBKO-v.mjs";
1
+ import { Q as parseProcStatus } from "./dist-B7rIp5qQ.mjs";
2
2
  import { execFile } from "node:child_process";
3
3
  import * as fs from "node:fs";
4
4
  //#region src/shared/node-topology-platform.ts