@camstack/addon-import-alexa 0.1.20 → 0.1.22
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 +220 -15
- package/dist/addon.mjs +220 -15
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -38,7 +38,7 @@ let node_crypto = require("node:crypto");
|
|
|
38
38
|
let node_fs = require("node:fs");
|
|
39
39
|
let node_path = require("node:path");
|
|
40
40
|
node_path = __toESM(node_path);
|
|
41
|
-
//#region ../types/dist/event-category-
|
|
41
|
+
//#region ../types/dist/event-category-H4AVePnn.mjs
|
|
42
42
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
43
43
|
EventCategory["SystemBoot"] = "system.boot";
|
|
44
44
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -188,6 +188,9 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
188
188
|
EventCategory["RecordingSegmentWritten"] = "recording.segment.written";
|
|
189
189
|
EventCategory["RecordingPolicyFallback"] = "recording.policy.fallback";
|
|
190
190
|
EventCategory["RecordingRetentionCompleted"] = "recording.retention.completed";
|
|
191
|
+
/** Runner-sampled scrub thumbnail (~1/5 s/camera). Telemetry (D8): a lost
|
|
192
|
+
* thumb is a scrub gap the recorder's keyframe backfill covers. */
|
|
193
|
+
EventCategory["RecordingThumbSampled"] = "recording.thumb-sampled";
|
|
191
194
|
EventCategory["DetectionEvent"] = "detection.event";
|
|
192
195
|
EventCategory["SessionTrackNew"] = "session.track.new";
|
|
193
196
|
EventCategory["SessionTrackExpired"] = "session.track.expired";
|
|
@@ -7404,6 +7407,24 @@ var RecordingRetentionSchema = object({
|
|
|
7404
7407
|
maxSizeGb: number().min(0).optional()
|
|
7405
7408
|
});
|
|
7406
7409
|
/**
|
|
7410
|
+
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7411
|
+
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7412
|
+
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7413
|
+
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7414
|
+
*
|
|
7415
|
+
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7416
|
+
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7417
|
+
* preset changed over time renders every historical window at the dims it was
|
|
7418
|
+
* written with.
|
|
7419
|
+
*/
|
|
7420
|
+
var ScrubThumbnailPresetSchema = _enum([
|
|
7421
|
+
"minimal",
|
|
7422
|
+
"low",
|
|
7423
|
+
"standard",
|
|
7424
|
+
"high",
|
|
7425
|
+
"max"
|
|
7426
|
+
]);
|
|
7427
|
+
/**
|
|
7407
7428
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7408
7429
|
*
|
|
7409
7430
|
* `mode` is the authoritative storage choice; `schedule`/`triggers`/`pre`/`post`
|
|
@@ -7440,7 +7461,14 @@ var RecordingConfigSchema = object({
|
|
|
7440
7461
|
* derived into bands once via `migrateConfigToBands`.
|
|
7441
7462
|
*/
|
|
7442
7463
|
bands: array(RecordingBandSchema).optional(),
|
|
7443
|
-
retention: RecordingRetentionSchema.optional()
|
|
7464
|
+
retention: RecordingRetentionSchema.optional(),
|
|
7465
|
+
/**
|
|
7466
|
+
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7467
|
+
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7468
|
+
* windows only — existing sheets are immutable, and each window's index
|
|
7469
|
+
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7470
|
+
*/
|
|
7471
|
+
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7444
7472
|
});
|
|
7445
7473
|
/**
|
|
7446
7474
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
@@ -10952,10 +10980,23 @@ var deviceDiscoveryCapability = {
|
|
|
10952
10980
|
}
|
|
10953
10981
|
};
|
|
10954
10982
|
/**
|
|
10955
|
-
* Doorbell button cap.
|
|
10956
|
-
*
|
|
10957
|
-
*
|
|
10958
|
-
*
|
|
10983
|
+
* Doorbell button cap. Two kinds of providers coexist behind this cap
|
|
10984
|
+
* name (same pattern as `snapshot`):
|
|
10985
|
+
*
|
|
10986
|
+
* - **Native** providers: registered per-device by device-driver
|
|
10987
|
+
* addons via `ctx.registerNativeCap` — either on a
|
|
10988
|
+
* `DeviceType.Button` accessory with `role: DeviceRole.Doorbell`,
|
|
10989
|
+
* or directly on the camera (Reolink registers at camera level).
|
|
10990
|
+
* Emits an `onPressed` event every time the firmware pushes a
|
|
10991
|
+
* ring; status tracks the last press and a pressCount since start
|
|
10992
|
+
* (diagnostic).
|
|
10993
|
+
*
|
|
10994
|
+
* - **Wrapper** provider: the `virtual-doorbell` system builtin
|
|
10995
|
+
* (`@camstack/system/builtins/doorbell`). Turns ANY binary-ish
|
|
10996
|
+
* device (contact / switch / event-emitter …) into a doorbell for
|
|
10997
|
+
* a camera. `defaultActive: false` — the operator explicitly binds
|
|
10998
|
+
* it per camera in the device-bindings UI, then picks the source
|
|
10999
|
+
* device + trigger in the per-device settings.
|
|
10959
11000
|
*
|
|
10960
11001
|
* The DeviceEventPropagator re-emits `onPressed` on the camera parent
|
|
10961
11002
|
* — subscribers listening at the camera level receive ring events
|
|
@@ -10976,7 +11017,10 @@ var doorbellCapability = {
|
|
|
10976
11017
|
scope: "device",
|
|
10977
11018
|
deviceNative: true,
|
|
10978
11019
|
mode: "singleton",
|
|
10979
|
-
|
|
11020
|
+
kind: "wrapper",
|
|
11021
|
+
defaultActive: false,
|
|
11022
|
+
deviceTypes: [DeviceType.Button, DeviceType.Camera],
|
|
11023
|
+
exposesDeviceSettings: true,
|
|
10980
11024
|
methods: {},
|
|
10981
11025
|
events: {
|
|
10982
11026
|
/**
|
|
@@ -17413,6 +17457,14 @@ var ConfigEntrySchema = object({
|
|
|
17413
17457
|
value: unknown(),
|
|
17414
17458
|
description: string().optional()
|
|
17415
17459
|
});
|
|
17460
|
+
var DeviceLinkModeSchema = _enum(["auto", "manual"]);
|
|
17461
|
+
/** One resolved linked device — the compact projection consumers need. */
|
|
17462
|
+
var LinkedDeviceSchema = object({
|
|
17463
|
+
deviceId: number(),
|
|
17464
|
+
name: string(),
|
|
17465
|
+
location: string().nullable(),
|
|
17466
|
+
features: array(string())
|
|
17467
|
+
});
|
|
17416
17468
|
var SavedDeviceRowSchema = object({
|
|
17417
17469
|
/** Numeric id reserved at allocateDeviceId time. */
|
|
17418
17470
|
id: number(),
|
|
@@ -17634,7 +17686,10 @@ method(object({
|
|
|
17634
17686
|
}), _void(), {
|
|
17635
17687
|
kind: "mutation",
|
|
17636
17688
|
auth: "admin"
|
|
17637
|
-
}), method(object({ addonId: string() }), array(SavedDeviceRowSchema)), method(object({ addonId: string().optional() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }), DeviceInfoSchema.nullable()), method(object({ parentDeviceId: number() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }),
|
|
17689
|
+
}), method(object({ addonId: string() }), array(SavedDeviceRowSchema)), method(object({ addonId: string().optional() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }), DeviceInfoSchema.nullable()), method(object({ parentDeviceId: number() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }), object({
|
|
17690
|
+
mode: DeviceLinkModeSchema,
|
|
17691
|
+
devices: array(LinkedDeviceSchema)
|
|
17692
|
+
})), method(object({ deviceId: number() }), array(StreamSourceEntrySchema$1)), method(object({ deviceId: number() }), array(ConfigEntrySchema)), method(object({ deviceId: number() }), ConfigUISchemaOutput), method(object({
|
|
17638
17693
|
deviceId: number(),
|
|
17639
17694
|
values: record(string(), unknown())
|
|
17640
17695
|
}), object({ success: literal(true) }), {
|
|
@@ -18903,6 +18958,61 @@ var EventKindSchema = _enum([
|
|
|
18903
18958
|
"object",
|
|
18904
18959
|
"audio"
|
|
18905
18960
|
]);
|
|
18961
|
+
/**
|
|
18962
|
+
* Spatial filter for `listTracks` — the rect + polygon variants of the shared
|
|
18963
|
+
* MaskShape vocabulary (see `mask-shape.ts`). Coordinates are NORMALIZED 0..1
|
|
18964
|
+
* of the camera frame (top-left origin), matching the drawing-plane editor.
|
|
18965
|
+
*/
|
|
18966
|
+
var TrackZoneFilterSchema = discriminatedUnion("kind", [MaskRectShapeSchema, MaskPolygonShapeSchema]);
|
|
18967
|
+
/** Closed icon vocabulary so clients render a known glyph per kind. */
|
|
18968
|
+
var EventKindIconSchema = _enum([
|
|
18969
|
+
"motion",
|
|
18970
|
+
"audio",
|
|
18971
|
+
"person",
|
|
18972
|
+
"vehicle",
|
|
18973
|
+
"animal",
|
|
18974
|
+
"door",
|
|
18975
|
+
"pir",
|
|
18976
|
+
"smoke",
|
|
18977
|
+
"water",
|
|
18978
|
+
"button",
|
|
18979
|
+
"generic"
|
|
18980
|
+
]);
|
|
18981
|
+
var EventKindCategorySchema = _enum([
|
|
18982
|
+
"motion",
|
|
18983
|
+
"audio",
|
|
18984
|
+
"detection",
|
|
18985
|
+
"sensor",
|
|
18986
|
+
"custom"
|
|
18987
|
+
]);
|
|
18988
|
+
var EventKindDescriptorSchema = object({
|
|
18989
|
+
/** Stable kind id (e.g. 'motion', 'person', 'contact'). */
|
|
18990
|
+
kind: string(),
|
|
18991
|
+
label: string(),
|
|
18992
|
+
/** Hex color for timeline/legend rendering. */
|
|
18993
|
+
color: string(),
|
|
18994
|
+
icon: EventKindIconSchema,
|
|
18995
|
+
category: EventKindCategorySchema,
|
|
18996
|
+
/** Which cap + device contributes this kind. For built-ins the camera
|
|
18997
|
+
* itself; for sensor kinds the LINKED source device. */
|
|
18998
|
+
source: object({
|
|
18999
|
+
capName: string(),
|
|
19000
|
+
deviceId: number()
|
|
19001
|
+
})
|
|
19002
|
+
});
|
|
19003
|
+
var SensorEventSchema = object({
|
|
19004
|
+
id: string(),
|
|
19005
|
+
/** The CAMERA the event is attributed to (a sensor linked to N cameras
|
|
19006
|
+
* yields N rows, one per camera). */
|
|
19007
|
+
deviceId: number(),
|
|
19008
|
+
/** The linked sensor device whose state changed. */
|
|
19009
|
+
sourceDeviceId: number(),
|
|
19010
|
+
/** Event kind id — matches an `EventKindDescriptor.kind`. */
|
|
19011
|
+
kind: string(),
|
|
19012
|
+
/** Snapshot of the sensor cap's runtime-state slice at the change. */
|
|
19013
|
+
value: record(string(), unknown()).nullable(),
|
|
19014
|
+
timestamp: number()
|
|
19015
|
+
});
|
|
18906
19016
|
var TrackPositionSchema = object({
|
|
18907
19017
|
x: number(),
|
|
18908
19018
|
y: number(),
|
|
@@ -18916,6 +19026,30 @@ var TrackSnapshotSchema = object({
|
|
|
18916
19026
|
mediaKey: string()
|
|
18917
19027
|
});
|
|
18918
19028
|
/**
|
|
19029
|
+
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
19030
|
+
* divided by the track's detection-frame dims), computed at persist time.
|
|
19031
|
+
* Absent when the frame dims were unknown when the track was persisted
|
|
19032
|
+
* (legacy rows / dims-less sources) and on active (in-RAM) tracks.
|
|
19033
|
+
*/
|
|
19034
|
+
var TrackEnvelopeSchema = object({
|
|
19035
|
+
minX: number(),
|
|
19036
|
+
minY: number(),
|
|
19037
|
+
maxX: number(),
|
|
19038
|
+
maxY: number()
|
|
19039
|
+
});
|
|
19040
|
+
/**
|
|
19041
|
+
* Row projection for track list queries. `full` (default) returns the
|
|
19042
|
+
* complete Track including the frame-rate `positions[]` history and the
|
|
19043
|
+
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
19044
|
+
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
19045
|
+
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
19046
|
+
* zonesVisited, bestEventId, envelope) and returns `positions` /
|
|
19047
|
+
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
19048
|
+
* `getTrack`. Mirrors the event-store `projection` convention
|
|
19049
|
+
* (`getObjectEvents` et al.).
|
|
19050
|
+
*/
|
|
19051
|
+
var TrackProjectionSchema = _enum(["full", "slim"]);
|
|
19052
|
+
/**
|
|
18919
19053
|
* One audio-classification label heard on the track's camera while the
|
|
18920
19054
|
* track was alive, aggregated per label. An "episode" is one persisted
|
|
18921
19055
|
* audio event (the confident-classification path: score ≥ the device's
|
|
@@ -18966,7 +19100,11 @@ var TrackSchema = object({
|
|
|
18966
19100
|
/** Audio-classification labels heard on the camera during the track's
|
|
18967
19101
|
* life (score ≥ device `classificationMinScore`), aggregated per label.
|
|
18968
19102
|
* Absent on legacy rows / tracks with no confident audio. */
|
|
18969
|
-
audioLabels: array(TrackAudioLabelSchema).readonly().optional()
|
|
19103
|
+
audioLabels: array(TrackAudioLabelSchema).readonly().optional(),
|
|
19104
|
+
/** Normalized 0..1 trajectory envelope (see {@link TrackEnvelopeSchema}).
|
|
19105
|
+
* Populated from the persisted envelope columns on historical reads;
|
|
19106
|
+
* absent on legacy rows, dims-less tracks and active (in-RAM) tracks. */
|
|
19107
|
+
envelope: TrackEnvelopeSchema.optional()
|
|
18970
19108
|
});
|
|
18971
19109
|
var BaseEventFields = {
|
|
18972
19110
|
id: string(),
|
|
@@ -19076,11 +19214,13 @@ var MediaFileSchema = object({
|
|
|
19076
19214
|
sizeBytes: number(),
|
|
19077
19215
|
timestamp: number()
|
|
19078
19216
|
});
|
|
19217
|
+
var DEFAULT_EVENT_QUERY_LIMIT = 1e3;
|
|
19218
|
+
var MAX_EVENT_QUERY_LIMIT = 5e3;
|
|
19079
19219
|
var DeviceEventQueryInput = object({
|
|
19080
19220
|
deviceId: number(),
|
|
19081
19221
|
since: number().optional(),
|
|
19082
19222
|
until: number().optional(),
|
|
19083
|
-
limit: number().int().min(1).max(
|
|
19223
|
+
limit: number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT),
|
|
19084
19224
|
/** `slim` drops heavy JSON fields (regions/bbox/zones) and carries an
|
|
19085
19225
|
* optional `mediaUrl` (populated by B5). `full` (default) keeps today's
|
|
19086
19226
|
* exact behaviour. Callers may omit this field — the store defaults to
|
|
@@ -19088,6 +19228,27 @@ var DeviceEventQueryInput = object({
|
|
|
19088
19228
|
projection: _enum(["full", "slim"]).optional()
|
|
19089
19229
|
});
|
|
19090
19230
|
var ObjectEventQueryInput = DeviceEventQueryInput.extend({ classFilter: string().optional() });
|
|
19231
|
+
var RecentTracksQueryInput = object({
|
|
19232
|
+
/** Devices to merge. An empty array yields `{ tracks: [], nextCursor: null }`. */
|
|
19233
|
+
deviceIds: array(number()),
|
|
19234
|
+
/** Window lower bound on `lastSeen` (inclusive). */
|
|
19235
|
+
since: number().optional(),
|
|
19236
|
+
/** Window upper bound on `lastSeen` (inclusive). */
|
|
19237
|
+
until: number().optional(),
|
|
19238
|
+
/** Page size. Default 200, max 1000. */
|
|
19239
|
+
limit: number().int().min(1).max(1e3).default(200),
|
|
19240
|
+
/** Opaque continuation cursor from a previous page's `nextCursor`.
|
|
19241
|
+
* Encodes the (lastSeen, trackId) sort position — treat as opaque. */
|
|
19242
|
+
cursor: string().optional(),
|
|
19243
|
+
/** See {@link TrackProjectionSchema}. Default `full`. */
|
|
19244
|
+
projection: TrackProjectionSchema.optional()
|
|
19245
|
+
});
|
|
19246
|
+
var RecentTracksPageSchema = object({
|
|
19247
|
+
/** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
|
|
19248
|
+
tracks: array(TrackSchema).readonly(),
|
|
19249
|
+
/** Cursor for the next page, or null when this page is the last. */
|
|
19250
|
+
nextCursor: string().nullable()
|
|
19251
|
+
});
|
|
19091
19252
|
var KeyEventQueryInput = object({
|
|
19092
19253
|
deviceId: number(),
|
|
19093
19254
|
/** Window lower bound (track firstSeen ≥ since). */
|
|
@@ -19170,11 +19331,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19170
19331
|
deviceId: number(),
|
|
19171
19332
|
since: number().optional(),
|
|
19172
19333
|
until: number().optional(),
|
|
19173
|
-
limit: number().optional()
|
|
19174
|
-
|
|
19334
|
+
limit: number().optional(),
|
|
19335
|
+
/** Spatial filter — only tracks whose trajectory intersects the zone
|
|
19336
|
+
* (normalized 0..1 rect or polygon). SQL-prefiltered on the persisted
|
|
19337
|
+
* envelope columns, then precisely tested per position. Tracks with
|
|
19338
|
+
* an unknown envelope (no frame dims at persist time) always match. */
|
|
19339
|
+
zone: TrackZoneFilterSchema.optional(),
|
|
19340
|
+
/** See {@link TrackProjectionSchema}. Default `full` (backward
|
|
19341
|
+
* compatible — omitting the field keeps today's exact behaviour). */
|
|
19342
|
+
projection: TrackProjectionSchema.optional()
|
|
19343
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
19175
19344
|
kind: "mutation",
|
|
19176
19345
|
auth: "admin"
|
|
19177
|
-
}), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(
|
|
19346
|
+
}), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(object({ deviceId: number() }), array(EventKindDescriptorSchema).readonly()), method(object({
|
|
19347
|
+
deviceId: number(),
|
|
19348
|
+
since: number().optional(),
|
|
19349
|
+
until: number().optional(),
|
|
19350
|
+
kinds: array(string()).optional(),
|
|
19351
|
+
limit: number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT)
|
|
19352
|
+
}), array(SensorEventSchema).readonly()), method(KeyEventQueryInput, array(KeyEventSchema).readonly()), method(object({
|
|
19178
19353
|
deviceId: number(),
|
|
19179
19354
|
since: number(),
|
|
19180
19355
|
until: number(),
|
|
@@ -22392,7 +22567,12 @@ var RecordingStorageUsageSchema = object({
|
|
|
22392
22567
|
/**
|
|
22393
22568
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
22394
22569
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
22395
|
-
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
22570
|
+
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
22571
|
+
* and the backward covered edge `prevEndMs` (exclusive end of the nearest
|
|
22572
|
+
* footage behind the epoch; `null` when none — optional so older providers
|
|
22573
|
+
* that omit it stay valid). `prevEndMs` lets a backward frame-step hop the
|
|
22574
|
+
* small inter-segment cracks (durMs under-covers the span to the next
|
|
22575
|
+
* startMs by ~11-17 ms) instead of no-opping at a segment head.
|
|
22396
22576
|
*/
|
|
22397
22577
|
var LocateSegmentResultSchema = discriminatedUnion("kind", [object({
|
|
22398
22578
|
kind: literal("segment"),
|
|
@@ -22401,7 +22581,8 @@ var LocateSegmentResultSchema = discriminatedUnion("kind", [object({
|
|
|
22401
22581
|
bytes: number()
|
|
22402
22582
|
}), object({
|
|
22403
22583
|
kind: literal("gap"),
|
|
22404
|
-
nearestEdgeMs: number().nullable()
|
|
22584
|
+
nearestEdgeMs: number().nullable(),
|
|
22585
|
+
prevEndMs: number().nullable().optional()
|
|
22405
22586
|
})]);
|
|
22406
22587
|
/** Raw bytes of one finalized footage segment (read off disk on the recording node). */
|
|
22407
22588
|
var ReadSegmentBytesResultSchema = object({ data: _instanceof(Uint8Array) });
|
|
@@ -23970,6 +24151,12 @@ Object.freeze({
|
|
|
23970
24151
|
addonId: null,
|
|
23971
24152
|
access: "view"
|
|
23972
24153
|
},
|
|
24154
|
+
"deviceManager.getLinkedDevices": {
|
|
24155
|
+
capName: "device-manager",
|
|
24156
|
+
capScope: "system",
|
|
24157
|
+
addonId: null,
|
|
24158
|
+
access: "view"
|
|
24159
|
+
},
|
|
23973
24160
|
"deviceManager.getRoleDisplayDefaults": {
|
|
23974
24161
|
capName: "device-manager",
|
|
23975
24162
|
capScope: "system",
|
|
@@ -25524,6 +25711,12 @@ Object.freeze({
|
|
|
25524
25711
|
addonId: null,
|
|
25525
25712
|
access: "view"
|
|
25526
25713
|
},
|
|
25714
|
+
"pipelineAnalytics.getSensorEvents": {
|
|
25715
|
+
capName: "pipeline-analytics",
|
|
25716
|
+
capScope: "device",
|
|
25717
|
+
addonId: null,
|
|
25718
|
+
access: "view"
|
|
25719
|
+
},
|
|
25527
25720
|
"pipelineAnalytics.getTrack": {
|
|
25528
25721
|
capName: "pipeline-analytics",
|
|
25529
25722
|
capScope: "device",
|
|
@@ -25536,6 +25729,18 @@ Object.freeze({
|
|
|
25536
25729
|
addonId: null,
|
|
25537
25730
|
access: "view"
|
|
25538
25731
|
},
|
|
25732
|
+
"pipelineAnalytics.listEventKinds": {
|
|
25733
|
+
capName: "pipeline-analytics",
|
|
25734
|
+
capScope: "device",
|
|
25735
|
+
addonId: null,
|
|
25736
|
+
access: "view"
|
|
25737
|
+
},
|
|
25738
|
+
"pipelineAnalytics.listRecentTracks": {
|
|
25739
|
+
capName: "pipeline-analytics",
|
|
25740
|
+
capScope: "device",
|
|
25741
|
+
addonId: null,
|
|
25742
|
+
access: "view"
|
|
25743
|
+
},
|
|
25539
25744
|
"pipelineAnalytics.listTracks": {
|
|
25540
25745
|
capName: "pipeline-analytics",
|
|
25541
25746
|
capScope: "device",
|
package/dist/addon.mjs
CHANGED
|
@@ -38,7 +38,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
38
38
|
var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
39
39
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
40
40
|
//#endregion
|
|
41
|
-
//#region ../types/dist/event-category-
|
|
41
|
+
//#region ../types/dist/event-category-H4AVePnn.mjs
|
|
42
42
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
43
43
|
EventCategory["SystemBoot"] = "system.boot";
|
|
44
44
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -188,6 +188,9 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
188
188
|
EventCategory["RecordingSegmentWritten"] = "recording.segment.written";
|
|
189
189
|
EventCategory["RecordingPolicyFallback"] = "recording.policy.fallback";
|
|
190
190
|
EventCategory["RecordingRetentionCompleted"] = "recording.retention.completed";
|
|
191
|
+
/** Runner-sampled scrub thumbnail (~1/5 s/camera). Telemetry (D8): a lost
|
|
192
|
+
* thumb is a scrub gap the recorder's keyframe backfill covers. */
|
|
193
|
+
EventCategory["RecordingThumbSampled"] = "recording.thumb-sampled";
|
|
191
194
|
EventCategory["DetectionEvent"] = "detection.event";
|
|
192
195
|
EventCategory["SessionTrackNew"] = "session.track.new";
|
|
193
196
|
EventCategory["SessionTrackExpired"] = "session.track.expired";
|
|
@@ -7404,6 +7407,24 @@ var RecordingRetentionSchema = object({
|
|
|
7404
7407
|
maxSizeGb: number().min(0).optional()
|
|
7405
7408
|
});
|
|
7406
7409
|
/**
|
|
7410
|
+
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7411
|
+
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7412
|
+
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7413
|
+
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7414
|
+
*
|
|
7415
|
+
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7416
|
+
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7417
|
+
* preset changed over time renders every historical window at the dims it was
|
|
7418
|
+
* written with.
|
|
7419
|
+
*/
|
|
7420
|
+
var ScrubThumbnailPresetSchema = _enum([
|
|
7421
|
+
"minimal",
|
|
7422
|
+
"low",
|
|
7423
|
+
"standard",
|
|
7424
|
+
"high",
|
|
7425
|
+
"max"
|
|
7426
|
+
]);
|
|
7427
|
+
/**
|
|
7407
7428
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7408
7429
|
*
|
|
7409
7430
|
* `mode` is the authoritative storage choice; `schedule`/`triggers`/`pre`/`post`
|
|
@@ -7440,7 +7461,14 @@ var RecordingConfigSchema = object({
|
|
|
7440
7461
|
* derived into bands once via `migrateConfigToBands`.
|
|
7441
7462
|
*/
|
|
7442
7463
|
bands: array(RecordingBandSchema).optional(),
|
|
7443
|
-
retention: RecordingRetentionSchema.optional()
|
|
7464
|
+
retention: RecordingRetentionSchema.optional(),
|
|
7465
|
+
/**
|
|
7466
|
+
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7467
|
+
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7468
|
+
* windows only — existing sheets are immutable, and each window's index
|
|
7469
|
+
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7470
|
+
*/
|
|
7471
|
+
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7444
7472
|
});
|
|
7445
7473
|
/**
|
|
7446
7474
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
@@ -10952,10 +10980,23 @@ var deviceDiscoveryCapability = {
|
|
|
10952
10980
|
}
|
|
10953
10981
|
};
|
|
10954
10982
|
/**
|
|
10955
|
-
* Doorbell button cap.
|
|
10956
|
-
*
|
|
10957
|
-
*
|
|
10958
|
-
*
|
|
10983
|
+
* Doorbell button cap. Two kinds of providers coexist behind this cap
|
|
10984
|
+
* name (same pattern as `snapshot`):
|
|
10985
|
+
*
|
|
10986
|
+
* - **Native** providers: registered per-device by device-driver
|
|
10987
|
+
* addons via `ctx.registerNativeCap` — either on a
|
|
10988
|
+
* `DeviceType.Button` accessory with `role: DeviceRole.Doorbell`,
|
|
10989
|
+
* or directly on the camera (Reolink registers at camera level).
|
|
10990
|
+
* Emits an `onPressed` event every time the firmware pushes a
|
|
10991
|
+
* ring; status tracks the last press and a pressCount since start
|
|
10992
|
+
* (diagnostic).
|
|
10993
|
+
*
|
|
10994
|
+
* - **Wrapper** provider: the `virtual-doorbell` system builtin
|
|
10995
|
+
* (`@camstack/system/builtins/doorbell`). Turns ANY binary-ish
|
|
10996
|
+
* device (contact / switch / event-emitter …) into a doorbell for
|
|
10997
|
+
* a camera. `defaultActive: false` — the operator explicitly binds
|
|
10998
|
+
* it per camera in the device-bindings UI, then picks the source
|
|
10999
|
+
* device + trigger in the per-device settings.
|
|
10959
11000
|
*
|
|
10960
11001
|
* The DeviceEventPropagator re-emits `onPressed` on the camera parent
|
|
10961
11002
|
* — subscribers listening at the camera level receive ring events
|
|
@@ -10976,7 +11017,10 @@ var doorbellCapability = {
|
|
|
10976
11017
|
scope: "device",
|
|
10977
11018
|
deviceNative: true,
|
|
10978
11019
|
mode: "singleton",
|
|
10979
|
-
|
|
11020
|
+
kind: "wrapper",
|
|
11021
|
+
defaultActive: false,
|
|
11022
|
+
deviceTypes: [DeviceType.Button, DeviceType.Camera],
|
|
11023
|
+
exposesDeviceSettings: true,
|
|
10980
11024
|
methods: {},
|
|
10981
11025
|
events: {
|
|
10982
11026
|
/**
|
|
@@ -17413,6 +17457,14 @@ var ConfigEntrySchema = object({
|
|
|
17413
17457
|
value: unknown(),
|
|
17414
17458
|
description: string().optional()
|
|
17415
17459
|
});
|
|
17460
|
+
var DeviceLinkModeSchema = _enum(["auto", "manual"]);
|
|
17461
|
+
/** One resolved linked device — the compact projection consumers need. */
|
|
17462
|
+
var LinkedDeviceSchema = object({
|
|
17463
|
+
deviceId: number(),
|
|
17464
|
+
name: string(),
|
|
17465
|
+
location: string().nullable(),
|
|
17466
|
+
features: array(string())
|
|
17467
|
+
});
|
|
17416
17468
|
var SavedDeviceRowSchema = object({
|
|
17417
17469
|
/** Numeric id reserved at allocateDeviceId time. */
|
|
17418
17470
|
id: number(),
|
|
@@ -17634,7 +17686,10 @@ method(object({
|
|
|
17634
17686
|
}), _void(), {
|
|
17635
17687
|
kind: "mutation",
|
|
17636
17688
|
auth: "admin"
|
|
17637
|
-
}), method(object({ addonId: string() }), array(SavedDeviceRowSchema)), method(object({ addonId: string().optional() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }), DeviceInfoSchema.nullable()), method(object({ parentDeviceId: number() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }),
|
|
17689
|
+
}), method(object({ addonId: string() }), array(SavedDeviceRowSchema)), method(object({ addonId: string().optional() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }), DeviceInfoSchema.nullable()), method(object({ parentDeviceId: number() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }), object({
|
|
17690
|
+
mode: DeviceLinkModeSchema,
|
|
17691
|
+
devices: array(LinkedDeviceSchema)
|
|
17692
|
+
})), method(object({ deviceId: number() }), array(StreamSourceEntrySchema$1)), method(object({ deviceId: number() }), array(ConfigEntrySchema)), method(object({ deviceId: number() }), ConfigUISchemaOutput), method(object({
|
|
17638
17693
|
deviceId: number(),
|
|
17639
17694
|
values: record(string(), unknown())
|
|
17640
17695
|
}), object({ success: literal(true) }), {
|
|
@@ -18903,6 +18958,61 @@ var EventKindSchema = _enum([
|
|
|
18903
18958
|
"object",
|
|
18904
18959
|
"audio"
|
|
18905
18960
|
]);
|
|
18961
|
+
/**
|
|
18962
|
+
* Spatial filter for `listTracks` — the rect + polygon variants of the shared
|
|
18963
|
+
* MaskShape vocabulary (see `mask-shape.ts`). Coordinates are NORMALIZED 0..1
|
|
18964
|
+
* of the camera frame (top-left origin), matching the drawing-plane editor.
|
|
18965
|
+
*/
|
|
18966
|
+
var TrackZoneFilterSchema = discriminatedUnion("kind", [MaskRectShapeSchema, MaskPolygonShapeSchema]);
|
|
18967
|
+
/** Closed icon vocabulary so clients render a known glyph per kind. */
|
|
18968
|
+
var EventKindIconSchema = _enum([
|
|
18969
|
+
"motion",
|
|
18970
|
+
"audio",
|
|
18971
|
+
"person",
|
|
18972
|
+
"vehicle",
|
|
18973
|
+
"animal",
|
|
18974
|
+
"door",
|
|
18975
|
+
"pir",
|
|
18976
|
+
"smoke",
|
|
18977
|
+
"water",
|
|
18978
|
+
"button",
|
|
18979
|
+
"generic"
|
|
18980
|
+
]);
|
|
18981
|
+
var EventKindCategorySchema = _enum([
|
|
18982
|
+
"motion",
|
|
18983
|
+
"audio",
|
|
18984
|
+
"detection",
|
|
18985
|
+
"sensor",
|
|
18986
|
+
"custom"
|
|
18987
|
+
]);
|
|
18988
|
+
var EventKindDescriptorSchema = object({
|
|
18989
|
+
/** Stable kind id (e.g. 'motion', 'person', 'contact'). */
|
|
18990
|
+
kind: string(),
|
|
18991
|
+
label: string(),
|
|
18992
|
+
/** Hex color for timeline/legend rendering. */
|
|
18993
|
+
color: string(),
|
|
18994
|
+
icon: EventKindIconSchema,
|
|
18995
|
+
category: EventKindCategorySchema,
|
|
18996
|
+
/** Which cap + device contributes this kind. For built-ins the camera
|
|
18997
|
+
* itself; for sensor kinds the LINKED source device. */
|
|
18998
|
+
source: object({
|
|
18999
|
+
capName: string(),
|
|
19000
|
+
deviceId: number()
|
|
19001
|
+
})
|
|
19002
|
+
});
|
|
19003
|
+
var SensorEventSchema = object({
|
|
19004
|
+
id: string(),
|
|
19005
|
+
/** The CAMERA the event is attributed to (a sensor linked to N cameras
|
|
19006
|
+
* yields N rows, one per camera). */
|
|
19007
|
+
deviceId: number(),
|
|
19008
|
+
/** The linked sensor device whose state changed. */
|
|
19009
|
+
sourceDeviceId: number(),
|
|
19010
|
+
/** Event kind id — matches an `EventKindDescriptor.kind`. */
|
|
19011
|
+
kind: string(),
|
|
19012
|
+
/** Snapshot of the sensor cap's runtime-state slice at the change. */
|
|
19013
|
+
value: record(string(), unknown()).nullable(),
|
|
19014
|
+
timestamp: number()
|
|
19015
|
+
});
|
|
18906
19016
|
var TrackPositionSchema = object({
|
|
18907
19017
|
x: number(),
|
|
18908
19018
|
y: number(),
|
|
@@ -18916,6 +19026,30 @@ var TrackSnapshotSchema = object({
|
|
|
18916
19026
|
mediaKey: string()
|
|
18917
19027
|
});
|
|
18918
19028
|
/**
|
|
19029
|
+
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
19030
|
+
* divided by the track's detection-frame dims), computed at persist time.
|
|
19031
|
+
* Absent when the frame dims were unknown when the track was persisted
|
|
19032
|
+
* (legacy rows / dims-less sources) and on active (in-RAM) tracks.
|
|
19033
|
+
*/
|
|
19034
|
+
var TrackEnvelopeSchema = object({
|
|
19035
|
+
minX: number(),
|
|
19036
|
+
minY: number(),
|
|
19037
|
+
maxX: number(),
|
|
19038
|
+
maxY: number()
|
|
19039
|
+
});
|
|
19040
|
+
/**
|
|
19041
|
+
* Row projection for track list queries. `full` (default) returns the
|
|
19042
|
+
* complete Track including the frame-rate `positions[]` history and the
|
|
19043
|
+
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
19044
|
+
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
19045
|
+
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
19046
|
+
* zonesVisited, bestEventId, envelope) and returns `positions` /
|
|
19047
|
+
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
19048
|
+
* `getTrack`. Mirrors the event-store `projection` convention
|
|
19049
|
+
* (`getObjectEvents` et al.).
|
|
19050
|
+
*/
|
|
19051
|
+
var TrackProjectionSchema = _enum(["full", "slim"]);
|
|
19052
|
+
/**
|
|
18919
19053
|
* One audio-classification label heard on the track's camera while the
|
|
18920
19054
|
* track was alive, aggregated per label. An "episode" is one persisted
|
|
18921
19055
|
* audio event (the confident-classification path: score ≥ the device's
|
|
@@ -18966,7 +19100,11 @@ var TrackSchema = object({
|
|
|
18966
19100
|
/** Audio-classification labels heard on the camera during the track's
|
|
18967
19101
|
* life (score ≥ device `classificationMinScore`), aggregated per label.
|
|
18968
19102
|
* Absent on legacy rows / tracks with no confident audio. */
|
|
18969
|
-
audioLabels: array(TrackAudioLabelSchema).readonly().optional()
|
|
19103
|
+
audioLabels: array(TrackAudioLabelSchema).readonly().optional(),
|
|
19104
|
+
/** Normalized 0..1 trajectory envelope (see {@link TrackEnvelopeSchema}).
|
|
19105
|
+
* Populated from the persisted envelope columns on historical reads;
|
|
19106
|
+
* absent on legacy rows, dims-less tracks and active (in-RAM) tracks. */
|
|
19107
|
+
envelope: TrackEnvelopeSchema.optional()
|
|
18970
19108
|
});
|
|
18971
19109
|
var BaseEventFields = {
|
|
18972
19110
|
id: string(),
|
|
@@ -19076,11 +19214,13 @@ var MediaFileSchema = object({
|
|
|
19076
19214
|
sizeBytes: number(),
|
|
19077
19215
|
timestamp: number()
|
|
19078
19216
|
});
|
|
19217
|
+
var DEFAULT_EVENT_QUERY_LIMIT = 1e3;
|
|
19218
|
+
var MAX_EVENT_QUERY_LIMIT = 5e3;
|
|
19079
19219
|
var DeviceEventQueryInput = object({
|
|
19080
19220
|
deviceId: number(),
|
|
19081
19221
|
since: number().optional(),
|
|
19082
19222
|
until: number().optional(),
|
|
19083
|
-
limit: number().int().min(1).max(
|
|
19223
|
+
limit: number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT),
|
|
19084
19224
|
/** `slim` drops heavy JSON fields (regions/bbox/zones) and carries an
|
|
19085
19225
|
* optional `mediaUrl` (populated by B5). `full` (default) keeps today's
|
|
19086
19226
|
* exact behaviour. Callers may omit this field — the store defaults to
|
|
@@ -19088,6 +19228,27 @@ var DeviceEventQueryInput = object({
|
|
|
19088
19228
|
projection: _enum(["full", "slim"]).optional()
|
|
19089
19229
|
});
|
|
19090
19230
|
var ObjectEventQueryInput = DeviceEventQueryInput.extend({ classFilter: string().optional() });
|
|
19231
|
+
var RecentTracksQueryInput = object({
|
|
19232
|
+
/** Devices to merge. An empty array yields `{ tracks: [], nextCursor: null }`. */
|
|
19233
|
+
deviceIds: array(number()),
|
|
19234
|
+
/** Window lower bound on `lastSeen` (inclusive). */
|
|
19235
|
+
since: number().optional(),
|
|
19236
|
+
/** Window upper bound on `lastSeen` (inclusive). */
|
|
19237
|
+
until: number().optional(),
|
|
19238
|
+
/** Page size. Default 200, max 1000. */
|
|
19239
|
+
limit: number().int().min(1).max(1e3).default(200),
|
|
19240
|
+
/** Opaque continuation cursor from a previous page's `nextCursor`.
|
|
19241
|
+
* Encodes the (lastSeen, trackId) sort position — treat as opaque. */
|
|
19242
|
+
cursor: string().optional(),
|
|
19243
|
+
/** See {@link TrackProjectionSchema}. Default `full`. */
|
|
19244
|
+
projection: TrackProjectionSchema.optional()
|
|
19245
|
+
});
|
|
19246
|
+
var RecentTracksPageSchema = object({
|
|
19247
|
+
/** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
|
|
19248
|
+
tracks: array(TrackSchema).readonly(),
|
|
19249
|
+
/** Cursor for the next page, or null when this page is the last. */
|
|
19250
|
+
nextCursor: string().nullable()
|
|
19251
|
+
});
|
|
19091
19252
|
var KeyEventQueryInput = object({
|
|
19092
19253
|
deviceId: number(),
|
|
19093
19254
|
/** Window lower bound (track firstSeen ≥ since). */
|
|
@@ -19170,11 +19331,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19170
19331
|
deviceId: number(),
|
|
19171
19332
|
since: number().optional(),
|
|
19172
19333
|
until: number().optional(),
|
|
19173
|
-
limit: number().optional()
|
|
19174
|
-
|
|
19334
|
+
limit: number().optional(),
|
|
19335
|
+
/** Spatial filter — only tracks whose trajectory intersects the zone
|
|
19336
|
+
* (normalized 0..1 rect or polygon). SQL-prefiltered on the persisted
|
|
19337
|
+
* envelope columns, then precisely tested per position. Tracks with
|
|
19338
|
+
* an unknown envelope (no frame dims at persist time) always match. */
|
|
19339
|
+
zone: TrackZoneFilterSchema.optional(),
|
|
19340
|
+
/** See {@link TrackProjectionSchema}. Default `full` (backward
|
|
19341
|
+
* compatible — omitting the field keeps today's exact behaviour). */
|
|
19342
|
+
projection: TrackProjectionSchema.optional()
|
|
19343
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
19175
19344
|
kind: "mutation",
|
|
19176
19345
|
auth: "admin"
|
|
19177
|
-
}), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(
|
|
19346
|
+
}), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(object({ deviceId: number() }), array(EventKindDescriptorSchema).readonly()), method(object({
|
|
19347
|
+
deviceId: number(),
|
|
19348
|
+
since: number().optional(),
|
|
19349
|
+
until: number().optional(),
|
|
19350
|
+
kinds: array(string()).optional(),
|
|
19351
|
+
limit: number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT)
|
|
19352
|
+
}), array(SensorEventSchema).readonly()), method(KeyEventQueryInput, array(KeyEventSchema).readonly()), method(object({
|
|
19178
19353
|
deviceId: number(),
|
|
19179
19354
|
since: number(),
|
|
19180
19355
|
until: number(),
|
|
@@ -22392,7 +22567,12 @@ var RecordingStorageUsageSchema = object({
|
|
|
22392
22567
|
/**
|
|
22393
22568
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
22394
22569
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
22395
|
-
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
22570
|
+
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
22571
|
+
* and the backward covered edge `prevEndMs` (exclusive end of the nearest
|
|
22572
|
+
* footage behind the epoch; `null` when none — optional so older providers
|
|
22573
|
+
* that omit it stay valid). `prevEndMs` lets a backward frame-step hop the
|
|
22574
|
+
* small inter-segment cracks (durMs under-covers the span to the next
|
|
22575
|
+
* startMs by ~11-17 ms) instead of no-opping at a segment head.
|
|
22396
22576
|
*/
|
|
22397
22577
|
var LocateSegmentResultSchema = discriminatedUnion("kind", [object({
|
|
22398
22578
|
kind: literal("segment"),
|
|
@@ -22401,7 +22581,8 @@ var LocateSegmentResultSchema = discriminatedUnion("kind", [object({
|
|
|
22401
22581
|
bytes: number()
|
|
22402
22582
|
}), object({
|
|
22403
22583
|
kind: literal("gap"),
|
|
22404
|
-
nearestEdgeMs: number().nullable()
|
|
22584
|
+
nearestEdgeMs: number().nullable(),
|
|
22585
|
+
prevEndMs: number().nullable().optional()
|
|
22405
22586
|
})]);
|
|
22406
22587
|
/** Raw bytes of one finalized footage segment (read off disk on the recording node). */
|
|
22407
22588
|
var ReadSegmentBytesResultSchema = object({ data: _instanceof(Uint8Array) });
|
|
@@ -23970,6 +24151,12 @@ Object.freeze({
|
|
|
23970
24151
|
addonId: null,
|
|
23971
24152
|
access: "view"
|
|
23972
24153
|
},
|
|
24154
|
+
"deviceManager.getLinkedDevices": {
|
|
24155
|
+
capName: "device-manager",
|
|
24156
|
+
capScope: "system",
|
|
24157
|
+
addonId: null,
|
|
24158
|
+
access: "view"
|
|
24159
|
+
},
|
|
23973
24160
|
"deviceManager.getRoleDisplayDefaults": {
|
|
23974
24161
|
capName: "device-manager",
|
|
23975
24162
|
capScope: "system",
|
|
@@ -25524,6 +25711,12 @@ Object.freeze({
|
|
|
25524
25711
|
addonId: null,
|
|
25525
25712
|
access: "view"
|
|
25526
25713
|
},
|
|
25714
|
+
"pipelineAnalytics.getSensorEvents": {
|
|
25715
|
+
capName: "pipeline-analytics",
|
|
25716
|
+
capScope: "device",
|
|
25717
|
+
addonId: null,
|
|
25718
|
+
access: "view"
|
|
25719
|
+
},
|
|
25527
25720
|
"pipelineAnalytics.getTrack": {
|
|
25528
25721
|
capName: "pipeline-analytics",
|
|
25529
25722
|
capScope: "device",
|
|
@@ -25536,6 +25729,18 @@ Object.freeze({
|
|
|
25536
25729
|
addonId: null,
|
|
25537
25730
|
access: "view"
|
|
25538
25731
|
},
|
|
25732
|
+
"pipelineAnalytics.listEventKinds": {
|
|
25733
|
+
capName: "pipeline-analytics",
|
|
25734
|
+
capScope: "device",
|
|
25735
|
+
addonId: null,
|
|
25736
|
+
access: "view"
|
|
25737
|
+
},
|
|
25738
|
+
"pipelineAnalytics.listRecentTracks": {
|
|
25739
|
+
capName: "pipeline-analytics",
|
|
25740
|
+
capScope: "device",
|
|
25741
|
+
addonId: null,
|
|
25742
|
+
access: "view"
|
|
25743
|
+
},
|
|
25539
25744
|
"pipelineAnalytics.listTracks": {
|
|
25540
25745
|
capName: "pipeline-analytics",
|
|
25541
25746
|
capScope: "device",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-import-alexa",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.22",
|
|
4
4
|
"description": "Alexa device-import provider for CamStack — imports the smart-home devices in a user's Alexa account via the unofficial alexa-remote2 cookie/token client (the inverse of the Alexa exporter)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|