@camstack/addon-pipeline 1.2.279 → 1.2.282

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 (28) hide show
  1. package/dist/audio-analyzer/index.js +2 -2
  2. package/dist/audio-analyzer/index.mjs +2 -2
  3. package/dist/{default-detection-model-6lCvep7n.js → default-detection-model-CKdfniKn.js} +1 -1
  4. package/dist/{default-detection-model-dQSwHHfx.mjs → default-detection-model-i-0An9uD.mjs} +1 -1
  5. package/dist/detection-pipeline/index.js +4 -4
  6. package/dist/detection-pipeline/index.mjs +4 -4
  7. package/dist/{dist-C1pCVJk7.mjs → dist-BVWT6DUX.mjs} +660 -1
  8. package/dist/{dist-NYjn7hkE.js → dist-CB1sRktk.js} +660 -1
  9. package/dist/motion-wasm/index.js +1 -1
  10. package/dist/motion-wasm/index.mjs +1 -1
  11. package/dist/{node-CVYY8a4y.js → node-DZw6MNVd.js} +1 -1
  12. package/dist/{node--UY0iepi.mjs → node-Dj1cgkd_.mjs} +1 -1
  13. package/dist/pipeline-runner/index.js +3 -3
  14. package/dist/pipeline-runner/index.mjs +3 -3
  15. package/dist/{process-memory-BQOfL3Ig.mjs → process-memory-C0OIYwit.mjs} +1 -1
  16. package/dist/{process-memory-DDvuSEMJ.js → process-memory-Cgxk_eAO.js} +1 -1
  17. package/dist/recorder/index.js +5 -2
  18. package/dist/recorder/index.mjs +5 -2
  19. package/dist/{segment-demux-js-B0_aAzN0.mjs → segment-demux-js-B6OsKCIg.mjs} +1 -1
  20. package/dist/{segment-demux-js-DVupBBc4.js → segment-demux-js-DNN3T56h.js} +1 -1
  21. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-D0A4Ra4h.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-C1dCLSas.mjs} +1 -1
  22. package/dist/stream-broker/demux-worker-child.js +1 -1
  23. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  24. package/dist/stream-broker/{hostInit-C8TnCvWj.mjs → hostInit-BNFyaEr_.mjs} +1 -1
  25. package/dist/stream-broker/index.js +26 -6
  26. package/dist/stream-broker/index.mjs +26 -6
  27. package/dist/stream-broker/remoteEntry.js +1 -1
  28. package/package.json +1 -1
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-NYjn7hkE.js");
5
+ const require_dist = require("../dist-CB1sRktk.js");
6
6
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
7
7
  let node_fs = require("node:fs");
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Qt as BaseAddon, cn as hydrateSchema, nn as DeviceType, tt as evaluateZoneRules, vt as motionDetectionCapability } from "../dist-C1pCVJk7.mjs";
1
+ import { Qt as BaseAddon, cn as hydrateSchema, nn as DeviceType, tt as evaluateZoneRules, vt as motionDetectionCapability } from "../dist-BVWT6DUX.mjs";
2
2
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { join } from "node:path";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-emK7D4bc.js");
2
- const require_dist = require("./dist-NYjn7hkE.js");
2
+ const require_dist = require("./dist-CB1sRktk.js");
3
3
  let node_crypto = require("node:crypto");
4
4
  let node_fs = require("node:fs");
5
5
  node_fs = require_chunk.__toESM(node_fs, 1);
@@ -1,4 +1,4 @@
1
- import { Gt as errMsg, Jt as buildFfmpegArgs, Xt as isSoftwareDecode, qt as Fmp4BoxSplitter } from "./dist-C1pCVJk7.mjs";
1
+ import { Gt as errMsg, Jt as buildFfmpegArgs, Xt as isSoftwareDecode, qt as Fmp4BoxSplitter } from "./dist-BVWT6DUX.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { realpathSync } from "node:fs";
4
4
  import path from "node:path";
