@camstack/types 1.2.234 → 1.2.235

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.
package/dist/addon.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-DImve4HM.js");
2
+ const require_sleep = require("./sleep-CsgPITp-.js");
3
3
  const require_event_category = require("./event-category-BVfsrBYA.js");
4
4
  const require_err_msg = require("./err-msg-COpsHMw2.js");
5
5
  //#region src/generated/cap-input-defaults.ts
package/dist/addon.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { A as DeviceType, At as emitReadiness, Ct as DATAPLANE_SECRET_HEADER, Dt as normalizeAddonInitResult, Et as BaseAddon, G as ReadinessRegistry, H as nodePin, I as expandCapMethods, K as ReadinessTimeoutError, S as DEVICE_CHILDREN_BATCH_MAX, T as describeCustomActions, Tt as DisposerChain, U as readNodePin, Y as scopeKey, a as asJsonObject, b as deviceOpsCapability, d as BOOT_RECOVERY_BACKOFF_MS, f as DEVICE_SCOPED_CAPS, h as createEventBusSliceSource, j as adminUiCapability, m as createDeviceProxy, p as isDeviceScopedCap, s as asString, t as sleep, u as parseJsonUnknown, x as viewerUiCapability } from "./sleep-CopaBJss.mjs";
1
+ import { A as DeviceType, At as emitReadiness, Ct as DATAPLANE_SECRET_HEADER, Dt as normalizeAddonInitResult, Et as BaseAddon, G as ReadinessRegistry, H as nodePin, I as expandCapMethods, K as ReadinessTimeoutError, S as DEVICE_CHILDREN_BATCH_MAX, T as describeCustomActions, Tt as DisposerChain, U as readNodePin, Y as scopeKey, a as asJsonObject, b as deviceOpsCapability, d as BOOT_RECOVERY_BACKOFF_MS, f as DEVICE_SCOPED_CAPS, h as createEventBusSliceSource, j as adminUiCapability, m as createDeviceProxy, p as isDeviceScopedCap, s as asString, t as sleep, u as parseJsonUnknown, x as viewerUiCapability } from "./sleep-7AN_Txmu.mjs";
2
2
  import { t as EventCategory } from "./event-category-BVDXG4tB.mjs";
3
3
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
4
4
  //#region src/generated/cap-input-defaults.ts
