@camstack/types 1.2.236 → 1.2.237
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/capabilities/videoclips.cap.d.ts +20 -12
- package/dist/index.js +48 -22
- package/dist/index.mjs +48 -22
- package/package.json +1 -1
|
@@ -6,13 +6,14 @@ import { type InferProvider } from './capability-definition.js';
|
|
|
6
6
|
*
|
|
7
7
|
* A device-scoped wrapper COLLECTION (D549 decision 2, D554): every provider a
|
|
8
8
|
* camera has is a SOURCE, and they are listed beside each other — never one
|
|
9
|
-
* substituted for another
|
|
10
|
-
* the RECORDER — the addon that owns the
|
|
11
|
-
* composes the analytics event log (markers + thumbnails,
|
|
12
|
-
* with the recorder's own `getPlaybackManifest
|
|
13
|
-
* existing footage, never a separate file. A camera that
|
|
14
|
-
* clips (Reolink SD card, a hub's storage, HKSV) adds
|
|
15
|
-
* ALONGSIDE that one.
|
|
9
|
+
* substituted for another, and none of them privileged by name. One source,
|
|
10
|
+
* `analytics`, is registered by the RECORDER — the addon that owns the
|
|
11
|
+
* footage, D560 — and composes the analytics event log (markers + thumbnails,
|
|
12
|
+
* read over `ctx.api`) with the recorder's own `getPlaybackManifest`: a clip
|
|
13
|
+
* is a time-WINDOW over existing footage, never a separate file. A camera that
|
|
14
|
+
* exposes NATIVE onboard clips (Reolink SD card, a hub's storage, HKSV) adds
|
|
15
|
+
* its own catalog ALONGSIDE that one. (`defaultActive` above is the CAP's
|
|
16
|
+
* auto-bind to cameras, not a ranking among these sources — there is none.)
|
|
16
17
|
*
|
|
17
18
|
* The mount stays per-device (`resolveCapMount` → `device-scoped`), and a
|
|
18
19
|
* device's SOURCES are its BINDINGS: `deviceManager.getBindings(deviceId)` is
|
|
@@ -22,10 +23,17 @@ import { type InferProvider } from './capability-definition.js';
|
|
|
22
23
|
* native provider, as the hub-local registration and as an
|
|
23
24
|
* `<addonId>@<nodeId>` one (D554 amended 2026-09-20).
|
|
24
25
|
*
|
|
25
|
-
* `listClips` is asked of ONE provider at a time
|
|
26
|
-
* ({@link videoclipsCapability.methods.listClips} `provider
|
|
27
|
-
*
|
|
28
|
-
*
|
|
26
|
+
* `listClips` is asked of ONE provider at a time, and NAMING it is REQUIRED
|
|
27
|
+
* ({@link videoclipsCapability.methods.listClips} `provider`, D554 amended). It is not
|
|
28
|
+
* a union over everything a camera has: *"l'utilizzatore è uno solo"*. There
|
|
29
|
+
* is no default, because a collection cap's binding set is DERIVED and PLURAL
|
|
30
|
+
* (D554 amended, `getBindings` step 0) — "the bound one" does not exist to
|
|
31
|
+
* resolve to, and the one thing that could take its place is a second
|
|
32
|
+
* authority naming a provider per camera, which D554 decision 3 rejected.
|
|
33
|
+
* The pick is a SURFACE's to make, from the {@link ClipSourceSchema} rows it
|
|
34
|
+
* already holds, and it says which one it made (D569 § 1–3).
|
|
35
|
+
* {@link videoclipsCapability.methods.listSources} is the method that fans out
|
|
36
|
+
* — one row per source, by construction.
|
|
29
37
|
* {@link videoclipsCapability.methods.getClipPlayback} dispatches by the
|
|
30
38
|
* source namespace inside the clip id, which is why ids are self-contained.
|
|
31
39
|
*
|
|
@@ -259,7 +267,7 @@ export declare const videoclipsCapability: {
|
|
|
259
267
|
since: z.ZodNumber;
|
|
260
268
|
until: z.ZodNumber;
|
|
261
269
|
limit: z.ZodOptional<z.ZodNumber>;
|
|
262
|
-
provider: z.
|
|
270
|
+
provider: z.ZodString;
|
|
263
271
|
}, z.core.$strip>, z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
264
272
|
id: z.ZodString;
|
|
265
273
|
source: z.ZodString;
|
package/dist/index.js
CHANGED
|
@@ -27164,13 +27164,14 @@ var vectorStoreCapability = {
|
|
|
27164
27164
|
*
|
|
27165
27165
|
* A device-scoped wrapper COLLECTION (D549 decision 2, D554): every provider a
|
|
27166
27166
|
* camera has is a SOURCE, and they are listed beside each other — never one
|
|
27167
|
-
* substituted for another
|
|
27168
|
-
* the RECORDER — the addon that owns the
|
|
27169
|
-
* composes the analytics event log (markers + thumbnails,
|
|
27170
|
-
* with the recorder's own `getPlaybackManifest
|
|
27171
|
-
* existing footage, never a separate file. A camera that
|
|
27172
|
-
* clips (Reolink SD card, a hub's storage, HKSV) adds
|
|
27173
|
-
* ALONGSIDE that one.
|
|
27167
|
+
* substituted for another, and none of them privileged by name. One source,
|
|
27168
|
+
* `analytics`, is registered by the RECORDER — the addon that owns the
|
|
27169
|
+
* footage, D560 — and composes the analytics event log (markers + thumbnails,
|
|
27170
|
+
* read over `ctx.api`) with the recorder's own `getPlaybackManifest`: a clip
|
|
27171
|
+
* is a time-WINDOW over existing footage, never a separate file. A camera that
|
|
27172
|
+
* exposes NATIVE onboard clips (Reolink SD card, a hub's storage, HKSV) adds
|
|
27173
|
+
* its own catalog ALONGSIDE that one. (`defaultActive` above is the CAP's
|
|
27174
|
+
* auto-bind to cameras, not a ranking among these sources — there is none.)
|
|
27174
27175
|
*
|
|
27175
27176
|
* The mount stays per-device (`resolveCapMount` → `device-scoped`), and a
|
|
27176
27177
|
* device's SOURCES are its BINDINGS: `deviceManager.getBindings(deviceId)` is
|
|
@@ -27180,10 +27181,17 @@ var vectorStoreCapability = {
|
|
|
27180
27181
|
* native provider, as the hub-local registration and as an
|
|
27181
27182
|
* `<addonId>@<nodeId>` one (D554 amended 2026-09-20).
|
|
27182
27183
|
*
|
|
27183
|
-
* `listClips` is asked of ONE provider at a time
|
|
27184
|
-
* ({@link videoclipsCapability.methods.listClips} `provider
|
|
27185
|
-
*
|
|
27186
|
-
*
|
|
27184
|
+
* `listClips` is asked of ONE provider at a time, and NAMING it is REQUIRED
|
|
27185
|
+
* ({@link videoclipsCapability.methods.listClips} `provider`, D554 amended). It is not
|
|
27186
|
+
* a union over everything a camera has: *"l'utilizzatore è uno solo"*. There
|
|
27187
|
+
* is no default, because a collection cap's binding set is DERIVED and PLURAL
|
|
27188
|
+
* (D554 amended, `getBindings` step 0) — "the bound one" does not exist to
|
|
27189
|
+
* resolve to, and the one thing that could take its place is a second
|
|
27190
|
+
* authority naming a provider per camera, which D554 decision 3 rejected.
|
|
27191
|
+
* The pick is a SURFACE's to make, from the {@link ClipSourceSchema} rows it
|
|
27192
|
+
* already holds, and it says which one it made (D569 § 1–3).
|
|
27193
|
+
* {@link videoclipsCapability.methods.listSources} is the method that fans out
|
|
27194
|
+
* — one row per source, by construction.
|
|
27187
27195
|
* {@link videoclipsCapability.methods.getClipPlayback} dispatches by the
|
|
27188
27196
|
* source namespace inside the clip id, which is why ids are self-contained.
|
|
27189
27197
|
*
|
|
@@ -27555,22 +27563,40 @@ var videoclipsCapability = {
|
|
|
27555
27563
|
limit: zod.z.number().int().positive().optional(),
|
|
27556
27564
|
/**
|
|
27557
27565
|
* WHICH provider to ask — the `addonId` a {@link ClipSourceSchema} row
|
|
27558
|
-
* carries, never a source id and never a list.
|
|
27566
|
+
* carries, never a source id and never a list. **Required** (D554 amended).
|
|
27559
27567
|
*
|
|
27560
|
-
*
|
|
27561
|
-
*
|
|
27562
|
-
*
|
|
27563
|
-
*
|
|
27564
|
-
*
|
|
27568
|
+
* A provider the device is not bound to is refused by name rather than
|
|
27569
|
+
* answered by another one (D552's `rejectUnresolvedAddonPin` rule).
|
|
27570
|
+
*
|
|
27571
|
+
* It was optional, documented as "absent means the device's BOUND
|
|
27572
|
+
* provider, which is CamStack on every camera". No code implemented
|
|
27573
|
+
* that. Measured on the live hub 2026-09-20 — device 592, bound to
|
|
27574
|
+
* `recorder` AND `provider-reolink` — a bare call with `limit: 3`
|
|
27575
|
+
* answered SIX rows, three from each source, merged newest-first:
|
|
27576
|
+
* `device-collection-dispatch.ts` simply left the fan-out un-narrowed,
|
|
27577
|
+
* so absence bought the union this method exists not to be, and
|
|
27578
|
+
* `limit` meant `limit × sources`.
|
|
27579
|
+
*
|
|
27580
|
+
* There is nothing to restore the default to. `getBindings` answers a
|
|
27581
|
+
* collection cap with a DERIVED, PLURAL set (D554 amended, step 0);
|
|
27582
|
+
* `setWrapperActive` — the singleton authority that could name one —
|
|
27583
|
+
* throws for a collection cap by design. Naming CamStack here instead
|
|
27584
|
+
* would privilege one addon by id inside a surface whose premise is
|
|
27585
|
+
* that sources are peers, and would be wrong on the first camera with
|
|
27586
|
+
* no recorder binding. So absence is REFUSED, in the schema, where the
|
|
27587
|
+
* generated types make it unomittable rather than merely discouraged.
|
|
27588
|
+
*
|
|
27589
|
+
* The default belongs to the SURFACE, which has the `listSources` rows
|
|
27590
|
+
* and can say which one it picked (D569 § 1–3; the viewer already
|
|
27591
|
+
* always sends this).
|
|
27565
27592
|
*
|
|
27566
27593
|
* It replaced `sources?: string[]`, a VIEW filter over source ids that
|
|
27567
27594
|
* assumed the answer was a fan-out over everything a camera has. The
|
|
27568
|
-
* operator settled otherwise on 2026-09-20 — *"
|
|
27569
|
-
*
|
|
27570
|
-
*
|
|
27571
|
-
* at a time and there is nothing to filter out of it.
|
|
27595
|
+
* operator settled otherwise on 2026-09-20 — *"l'utilizzatore è uno
|
|
27596
|
+
* solo"* — so the list is asked of one provider at a time and there is
|
|
27597
|
+
* nothing to filter out of it.
|
|
27572
27598
|
*/
|
|
27573
|
-
provider: zod.z.string().
|
|
27599
|
+
provider: zod.z.string().min(1)
|
|
27574
27600
|
}), zod.z.array(ClipSchema).readonly(), {
|
|
27575
27601
|
kind: "query",
|
|
27576
27602
|
auth: "protected"
|
package/dist/index.mjs
CHANGED
|
@@ -27163,13 +27163,14 @@ var vectorStoreCapability = {
|
|
|
27163
27163
|
*
|
|
27164
27164
|
* A device-scoped wrapper COLLECTION (D549 decision 2, D554): every provider a
|
|
27165
27165
|
* camera has is a SOURCE, and they are listed beside each other — never one
|
|
27166
|
-
* substituted for another
|
|
27167
|
-
* the RECORDER — the addon that owns the
|
|
27168
|
-
* composes the analytics event log (markers + thumbnails,
|
|
27169
|
-
* with the recorder's own `getPlaybackManifest
|
|
27170
|
-
* existing footage, never a separate file. A camera that
|
|
27171
|
-
* clips (Reolink SD card, a hub's storage, HKSV) adds
|
|
27172
|
-
* ALONGSIDE that one.
|
|
27166
|
+
* substituted for another, and none of them privileged by name. One source,
|
|
27167
|
+
* `analytics`, is registered by the RECORDER — the addon that owns the
|
|
27168
|
+
* footage, D560 — and composes the analytics event log (markers + thumbnails,
|
|
27169
|
+
* read over `ctx.api`) with the recorder's own `getPlaybackManifest`: a clip
|
|
27170
|
+
* is a time-WINDOW over existing footage, never a separate file. A camera that
|
|
27171
|
+
* exposes NATIVE onboard clips (Reolink SD card, a hub's storage, HKSV) adds
|
|
27172
|
+
* its own catalog ALONGSIDE that one. (`defaultActive` above is the CAP's
|
|
27173
|
+
* auto-bind to cameras, not a ranking among these sources — there is none.)
|
|
27173
27174
|
*
|
|
27174
27175
|
* The mount stays per-device (`resolveCapMount` → `device-scoped`), and a
|
|
27175
27176
|
* device's SOURCES are its BINDINGS: `deviceManager.getBindings(deviceId)` is
|
|
@@ -27179,10 +27180,17 @@ var vectorStoreCapability = {
|
|
|
27179
27180
|
* native provider, as the hub-local registration and as an
|
|
27180
27181
|
* `<addonId>@<nodeId>` one (D554 amended 2026-09-20).
|
|
27181
27182
|
*
|
|
27182
|
-
* `listClips` is asked of ONE provider at a time
|
|
27183
|
-
* ({@link videoclipsCapability.methods.listClips} `provider
|
|
27184
|
-
*
|
|
27185
|
-
*
|
|
27183
|
+
* `listClips` is asked of ONE provider at a time, and NAMING it is REQUIRED
|
|
27184
|
+
* ({@link videoclipsCapability.methods.listClips} `provider`, D554 amended). It is not
|
|
27185
|
+
* a union over everything a camera has: *"l'utilizzatore è uno solo"*. There
|
|
27186
|
+
* is no default, because a collection cap's binding set is DERIVED and PLURAL
|
|
27187
|
+
* (D554 amended, `getBindings` step 0) — "the bound one" does not exist to
|
|
27188
|
+
* resolve to, and the one thing that could take its place is a second
|
|
27189
|
+
* authority naming a provider per camera, which D554 decision 3 rejected.
|
|
27190
|
+
* The pick is a SURFACE's to make, from the {@link ClipSourceSchema} rows it
|
|
27191
|
+
* already holds, and it says which one it made (D569 § 1–3).
|
|
27192
|
+
* {@link videoclipsCapability.methods.listSources} is the method that fans out
|
|
27193
|
+
* — one row per source, by construction.
|
|
27186
27194
|
* {@link videoclipsCapability.methods.getClipPlayback} dispatches by the
|
|
27187
27195
|
* source namespace inside the clip id, which is why ids are self-contained.
|
|
27188
27196
|
*
|
|
@@ -27554,22 +27562,40 @@ var videoclipsCapability = {
|
|
|
27554
27562
|
limit: z.number().int().positive().optional(),
|
|
27555
27563
|
/**
|
|
27556
27564
|
* WHICH provider to ask — the `addonId` a {@link ClipSourceSchema} row
|
|
27557
|
-
* carries, never a source id and never a list.
|
|
27565
|
+
* carries, never a source id and never a list. **Required** (D554 amended).
|
|
27558
27566
|
*
|
|
27559
|
-
*
|
|
27560
|
-
*
|
|
27561
|
-
*
|
|
27562
|
-
*
|
|
27563
|
-
*
|
|
27567
|
+
* A provider the device is not bound to is refused by name rather than
|
|
27568
|
+
* answered by another one (D552's `rejectUnresolvedAddonPin` rule).
|
|
27569
|
+
*
|
|
27570
|
+
* It was optional, documented as "absent means the device's BOUND
|
|
27571
|
+
* provider, which is CamStack on every camera". No code implemented
|
|
27572
|
+
* that. Measured on the live hub 2026-09-20 — device 592, bound to
|
|
27573
|
+
* `recorder` AND `provider-reolink` — a bare call with `limit: 3`
|
|
27574
|
+
* answered SIX rows, three from each source, merged newest-first:
|
|
27575
|
+
* `device-collection-dispatch.ts` simply left the fan-out un-narrowed,
|
|
27576
|
+
* so absence bought the union this method exists not to be, and
|
|
27577
|
+
* `limit` meant `limit × sources`.
|
|
27578
|
+
*
|
|
27579
|
+
* There is nothing to restore the default to. `getBindings` answers a
|
|
27580
|
+
* collection cap with a DERIVED, PLURAL set (D554 amended, step 0);
|
|
27581
|
+
* `setWrapperActive` — the singleton authority that could name one —
|
|
27582
|
+
* throws for a collection cap by design. Naming CamStack here instead
|
|
27583
|
+
* would privilege one addon by id inside a surface whose premise is
|
|
27584
|
+
* that sources are peers, and would be wrong on the first camera with
|
|
27585
|
+
* no recorder binding. So absence is REFUSED, in the schema, where the
|
|
27586
|
+
* generated types make it unomittable rather than merely discouraged.
|
|
27587
|
+
*
|
|
27588
|
+
* The default belongs to the SURFACE, which has the `listSources` rows
|
|
27589
|
+
* and can say which one it picked (D569 § 1–3; the viewer already
|
|
27590
|
+
* always sends this).
|
|
27564
27591
|
*
|
|
27565
27592
|
* It replaced `sources?: string[]`, a VIEW filter over source ids that
|
|
27566
27593
|
* assumed the answer was a fan-out over everything a camera has. The
|
|
27567
|
-
* operator settled otherwise on 2026-09-20 — *"
|
|
27568
|
-
*
|
|
27569
|
-
*
|
|
27570
|
-
* at a time and there is nothing to filter out of it.
|
|
27594
|
+
* operator settled otherwise on 2026-09-20 — *"l'utilizzatore è uno
|
|
27595
|
+
* solo"* — so the list is asked of one provider at a time and there is
|
|
27596
|
+
* nothing to filter out of it.
|
|
27571
27597
|
*/
|
|
27572
|
-
provider: z.string().
|
|
27598
|
+
provider: z.string().min(1)
|
|
27573
27599
|
}), z.array(ClipSchema).readonly(), {
|
|
27574
27600
|
kind: "query",
|
|
27575
27601
|
auth: "protected"
|