@@ -3,9 +3,9 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-NYjn7hkE.js");
7
- const require_node = require("../node-CVYY8a4y.js");
8
- const require_default_detection_model = require("../default-detection-model-6lCvep7n.js");
6
+ const require_dist = require("../dist-CB1sRktk.js");
7
+ const require_node = require("../node-DZw6MNVd.js");
8
+ const require_default_detection_model = require("../default-detection-model-CKdfniKn.js");
9
9
  const require_worker_protocol = require("../worker-protocol-B2MfQLlu.js");
10
10
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
11
11
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
@@ -1,6 +1,6 @@
1
- import { C as NativeLeaseAdmissionSchema, Cn as number, Ct as pickDetailCropConvention, Dn as string, Et as pipelineRunnerCapability, Gt as errMsg, J as deriveDetailCropRect, Qt as BaseAddon, S as MOTION_CLOSE_AFTER_MS, Sn as literal, _n as _enum, an as customAction, at as failureContributionCapability, fn as nodePin, in as createEvent, kn as EventCategory, m as DEVICE_BACKEND_TO_FORMAT, on as defineCustomActions, p as DEFAULT_NATIVE_LEASE_SETTINGS, u as DEFAULT_DETAIL_CROP_CONVENTION, ut as loadContributionCapability, vn as array, w as NativeLeaseSettingsSchema, wn as object, wt as pickNativeLeaseOverride, xn as lazy, y as FailureCounters, yn as boolean } from "../dist-C1pCVJk7.mjs";
2
- import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node--UY0iepi.mjs";
3
- import { a as localFrameRegistry, d as getStepDefinition, i as rootObjectGate, o as resolveFrameViewGeometry, r as macroGateVerdict } from "../default-detection-model-dQSwHHfx.mjs";
1
+ import { C as NativeLeaseAdmissionSchema, Cn as number, Ct as pickDetailCropConvention, Dn as string, Et as pipelineRunnerCapability, Gt as errMsg, J as deriveDetailCropRect, Qt as BaseAddon, S as MOTION_CLOSE_AFTER_MS, Sn as literal, _n as _enum, an as customAction, at as failureContributionCapability, fn as nodePin, in as createEvent, kn as EventCategory, m as DEVICE_BACKEND_TO_FORMAT, on as defineCustomActions, p as DEFAULT_NATIVE_LEASE_SETTINGS, u as DEFAULT_DETAIL_CROP_CONVENTION, ut as loadContributionCapability, vn as array, w as NativeLeaseSettingsSchema, wn as object, wt as pickNativeLeaseOverride, xn as lazy, y as FailureCounters, yn as boolean } from "../dist-BVWT6DUX.mjs";
2
+ import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-Dj1cgkd_.mjs";
3
+ import { a as localFrameRegistry, d as getStepDefinition, i as rootObjectGate, o as resolveFrameViewGeometry, r as macroGateVerdict } from "../default-detection-model-i-0An9uD.mjs";
4
4
  import { t as isWorkerReply } from "../worker-protocol-C_W-P_g-.mjs";
5
5
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
6
6
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
@@ -1,4 +1,4 @@
1
- import { bt as parseProcStatus } from "./dist-C1pCVJk7.mjs";
1
+ import { bt as parseProcStatus } from "./dist-BVWT6DUX.mjs";
2
2
  import * as fs from "node:fs";
3
3
  import { execFile } from "node:child_process";
4
4
  //#region src/shared/node-topology-platform.ts
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-emK7D4bc.js");
2
- const require_dist = require("./dist-NYjn7hkE.js");
2
+ const require_dist = require("./dist-CB1sRktk.js");
3
3
  let node_fs = require("node:fs");
4
4
  node_fs = require_chunk.__toESM(node_fs);
5
5
  let node_child_process = require("node:child_process");
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-NYjn7hkE.js");
7
- const require_node = require("../node-CVYY8a4y.js");
6
+ const require_dist = require("../dist-CB1sRktk.js");
7
+ const require_node = require("../node-DZw6MNVd.js");
8
8
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
9
9
  const require_restream_intent = require("../restream-intent-7uDNqMKs.js");