@@ -13,13 +13,18 @@ import { type InferProvider } from './capability-definition.js';
13
13
  * exposes NATIVE onboard clips (Reolink SD card, a hub's storage, HKSV) adds
14
14
  * its own catalog ALONGSIDE that one.
15
15
  *
16
- * The mount stays per-device (`resolveCapMount` → `device-scoped`): the fan-out
17
- * is over the DEVICE's sources, resolved from the registry's per-device
18
- * collection, never over every provider in the cluster. `listClips` is the
19
- * union of those sources, in newest-first order, with NO dedup and no
20
- * best-source pick — a clip held in two storages appears twice, once per
21
- * source, and every row's {@link ClipSchema.source} says which. That is the
22
- * operator's decision, stated so it is not "fixed" later.
16
+ * The mount stays per-device (`resolveCapMount` → `device-scoped`), and a
17
+ * device's SOURCES are its BINDINGS: `deviceManager.getBindings(deviceId)` is
18
+ * what says a provider serves this camera, never the set of addons that
19
+ * happen to have registered the capability somewhere in the cluster. That is
20
+ * what stopped one addon appearing three times on 592 — as the device's
21
+ * native provider, as the hub-local registration and as
22
+ * `pipeline-analytics@little-unraid` (D554 amended 2026-09-20).
23
+ *
24
+ * `listClips` is asked of ONE provider at a time
25
+ * ({@link videoclipsCapability.methods.listClips} `provider`), defaulting to
26
+ * the bound one, which is CamStack on every camera today. It is NOT a union
27
+ * over everything a camera has: *"l'utilizzatore è uno solo"*.
23
28
  * {@link videoclipsCapability.methods.getClipPlayback} dispatches by the
24
29
  * source namespace inside the clip id, which is why ids are self-contained.
25
30
  *
@@ -174,18 +179,32 @@ export declare const videoclipsCapability: {
174
179
  * `device-config-widget-wrapped-binding.spec.ts` pins that a `kind:'wrapped'`
175
180
  * binding entry derives the same section a native one does.
176
181
  *
177
- * `topTab` because the browser owns the whole pane (a day's clips, a source
178
- * list and a player), exactly as `ptz` does; the widget itself is
179
- * `host/clips-browser` in ui-library's `HOST_WIDGETS`.
182
+ * **It is a SECTION of the Recording tab, at the end of it — not a tab of
183
+ * its own.** It shipped as a `clips` top-tab and the operator rejected the
184
+ * placement: *"utilizzerei la stessa tab recordings, lì abbiamo già tutto il
185
+ * necessario, una nuova sezione alla fine per le clips"*. The Recording tab
186
+ * already holds the recorder's panel, the schedule bands and the unified
187
+ * retention policy; footage the camera itself holds is the same question,
188
+ * asked of a different store. `order: 100` puts it after all of them with
189
+ * room left in front. The `clips` entry in `WELL_KNOWN_TABS` went with it —
190
+ * a well-known id nobody declares is an invitation to mint the tab again.
191
+ *
192
+ * `topTab` stays: the browser owns a pane (a day's tiles, a source list and
193
+ * a player) and the Config tab's inner bar has no room for one. The widget
194
+ * itself is `host/clips-browser` in ui-library's `HOST_WIDGETS`, and because
195
+ * the admin Recordings page renders every `location:'top-tab'` +
196
+ * `tab:'recording'` section behind its camera picker
197
+ * (`CameraRecordingSettingsSection`), this declaration lands the section on
198
+ * BOTH surfaces with no second wiring.
180
199
  */
181
200
  readonly deviceConfig: {
182
201
  readonly ui: {
183
202
  readonly kind: "widget";
184
203
  readonly widgetId: "host/clips-browser";
185
- readonly tab: "clips";
204
+ readonly tab: "recording";
186
205
  readonly topTab: true;
187
206
  readonly label: "Clips";
188
- readonly order: 0;
207
+ readonly order: 100;
189
208
  };
190
209
  };
191
210
  readonly methods: {
@@ -194,7 +213,7 @@ export declare const videoclipsCapability: {
194
213
  since: z.ZodNumber;
195
214
  until: z.ZodNumber;
196
215
  limit: z.ZodOptional<z.ZodNumber>;
197
- sources: z.ZodOptional<z.ZodArray<z.ZodString>>;
216
+ provider: z.ZodOptional<z.ZodString>;
198
217
  }, z.core.$strip>, z.ZodReadonly<z.ZodArray<z.ZodObject<{
199
218
  id: z.ZodString;
200
219
  source: z.ZodString;
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-DImve4HM.js");
2
+ const require_sleep = require("./sleep-CsgPITp-.js");
3
3
  const require_event_category = require("./event-category-BVfsrBYA.js");
4
4
  const require_canonical_hash = require("./canonical-hash-CSE4ioRi.js");
5
5
  const require_enums = require("./enums.js");
@@ -27128,13 +27128,18 @@ var vectorStoreCapability = {
27128
27128
  * exposes NATIVE onboard clips (Reolink SD card, a hub's storage, HKSV) adds
27129
27129
  * its own catalog ALONGSIDE that one.
27130
27130
  *
27131
- * The mount stays per-device (`resolveCapMount` → `device-scoped`): the fan-out
27132
- * is over the DEVICE's sources, resolved from the registry's per-device
27133
- * collection, never over every provider in the cluster. `listClips` is the
27134
- * union of those sources, in newest-first order, with NO dedup and no
27135
- * best-source pick — a clip held in two storages appears twice, once per
27136
- * source, and every row's {@link ClipSchema.source} says which. That is the
27137
- * operator's decision, stated so it is not "fixed" later.
27131
+ * The mount stays per-device (`resolveCapMount` → `device-scoped`), and a
27132
+ * device's SOURCES are its BINDINGS: `deviceManager.getBindings(deviceId)` is
27133
+ * what says a provider serves this camera, never the set of addons that
27134
+ * happen to have registered the capability somewhere in the cluster. That is
27135
+ * what stopped one addon appearing three times on 592 — as the device's
27136
+ * native provider, as the hub-local registration and as
27137
+ * `pipeline-analytics@little-unraid` (D554 amended 2026-09-20).
27138
+ *
27139
+ * `listClips` is asked of ONE provider at a time
27140
+ * ({@link videoclipsCapability.methods.listClips} `provider`), defaulting to
27141
+ * the bound one, which is CamStack on every camera today. It is NOT a union
27142
+ * over everything a camera has: *"l'utilizzatore è uno solo"*.
27138
27143
  * {@link videoclipsCapability.methods.getClipPlayback} dispatches by the
27139
27144
  * source namespace inside the clip id, which is why ids are self-contained.
27140
27145
  *
@@ -27455,17 +27460,31 @@ var videoclipsCapability = {
27455
27460
  * `device-config-widget-wrapped-binding.spec.ts` pins that a `kind:'wrapped'`
27456
27461
  * binding entry derives the same section a native one does.
27457
27462
  *
27458
- * `topTab` because the browser owns the whole pane (a day's clips, a source
27459
- * list and a player), exactly as `ptz` does; the widget itself is
27460
- * `host/clips-browser` in ui-library's `HOST_WIDGETS`.
27463
+ * **It is a SECTION of the Recording tab, at the end of it — not a tab of
27464
+ * its own.** It shipped as a `clips` top-tab and the operator rejected the
27465
+ * placement: *"utilizzerei la stessa tab recordings, lì abbiamo già tutto il
27466
+ * necessario, una nuova sezione alla fine per le clips"*. The Recording tab
27467
+ * already holds the recorder's panel, the schedule bands and the unified
27468
+ * retention policy; footage the camera itself holds is the same question,
27469
+ * asked of a different store. `order: 100` puts it after all of them with
27470
+ * room left in front. The `clips` entry in `WELL_KNOWN_TABS` went with it —
27471
+ * a well-known id nobody declares is an invitation to mint the tab again.
27472
+ *
27473
+ * `topTab` stays: the browser owns a pane (a day's tiles, a source list and
27474
+ * a player) and the Config tab's inner bar has no room for one. The widget
27475
+ * itself is `host/clips-browser` in ui-library's `HOST_WIDGETS`, and because
27476
+ * the admin Recordings page renders every `location:'top-tab'` +
27477
+ * `tab:'recording'` section behind its camera picker
27478
+ * (`CameraRecordingSettingsSection`), this declaration lands the section on
27479
+ * BOTH surfaces with no second wiring.
27461
27480
  */
27462
27481
  deviceConfig: { ui: {
27463
27482
  kind: "widget",
27464
27483
  widgetId: "host/clips-browser",
27465
- tab: "clips",
27484
+ tab: "recording",
27466
27485
  topTab: true,
27467
27486
  label: "Clips",
27468
- order: 0
27487
+ order: 100
27469
27488
  } },
27470
27489
  methods: {
27471
27490
  listClips: require_sleep.method(zod.z.object({
@@ -27474,13 +27493,23 @@ var videoclipsCapability = {
27474
27493
  until: zod.z.number(),
27475
27494
  limit: zod.z.number().int().positive().optional(),
27476
27495
  /**
27477
- * View filter over {@link ClipSourceSchema.source} values — the
27478
- * picker's selection, forwarded so a provider need not list what
27479
- * nobody is looking at. ABSENT means every source this camera has,
27480
- * which is the honest default for a surface whose whole point is that
27481
- * nothing is hidden (D554 3). A provider with one source ignores it.
27496
+ * WHICH provider to ask — the `addonId` a {@link ClipSourceSchema} row
27497
+ * carries, never a source id and never a list.
27498
+ *
27499
+ * Absent means the device's BOUND provider, which is CamStack on every
27500
+ * camera today because that is what `deviceManager.getBindings`
27501
+ * answers with. A provider the device is not bound to is refused by
27502
+ * name rather than answered by another one (D552's
27503
+ * `rejectUnresolvedAddonPin` rule).
27504
+ *
27505
+ * It replaced `sources?: string[]`, a VIEW filter over source ids that
27506
+ * assumed the answer was a fan-out over everything a camera has. The
27507
+ * operator settled otherwise on 2026-09-20 — *"il get videoclips
27508
+ * prendere un provider opzionale, di default va su camstack"*,
27509
+ * *"l'utilizzatore è uno solo"* — so the list is asked of one provider
27510
+ * at a time and there is nothing to filter out of it.
27482
27511
  */
27483
- sources: zod.z.array(zod.z.string()).optional()
27512
+ provider: zod.z.string().optional()
27484
27513
  }), zod.z.array(ClipSchema).readonly(), {
27485
27514
  kind: "query",
27486
27515
  auth: "protected"
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as BrokerStatusSchema, A as DeviceType, At as emitReadiness, B as systemMethod, Bt as expandAudioChunkToF32le, C as customAction, Ct as DATAPLANE_SECRET_HEADER, D as ChargingStatus, Dt as normalizeAddonInitResult, E as deviceCustomAction, Et as BaseAddon, F as event, Ft as collectHydratedFieldValues, G as ReadinessRegistry, H as nodePin, I as expandCapMethods, It as hydrateSchema, J as readinessKey, K as ReadinessTimeoutError, L as isDeviceConfigCap, Lt as resolveHydratedFieldValue, M as DEFAULT_RUNTIME_STATE_DURABILITY, Mt as WELL_KNOWN_TABS, N as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Nt as WELL_KNOWN_TAB_MAP, O as DeviceFeature, Ot as createDurableState, P as DEVICE_STATUS_METHOD, Pt as collectHydratedFieldEntries, Q as BrokerStatsSchema, R as method, Rt as AUDIO_CHUNK_FORMATS, S as DEVICE_CHILDREN_BATCH_MAX, St as selectAssignedProfileSlots, T as describeCustomActions, Tt as DisposerChain, U as readNodePin, V as CAP_NODE_PIN_CONTEXT_KEY, Vt as isAudioChunkFormat, W as toNodeId, X as AudioChunkFormatSchema, Y as scopeKey, Z as AudioStreamPickSchema, _ as createMirrorSource, _t as SubscribeFramesInputSchema, a as asJsonObject, at as DecodedAudioChunkSchema, b as deviceOpsCapability, bt as makeSourceBrokerId, c as parseJsonArray, ct as FrameHandleFormatSchema, d as BOOT_RECOVERY_BACKOFF_MS, dt as ProfileSlotSchema, et as CAM_PROFILE_ORDER, f as DEVICE_SCOPED_CAPS, ft as ProfileSlotStatusSchema, g as createLazyTrpcSource, gt as SubscribeAudioChunksResultSchema, h as createEventBusSliceSource, ht as SubscribeAudioChunksInputSchema, i as asJsonArray, it as CameraStreamSchema, j as adminUiCapability, jt as isEvent, k as DeviceRole, kt as createEvent, l as parseJsonObject, lt as FrameHandleSchema, m as createDeviceProxy, mt as StreamSourceSchema, n as sleepCancellable, nt as CamStreamKindSchema, o as asNumber, ot as DecodedFrameSchema, p as isDeviceScopedCap, pt as StreamSourceEntrySchema, q as emitDownForOwnedCaps, r as asBoolean, rt as CamStreamResolutionSchema, s as asString, st as EncodedPacketSchema, t as sleep, tt as CamProfileSchema, u as parseJsonUnknown, ut as ProfileRtspEntrySchema, v as createSliceHandle, vt as SubscribeFramesResultSchema, w as defineCustomActions, wt as SHARE_VIEW_KINDS, x as viewerUiCapability, xt as parseProfileBrokerId, y as RawStateResultSchema, yt as makeProfileBrokerId, z as resolveCapMount, zt as audioChunkBytesPerSample } from "./sleep-CopaBJss.mjs";
1
+ import { $ as BrokerStatusSchema, A as DeviceType, At as emitReadiness, B as systemMethod, Bt as expandAudioChunkToF32le, C as customAction, Ct as DATAPLANE_SECRET_HEADER, D as ChargingStatus, Dt as normalizeAddonInitResult, E as deviceCustomAction, Et as BaseAddon, F as event, Ft as collectHydratedFieldValues, G as ReadinessRegistry, H as nodePin, I as expandCapMethods, It as hydrateSchema, J as readinessKey, K as ReadinessTimeoutError, L as isDeviceConfigCap, Lt as resolveHydratedFieldValue, M as DEFAULT_RUNTIME_STATE_DURABILITY, Mt as WELL_KNOWN_TABS, N as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Nt as WELL_KNOWN_TAB_MAP, O as DeviceFeature, Ot as createDurableState, P as DEVICE_STATUS_METHOD, Pt as collectHydratedFieldEntries, Q as BrokerStatsSchema, R as method, Rt as AUDIO_CHUNK_FORMATS, S as DEVICE_CHILDREN_BATCH_MAX, St as selectAssignedProfileSlots, T as describeCustomActions, Tt as DisposerChain, U as readNodePin, V as CAP_NODE_PIN_CONTEXT_KEY, Vt as isAudioChunkFormat, W as toNodeId, X as AudioChunkFormatSchema, Y as scopeKey, Z as AudioStreamPickSchema, _ as createMirrorSource, _t as SubscribeFramesInputSchema, a as asJsonObject, at as DecodedAudioChunkSchema, b as deviceOpsCapability, bt as makeSourceBrokerId, c as parseJsonArray, ct as FrameHandleFormatSchema, d as BOOT_RECOVERY_BACKOFF_MS, dt as ProfileSlotSchema, et as CAM_PROFILE_ORDER, f as DEVICE_SCOPED_CAPS, ft as ProfileSlotStatusSchema, g as createLazyTrpcSource, gt as SubscribeAudioChunksResultSchema, h as createEventBusSliceSource, ht as SubscribeAudioChunksInputSchema, i as asJsonArray, it as CameraStreamSchema, j as adminUiCapability, jt as isEvent, k as DeviceRole, kt as createEvent, l as parseJsonObject, lt as FrameHandleSchema, m as createDeviceProxy, mt as StreamSourceSchema, n as sleepCancellable, nt as CamStreamKindSchema, o as asNumber, ot as DecodedFrameSchema, p as isDeviceScopedCap, pt as StreamSourceEntrySchema, q as emitDownForOwnedCaps, r as asBoolean, rt as CamStreamResolutionSchema, s as asString, st as EncodedPacketSchema, t as sleep, tt as CamProfileSchema, u as parseJsonUnknown, ut as ProfileRtspEntrySchema, v as createSliceHandle, vt as SubscribeFramesResultSchema, w as defineCustomActions, wt as SHARE_VIEW_KINDS, x as viewerUiCapability, xt as parseProfileBrokerId, y as RawStateResultSchema, yt as makeProfileBrokerId, z as resolveCapMount, zt as audioChunkBytesPerSample } from "./sleep-7AN_Txmu.mjs";
2
2
  import { t as EventCategory } from "./event-category-BVDXG4tB.mjs";
3
3
  import { a as buildAudioArgs, c as buildVideoArgs, d as logBannerArgs, f as pickVideoEncoder, i as audioPlanFromEncodeProfile, l as invocationFromEncodeProfile, n as Fmp4BoxSplitter, o as buildFfmpegArgs, p as resolveStreamMaps, r as AUDIO_PRESETS, s as buildInputArgs, t as canonicalHash, u as isSoftwareDecode } from "./canonical-hash-CPK2Dy60.mjs";
4
4
  import { EventSourceType } from "./enums.mjs";
@@ -27127,13 +27127,18 @@ var vectorStoreCapability = {
27127
27127
  * exposes NATIVE onboard clips (Reolink SD card, a hub's storage, HKSV) adds
27128
27128
  * its own catalog ALONGSIDE that one.
27129
27129
  *
27130
- * The mount stays per-device (`resolveCapMount` → `device-scoped`): the fan-out
27131
- * is over the DEVICE's sources, resolved from the registry's per-device
27132
- * collection, never over every provider in the cluster. `listClips` is the
27133
- * union of those sources, in newest-first order, with NO dedup and no
27134
- * best-source pick — a clip held in two storages appears twice, once per
27135
- * source, and every row's {@link ClipSchema.source} says which. That is the
27136
- * operator's decision, stated so it is not "fixed" later.
27130
+ * The mount stays per-device (`resolveCapMount` → `device-scoped`), and a
27131
+ * device's SOURCES are its BINDINGS: `deviceManager.getBindings(deviceId)` is
27132
+ * what says a provider serves this camera, never the set of addons that
27133
+ * happen to have registered the capability somewhere in the cluster. That is
27134
+ * what stopped one addon appearing three times on 592 — as the device's
27135
+ * native provider, as the hub-local registration and as
27136
+ * `pipeline-analytics@little-unraid` (D554 amended 2026-09-20).
27137
+ *
27138
+ * `listClips` is asked of ONE provider at a time
27139
+ * ({@link videoclipsCapability.methods.listClips} `provider`), defaulting to
27140
+ * the bound one, which is CamStack on every camera today. It is NOT a union
27141
+ * over everything a camera has: *"l'utilizzatore è uno solo"*.
27137
27142
  * {@link videoclipsCapability.methods.getClipPlayback} dispatches by the
27138
27143
  * source namespace inside the clip id, which is why ids are self-contained.
27139
27144
  *
@@ -27454,17 +27459,31 @@ var videoclipsCapability = {
27454
27459
  * `device-config-widget-wrapped-binding.spec.ts` pins that a `kind:'wrapped'`
27455
27460
  * binding entry derives the same section a native one does.
27456
27461
  *
27457
- * `topTab` because the browser owns the whole pane (a day's clips, a source
27458
- * list and a player), exactly as `ptz` does; the widget itself is
27459
- * `host/clips-browser` in ui-library's `HOST_WIDGETS`.
27462
+ * **It is a SECTION of the Recording tab, at the end of it — not a tab of
27463
+ * its own.** It shipped as a `clips` top-tab and the operator rejected the
27464
+ * placement: *"utilizzerei la stessa tab recordings, lì abbiamo già tutto il
27465
+ * necessario, una nuova sezione alla fine per le clips"*. The Recording tab
27466
+ * already holds the recorder's panel, the schedule bands and the unified
27467
+ * retention policy; footage the camera itself holds is the same question,
27468
+ * asked of a different store. `order: 100` puts it after all of them with
27469
+ * room left in front. The `clips` entry in `WELL_KNOWN_TABS` went with it —
27470
+ * a well-known id nobody declares is an invitation to mint the tab again.
27471
+ *
27472
+ * `topTab` stays: the browser owns a pane (a day's tiles, a source list and
27473
+ * a player) and the Config tab's inner bar has no room for one. The widget
27474
+ * itself is `host/clips-browser` in ui-library's `HOST_WIDGETS`, and because
27475
+ * the admin Recordings page renders every `location:'top-tab'` +
27476
+ * `tab:'recording'` section behind its camera picker
27477
+ * (`CameraRecordingSettingsSection`), this declaration lands the section on
27478
+ * BOTH surfaces with no second wiring.
27460
27479
  */
27461
27480
  deviceConfig: { ui: {
27462
27481
  kind: "widget",
27463
27482
  widgetId: "host/clips-browser",
27464
- tab: "clips",
27483
+ tab: "recording",
27465
27484
  topTab: true,
27466
27485
  label: "Clips",
27467
- order: 0
27486
+ order: 100
27468
27487
  } },
27469
27488
  methods: {
27470
27489
  listClips: method(z.object({
@@ -27473,13 +27492,23 @@ var videoclipsCapability = {
27473
27492
  until: z.number(),
27474
27493
  limit: z.number().int().positive().optional(),
27475
27494
  /**
27476
- * View filter over {@link ClipSourceSchema.source} values — the
27477
- * picker's selection, forwarded so a provider need not list what
27478
- * nobody is looking at. ABSENT means every source this camera has,
27479
- * which is the honest default for a surface whose whole point is that
27480
- * nothing is hidden (D554 3). A provider with one source ignores it.
27495
+ * WHICH provider to ask — the `addonId` a {@link ClipSourceSchema} row
27496
+ * carries, never a source id and never a list.
27497
+ *
27498
+ * Absent means the device's BOUND provider, which is CamStack on every
27499
+ * camera today because that is what `deviceManager.getBindings`
27500
+ * answers with. A provider the device is not bound to is refused by
27501
+ * name rather than answered by another one (D552's
27502
+ * `rejectUnresolvedAddonPin` rule).
27503
+ *
27504
+ * It replaced `sources?: string[]`, a VIEW filter over source ids that
27505
+ * assumed the answer was a fan-out over everything a camera has. The
27506
+ * operator settled otherwise on 2026-09-20 — *"il get videoclips
27507
+ * prendere un provider opzionale, di default va su camstack"*,
27508
+ * *"l'utilizzatore è uno solo"* — so the list is asked of one provider
27509
+ * at a time and there is nothing to filter out of it.
27481
27510
  */
27482
- sources: z.array(z.string()).optional()
27511
+ provider: z.string().optional()
27483
27512
  }), z.array(ClipSchema).readonly(), {
27484
27513
  kind: "query",
27485
27514
  auth: "protected"
@@ -9,7 +9,7 @@ import type { CustomModelMetadata, ModelCatalogEntry, ModelFormat, ModelOutputFo
9
9
  * Multiple addons can contribute sections to the same tab.
10
10
  */
11
11
  /** Predefined tab identifiers that addons reference by ID. */
12
- export type WellKnownTabId = 'overview' | 'general' | 'image' | 'light' | 'motion' | 'audio' | 'snapshot' | 'osd' | 'alarms' | 'pipeline' | 'detection-pipeline' | 'stream-broker' | 'streaming' | 'ptz' | 'navigation' | 'consumables' | 'zones' | 'analytics' | 'live-stats' | 'recording' | 'clips' | 'notifications' | 'network' | 'storage' | 'engine' | 'scheduler' | 'decoder' | 'advanced';
12
+ export type WellKnownTabId = 'overview' | 'general' | 'image' | 'light' | 'motion' | 'audio' | 'snapshot' | 'osd' | 'alarms' | 'pipeline' | 'detection-pipeline' | 'stream-broker' | 'streaming' | 'ptz' | 'navigation' | 'consumables' | 'zones' | 'analytics' | 'live-stats' | 'recording' | 'notifications' | 'network' | 'storage' | 'engine' | 'scheduler' | 'decoder' | 'advanced';
13
13
  export interface WellKnownTab {
14
14
  readonly id: WellKnownTabId;
15
15
  readonly label: string;
@@ -62,20 +62,6 @@ export interface ICapabilityRegistry {
62
62
  }>;
63
63
  /** List device-scoped capability names that apply to a device type. */
64
64
  listDeviceScopedCapsForType(deviceType: string): readonly string[];
65
- /**
66
- * Mirror one device's persisted SOURCE deactivations for a collection cap
67
- * onto the resolution path (D556).
68
- *
69
- * The registry holds only the PROJECTION: the authority is the
70
- * device-manager's persisted wrapper activation, and
71
- * `device-source-activation.ts` is the only writer. An empty list means
72
- * every source — never "none".
73
- */
74
- setDeviceDisabledSources(deviceId: string, capability: string, addonIds: readonly string[]): void;
75
- /** The addon ids switched OFF as sources of this device. Empty = every source. */
76
- getDeviceDisabledSources(deviceId: string, capability: string): readonly string[];
77
- /** Is `addonId` switched off as a source of this device for `capability`? */
78
- isDeviceSourceDisabled(deviceId: string, capability: string, addonId: string): boolean;
79
65
  }
80
66
  /** An engine instance returned by IEngineManager — typed interface instead of raw ICamstackAddon */
81
67
  export interface IEngineInstance {
@@ -244,12 +244,6 @@ var WELL_KNOWN_TABS = [
244
244
  icon: "circle-dot",
245
245
  order: 40
246
246
  },
247
- {
248
- id: "clips",
249
- label: "Clips",
250
- icon: "clapperboard",
251
- order: 41
252
- },
253
247
  {
254
248
  id: "engine",
255
249
  label: "Inference Engine",
@@ -244,12 +244,6 @@ var WELL_KNOWN_TABS = [
244
244
  icon: "circle-dot",
245
245
  order: 40
246
246
  },
247
- {
248
- id: "clips",
249
- label: "Clips",
250
- icon: "clapperboard",
251
- order: 41
252
- },
253
247
  {
254
248
  id: "engine",
255
249
  label: "Inference Engine",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.234",
3
+ "version": "1.2.235",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",