@camstack/types 1.2.232 → 1.2.234
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 +4 -3
- package/dist/addon.mjs +4 -3
- package/dist/capabilities/cap-router-predicates.d.ts +37 -0
- package/dist/capabilities/capability-definition.d.ts +17 -1
- package/dist/capabilities/device-manager.cap.d.ts +18 -3
- package/dist/capabilities/index.d.ts +4 -4
- package/dist/capabilities/server-management.cap.d.ts +72 -5
- package/dist/capabilities/videoclips.cap.d.ts +198 -5
- package/dist/generated/addon-api.d.ts +7 -34
- package/dist/generated/capability-router-map.d.ts +4 -4
- package/dist/generated/collection-array-methods.d.ts +1 -1
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/method-device-selectors.d.ts +1 -1
- package/dist/index.js +447 -22
- package/dist/index.mjs +443 -23
- package/dist/interfaces/config-ui.d.ts +1 -1
- package/dist/interfaces/kernel-abstractions.d.ts +14 -0
- package/dist/{sleep-CiR4z7r9.mjs → sleep-CopaBJss.mjs} +8 -0
- package/dist/{sleep-D7DPSeiv.js → sleep-DImve4HM.js} +8 -0
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_sleep = require("./sleep-
|
|
2
|
+
const require_sleep = require("./sleep-DImve4HM.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
|
|
@@ -297,7 +297,7 @@ function materialise(defaults) {
|
|
|
297
297
|
* barrel (`ALL_CAPABILITY_DEFINITIONS`), which would cost ~144MB RSS per
|
|
298
298
|
* forked runner. See docs/decisions/adr-0028.md.
|
|
299
299
|
*
|
|
300
|
-
* Coverage:
|
|
300
|
+
* Coverage: 22 collection caps, 36 array methods.
|
|
301
301
|
*/
|
|
302
302
|
var COLLECTION_ARRAY_METHODS = Object.freeze({
|
|
303
303
|
"addon-pages-source": ["listPages"],
|
|
@@ -333,7 +333,8 @@ var COLLECTION_ARRAY_METHODS = Object.freeze({
|
|
|
333
333
|
"storage-occupancy": ["getOccupancy"],
|
|
334
334
|
"storage-provider": ["list"],
|
|
335
335
|
"turn-provider": ["getTurnServers"],
|
|
336
|
-
"user-passkeys": ["listPasskeys"]
|
|
336
|
+
"user-passkeys": ["listPasskeys"],
|
|
337
|
+
"videoclips": ["listClips", "listSources"]
|
|
337
338
|
});
|
|
338
339
|
/**
|
|
339
340
|
* True when `method` on cap `capName` is a COLLECTION cap's array-returning
|
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-
|
|
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";
|
|
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
|
|
@@ -296,7 +296,7 @@ function materialise(defaults) {
|
|
|
296
296
|
* barrel (`ALL_CAPABILITY_DEFINITIONS`), which would cost ~144MB RSS per
|
|
297
297
|
* forked runner. See docs/decisions/adr-0028.md.
|
|
298
298
|
*
|
|
299
|
-
* Coverage:
|
|
299
|
+
* Coverage: 22 collection caps, 36 array methods.
|
|
300
300
|
*/
|
|
301
301
|
var COLLECTION_ARRAY_METHODS = Object.freeze({
|
|
302
302
|
"addon-pages-source": ["listPages"],
|
|
@@ -332,7 +332,8 @@ var COLLECTION_ARRAY_METHODS = Object.freeze({
|
|
|
332
332
|
"storage-occupancy": ["getOccupancy"],
|
|
333
333
|
"storage-provider": ["list"],
|
|
334
334
|
"turn-provider": ["getTurnServers"],
|
|
335
|
-
"user-passkeys": ["listPasskeys"]
|
|
335
|
+
"user-passkeys": ["listPasskeys"],
|
|
336
|
+
"videoclips": ["listClips", "listSources"]
|
|
336
337
|
});
|
|
337
338
|
/**
|
|
338
339
|
* True when `method` on cap `capName` is a COLLECTION cap's array-returning
|
|
@@ -11,6 +11,25 @@
|
|
|
11
11
|
* (`_def.type`) and legacy Zod 3 (`_def.typeName` / `constructor.name`) shapes.
|
|
12
12
|
*/
|
|
13
13
|
import type { CapabilityDefinition, CapabilityMethodAuth } from './capability-definition.js';
|
|
14
|
+
/**
|
|
15
|
+
* True when a cap's generated router carries the COLLECTION `addonId`
|
|
16
|
+
* selector — "which provider of this collection answers".
|
|
17
|
+
*
|
|
18
|
+
* `resolveCapMount` is the authority, not `mode`: since D554 a device-scoped
|
|
19
|
+
* wrapper that is a collection (`videoclips`) keeps the PER-DEVICE mount, and
|
|
20
|
+
* its sources are resolved from the device, never picked by an addonId the
|
|
21
|
+
* caller supplies. Emitting the selector for it would advertise a routing key
|
|
22
|
+
* the runtime builder does not read — the exact type/runtime disagreement
|
|
23
|
+
* D552 removed from `generate-cap-mounts.ts`.
|
|
24
|
+
*
|
|
25
|
+
* The one exception is preserved deliberately, and it is the same one
|
|
26
|
+
* `generate-cap-mounts.ts` documents: a cap declaring `mount: { kind: 'skip' }`
|
|
27
|
+
* keeps its mode-derived shape. The builder never mounts it, so the emitted
|
|
28
|
+
* value is never called — four inert caps (`log-channels`, `login-method`,
|
|
29
|
+
* `load-contribution`, `failure-contribution`) that would otherwise change
|
|
30
|
+
* shape inside a slice that is about something else.
|
|
31
|
+
*/
|
|
32
|
+
export declare function emitsCollectionSelector(def: CapabilityDefinition): boolean;
|
|
14
33
|
/** `z.void()` — input carries no data. */
|
|
15
34
|
export declare function isVoidInput(schema: unknown): boolean;
|
|
16
35
|
/** `z.object()` — supports `.loose()` for out-of-band `nodeId`/`addonId` keys. */
|
|
@@ -86,6 +105,24 @@ export declare function extractNestedAddonId(input: unknown): string | undefined
|
|
|
86
105
|
* for non-object schemas.
|
|
87
106
|
*/
|
|
88
107
|
export declare function objectInputDeclaresAddonId(schema: unknown): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* True when an OBJECT input schema declares a top-level, REQUIRED, numeric
|
|
110
|
+
* `deviceId` — i.e. the method names exactly one device on every call.
|
|
111
|
+
*
|
|
112
|
+
* This is the question the per-device dispatcher asks at runtime
|
|
113
|
+
* (`requireDeviceScoped`: `typeof input.deviceId !== 'number'` → BAD_REQUEST),
|
|
114
|
+
* asked once at build time instead. A `device-scoped` cap's method that cannot
|
|
115
|
+
* answer it has no device to resolve for and therefore resolves through the
|
|
116
|
+
* cap's SYSTEM provider (`cap-router-builder.ts`) — the same destination
|
|
117
|
+
* `systemOnly` names explicitly. Without this, flipping the mount would 400
|
|
118
|
+
* every batch (`deviceIds`), fleet-wide (`z.void()`) and job-keyed method on
|
|
119
|
+
* the eight device-scoped wrapper caps.
|
|
120
|
+
*
|
|
121
|
+
* Structural, never a name heuristic over source text: the field must resolve
|
|
122
|
+
* to `z.number()` and must NOT be wrapped in `optional` / `nullable` /
|
|
123
|
+
* `default` — an absent value is exactly the input the dispatcher rejects.
|
|
124
|
+
*/
|
|
125
|
+
export declare function objectInputDeclaresRequiredDeviceId(schema: unknown): boolean;
|
|
89
126
|
/**
|
|
90
127
|
* Effective auth for a cap method — the `internal: true` floor (Task 7.5c).
|
|
91
128
|
*
|
|
@@ -612,7 +612,23 @@ export interface CapabilityDefinition<TName extends string = string, TMethods ex
|
|
|
612
612
|
* `device-native` are the auto-derivable defaults; the rest are explicit
|
|
613
613
|
* opt-ins for caps that today need a hand-written override.
|
|
614
614
|
*/
|
|
615
|
-
export type CapabilityMountKind = 'singleton' | 'collection' | 'device-native'
|
|
615
|
+
export type CapabilityMountKind = 'singleton' | 'collection' | 'device-native'
|
|
616
|
+
/**
|
|
617
|
+
* `scope: 'device'` + `kind: 'wrapper'` — ONE active provider PER DEVICE,
|
|
618
|
+
* substitutable through `deviceManager.setWrapperActive`. NOT
|
|
619
|
+
* `device-native`: there is no native provider (the provider is an addon,
|
|
620
|
+
* not the device), so resolution goes through the D13 resolver
|
|
621
|
+
* `CapabilityRegistry.getProviderForDevice(cap, deviceId)`, which falls back
|
|
622
|
+
* to the global active singleton for a device with no binding.
|
|
623
|
+
*
|
|
624
|
+
* Only a method that NAMES a device can be dispatched per device — the
|
|
625
|
+
* per-device dispatcher demands a numeric `deviceId` on every call. A method
|
|
626
|
+
* whose input carries no required numeric `deviceId` (a batch over
|
|
627
|
+
* `deviceIds`, a fleet-wide count, a job id) resolves through the cap's
|
|
628
|
+
* SYSTEM provider instead, exactly as `systemOnly` does; the builder makes
|
|
629
|
+
* that call per method (`cap-router-builder.ts`).
|
|
630
|
+
*/
|
|
631
|
+
| 'device-scoped' | 'server-provided' | 'hub-only' | 'skip'
|
|
616
632
|
/**
|
|
617
633
|
* @deprecated Legacy alias for `server-provided` (renamed in SP1). Retained
|
|
618
634
|
* ONLY so the runtime tolerates version skew across the framework-live-update
|
|
@@ -1361,14 +1361,29 @@ export declare const deviceManagerCapability: {
|
|
|
1361
1361
|
}, z.core.$strip>>;
|
|
1362
1362
|
}, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
|
|
1363
1363
|
/**
|
|
1364
|
-
* Activate (or deactivate) a wrapper addon
|
|
1365
|
-
*
|
|
1366
|
-
*
|
|
1364
|
+
* Activate (or deactivate) a wrapper addon — or ONE of its sources — for a
|
|
1365
|
+
* (device, cap) pair.
|
|
1366
|
+
*
|
|
1367
|
+
* Persists the binding via ctx.settings; `active: false` on a SINGLETON cap
|
|
1368
|
+
* clears the wrapper (falling back to native if one is registered). On a
|
|
1369
|
+
* COLLECTION cap it adds to the per-device DENY set instead, and the
|
|
1370
|
+
* wrapper binding is left exactly as it was — a cap with several sources
|
|
1371
|
+
* has no "which one" for `getBindings` to answer (D556).
|
|
1372
|
+
*
|
|
1373
|
+
* `sourceId` is what makes the switch match its label. One addon can serve
|
|
1374
|
+
* several of a device's sources (`addon-provider-reolink` answers a hub
|
|
1375
|
+
* child with `native:reolink:onboard` AND `native:reolink:hub`), so a
|
|
1376
|
+
* toggle keyed by addon would turn off both while saying it turned off one
|
|
1377
|
+
* — the D62 defect with the polarity reversed (D557). Naming the source
|
|
1378
|
+
* denies exactly that source. OMITTING it keeps the cap-wide meaning
|
|
1379
|
+
* D556 shipped: every source this addon serves for this device, which is
|
|
1380
|
+
* also how a deny entry persisted before the re-key is still read.
|
|
1367
1381
|
*/
|
|
1368
1382
|
readonly setWrapperActive: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
1369
1383
|
deviceId: z.ZodNumber;
|
|
1370
1384
|
capName: z.ZodString;
|
|
1371
1385
|
wrapperAddonId: z.ZodString;
|
|
1386
|
+
sourceId: z.ZodOptional<z.ZodString>;
|
|
1372
1387
|
active: z.ZodBoolean;
|
|
1373
1388
|
}, z.core.$strip>, z.ZodVoid, "mutation">;
|
|
1374
1389
|
/**
|
|
@@ -36,7 +36,7 @@ export { BrokerAddInputSchema, BrokerGetStateInputSchema, type BrokerInfo as Uni
|
|
|
36
36
|
export { cameraPipelineConfigCapability, type ICameraPipelineConfigProvider, } from './camera-pipeline-config.cap.js';
|
|
37
37
|
export { streamSignalsCapability, type IStreamSignalsProvider, type StreamSignal, StreamSignalSchema, type StreamSignalsStatus, StreamSignalsStatusSchema, } from './stream-signals.cap.js';
|
|
38
38
|
export { cameraStreamsCapability, type ICameraStreamsProvider, type PickedCamStream, PickedCamStreamSchema, type PickStreamPreferences, PickStreamPreferencesSchema, type PickStreamRequirements, PickStreamRequirementsSchema, type StreamCodec, StreamCodecSchema, } from './camera-streams.cap.js';
|
|
39
|
-
export { extractNestedAddonId, isArrayOutputSchema, isCollectionArrayMethod, isObjectInput, isVoidInput, kebabToCamel, looseSchema, objectInputDeclaresAddonId, procedureAuthKey, resolveMethodAuth, } from './cap-router-predicates.js';
|
|
39
|
+
export { emitsCollectionSelector, extractNestedAddonId, isArrayOutputSchema, isCollectionArrayMethod, isObjectInput, isVoidInput, kebabToCamel, looseSchema, objectInputDeclaresAddonId, objectInputDeclaresRequiredDeviceId, procedureAuthKey, resolveMethodAuth, } from './cap-router-predicates.js';
|
|
40
40
|
export type { CapabilityDefinition, CapabilityEventSchema, CapabilityMethodAuth, CapabilityMethodCaller, CapabilityMethodKind, CapabilityMethodOptions, CapabilityMethodSchema, CapabilityMountHint, CapabilityMountKind, CapabilityStatusItemArray, CapabilityStatusKind, CapabilityStatusSchema, CapCaller, DeviceConfigDerivedFormUi, DeviceConfigSpec, DeviceConfigUiSpec, DeviceConfigWidgetUi, DeviceSettingsContribution, InferDeviceProxyCap, InferEvents, InferName, InferNativeProvider, InferProvider, InferRuntimeState, ProviderKind, RuntimeStateDurability, UiContribution, UiContributionKind, UiContributionRemote, } from './capability-definition.js';
|
|
41
41
|
export { DEFAULT_RUNTIME_STATE_DURABILITY, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, event, expandCapMethods, isDeviceConfigCap, method, resolveCapMount, } from './capability-definition.js';
|
|
42
42
|
export { CORE_BLOCK_ADDON_PREFIX, CORE_BLOCKS_ADDON_ID, type CoreBlock, type CoreBlockCompileResult, CoreBlockCompileResultSchema, type CoreBlockInput, CoreBlockInputSchema, type CoreBlockPlacement, CoreBlockPlacementSchema, CoreBlockSchema, type CoreBlockStatus, CoreBlockStatusSchema, coreBlockAddonId, coreBlockIdFromAddonId, coreBlocksCapability, type ICoreBlocksProvider, } from './core-blocks.cap.js';
|
|
@@ -95,7 +95,7 @@ export { CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, OrchestratorMetri
|
|
|
95
95
|
export type { CameraStream, CamProfile, CamStreamKind, DecodedAudioChunkWire, FrameHandleFormat, ProfileRtspEntry, ProfileSlot, AudioStreamPick, ProfileSlotStatus, SubscribeAudioChunksInput, SubscribeAudioChunksResult, SubscribeFramesInput, SubscribeFramesResult, } from './schemas/streaming-shared.js';
|
|
96
96
|
export { AudioChunkFormatSchema, AudioStreamPickSchema, BrokerStatsSchema, BrokerStatusSchema, CAM_PROFILE_ORDER, CameraStreamSchema, CamProfileSchema, CamStreamKindSchema, CamStreamResolutionSchema, DecodedAudioChunkSchema, DecodedFrameSchema, EncodedPacketSchema, FrameHandleFormatSchema, FrameHandleSchema, makeProfileBrokerId, makeSourceBrokerId, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, parseProfileBrokerId, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, selectAssignedProfileSlots, } from './schemas/streaming-shared.js';
|
|
97
97
|
export { buildEventKindDescriptor, EVENT_KIND_BY_CAP, EVENTFUL_CAP_NAMES, type SensorEventKindDescriptor, } from './sensor-event-kinds.js';
|
|
98
|
-
export { type ImageContract, ImageContractSchema, type ImageContractState, ImageContractStateSchema, type IServerManagementProvider, type ServerBootMode, ServerBootModeSchema, type ServerPackageStatus, ServerPackageStatusSchema, type ServerRollbackInfo, ServerRollbackInfoSchema, type ServerUpdateActionResult, ServerUpdateActionResultSchema, type ServerUpdateCheckResult, ServerUpdateCheckResultSchema, type ServerUpdateState, ServerUpdateStateSchema, serverManagementCapability, type WrapperEvidence, WrapperEvidenceSchema, type WrapperIdentity, WrapperIdentitySchema, type WrapperKind, WrapperKindSchema, } from './server-management.cap.js';
|
|
98
|
+
export { type ImageContract, ImageContractSchema, type ImageContractState, ImageContractStateSchema, type IServerManagementProvider, type ServerBootMode, ServerBootModeSchema, type ServerPackageStatus, ServerPackageStatusSchema, type ServerRollbackInfo, ServerRollbackInfoSchema, type ServerUpdateActionResult, ServerUpdateActionResultSchema, type ServerUpdateCheckResult, ServerUpdateCheckResultSchema, type ServerUpdateOutcome, ServerUpdateOutcomeSchema, type ServerUpdateState, ServerUpdateStateSchema, serverManagementCapability, type WrapperEvidence, WrapperEvidenceSchema, type WrapperIdentity, WrapperIdentitySchema, type WrapperKind, WrapperKindSchema, } from './server-management.cap.js';
|
|
99
99
|
export { type BulkRecord, BulkRecordSchema, type CollectionColumn, CollectionColumnSchema, type CollectionIndex, CollectionIndexSchema, type ISettingsStoreProvider, type MutationFilter, MutationFilterSchema, QueryFilterSchema, SettingsRecordSchema, type SettingsStoreClient, settingsStoreCapability, } from './settings-store.cap.js';
|
|
100
100
|
export type { ISmtpProvider } from './smtp-provider.cap.js';
|
|
101
101
|
export { SendEmailInputSchema, SendEmailResultSchema, SmtpStatusSchema, smtpProviderCapability, } from './smtp-provider.cap.js';
|
|
@@ -116,8 +116,8 @@ export type { IUserPasskeysProvider, PasskeySummary } from './user-passkeys.cap.
|
|
|
116
116
|
export { PasskeySummarySchema, userPasskeysCapability } from './user-passkeys.cap.js';
|
|
117
117
|
export type { IVectorStoreProvider } from './vector-store.cap.js';
|
|
118
118
|
export { VectorDeclareIndexInputSchema, VectorDeleteByFilterInputSchema, VectorDeleteInputSchema, VectorDeleteResultSchema, type VectorFilter, VectorFilterSchema, VectorGetInputSchema, VectorGetResultSchema, type VectorItem, VectorItemSchema, type VectorMatch, VectorMatchSchema, type VectorMetadata, VectorMetadataSchema, type VectorMetric, VectorMetricSchema, VectorQueryInputSchema, VectorQueryResultSchema, VectorStatsInputSchema, VectorStatsResultSchema, VectorUpsertInputSchema, VectorUpsertResultSchema, vectorStoreCapability, } from './vector-store.cap.js';
|
|
119
|
-
export type { Clip, ClipPlayback, IVideoclipsProvider } from './videoclips.cap.js';
|
|
120
|
-
export { ClipPlaybackSchema, ClipSchema, MAX_CLIP_EVENT_IDS, MAX_CLIP_LABELS, videoclipsCapability, } from './videoclips.cap.js';
|
|
119
|
+
export type { Clip, ClipPlayback, ClipSource, ClipSourceAvailability, IVideoclipsProvider, } from './videoclips.cap.js';
|
|
120
|
+
export { ClipPlaybackSchema, ClipSchema, ClipSourceAvailabilitySchema, ClipSourceSchema, MAX_CLIP_EVENT_IDS, MAX_CLIP_LABELS, videoclipsCapability, } from './videoclips.cap.js';
|
|
121
121
|
export type { IViewerUiProvider } from './viewer-ui.cap.js';
|
|
122
122
|
export { viewerUiCapability } from './viewer-ui.cap.js';
|
|
123
123
|
export { type IWebrtcSessionProvider, type WebrtcClientHints, type WebrtcLadderDecision, WebrtcLadderDecisionSchema, type WebrtcSessionDebug, WebrtcSessionDebugSchema, type WebrtcStreamChoice, WebrtcStreamChoiceSchema, type WebrtcStreamTarget, WebrtcStreamTargetSchema, type WebrtcTierFailure, WebrtcTierFailureSchema, webrtcClientHintsSchema, webrtcSessionCapability, } from './webrtc-session.cap.js';
|
|
@@ -43,10 +43,9 @@ declare const ServerBootModeSchema: z.ZodEnum<{
|
|
|
43
43
|
* - `idle` / `checking` / `staging` — steady / in-flight registry work.
|
|
44
44
|
* - `pending-restart` — a version is staged and the node has NOT yet
|
|
45
45
|
* restarted onto it (still running the OLD version).
|
|
46
|
-
* - `awaiting-confirmation` —
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* manually restarted, or the probation boot auto-rolls-back.
|
|
46
|
+
* - `awaiting-confirmation` — RETIRED with the probation boot (single-copy
|
|
47
|
+
* collapse, 2026-07-18). Kept in the enum so an older client still parses;
|
|
48
|
+
* no provider emits it.
|
|
50
49
|
*/
|
|
51
50
|
declare const ServerUpdateStateSchema: z.ZodEnum<{
|
|
52
51
|
idle: "idle";
|
|
@@ -209,6 +208,8 @@ declare const ServerPackageStatusSchema: z.ZodObject<{
|
|
|
209
208
|
runningVersion: z.ZodNullable<z.ZodString>;
|
|
210
209
|
nodeRuntimeVersion: z.ZodNullable<z.ZodString>;
|
|
211
210
|
activeVersion: z.ZodNullable<z.ZodString>;
|
|
211
|
+
installedVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
212
|
+
restartRequired: z.ZodOptional<z.ZodBoolean>;
|
|
212
213
|
previousVersion: z.ZodNullable<z.ZodString>;
|
|
213
214
|
seedVersion: z.ZodNullable<z.ZodString>;
|
|
214
215
|
latestVersion: z.ZodNullable<z.ZodString>;
|
|
@@ -282,12 +283,46 @@ declare const ServerUpdateCheckResultSchema: z.ZodObject<{
|
|
|
282
283
|
updateAvailable: z.ZodBoolean;
|
|
283
284
|
checkedAtMs: z.ZodNumber;
|
|
284
285
|
error: z.ZodNullable<z.ZodString>;
|
|
286
|
+
pendingVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
287
|
+
restartRequired: z.ZodOptional<z.ZodBoolean>;
|
|
285
288
|
}, z.core.$strip>;
|
|
289
|
+
/**
|
|
290
|
+
* What an action DID — the discriminant `accepted` cannot carry. Before
|
|
291
|
+
* 2026-09-20 `applyServerUpdate` answered `accepted:false` both for a refusal
|
|
292
|
+
* where nothing was wrong (already current, already staged) and for a staging
|
|
293
|
+
* install that died on `npm error code ECONNRESET`; the only difference was
|
|
294
|
+
* prose in `message`, and an operator restarted a container on the strength of
|
|
295
|
+
* it, booting the previous version.
|
|
296
|
+
*
|
|
297
|
+
* - `staged` — the closure is installed and validated; the node
|
|
298
|
+
* restarts to apply it (`restarting:true`). NOTHING
|
|
299
|
+
* runs the new code until that restart completes.
|
|
300
|
+
* - `restart-scheduled` — a plain, version-preserving restart was accepted.
|
|
301
|
+
* - `already-current` — the target IS the running version; nothing done.
|
|
302
|
+
* - `refused` — dropped by a gate; `reason` names which.
|
|
303
|
+
* - `failed` — attempted and did not land; `error` says why.
|
|
304
|
+
*/
|
|
305
|
+
declare const ServerUpdateOutcomeSchema: z.ZodEnum<{
|
|
306
|
+
failed: "failed";
|
|
307
|
+
refused: "refused";
|
|
308
|
+
staged: "staged";
|
|
309
|
+
"restart-scheduled": "restart-scheduled";
|
|
310
|
+
"already-current": "already-current";
|
|
311
|
+
}>;
|
|
286
312
|
declare const ServerUpdateActionResultSchema: z.ZodObject<{
|
|
287
313
|
accepted: z.ZodBoolean;
|
|
288
314
|
targetVersion: z.ZodNullable<z.ZodString>;
|
|
289
315
|
restarting: z.ZodBoolean;
|
|
290
316
|
message: z.ZodString;
|
|
317
|
+
outcome: z.ZodOptional<z.ZodEnum<{
|
|
318
|
+
failed: "failed";
|
|
319
|
+
refused: "refused";
|
|
320
|
+
staged: "staged";
|
|
321
|
+
"restart-scheduled": "restart-scheduled";
|
|
322
|
+
"already-current": "already-current";
|
|
323
|
+
}>>;
|
|
324
|
+
reason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
325
|
+
error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
291
326
|
}, z.core.$strip>;
|
|
292
327
|
export declare const serverManagementCapability: {
|
|
293
328
|
readonly name: "server-management";
|
|
@@ -299,6 +334,8 @@ export declare const serverManagementCapability: {
|
|
|
299
334
|
runningVersion: z.ZodNullable<z.ZodString>;
|
|
300
335
|
nodeRuntimeVersion: z.ZodNullable<z.ZodString>;
|
|
301
336
|
activeVersion: z.ZodNullable<z.ZodString>;
|
|
337
|
+
installedVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
338
|
+
restartRequired: z.ZodOptional<z.ZodBoolean>;
|
|
302
339
|
previousVersion: z.ZodNullable<z.ZodString>;
|
|
303
340
|
seedVersion: z.ZodNullable<z.ZodString>;
|
|
304
341
|
latestVersion: z.ZodNullable<z.ZodString>;
|
|
@@ -372,6 +409,8 @@ export declare const serverManagementCapability: {
|
|
|
372
409
|
updateAvailable: z.ZodBoolean;
|
|
373
410
|
checkedAtMs: z.ZodNumber;
|
|
374
411
|
error: z.ZodNullable<z.ZodString>;
|
|
412
|
+
pendingVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
413
|
+
restartRequired: z.ZodOptional<z.ZodBoolean>;
|
|
375
414
|
}, z.core.$strip>, "mutation">;
|
|
376
415
|
readonly applyServerUpdate: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
377
416
|
version: z.ZodOptional<z.ZodString>;
|
|
@@ -380,12 +419,30 @@ export declare const serverManagementCapability: {
|
|
|
380
419
|
targetVersion: z.ZodNullable<z.ZodString>;
|
|
381
420
|
restarting: z.ZodBoolean;
|
|
382
421
|
message: z.ZodString;
|
|
422
|
+
outcome: z.ZodOptional<z.ZodEnum<{
|
|
423
|
+
failed: "failed";
|
|
424
|
+
refused: "refused";
|
|
425
|
+
staged: "staged";
|
|
426
|
+
"restart-scheduled": "restart-scheduled";
|
|
427
|
+
"already-current": "already-current";
|
|
428
|
+
}>>;
|
|
429
|
+
reason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
430
|
+
error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
383
431
|
}, z.core.$strip>, "mutation">;
|
|
384
432
|
readonly rollbackServerUpdate: import("./capability-definition.js").CapabilityMethodSchema<z.ZodVoid, z.ZodObject<{
|
|
385
433
|
accepted: z.ZodBoolean;
|
|
386
434
|
targetVersion: z.ZodNullable<z.ZodString>;
|
|
387
435
|
restarting: z.ZodBoolean;
|
|
388
436
|
message: z.ZodString;
|
|
437
|
+
outcome: z.ZodOptional<z.ZodEnum<{
|
|
438
|
+
failed: "failed";
|
|
439
|
+
refused: "refused";
|
|
440
|
+
staged: "staged";
|
|
441
|
+
"restart-scheduled": "restart-scheduled";
|
|
442
|
+
"already-current": "already-current";
|
|
443
|
+
}>>;
|
|
444
|
+
reason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
445
|
+
error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
389
446
|
}, z.core.$strip>, "mutation">;
|
|
390
447
|
/**
|
|
391
448
|
* Plain process restart of the node's root process — no version change.
|
|
@@ -399,6 +456,15 @@ export declare const serverManagementCapability: {
|
|
|
399
456
|
targetVersion: z.ZodNullable<z.ZodString>;
|
|
400
457
|
restarting: z.ZodBoolean;
|
|
401
458
|
message: z.ZodString;
|
|
459
|
+
outcome: z.ZodOptional<z.ZodEnum<{
|
|
460
|
+
failed: "failed";
|
|
461
|
+
refused: "refused";
|
|
462
|
+
staged: "staged";
|
|
463
|
+
"restart-scheduled": "restart-scheduled";
|
|
464
|
+
"already-current": "already-current";
|
|
465
|
+
}>>;
|
|
466
|
+
reason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
467
|
+
error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
402
468
|
}, z.core.$strip>, "mutation">;
|
|
403
469
|
};
|
|
404
470
|
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
@@ -417,5 +483,6 @@ export type WrapperIdentity = z.infer<typeof WrapperIdentitySchema>;
|
|
|
417
483
|
export type ServerRollbackInfo = z.infer<typeof ServerRollbackInfoSchema>;
|
|
418
484
|
export type ServerPackageStatus = z.infer<typeof ServerPackageStatusSchema>;
|
|
419
485
|
export type ServerUpdateCheckResult = z.infer<typeof ServerUpdateCheckResultSchema>;
|
|
486
|
+
export type ServerUpdateOutcome = z.infer<typeof ServerUpdateOutcomeSchema>;
|
|
420
487
|
export type ServerUpdateActionResult = z.infer<typeof ServerUpdateActionResultSchema>;
|
|
421
|
-
export { ServerBootModeSchema, ServerUpdateStateSchema, ImageContractStateSchema, ImageContractSchema, WrapperKindSchema, WrapperEvidenceSchema, WrapperIdentitySchema, ServerRollbackInfoSchema, ServerPackageStatusSchema, ServerUpdateCheckResultSchema, ServerUpdateActionResultSchema, };
|
|
488
|
+
export { ServerBootModeSchema, ServerUpdateStateSchema, ImageContractStateSchema, ImageContractSchema, WrapperKindSchema, WrapperEvidenceSchema, WrapperIdentitySchema, ServerRollbackInfoSchema, ServerPackageStatusSchema, ServerUpdateCheckResultSchema, ServerUpdateOutcomeSchema, ServerUpdateActionResultSchema, };
|
|
@@ -4,13 +4,24 @@ import { type InferProvider } from './capability-definition.js';
|
|
|
4
4
|
/**
|
|
5
5
|
* `videoclips` — the unified, navigable-clip surface for a camera.
|
|
6
6
|
*
|
|
7
|
-
* A device-scoped
|
|
8
|
-
*
|
|
7
|
+
* A device-scoped wrapper COLLECTION (D549 decision 2, D554): every provider a
|
|
8
|
+
* camera has is a SOURCE, and they are listed beside each other — never one
|
|
9
|
+
* substituted for another. The DEFAULT provider (registered by
|
|
9
10
|
* `addon-post-analysis`, `defaultActive: true`) composes the analytics event
|
|
10
11
|
* log (markers + thumbnails) with the recorder's `getPlaybackManifest` — a clip
|
|
11
12
|
* is a time-WINDOW over existing footage, never a separate file. A camera that
|
|
12
|
-
* exposes NATIVE onboard clips (Reolink
|
|
13
|
-
*
|
|
13
|
+
* exposes NATIVE onboard clips (Reolink SD card, a hub's storage, HKSV) adds
|
|
14
|
+
* its own catalog ALONGSIDE that one.
|
|
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.
|
|
23
|
+
* {@link videoclipsCapability.methods.getClipPlayback} dispatches by the
|
|
24
|
+
* source namespace inside the clip id, which is why ids are self-contained.
|
|
14
25
|
*
|
|
15
26
|
* A `Clip` is purely time-based (subtree-blind): playback resolves segments by
|
|
16
27
|
* temporal overlap, so the API never decides `continuous` vs `events`.
|
|
@@ -46,30 +57,144 @@ export declare const ClipSchema: z.ZodObject<{
|
|
|
46
57
|
startMs: z.ZodNumber;
|
|
47
58
|
endMs: z.ZodNumber;
|
|
48
59
|
}, z.core.$strip>>>;
|
|
60
|
+
thumbnailMint: z.ZodOptional<z.ZodString>;
|
|
61
|
+
thumbnailUnavailable: z.ZodOptional<z.ZodObject<{
|
|
62
|
+
reason: z.ZodEnum<{
|
|
63
|
+
sleeping: "sleeping";
|
|
64
|
+
unsupported: "unsupported";
|
|
65
|
+
"camera-refused": "camera-refused";
|
|
66
|
+
"no-keyframe": "no-keyframe";
|
|
67
|
+
}>;
|
|
68
|
+
}, z.core.$strip>>;
|
|
69
|
+
catalogAsOf: z.ZodOptional<z.ZodNumber>;
|
|
70
|
+
nativeTypes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
71
|
+
behaviours: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
72
|
+
streams: z.ZodOptional<z.ZodObject<{
|
|
73
|
+
sub: z.ZodOptional<z.ZodObject<{
|
|
74
|
+
id: z.ZodString;
|
|
75
|
+
bytes: z.ZodOptional<z.ZodNumber>;
|
|
76
|
+
}, z.core.$strip>>;
|
|
77
|
+
main: z.ZodOptional<z.ZodObject<{
|
|
78
|
+
id: z.ZodString;
|
|
79
|
+
bytes: z.ZodOptional<z.ZodNumber>;
|
|
80
|
+
}, z.core.$strip>>;
|
|
81
|
+
}, z.core.$strip>>;
|
|
82
|
+
supportSub: z.ZodOptional<z.ZodBoolean>;
|
|
83
|
+
playable: z.ZodOptional<z.ZodBoolean>;
|
|
84
|
+
unplayableReason: z.ZodOptional<z.ZodString>;
|
|
49
85
|
}, z.core.$strip>;
|
|
50
86
|
export type Clip = z.infer<typeof ClipSchema>;
|
|
51
87
|
export declare const ClipPlaybackSchema: z.ZodObject<{
|
|
52
88
|
playbackUrl: z.ZodString;
|
|
89
|
+
format: z.ZodOptional<z.ZodEnum<{
|
|
90
|
+
hls: "hls";
|
|
91
|
+
mp4: "mp4";
|
|
92
|
+
}>>;
|
|
93
|
+
served: z.ZodOptional<z.ZodEnum<{
|
|
94
|
+
high: "high";
|
|
95
|
+
mid: "mid";
|
|
96
|
+
low: "low";
|
|
97
|
+
}>>;
|
|
53
98
|
playbackEndpoints: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
54
99
|
token: z.ZodOptional<z.ZodString>;
|
|
55
100
|
}, z.core.$strip>;
|
|
56
101
|
export type ClipPlayback = z.infer<typeof ClipPlaybackSchema>;
|
|
102
|
+
/**
|
|
103
|
+
* Why a source cannot answer right now — per SOURCE, never fleet-wide.
|
|
104
|
+
*
|
|
105
|
+
* `ok` is the only state whose clip list may be read as complete. The other
|
|
106
|
+
* three exist because an empty list from a sleeping camera reads as "this
|
|
107
|
+
* camera has no recordings", which is the defect this whole line of work is
|
|
108
|
+
* about: a battery camera nobody woke (`sleeping`), a camera that could not be
|
|
109
|
+
* reached at all (`unreachable`, also what a provider that THREW reports), a
|
|
110
|
+
* camera whose SD card is not mounted (`no-storage`, measured on 640 —
|
|
111
|
+
* `HddInfo mount 0`, honestly nothing to list rather than "no clips"), and a
|
|
112
|
+
* camera whose OWN index disagrees with its OWN calendar (`index-empty`,
|
|
113
|
+
* measured on 618: the calendar marks 3–20 September, days 6–20 list zero
|
|
114
|
+
* files on both streams and both filters, with 177 GB free). That last one is
|
|
115
|
+
* a defect ON THE CAMERA, and the only honest thing a provider can do is say
|
|
116
|
+
* which days it asked for and got nothing — "no clips" would be a lie about a
|
|
117
|
+
* card that is full of them.
|
|
118
|
+
*/
|
|
119
|
+
export declare const ClipSourceAvailabilitySchema: z.ZodObject<{
|
|
120
|
+
state: z.ZodEnum<{
|
|
121
|
+
ok: "ok";
|
|
122
|
+
sleeping: "sleeping";
|
|
123
|
+
unreachable: "unreachable";
|
|
124
|
+
"no-storage": "no-storage";
|
|
125
|
+
"index-empty": "index-empty";
|
|
126
|
+
}>;
|
|
127
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
128
|
+
catalogAsOf: z.ZodOptional<z.ZodNumber>;
|
|
129
|
+
}, z.core.$strip>;
|
|
130
|
+
export type ClipSourceAvailability = z.infer<typeof ClipSourceAvailabilitySchema>;
|
|
131
|
+
/**
|
|
132
|
+
* One SOURCE of clips for a camera — a row of the picker, and the namespace
|
|
133
|
+
* every clip id from it is prefixed with (`analytics`,
|
|
134
|
+
* `native:reolink:onboard`, `hksv`, …).
|
|
135
|
+
*
|
|
136
|
+
* A provider lists the sources IT serves for that device, and answers for each
|
|
137
|
+
* of them whether it can answer at all. A provider with nothing to offer on a
|
|
138
|
+
* camera returns `[]` — it is not that camera's business.
|
|
139
|
+
*/
|
|
140
|
+
export declare const ClipSourceSchema: z.ZodObject<{
|
|
141
|
+
source: z.ZodString;
|
|
142
|
+
label: z.ZodString;
|
|
143
|
+
addonId: z.ZodOptional<z.ZodString>;
|
|
144
|
+
via: z.ZodOptional<z.ZodString>;
|
|
145
|
+
availability: z.ZodObject<{
|
|
146
|
+
state: z.ZodEnum<{
|
|
147
|
+
ok: "ok";
|
|
148
|
+
sleeping: "sleeping";
|
|
149
|
+
unreachable: "unreachable";
|
|
150
|
+
"no-storage": "no-storage";
|
|
151
|
+
"index-empty": "index-empty";
|
|
152
|
+
}>;
|
|
153
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
154
|
+
catalogAsOf: z.ZodOptional<z.ZodNumber>;
|
|
155
|
+
}, z.core.$strip>;
|
|
156
|
+
switchedOff: z.ZodOptional<z.ZodBoolean>;
|
|
157
|
+
}, z.core.$strip>;
|
|
158
|
+
export type ClipSource = z.infer<typeof ClipSourceSchema>;
|
|
57
159
|
export declare const videoclipsCapability: {
|
|
58
160
|
readonly name: "videoclips";
|
|
59
161
|
readonly scope: "device";
|
|
60
|
-
readonly mode: "
|
|
162
|
+
readonly mode: "collection";
|
|
61
163
|
readonly kind: "wrapper";
|
|
62
164
|
readonly defaultActive: true;
|
|
63
165
|
/** A clip is a window over a camera's footage — the cap is meaningless on a
|
|
64
166
|
* sensor, a button or an event emitter, and the `defaultActive` auto-bind
|
|
65
167
|
* reads this to decide which devices it may claim. */
|
|
66
168
|
readonly deviceTypes: readonly [DeviceType.Camera];
|
|
169
|
+
/**
|
|
170
|
+
* The Clips section of a camera's device details is FRAMEWORK-DERIVED (D14):
|
|
171
|
+
* the aggregator turns this declaration into the `type:'widget'` section and
|
|
172
|
+
* `DeviceDetail.tsx` is never edited. `videoclips` is the first WRAPPER cap
|
|
173
|
+
* to declare one — every previous `host/` widget cap is `deviceNative` — so
|
|
174
|
+
* `device-config-widget-wrapped-binding.spec.ts` pins that a `kind:'wrapped'`
|
|
175
|
+
* binding entry derives the same section a native one does.
|
|
176
|
+
*
|
|
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`.
|
|
180
|
+
*/
|
|
181
|
+
readonly deviceConfig: {
|
|
182
|
+
readonly ui: {
|
|
183
|
+
readonly kind: "widget";
|
|
184
|
+
readonly widgetId: "host/clips-browser";
|
|
185
|
+
readonly tab: "clips";
|
|
186
|
+
readonly topTab: true;
|
|
187
|
+
readonly label: "Clips";
|
|
188
|
+
readonly order: 0;
|
|
189
|
+
};
|
|
190
|
+
};
|
|
67
191
|
readonly methods: {
|
|
68
192
|
readonly listClips: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
69
193
|
deviceId: z.ZodNumber;
|
|
70
194
|
since: z.ZodNumber;
|
|
71
195
|
until: z.ZodNumber;
|
|
72
196
|
limit: z.ZodOptional<z.ZodNumber>;
|
|
197
|
+
sources: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
73
198
|
}, z.core.$strip>, z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
74
199
|
id: z.ZodString;
|
|
75
200
|
source: z.ZodString;
|
|
@@ -92,12 +217,80 @@ export declare const videoclipsCapability: {
|
|
|
92
217
|
startMs: z.ZodNumber;
|
|
93
218
|
endMs: z.ZodNumber;
|
|
94
219
|
}, z.core.$strip>>>;
|
|
220
|
+
thumbnailMint: z.ZodOptional<z.ZodString>;
|
|
221
|
+
thumbnailUnavailable: z.ZodOptional<z.ZodObject<{
|
|
222
|
+
reason: z.ZodEnum<{
|
|
223
|
+
sleeping: "sleeping";
|
|
224
|
+
unsupported: "unsupported";
|
|
225
|
+
"camera-refused": "camera-refused";
|
|
226
|
+
"no-keyframe": "no-keyframe";
|
|
227
|
+
}>;
|
|
228
|
+
}, z.core.$strip>>;
|
|
229
|
+
catalogAsOf: z.ZodOptional<z.ZodNumber>;
|
|
230
|
+
nativeTypes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
231
|
+
behaviours: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
232
|
+
streams: z.ZodOptional<z.ZodObject<{
|
|
233
|
+
sub: z.ZodOptional<z.ZodObject<{
|
|
234
|
+
id: z.ZodString;
|
|
235
|
+
bytes: z.ZodOptional<z.ZodNumber>;
|
|
236
|
+
}, z.core.$strip>>;
|
|
237
|
+
main: z.ZodOptional<z.ZodObject<{
|
|
238
|
+
id: z.ZodString;
|
|
239
|
+
bytes: z.ZodOptional<z.ZodNumber>;
|
|
240
|
+
}, z.core.$strip>>;
|
|
241
|
+
}, z.core.$strip>>;
|
|
242
|
+
supportSub: z.ZodOptional<z.ZodBoolean>;
|
|
243
|
+
playable: z.ZodOptional<z.ZodBoolean>;
|
|
244
|
+
unplayableReason: z.ZodOptional<z.ZodString>;
|
|
245
|
+
}, z.core.$strip>>>, "query">;
|
|
246
|
+
/**
|
|
247
|
+
* The sources this camera has, WITH the reason any of them cannot answer.
|
|
248
|
+
*
|
|
249
|
+
* Asked separately from `listClips` because an empty clip list is
|
|
250
|
+
* ambiguous and this is the only place the ambiguity is resolved: every
|
|
251
|
+
* bound provider contributes its own rows, and a provider that could not
|
|
252
|
+
* be reached at all still produces one row saying so. A surface that draws
|
|
253
|
+
* "no clips" without reading this is drawing a guess.
|
|
254
|
+
*/
|
|
255
|
+
readonly listSources: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
256
|
+
deviceId: z.ZodNumber;
|
|
257
|
+
}, z.core.$strip>, z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
258
|
+
source: z.ZodString;
|
|
259
|
+
label: z.ZodString;
|
|
260
|
+
addonId: z.ZodOptional<z.ZodString>;
|
|
261
|
+
via: z.ZodOptional<z.ZodString>;
|
|
262
|
+
availability: z.ZodObject<{
|
|
263
|
+
state: z.ZodEnum<{
|
|
264
|
+
ok: "ok";
|
|
265
|
+
sleeping: "sleeping";
|
|
266
|
+
unreachable: "unreachable";
|
|
267
|
+
"no-storage": "no-storage";
|
|
268
|
+
"index-empty": "index-empty";
|
|
269
|
+
}>;
|
|
270
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
271
|
+
catalogAsOf: z.ZodOptional<z.ZodNumber>;
|
|
272
|
+
}, z.core.$strip>;
|
|
273
|
+
switchedOff: z.ZodOptional<z.ZodBoolean>;
|
|
95
274
|
}, z.core.$strip>>>, "query">;
|
|
96
275
|
readonly getClipPlayback: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
97
276
|
deviceId: z.ZodNumber;
|
|
98
277
|
clipId: z.ZodString;
|
|
278
|
+
profile: z.ZodOptional<z.ZodEnum<{
|
|
279
|
+
high: "high";
|
|
280
|
+
mid: "mid";
|
|
281
|
+
low: "low";
|
|
282
|
+
}>>;
|
|
99
283
|
}, z.core.$strip>, z.ZodObject<{
|
|
100
284
|
playbackUrl: z.ZodString;
|
|
285
|
+
format: z.ZodOptional<z.ZodEnum<{
|
|
286
|
+
hls: "hls";
|
|
287
|
+
mp4: "mp4";
|
|
288
|
+
}>>;
|
|
289
|
+
served: z.ZodOptional<z.ZodEnum<{
|
|
290
|
+
high: "high";
|
|
291
|
+
mid: "mid";
|
|
292
|
+
low: "low";
|
|
293
|
+
}>>;
|
|
101
294
|
playbackEndpoints: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
102
295
|
token: z.ZodOptional<z.ZodString>;
|
|
103
296
|
}, z.core.$strip>, "query">;
|