10
10
  const require_retire_root_keys = require("../retire-root-keys-Csb8z2f3.js");
@@ -6371,6 +6371,7 @@ var ExportEngine = class {
6371
6371
  answer = await fetchClipBytes({
6372
6372
  deviceId: subject.deviceId,
6373
6373
  clipId: subject.clipId,
6374
+ provider: subject.provider,
6374
6375
  profile: subject.profile,
6375
6376
  maxBytes: require_dist.RECORDING_EXPORT_MAX_READ_BYTES,
6376
6377
  ...subject.wake !== void 0 ? { wake: subject.wake } : {}
@@ -19694,6 +19695,8 @@ var RecorderV2Addon = class extends require_dist.BaseAddon {
19694
19695
  fetchClipBytes: async (req) => await this.ctx.api.videoclips.readClipBytes.query({
19695
19696
  deviceId: req.deviceId,
19696
19697
  clipId: req.clipId,
19698
+ provider: req.provider,
19699
+ addonId: req.provider,
19697
19700
  profile: req.profile,
19698
19701
  maxBytes: req.maxBytes,
19699
19702
  ...req.wake !== void 0 ? { wake: req.wake } : {}
@@ -1,5 +1,5 @@
1
- import { A as RecordingConfigSchema, At as recordingSignalCapability, Cn as number, Dn as string, En as record, Gt as errMsg, H as clipExportFailureOf, It as resolveRecordingProfiles, Mt as resolveCreateExportSubject, N as VISIT_MERGE_GAP_MS, Ot as recordingCapability, Pt as resolveLocationMode, Qt as BaseAddon, Rt as storageEvictableCapability, T as OpsLogEntrySchema, Tn as preprocess, Ut as videoclipsCapability, V as clipExportFailure, Vt as stripRetiredBandPreBufferSec, Y as deriveRecordingMode, _n as _enum, _t as modeMayWrite, an as customAction, cn as hydrateSchema, d as DEFAULT_EVENTS_BAND_BUFFER_SEC, et as evaluateSensorEdge, fn as nodePin, g as EVENT_PAD_MS, gn as sleep$1, gt as migrateLegacyDeviceSignalConfig, h as EVENT_OWNER_TYPES, hn as selectAssignedProfileSlots, ht as mayWriteToLocation, i as BatteryStatusSchema, it as exportSubjectOf, j as RecordingSignalStatusSchema, k as RECORDING_EXPORT_MAX_READ_BYTES, kn as EventCategory, kt as recordingExportCapability, lt as isFirstLevelMacroClass, mt as mayReadLocation, nn as DeviceType, nt as evictionPolicyForMode, on as defineCustomActions, ot as gbToBytes, q as deriveBatteryPresence, rt as evictionPolicyOfLocation, tn as DeviceFeature, ut as loadContributionCapability, v as ExportRecordSchema, vn as array, wn as object, yn as boolean, z as batteryCapability, zt as storageOccupancyCapability } from "../dist-C1pCVJk7.mjs";
2
- import { a as physicalRootOf, i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node--UY0iepi.mjs";
1
+ import { A as RecordingConfigSchema, At as recordingSignalCapability, Cn as number, Dn as string, En as record, Gt as errMsg, H as clipExportFailureOf, It as resolveRecordingProfiles, Mt as resolveCreateExportSubject, N as VISIT_MERGE_GAP_MS, Ot as recordingCapability, Pt as resolveLocationMode, Qt as BaseAddon, Rt as storageEvictableCapability, T as OpsLogEntrySchema, Tn as preprocess, Ut as videoclipsCapability, V as clipExportFailure, Vt as stripRetiredBandPreBufferSec, Y as deriveRecordingMode, _n as _enum, _t as modeMayWrite, an as customAction, cn as hydrateSchema, d as DEFAULT_EVENTS_BAND_BUFFER_SEC, et as evaluateSensorEdge, fn as nodePin, g as EVENT_PAD_MS, gn as sleep$1, gt as migrateLegacyDeviceSignalConfig, h as EVENT_OWNER_TYPES, hn as selectAssignedProfileSlots, ht as mayWriteToLocation, i as BatteryStatusSchema, it as exportSubjectOf, j as RecordingSignalStatusSchema, k as RECORDING_EXPORT_MAX_READ_BYTES, kn as EventCategory, kt as recordingExportCapability, lt as isFirstLevelMacroClass, mt as mayReadLocation, nn as DeviceType, nt as evictionPolicyForMode, on as defineCustomActions, ot as gbToBytes, q as deriveBatteryPresence, rt as evictionPolicyOfLocation, tn as DeviceFeature, ut as loadContributionCapability, v as ExportRecordSchema, vn as array, wn as object, yn as boolean, z as batteryCapability, zt as storageOccupancyCapability } from "../dist-BVWT6DUX.mjs";
2
+ import { a as physicalRootOf, i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-Dj1cgkd_.mjs";
3
3
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
4
4
  import { d as PREBUFFER_MAX_MS, l as withRecordingIntent, r as RECORDING_PRE_ROLL_REQUEST_MS } from "../restream-intent-DyGmLAU9.mjs";
5
5
  import { n as RowMapStore, t as retireRootKeys } from "../retire-root-keys-DZvlso2l.mjs";
@@ -6364,6 +6364,7 @@ var ExportEngine = class {
6364
6364
  answer = await fetchClipBytes({
6365
6365
  deviceId: subject.deviceId,
6366
6366
  clipId: subject.clipId,
6367
+ provider: subject.provider,
6367
6368
  profile: subject.profile,
6368
6369
  maxBytes: RECORDING_EXPORT_MAX_READ_BYTES,
6369
6370
  ...subject.wake !== void 0 ? { wake: subject.wake } : {}
@@ -19687,6 +19688,8 @@ var RecorderV2Addon = class extends BaseAddon {
19687
19688
  fetchClipBytes: async (req) => await this.ctx.api.videoclips.readClipBytes.query({
19688
19689
  deviceId: req.deviceId,
19689
19690
  clipId: req.clipId,
19691
+ provider: req.provider,
19692
+ addonId: req.provider,
19690
19693
  profile: req.profile,
19691
19694
  maxBytes: req.maxBytes,
19692
19695
  ...req.wake !== void 0 ? { wake: req.wake } : {}
@@ -1,5 +1,5 @@
1
1
  import { r as __toESM, t as __commonJSMin } from "./chunk-DnnnRqeS.mjs";
2
- import { Gt as errMsg } from "./dist-C1pCVJk7.mjs";
2
+ import { Gt as errMsg } from "./dist-BVWT6DUX.mjs";
3
3
  import { spawn } from "node:child_process";
4
4
  //#region ../../node_modules/mp4box/dist/mp4box.all.js
5
5
  var require_mp4box_all = /* @__PURE__ */ __commonJSMin(((exports) => {
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-emK7D4bc.js");
2
- const require_dist = require("./dist-NYjn7hkE.js");
2
+ const require_dist = require("./dist-CB1sRktk.js");
3
3
  let node_child_process = require("node:child_process");
4
4
  //#region ../../node_modules/mp4box/dist/mp4box.all.js
5
5
  var require_mp4box_all = /* @__PURE__ */ require_chunk.__commonJSMin(((exports) => {
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.238",
21
+ version: "1.2.240",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_stream_broker_widgets",
@@ -1,4 +1,4 @@
1
- const require_segment_demux_js = require("../segment-demux-js-DVupBBc4.js");
1
+ const require_segment_demux_js = require("../segment-demux-js-DNN3T56h.js");
2
2
  let node_worker_threads = require("node:worker_threads");
3
3
  //#region src/stream-broker/recorded/demux-worker-child.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { t as demuxSegmentFullJs } from "../segment-demux-js-B0_aAzN0.mjs";
1
+ import { t as demuxSegmentFullJs } from "../segment-demux-js-B6OsKCIg.mjs";
2
2
  import { parentPort } from "node:worker_threads";
3
3
  //#region src/stream-broker/recorded/demux-worker-child.ts
4
4
  /**
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.238",
39
+ version: "1.2.240",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -3,12 +3,12 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-NYjn7hkE.js");
7
- const require_node = require("../node-CVYY8a4y.js");
6
+ const require_dist = require("../dist-CB1sRktk.js");
7
+ const require_node = require("../node-DZw6MNVd.js");
8
8
  const require_restream_intent = require("../restream-intent-7uDNqMKs.js");
9
9
  const require_remote_restream = require("../remote-restream-CO36Sr30.js");
10
10
  const require_retire_root_keys = require("../retire-root-keys-Csb8z2f3.js");
11
- const require_segment_demux_js = require("../segment-demux-js-DVupBBc4.js");
11
+ const require_segment_demux_js = require("../segment-demux-js-DNN3T56h.js");
12
12
  let node_os = require("node:os");
13
13
  node_os = require_chunk.__toESM(node_os);
14
14
  let node_crypto = require("node:crypto");
@@ -26574,6 +26574,20 @@ var ControlMessageSchema = require_dist.discriminatedUnion("t", [
26574
26574
  t: require_dist.literal("playClip"),
26575
26575
  deviceId: require_dist.number(),
26576
26576
  clipId: require_dist.string().min(1),
26577
+ /**
26578
+ * WHICH provider holds the file — the `addonId` of the source row the clip
26579
+ * was listed from.
26580
+ *
26581
+ * It travels because nobody downstream can work it out. The broker lives
26582
+ * in `addon-pipeline`, the same addon that registers the RECORDER's
26583
+ * videoclips provider, so a `readClipBytes` with no provider named
26584
+ * resolved in-process to that sibling — which implements the method solely
26585
+ * to explain that an analytics visit has no file behind it. Every onboard
26586
+ * clip answered with that sentence: a flash, and nothing more (3628,
26587
+ * 2026-09-21). Deriving it from the clip id's shape was the other option
26588
+ * and is exactly what D482 forbids.
26589
+ */
26590
+ provider: require_dist.string().min(1),
26577
26591
  offsetMs: require_dist.number().min(0),
26578
26592
  /**
26579
26593
  * Which TWIN of the clip — the vendor's own quality pair, on the one
@@ -29939,7 +29953,7 @@ var TimelineSession = class {
29939
29953
  await this.playAt(msg.epoch, msg.profile, { travelFromMs: this.lastPositionMs });
29940
29954
  break;
29941
29955
  case "playClip":
29942
- await this.playClip(msg.deviceId, msg.clipId, msg.profile ?? null, msg.offsetMs);
29956
+ await this.playClip(msg.deviceId, msg.clipId, msg.provider, msg.profile ?? null, msg.offsetMs);
29943
29957
  break;
29944
29958
  case "seek":
29945
29959
  if (this.clip) {
@@ -30021,11 +30035,12 @@ var TimelineSession = class {
30021
30035
  * frame with no explanation (D391: the branch that accepts work and produces
30022
30036
  * nothing is the same branch as the one that drops it).
30023
30037
  */
30024
- async playClip(deviceId, clipId, profile, offsetMs) {
30038
+ async playClip(deviceId, clipId, provider, profile, offsetMs) {
30025
30039
  if (!this.deps.makeClipFeeder) {
30026
30040
  this.deps.onLog?.("clip playback: refused — no clip byte source wired on this session (videoclips.readClipBytes absent)", {
30027
30041
  deviceId,
30028
30042
  clipId,
30043
+ provider,
30029
30044
  profile,
30030
30045
  offsetMs
30031
30046
  });
@@ -30035,6 +30050,7 @@ var TimelineSession = class {
30035
30050
  this.clip = {
30036
30051
  deviceId,
30037
30052
  clipId,
30053
+ provider,
30038
30054
  profile
30039
30055
  };
30040
30056
  this.lastPositionMs = null;
@@ -30421,7 +30437,7 @@ var ClipSourceError = class extends Error {
30421
30437
  };
30422
30438
  function createClipFileSource(deps) {
30423
30439
  const maxBytes = deps.maxBytes ?? 67108864;
30424
- const { deviceId, clipId, profile } = deps.handle;
30440
+ const { deviceId, clipId, provider, profile } = deps.handle;
30425
30441
  let resolved = null;
30426
30442
  let inFlight = null;
30427
30443
  /**
@@ -30436,6 +30452,7 @@ function createClipFileSource(deps) {
30436
30452
  deps.onLog?.(message, {
30437
30453
  deviceId,
30438
30454
  clipId,
30455
+ provider,
30439
30456
  profile,
30440
30457
  reason,
30441
30458
  ...data
@@ -30448,6 +30465,7 @@ function createClipFileSource(deps) {
30448
30465
  bytes = await deps.read({
30449
30466
  deviceId,
30450
30467
  clipId,
30468
+ provider,
30451
30469
  profile
30452
30470
  });
30453
30471
  } catch (err) {
@@ -33703,6 +33721,8 @@ var StreamBrokerAddon = class extends require_dist.BaseAddon {
33703
33721
  const res = await this.ctx.api.videoclips.readClipBytes.query({
33704
33722
  deviceId: args.deviceId,
33705
33723
  clipId: args.clipId,
33724
+ provider: args.provider,
33725
+ addonId: args.provider,
33706
33726
  ...args.profile !== null ? { profile: args.profile } : {}
33707
33727
  });
33708
33728
  return new Uint8Array(Buffer.from(res.base64, "base64"));
@@ -1,10 +1,10 @@
1
1
  import { r as __toESM } from "../chunk-DnnnRqeS.mjs";
2
- import { $t as CAM_PROFILE_ORDER, B as cameraStreamsCapability, Bt as streamBrokerCapability, Cn as number, D as RATE_CONTROL_RELAXED, Dn as string, Dt as rankStreams, En as record, F as addonWidgetsSourceCapability, G as declareLogChannel, Gt as errMsg, Jt as buildFfmpegArgs$1, Kt as AUDIO_PRESETS, M as RingBuffer, Nt as resolveEgressDecodeHwAccel, O as RATE_CONTROL_TIGHT, On as union, Q as egressTransportFromRequest, Qt as BaseAddon, Sn as literal, U as createHwAccelCache, W as createLogChannelsProvider, Wt as webrtcSessionCapability, Xt as isSoftwareDecode, Yt as invocationFromEncodeProfile, Z as egressTranscodeSharingKey, Zt as BOOT_RECOVERY_BACKOFF_MS, _ as EncodeProfileSchema, _n as _enum, b as G711_SCALE_CORRECTION_DB, bn as discriminatedUnion, dn as makeSourceBrokerId, dt as logChannelsCapability, en as CamProfileSchema, fn as nodePin, i as BatteryStatusSchema, in as createEvent, kn as EventCategory, ln as isEvent, mn as parseProfileBrokerId, nn as DeviceType, pt as maskUrlCredentials, q as deriveBatteryPresence, sn as expandAudioChunkToF32le, tn as DeviceFeature, un as makeProfileBrokerId, ut as loadContributionCapability, vn as array, wn as object, yn as boolean, z as batteryCapability } from "../dist-C1pCVJk7.mjs";
3
- import { i as NO_COST_CLAIM, n as Fmp4FragmentChild, o as probeFfmpegBinary, r as Fmp4FragmentPlane, t as ChildCostRegistry } from "../node--UY0iepi.mjs";
2
+ import { $t as CAM_PROFILE_ORDER, B as cameraStreamsCapability, Bt as streamBrokerCapability, Cn as number, D as RATE_CONTROL_RELAXED, Dn as string, Dt as rankStreams, En as record, F as addonWidgetsSourceCapability, G as declareLogChannel, Gt as errMsg, Jt as buildFfmpegArgs$1, Kt as AUDIO_PRESETS, M as RingBuffer, Nt as resolveEgressDecodeHwAccel, O as RATE_CONTROL_TIGHT, On as union, Q as egressTransportFromRequest, Qt as BaseAddon, Sn as literal, U as createHwAccelCache, W as createLogChannelsProvider, Wt as webrtcSessionCapability, Xt as isSoftwareDecode, Yt as invocationFromEncodeProfile, Z as egressTranscodeSharingKey, Zt as BOOT_RECOVERY_BACKOFF_MS, _ as EncodeProfileSchema, _n as _enum, b as G711_SCALE_CORRECTION_DB, bn as discriminatedUnion, dn as makeSourceBrokerId, dt as logChannelsCapability, en as CamProfileSchema, fn as nodePin, i as BatteryStatusSchema, in as createEvent, kn as EventCategory, ln as isEvent, mn as parseProfileBrokerId, nn as DeviceType, pt as maskUrlCredentials, q as deriveBatteryPresence, sn as expandAudioChunkToF32le, tn as DeviceFeature, un as makeProfileBrokerId, ut as loadContributionCapability, vn as array, wn as object, yn as boolean, z as batteryCapability } from "../dist-BVWT6DUX.mjs";
3
+ import { i as NO_COST_CLAIM, n as Fmp4FragmentChild, o as probeFfmpegBinary, r as Fmp4FragmentPlane, t as ChildCostRegistry } from "../node-Dj1cgkd_.mjs";
4
4
  import { a as parseRestreamPath, d as PREBUFFER_MAX_MS, f as capPreRollRequestMs, i as isLiveEdgeOnlyDial, m as resolvePrebuffer, n as NO_DECLARATION, p as prebufferRetentionMs, s as sdpVariantFor, u as withSentryIntent } from "../restream-intent-DyGmLAU9.mjs";
5
5
  import { n as profileForStreamId } from "../remote-restream-BeHi78PZ.mjs";
6
6
  import { n as RowMapStore, t as retireRootKeys } from "../retire-root-keys-DZvlso2l.mjs";
7
- import { i as require_mp4box_all, n as demuxSegmentPreferJs, r as runFfmpegOnce, t as demuxSegmentFullJs } from "../segment-demux-js-B0_aAzN0.mjs";
7
+ import { i as require_mp4box_all, n as demuxSegmentPreferJs, r as runFfmpegOnce, t as demuxSegmentFullJs } from "../segment-demux-js-B6OsKCIg.mjs";
8
8
  import { createRequire } from "node:module";
9
9
  import * as os from "node:os";
10
10
  import { networkInterfaces, tmpdir } from "node:os";
@@ -26570,6 +26570,20 @@ var ControlMessageSchema = discriminatedUnion("t", [
26570
26570
  t: literal("playClip"),
26571
26571
  deviceId: number(),
26572
26572
  clipId: string().min(1),
26573
+ /**
26574
+ * WHICH provider holds the file — the `addonId` of the source row the clip
26575
+ * was listed from.
26576
+ *
26577
+ * It travels because nobody downstream can work it out. The broker lives
26578
+ * in `addon-pipeline`, the same addon that registers the RECORDER's
26579
+ * videoclips provider, so a `readClipBytes` with no provider named
26580
+ * resolved in-process to that sibling — which implements the method solely
26581
+ * to explain that an analytics visit has no file behind it. Every onboard
26582
+ * clip answered with that sentence: a flash, and nothing more (3628,
26583
+ * 2026-09-21). Deriving it from the clip id's shape was the other option
26584
+ * and is exactly what D482 forbids.
26585
+ */
26586
+ provider: string().min(1),
26573
26587
  offsetMs: number().min(0),
26574
26588
  /**
26575
26589
  * Which TWIN of the clip — the vendor's own quality pair, on the one
@@ -29935,7 +29949,7 @@ var TimelineSession = class {
29935
29949
  await this.playAt(msg.epoch, msg.profile, { travelFromMs: this.lastPositionMs });
29936
29950
  break;
29937
29951
  case "playClip":
29938
- await this.playClip(msg.deviceId, msg.clipId, msg.profile ?? null, msg.offsetMs);
29952
+ await this.playClip(msg.deviceId, msg.clipId, msg.provider, msg.profile ?? null, msg.offsetMs);
29939
29953
  break;
29940
29954
  case "seek":
29941
29955
  if (this.clip) {
@@ -30017,11 +30031,12 @@ var TimelineSession = class {
30017
30031
  * frame with no explanation (D391: the branch that accepts work and produces
30018
30032
  * nothing is the same branch as the one that drops it).
30019
30033
  */
30020
- async playClip(deviceId, clipId, profile, offsetMs) {
30034
+ async playClip(deviceId, clipId, provider, profile, offsetMs) {
30021
30035
  if (!this.deps.makeClipFeeder) {
30022
30036
  this.deps.onLog?.("clip playback: refused — no clip byte source wired on this session (videoclips.readClipBytes absent)", {
30023
30037
  deviceId,
30024
30038
  clipId,
30039
+ provider,
30025
30040
  profile,
30026
30041
  offsetMs
30027
30042
  });
@@ -30031,6 +30046,7 @@ var TimelineSession = class {
30031
30046
  this.clip = {
30032
30047
  deviceId,
30033
30048
  clipId,
30049
+ provider,
30034
30050
  profile
30035
30051
  };
30036
30052
  this.lastPositionMs = null;
@@ -30417,7 +30433,7 @@ var ClipSourceError = class extends Error {
30417
30433
  };
30418
30434
  function createClipFileSource(deps) {
30419
30435
  const maxBytes = deps.maxBytes ?? 67108864;
30420
- const { deviceId, clipId, profile } = deps.handle;
30436
+ const { deviceId, clipId, provider, profile } = deps.handle;
30421
30437
  let resolved = null;
30422
30438
  let inFlight = null;
30423
30439
  /**
@@ -30432,6 +30448,7 @@ function createClipFileSource(deps) {
30432
30448
  deps.onLog?.(message, {
30433
30449
  deviceId,
30434
30450
  clipId,
30451
+ provider,
30435
30452
  profile,
30436
30453
  reason,
30437
30454
  ...data
@@ -30444,6 +30461,7 @@ function createClipFileSource(deps) {
30444
30461
  bytes = await deps.read({
30445
30462
  deviceId,
30446
30463
  clipId,
30464
+ provider,
30447
30465
  profile
30448
30466
  });
30449
30467
  } catch (err) {
@@ -33699,6 +33717,8 @@ var StreamBrokerAddon = class extends BaseAddon {
33699
33717
  const res = await this.ctx.api.videoclips.readClipBytes.query({
33700
33718
  deviceId: args.deviceId,
33701
33719
  clipId: args.clipId,
33720
+ provider: args.provider,
33721
+ addonId: args.provider,
33702
33722
  ...args.profile !== null ? { profile: args.profile } : {}
33703
33723
  });
33704
33724
  return new Uint8Array(Buffer.from(res.base64, "base64"));
@@ -30,7 +30,7 @@ async function d(e) {
30
30
  }
31
31
  }
32
32
  async function f() {
33
- return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-D0A4Ra4h.mjs")).catch((e) => {
33
+ return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-C1dCLSas.mjs")).catch((e) => {
34
34
  throw l = void 0, e;
35
35
  }), l;
36
36
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-pipeline",
3
- "version": "1.2.279",
3
+ "version": "1.2.282",
4
4
  "description": "Pipeline bundle — runner, detection, motion, audio + stream broker. Multi-entry npm package shipping pipeline addons under a single bundle.",
5
5
  "keywords": [
6
6
  "camstack",