@camstack/addon-provider-velux 0.1.9 → 0.1.11
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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
//#region ../types/dist/event-category-
|
|
2
|
+
//#region ../types/dist/event-category-H4AVePnn.mjs
|
|
3
3
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4
4
|
EventCategory["SystemBoot"] = "system.boot";
|
|
5
5
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -149,6 +149,9 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
149
149
|
EventCategory["RecordingSegmentWritten"] = "recording.segment.written";
|
|
150
150
|
EventCategory["RecordingPolicyFallback"] = "recording.policy.fallback";
|
|
151
151
|
EventCategory["RecordingRetentionCompleted"] = "recording.retention.completed";
|
|
152
|
+
/** Runner-sampled scrub thumbnail (~1/5 s/camera). Telemetry (D8): a lost
|
|
153
|
+
* thumb is a scrub gap the recorder's keyframe backfill covers. */
|
|
154
|
+
EventCategory["RecordingThumbSampled"] = "recording.thumb-sampled";
|
|
152
155
|
EventCategory["DetectionEvent"] = "detection.event";
|
|
153
156
|
EventCategory["SessionTrackNew"] = "session.track.new";
|
|
154
157
|
EventCategory["SessionTrackExpired"] = "session.track.expired";
|
|
@@ -7248,6 +7251,24 @@ var RecordingRetentionSchema = object({
|
|
|
7248
7251
|
maxSizeGb: number().min(0).optional()
|
|
7249
7252
|
});
|
|
7250
7253
|
/**
|
|
7254
|
+
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7255
|
+
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7256
|
+
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7257
|
+
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7258
|
+
*
|
|
7259
|
+
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7260
|
+
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7261
|
+
* preset changed over time renders every historical window at the dims it was
|
|
7262
|
+
* written with.
|
|
7263
|
+
*/
|
|
7264
|
+
var ScrubThumbnailPresetSchema = _enum([
|
|
7265
|
+
"minimal",
|
|
7266
|
+
"low",
|
|
7267
|
+
"standard",
|
|
7268
|
+
"high",
|
|
7269
|
+
"max"
|
|
7270
|
+
]);
|
|
7271
|
+
/**
|
|
7251
7272
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7252
7273
|
*
|
|
7253
7274
|
* `mode` is the authoritative storage choice; `schedule`/`triggers`/`pre`/`post`
|
|
@@ -7284,7 +7305,14 @@ var RecordingConfigSchema = object({
|
|
|
7284
7305
|
* derived into bands once via `migrateConfigToBands`.
|
|
7285
7306
|
*/
|
|
7286
7307
|
bands: array(RecordingBandSchema).optional(),
|
|
7287
|
-
retention: RecordingRetentionSchema.optional()
|
|
7308
|
+
retention: RecordingRetentionSchema.optional(),
|
|
7309
|
+
/**
|
|
7310
|
+
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7311
|
+
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7312
|
+
* windows only — existing sheets are immutable, and each window's index
|
|
7313
|
+
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7314
|
+
*/
|
|
7315
|
+
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7288
7316
|
});
|
|
7289
7317
|
/**
|
|
7290
7318
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
@@ -10796,10 +10824,23 @@ var deviceDiscoveryCapability = {
|
|
|
10796
10824
|
}
|
|
10797
10825
|
};
|
|
10798
10826
|
/**
|
|
10799
|
-
* Doorbell button cap.
|
|
10800
|
-
*
|
|
10801
|
-
*
|
|
10802
|
-
*
|
|
10827
|
+
* Doorbell button cap. Two kinds of providers coexist behind this cap
|
|
10828
|
+
* name (same pattern as `snapshot`):
|
|
10829
|
+
*
|
|
10830
|
+
* - **Native** providers: registered per-device by device-driver
|
|
10831
|
+
* addons via `ctx.registerNativeCap` — either on a
|
|
10832
|
+
* `DeviceType.Button` accessory with `role: DeviceRole.Doorbell`,
|
|
10833
|
+
* or directly on the camera (Reolink registers at camera level).
|
|
10834
|
+
* Emits an `onPressed` event every time the firmware pushes a
|
|
10835
|
+
* ring; status tracks the last press and a pressCount since start
|
|
10836
|
+
* (diagnostic).
|
|
10837
|
+
*
|
|
10838
|
+
* - **Wrapper** provider: the `virtual-doorbell` system builtin
|
|
10839
|
+
* (`@camstack/system/builtins/doorbell`). Turns ANY binary-ish
|
|
10840
|
+
* device (contact / switch / event-emitter …) into a doorbell for
|
|
10841
|
+
* a camera. `defaultActive: false` — the operator explicitly binds
|
|
10842
|
+
* it per camera in the device-bindings UI, then picks the source
|
|
10843
|
+
* device + trigger in the per-device settings.
|
|
10803
10844
|
*
|
|
10804
10845
|
* The DeviceEventPropagator re-emits `onPressed` on the camera parent
|
|
10805
10846
|
* — subscribers listening at the camera level receive ring events
|
|
@@ -10820,7 +10861,10 @@ var doorbellCapability = {
|
|
|
10820
10861
|
scope: "device",
|
|
10821
10862
|
deviceNative: true,
|
|
10822
10863
|
mode: "singleton",
|
|
10823
|
-
|
|
10864
|
+
kind: "wrapper",
|
|
10865
|
+
defaultActive: false,
|
|
10866
|
+
deviceTypes: [DeviceType.Button, DeviceType.Camera],
|
|
10867
|
+
exposesDeviceSettings: true,
|
|
10824
10868
|
methods: {},
|
|
10825
10869
|
events: {
|
|
10826
10870
|
/**
|
|
@@ -17172,6 +17216,14 @@ var ConfigEntrySchema = object({
|
|
|
17172
17216
|
value: unknown(),
|
|
17173
17217
|
description: string().optional()
|
|
17174
17218
|
});
|
|
17219
|
+
var DeviceLinkModeSchema = _enum(["auto", "manual"]);
|
|
17220
|
+
/** One resolved linked device — the compact projection consumers need. */
|
|
17221
|
+
var LinkedDeviceSchema = object({
|
|
17222
|
+
deviceId: number(),
|
|
17223
|
+
name: string(),
|
|
17224
|
+
location: string().nullable(),
|
|
17225
|
+
features: array(string())
|
|
17226
|
+
});
|
|
17175
17227
|
var SavedDeviceRowSchema = object({
|
|
17176
17228
|
/** Numeric id reserved at allocateDeviceId time. */
|
|
17177
17229
|
id: number(),
|
|
@@ -17393,7 +17445,10 @@ method(object({
|
|
|
17393
17445
|
}), _void(), {
|
|
17394
17446
|
kind: "mutation",
|
|
17395
17447
|
auth: "admin"
|
|
17396
|
-
}), 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() }),
|
|
17448
|
+
}), 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({
|
|
17449
|
+
mode: DeviceLinkModeSchema,
|
|
17450
|
+
devices: array(LinkedDeviceSchema)
|
|
17451
|
+
})), method(object({ deviceId: number() }), array(StreamSourceEntrySchema$1)), method(object({ deviceId: number() }), array(ConfigEntrySchema)), method(object({ deviceId: number() }), ConfigUISchemaOutput), method(object({
|
|
17397
17452
|
deviceId: number(),
|
|
17398
17453
|
values: record(string(), unknown())
|
|
17399
17454
|
}), object({ success: literal(true) }), {
|
|
@@ -18662,6 +18717,61 @@ var EventKindSchema = _enum([
|
|
|
18662
18717
|
"object",
|
|
18663
18718
|
"audio"
|
|
18664
18719
|
]);
|
|
18720
|
+
/**
|
|
18721
|
+
* Spatial filter for `listTracks` — the rect + polygon variants of the shared
|
|
18722
|
+
* MaskShape vocabulary (see `mask-shape.ts`). Coordinates are NORMALIZED 0..1
|
|
18723
|
+
* of the camera frame (top-left origin), matching the drawing-plane editor.
|
|
18724
|
+
*/
|
|
18725
|
+
var TrackZoneFilterSchema = discriminatedUnion("kind", [MaskRectShapeSchema, MaskPolygonShapeSchema]);
|
|
18726
|
+
/** Closed icon vocabulary so clients render a known glyph per kind. */
|
|
18727
|
+
var EventKindIconSchema = _enum([
|
|
18728
|
+
"motion",
|
|
18729
|
+
"audio",
|
|
18730
|
+
"person",
|
|
18731
|
+
"vehicle",
|
|
18732
|
+
"animal",
|
|
18733
|
+
"door",
|
|
18734
|
+
"pir",
|
|
18735
|
+
"smoke",
|
|
18736
|
+
"water",
|
|
18737
|
+
"button",
|
|
18738
|
+
"generic"
|
|
18739
|
+
]);
|
|
18740
|
+
var EventKindCategorySchema = _enum([
|
|
18741
|
+
"motion",
|
|
18742
|
+
"audio",
|
|
18743
|
+
"detection",
|
|
18744
|
+
"sensor",
|
|
18745
|
+
"custom"
|
|
18746
|
+
]);
|
|
18747
|
+
var EventKindDescriptorSchema = object({
|
|
18748
|
+
/** Stable kind id (e.g. 'motion', 'person', 'contact'). */
|
|
18749
|
+
kind: string(),
|
|
18750
|
+
label: string(),
|
|
18751
|
+
/** Hex color for timeline/legend rendering. */
|
|
18752
|
+
color: string(),
|
|
18753
|
+
icon: EventKindIconSchema,
|
|
18754
|
+
category: EventKindCategorySchema,
|
|
18755
|
+
/** Which cap + device contributes this kind. For built-ins the camera
|
|
18756
|
+
* itself; for sensor kinds the LINKED source device. */
|
|
18757
|
+
source: object({
|
|
18758
|
+
capName: string(),
|
|
18759
|
+
deviceId: number()
|
|
18760
|
+
})
|
|
18761
|
+
});
|
|
18762
|
+
var SensorEventSchema = object({
|
|
18763
|
+
id: string(),
|
|
18764
|
+
/** The CAMERA the event is attributed to (a sensor linked to N cameras
|
|
18765
|
+
* yields N rows, one per camera). */
|
|
18766
|
+
deviceId: number(),
|
|
18767
|
+
/** The linked sensor device whose state changed. */
|
|
18768
|
+
sourceDeviceId: number(),
|
|
18769
|
+
/** Event kind id — matches an `EventKindDescriptor.kind`. */
|
|
18770
|
+
kind: string(),
|
|
18771
|
+
/** Snapshot of the sensor cap's runtime-state slice at the change. */
|
|
18772
|
+
value: record(string(), unknown()).nullable(),
|
|
18773
|
+
timestamp: number()
|
|
18774
|
+
});
|
|
18665
18775
|
var TrackPositionSchema = object({
|
|
18666
18776
|
x: number(),
|
|
18667
18777
|
y: number(),
|
|
@@ -18675,6 +18785,30 @@ var TrackSnapshotSchema = object({
|
|
|
18675
18785
|
mediaKey: string()
|
|
18676
18786
|
});
|
|
18677
18787
|
/**
|
|
18788
|
+
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
18789
|
+
* divided by the track's detection-frame dims), computed at persist time.
|
|
18790
|
+
* Absent when the frame dims were unknown when the track was persisted
|
|
18791
|
+
* (legacy rows / dims-less sources) and on active (in-RAM) tracks.
|
|
18792
|
+
*/
|
|
18793
|
+
var TrackEnvelopeSchema = object({
|
|
18794
|
+
minX: number(),
|
|
18795
|
+
minY: number(),
|
|
18796
|
+
maxX: number(),
|
|
18797
|
+
maxY: number()
|
|
18798
|
+
});
|
|
18799
|
+
/**
|
|
18800
|
+
* Row projection for track list queries. `full` (default) returns the
|
|
18801
|
+
* complete Track including the frame-rate `positions[]` history and the
|
|
18802
|
+
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
18803
|
+
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
18804
|
+
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
18805
|
+
* zonesVisited, bestEventId, envelope) and returns `positions` /
|
|
18806
|
+
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
18807
|
+
* `getTrack`. Mirrors the event-store `projection` convention
|
|
18808
|
+
* (`getObjectEvents` et al.).
|
|
18809
|
+
*/
|
|
18810
|
+
var TrackProjectionSchema = _enum(["full", "slim"]);
|
|
18811
|
+
/**
|
|
18678
18812
|
* One audio-classification label heard on the track's camera while the
|
|
18679
18813
|
* track was alive, aggregated per label. An "episode" is one persisted
|
|
18680
18814
|
* audio event (the confident-classification path: score ≥ the device's
|
|
@@ -18725,7 +18859,11 @@ var TrackSchema = object({
|
|
|
18725
18859
|
/** Audio-classification labels heard on the camera during the track's
|
|
18726
18860
|
* life (score ≥ device `classificationMinScore`), aggregated per label.
|
|
18727
18861
|
* Absent on legacy rows / tracks with no confident audio. */
|
|
18728
|
-
audioLabels: array(TrackAudioLabelSchema).readonly().optional()
|
|
18862
|
+
audioLabels: array(TrackAudioLabelSchema).readonly().optional(),
|
|
18863
|
+
/** Normalized 0..1 trajectory envelope (see {@link TrackEnvelopeSchema}).
|
|
18864
|
+
* Populated from the persisted envelope columns on historical reads;
|
|
18865
|
+
* absent on legacy rows, dims-less tracks and active (in-RAM) tracks. */
|
|
18866
|
+
envelope: TrackEnvelopeSchema.optional()
|
|
18729
18867
|
});
|
|
18730
18868
|
var BaseEventFields = {
|
|
18731
18869
|
id: string(),
|
|
@@ -18835,11 +18973,13 @@ var MediaFileSchema = object({
|
|
|
18835
18973
|
sizeBytes: number(),
|
|
18836
18974
|
timestamp: number()
|
|
18837
18975
|
});
|
|
18976
|
+
var DEFAULT_EVENT_QUERY_LIMIT = 1e3;
|
|
18977
|
+
var MAX_EVENT_QUERY_LIMIT = 5e3;
|
|
18838
18978
|
var DeviceEventQueryInput = object({
|
|
18839
18979
|
deviceId: number(),
|
|
18840
18980
|
since: number().optional(),
|
|
18841
18981
|
until: number().optional(),
|
|
18842
|
-
limit: number().int().min(1).max(
|
|
18982
|
+
limit: number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT),
|
|
18843
18983
|
/** `slim` drops heavy JSON fields (regions/bbox/zones) and carries an
|
|
18844
18984
|
* optional `mediaUrl` (populated by B5). `full` (default) keeps today's
|
|
18845
18985
|
* exact behaviour. Callers may omit this field — the store defaults to
|
|
@@ -18847,6 +18987,27 @@ var DeviceEventQueryInput = object({
|
|
|
18847
18987
|
projection: _enum(["full", "slim"]).optional()
|
|
18848
18988
|
});
|
|
18849
18989
|
var ObjectEventQueryInput = DeviceEventQueryInput.extend({ classFilter: string().optional() });
|
|
18990
|
+
var RecentTracksQueryInput = object({
|
|
18991
|
+
/** Devices to merge. An empty array yields `{ tracks: [], nextCursor: null }`. */
|
|
18992
|
+
deviceIds: array(number()),
|
|
18993
|
+
/** Window lower bound on `lastSeen` (inclusive). */
|
|
18994
|
+
since: number().optional(),
|
|
18995
|
+
/** Window upper bound on `lastSeen` (inclusive). */
|
|
18996
|
+
until: number().optional(),
|
|
18997
|
+
/** Page size. Default 200, max 1000. */
|
|
18998
|
+
limit: number().int().min(1).max(1e3).default(200),
|
|
18999
|
+
/** Opaque continuation cursor from a previous page's `nextCursor`.
|
|
19000
|
+
* Encodes the (lastSeen, trackId) sort position — treat as opaque. */
|
|
19001
|
+
cursor: string().optional(),
|
|
19002
|
+
/** See {@link TrackProjectionSchema}. Default `full`. */
|
|
19003
|
+
projection: TrackProjectionSchema.optional()
|
|
19004
|
+
});
|
|
19005
|
+
var RecentTracksPageSchema = object({
|
|
19006
|
+
/** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
|
|
19007
|
+
tracks: array(TrackSchema).readonly(),
|
|
19008
|
+
/** Cursor for the next page, or null when this page is the last. */
|
|
19009
|
+
nextCursor: string().nullable()
|
|
19010
|
+
});
|
|
18850
19011
|
var KeyEventQueryInput = object({
|
|
18851
19012
|
deviceId: number(),
|
|
18852
19013
|
/** Window lower bound (track firstSeen ≥ since). */
|
|
@@ -18929,11 +19090,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
18929
19090
|
deviceId: number(),
|
|
18930
19091
|
since: number().optional(),
|
|
18931
19092
|
until: number().optional(),
|
|
18932
|
-
limit: number().optional()
|
|
18933
|
-
|
|
19093
|
+
limit: number().optional(),
|
|
19094
|
+
/** Spatial filter — only tracks whose trajectory intersects the zone
|
|
19095
|
+
* (normalized 0..1 rect or polygon). SQL-prefiltered on the persisted
|
|
19096
|
+
* envelope columns, then precisely tested per position. Tracks with
|
|
19097
|
+
* an unknown envelope (no frame dims at persist time) always match. */
|
|
19098
|
+
zone: TrackZoneFilterSchema.optional(),
|
|
19099
|
+
/** See {@link TrackProjectionSchema}. Default `full` (backward
|
|
19100
|
+
* compatible — omitting the field keeps today's exact behaviour). */
|
|
19101
|
+
projection: TrackProjectionSchema.optional()
|
|
19102
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
18934
19103
|
kind: "mutation",
|
|
18935
19104
|
auth: "admin"
|
|
18936
|
-
}), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(
|
|
19105
|
+
}), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(object({ deviceId: number() }), array(EventKindDescriptorSchema).readonly()), method(object({
|
|
19106
|
+
deviceId: number(),
|
|
19107
|
+
since: number().optional(),
|
|
19108
|
+
until: number().optional(),
|
|
19109
|
+
kinds: array(string()).optional(),
|
|
19110
|
+
limit: number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT)
|
|
19111
|
+
}), array(SensorEventSchema).readonly()), method(KeyEventQueryInput, array(KeyEventSchema).readonly()), method(object({
|
|
18937
19112
|
deviceId: number(),
|
|
18938
19113
|
since: number(),
|
|
18939
19114
|
until: number(),
|
|
@@ -22134,7 +22309,12 @@ var RecordingStorageUsageSchema = object({
|
|
|
22134
22309
|
/**
|
|
22135
22310
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
22136
22311
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
22137
|
-
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
22312
|
+
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
22313
|
+
* and the backward covered edge `prevEndMs` (exclusive end of the nearest
|
|
22314
|
+
* footage behind the epoch; `null` when none — optional so older providers
|
|
22315
|
+
* that omit it stay valid). `prevEndMs` lets a backward frame-step hop the
|
|
22316
|
+
* small inter-segment cracks (durMs under-covers the span to the next
|
|
22317
|
+
* startMs by ~11-17 ms) instead of no-opping at a segment head.
|
|
22138
22318
|
*/
|
|
22139
22319
|
var LocateSegmentResultSchema = discriminatedUnion("kind", [object({
|
|
22140
22320
|
kind: literal("segment"),
|
|
@@ -22143,7 +22323,8 @@ var LocateSegmentResultSchema = discriminatedUnion("kind", [object({
|
|
|
22143
22323
|
bytes: number()
|
|
22144
22324
|
}), object({
|
|
22145
22325
|
kind: literal("gap"),
|
|
22146
|
-
nearestEdgeMs: number().nullable()
|
|
22326
|
+
nearestEdgeMs: number().nullable(),
|
|
22327
|
+
prevEndMs: number().nullable().optional()
|
|
22147
22328
|
})]);
|
|
22148
22329
|
/** Raw bytes of one finalized footage segment (read off disk on the recording node). */
|
|
22149
22330
|
var ReadSegmentBytesResultSchema = object({ data: _instanceof(Uint8Array) });
|
|
@@ -23712,6 +23893,12 @@ Object.freeze({
|
|
|
23712
23893
|
addonId: null,
|
|
23713
23894
|
access: "view"
|
|
23714
23895
|
},
|
|
23896
|
+
"deviceManager.getLinkedDevices": {
|
|
23897
|
+
capName: "device-manager",
|
|
23898
|
+
capScope: "system",
|
|
23899
|
+
addonId: null,
|
|
23900
|
+
access: "view"
|
|
23901
|
+
},
|
|
23715
23902
|
"deviceManager.getRoleDisplayDefaults": {
|
|
23716
23903
|
capName: "device-manager",
|
|
23717
23904
|
capScope: "system",
|
|
@@ -25266,6 +25453,12 @@ Object.freeze({
|
|
|
25266
25453
|
addonId: null,
|
|
25267
25454
|
access: "view"
|
|
25268
25455
|
},
|
|
25456
|
+
"pipelineAnalytics.getSensorEvents": {
|
|
25457
|
+
capName: "pipeline-analytics",
|
|
25458
|
+
capScope: "device",
|
|
25459
|
+
addonId: null,
|
|
25460
|
+
access: "view"
|
|
25461
|
+
},
|
|
25269
25462
|
"pipelineAnalytics.getTrack": {
|
|
25270
25463
|
capName: "pipeline-analytics",
|
|
25271
25464
|
capScope: "device",
|
|
@@ -25278,6 +25471,18 @@ Object.freeze({
|
|
|
25278
25471
|
addonId: null,
|
|
25279
25472
|
access: "view"
|
|
25280
25473
|
},
|
|
25474
|
+
"pipelineAnalytics.listEventKinds": {
|
|
25475
|
+
capName: "pipeline-analytics",
|
|
25476
|
+
capScope: "device",
|
|
25477
|
+
addonId: null,
|
|
25478
|
+
access: "view"
|
|
25479
|
+
},
|
|
25480
|
+
"pipelineAnalytics.listRecentTracks": {
|
|
25481
|
+
capName: "pipeline-analytics",
|
|
25482
|
+
capScope: "device",
|
|
25483
|
+
addonId: null,
|
|
25484
|
+
access: "view"
|
|
25485
|
+
},
|
|
25281
25486
|
"pipelineAnalytics.listTracks": {
|
|
25282
25487
|
capName: "pipeline-analytics",
|
|
25283
25488
|
capScope: "device",
|
package/dist/addon.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region ../types/dist/event-category-
|
|
1
|
+
//#region ../types/dist/event-category-H4AVePnn.mjs
|
|
2
2
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
3
3
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4
4
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -148,6 +148,9 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
148
148
|
EventCategory["RecordingSegmentWritten"] = "recording.segment.written";
|
|
149
149
|
EventCategory["RecordingPolicyFallback"] = "recording.policy.fallback";
|
|
150
150
|
EventCategory["RecordingRetentionCompleted"] = "recording.retention.completed";
|
|
151
|
+
/** Runner-sampled scrub thumbnail (~1/5 s/camera). Telemetry (D8): a lost
|
|
152
|
+
* thumb is a scrub gap the recorder's keyframe backfill covers. */
|
|
153
|
+
EventCategory["RecordingThumbSampled"] = "recording.thumb-sampled";
|
|
151
154
|
EventCategory["DetectionEvent"] = "detection.event";
|
|
152
155
|
EventCategory["SessionTrackNew"] = "session.track.new";
|
|
153
156
|
EventCategory["SessionTrackExpired"] = "session.track.expired";
|
|
@@ -7247,6 +7250,24 @@ var RecordingRetentionSchema = object({
|
|
|
7247
7250
|
maxSizeGb: number().min(0).optional()
|
|
7248
7251
|
});
|
|
7249
7252
|
/**
|
|
7253
|
+
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7254
|
+
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7255
|
+
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7256
|
+
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7257
|
+
*
|
|
7258
|
+
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7259
|
+
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7260
|
+
* preset changed over time renders every historical window at the dims it was
|
|
7261
|
+
* written with.
|
|
7262
|
+
*/
|
|
7263
|
+
var ScrubThumbnailPresetSchema = _enum([
|
|
7264
|
+
"minimal",
|
|
7265
|
+
"low",
|
|
7266
|
+
"standard",
|
|
7267
|
+
"high",
|
|
7268
|
+
"max"
|
|
7269
|
+
]);
|
|
7270
|
+
/**
|
|
7250
7271
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7251
7272
|
*
|
|
7252
7273
|
* `mode` is the authoritative storage choice; `schedule`/`triggers`/`pre`/`post`
|
|
@@ -7283,7 +7304,14 @@ var RecordingConfigSchema = object({
|
|
|
7283
7304
|
* derived into bands once via `migrateConfigToBands`.
|
|
7284
7305
|
*/
|
|
7285
7306
|
bands: array(RecordingBandSchema).optional(),
|
|
7286
|
-
retention: RecordingRetentionSchema.optional()
|
|
7307
|
+
retention: RecordingRetentionSchema.optional(),
|
|
7308
|
+
/**
|
|
7309
|
+
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7310
|
+
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7311
|
+
* windows only — existing sheets are immutable, and each window's index
|
|
7312
|
+
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7313
|
+
*/
|
|
7314
|
+
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7287
7315
|
});
|
|
7288
7316
|
/**
|
|
7289
7317
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
@@ -10795,10 +10823,23 @@ var deviceDiscoveryCapability = {
|
|
|
10795
10823
|
}
|
|
10796
10824
|
};
|
|
10797
10825
|
/**
|
|
10798
|
-
* Doorbell button cap.
|
|
10799
|
-
*
|
|
10800
|
-
*
|
|
10801
|
-
*
|
|
10826
|
+
* Doorbell button cap. Two kinds of providers coexist behind this cap
|
|
10827
|
+
* name (same pattern as `snapshot`):
|
|
10828
|
+
*
|
|
10829
|
+
* - **Native** providers: registered per-device by device-driver
|
|
10830
|
+
* addons via `ctx.registerNativeCap` — either on a
|
|
10831
|
+
* `DeviceType.Button` accessory with `role: DeviceRole.Doorbell`,
|
|
10832
|
+
* or directly on the camera (Reolink registers at camera level).
|
|
10833
|
+
* Emits an `onPressed` event every time the firmware pushes a
|
|
10834
|
+
* ring; status tracks the last press and a pressCount since start
|
|
10835
|
+
* (diagnostic).
|
|
10836
|
+
*
|
|
10837
|
+
* - **Wrapper** provider: the `virtual-doorbell` system builtin
|
|
10838
|
+
* (`@camstack/system/builtins/doorbell`). Turns ANY binary-ish
|
|
10839
|
+
* device (contact / switch / event-emitter …) into a doorbell for
|
|
10840
|
+
* a camera. `defaultActive: false` — the operator explicitly binds
|
|
10841
|
+
* it per camera in the device-bindings UI, then picks the source
|
|
10842
|
+
* device + trigger in the per-device settings.
|
|
10802
10843
|
*
|
|
10803
10844
|
* The DeviceEventPropagator re-emits `onPressed` on the camera parent
|
|
10804
10845
|
* — subscribers listening at the camera level receive ring events
|
|
@@ -10819,7 +10860,10 @@ var doorbellCapability = {
|
|
|
10819
10860
|
scope: "device",
|
|
10820
10861
|
deviceNative: true,
|
|
10821
10862
|
mode: "singleton",
|
|
10822
|
-
|
|
10863
|
+
kind: "wrapper",
|
|
10864
|
+
defaultActive: false,
|
|
10865
|
+
deviceTypes: [DeviceType.Button, DeviceType.Camera],
|
|
10866
|
+
exposesDeviceSettings: true,
|
|
10823
10867
|
methods: {},
|
|
10824
10868
|
events: {
|
|
10825
10869
|
/**
|
|
@@ -17171,6 +17215,14 @@ var ConfigEntrySchema = object({
|
|
|
17171
17215
|
value: unknown(),
|
|
17172
17216
|
description: string().optional()
|
|
17173
17217
|
});
|
|
17218
|
+
var DeviceLinkModeSchema = _enum(["auto", "manual"]);
|
|
17219
|
+
/** One resolved linked device — the compact projection consumers need. */
|
|
17220
|
+
var LinkedDeviceSchema = object({
|
|
17221
|
+
deviceId: number(),
|
|
17222
|
+
name: string(),
|
|
17223
|
+
location: string().nullable(),
|
|
17224
|
+
features: array(string())
|
|
17225
|
+
});
|
|
17174
17226
|
var SavedDeviceRowSchema = object({
|
|
17175
17227
|
/** Numeric id reserved at allocateDeviceId time. */
|
|
17176
17228
|
id: number(),
|
|
@@ -17392,7 +17444,10 @@ method(object({
|
|
|
17392
17444
|
}), _void(), {
|
|
17393
17445
|
kind: "mutation",
|
|
17394
17446
|
auth: "admin"
|
|
17395
|
-
}), 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() }),
|
|
17447
|
+
}), 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({
|
|
17448
|
+
mode: DeviceLinkModeSchema,
|
|
17449
|
+
devices: array(LinkedDeviceSchema)
|
|
17450
|
+
})), method(object({ deviceId: number() }), array(StreamSourceEntrySchema$1)), method(object({ deviceId: number() }), array(ConfigEntrySchema)), method(object({ deviceId: number() }), ConfigUISchemaOutput), method(object({
|
|
17396
17451
|
deviceId: number(),
|
|
17397
17452
|
values: record(string(), unknown())
|
|
17398
17453
|
}), object({ success: literal(true) }), {
|
|
@@ -18661,6 +18716,61 @@ var EventKindSchema = _enum([
|
|
|
18661
18716
|
"object",
|
|
18662
18717
|
"audio"
|
|
18663
18718
|
]);
|
|
18719
|
+
/**
|
|
18720
|
+
* Spatial filter for `listTracks` — the rect + polygon variants of the shared
|
|
18721
|
+
* MaskShape vocabulary (see `mask-shape.ts`). Coordinates are NORMALIZED 0..1
|
|
18722
|
+
* of the camera frame (top-left origin), matching the drawing-plane editor.
|
|
18723
|
+
*/
|
|
18724
|
+
var TrackZoneFilterSchema = discriminatedUnion("kind", [MaskRectShapeSchema, MaskPolygonShapeSchema]);
|
|
18725
|
+
/** Closed icon vocabulary so clients render a known glyph per kind. */
|
|
18726
|
+
var EventKindIconSchema = _enum([
|
|
18727
|
+
"motion",
|
|
18728
|
+
"audio",
|
|
18729
|
+
"person",
|
|
18730
|
+
"vehicle",
|
|
18731
|
+
"animal",
|
|
18732
|
+
"door",
|
|
18733
|
+
"pir",
|
|
18734
|
+
"smoke",
|
|
18735
|
+
"water",
|
|
18736
|
+
"button",
|
|
18737
|
+
"generic"
|
|
18738
|
+
]);
|
|
18739
|
+
var EventKindCategorySchema = _enum([
|
|
18740
|
+
"motion",
|
|
18741
|
+
"audio",
|
|
18742
|
+
"detection",
|
|
18743
|
+
"sensor",
|
|
18744
|
+
"custom"
|
|
18745
|
+
]);
|
|
18746
|
+
var EventKindDescriptorSchema = object({
|
|
18747
|
+
/** Stable kind id (e.g. 'motion', 'person', 'contact'). */
|
|
18748
|
+
kind: string(),
|
|
18749
|
+
label: string(),
|
|
18750
|
+
/** Hex color for timeline/legend rendering. */
|
|
18751
|
+
color: string(),
|
|
18752
|
+
icon: EventKindIconSchema,
|
|
18753
|
+
category: EventKindCategorySchema,
|
|
18754
|
+
/** Which cap + device contributes this kind. For built-ins the camera
|
|
18755
|
+
* itself; for sensor kinds the LINKED source device. */
|
|
18756
|
+
source: object({
|
|
18757
|
+
capName: string(),
|
|
18758
|
+
deviceId: number()
|
|
18759
|
+
})
|
|
18760
|
+
});
|
|
18761
|
+
var SensorEventSchema = object({
|
|
18762
|
+
id: string(),
|
|
18763
|
+
/** The CAMERA the event is attributed to (a sensor linked to N cameras
|
|
18764
|
+
* yields N rows, one per camera). */
|
|
18765
|
+
deviceId: number(),
|
|
18766
|
+
/** The linked sensor device whose state changed. */
|
|
18767
|
+
sourceDeviceId: number(),
|
|
18768
|
+
/** Event kind id — matches an `EventKindDescriptor.kind`. */
|
|
18769
|
+
kind: string(),
|
|
18770
|
+
/** Snapshot of the sensor cap's runtime-state slice at the change. */
|
|
18771
|
+
value: record(string(), unknown()).nullable(),
|
|
18772
|
+
timestamp: number()
|
|
18773
|
+
});
|
|
18664
18774
|
var TrackPositionSchema = object({
|
|
18665
18775
|
x: number(),
|
|
18666
18776
|
y: number(),
|
|
@@ -18674,6 +18784,30 @@ var TrackSnapshotSchema = object({
|
|
|
18674
18784
|
mediaKey: string()
|
|
18675
18785
|
});
|
|
18676
18786
|
/**
|
|
18787
|
+
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
18788
|
+
* divided by the track's detection-frame dims), computed at persist time.
|
|
18789
|
+
* Absent when the frame dims were unknown when the track was persisted
|
|
18790
|
+
* (legacy rows / dims-less sources) and on active (in-RAM) tracks.
|
|
18791
|
+
*/
|
|
18792
|
+
var TrackEnvelopeSchema = object({
|
|
18793
|
+
minX: number(),
|
|
18794
|
+
minY: number(),
|
|
18795
|
+
maxX: number(),
|
|
18796
|
+
maxY: number()
|
|
18797
|
+
});
|
|
18798
|
+
/**
|
|
18799
|
+
* Row projection for track list queries. `full` (default) returns the
|
|
18800
|
+
* complete Track including the frame-rate `positions[]` history and the
|
|
18801
|
+
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
18802
|
+
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
18803
|
+
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
18804
|
+
* zonesVisited, bestEventId, envelope) and returns `positions` /
|
|
18805
|
+
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
18806
|
+
* `getTrack`. Mirrors the event-store `projection` convention
|
|
18807
|
+
* (`getObjectEvents` et al.).
|
|
18808
|
+
*/
|
|
18809
|
+
var TrackProjectionSchema = _enum(["full", "slim"]);
|
|
18810
|
+
/**
|
|
18677
18811
|
* One audio-classification label heard on the track's camera while the
|
|
18678
18812
|
* track was alive, aggregated per label. An "episode" is one persisted
|
|
18679
18813
|
* audio event (the confident-classification path: score ≥ the device's
|
|
@@ -18724,7 +18858,11 @@ var TrackSchema = object({
|
|
|
18724
18858
|
/** Audio-classification labels heard on the camera during the track's
|
|
18725
18859
|
* life (score ≥ device `classificationMinScore`), aggregated per label.
|
|
18726
18860
|
* Absent on legacy rows / tracks with no confident audio. */
|
|
18727
|
-
audioLabels: array(TrackAudioLabelSchema).readonly().optional()
|
|
18861
|
+
audioLabels: array(TrackAudioLabelSchema).readonly().optional(),
|
|
18862
|
+
/** Normalized 0..1 trajectory envelope (see {@link TrackEnvelopeSchema}).
|
|
18863
|
+
* Populated from the persisted envelope columns on historical reads;
|
|
18864
|
+
* absent on legacy rows, dims-less tracks and active (in-RAM) tracks. */
|
|
18865
|
+
envelope: TrackEnvelopeSchema.optional()
|
|
18728
18866
|
});
|
|
18729
18867
|
var BaseEventFields = {
|
|
18730
18868
|
id: string(),
|
|
@@ -18834,11 +18972,13 @@ var MediaFileSchema = object({
|
|
|
18834
18972
|
sizeBytes: number(),
|
|
18835
18973
|
timestamp: number()
|
|
18836
18974
|
});
|
|
18975
|
+
var DEFAULT_EVENT_QUERY_LIMIT = 1e3;
|
|
18976
|
+
var MAX_EVENT_QUERY_LIMIT = 5e3;
|
|
18837
18977
|
var DeviceEventQueryInput = object({
|
|
18838
18978
|
deviceId: number(),
|
|
18839
18979
|
since: number().optional(),
|
|
18840
18980
|
until: number().optional(),
|
|
18841
|
-
limit: number().int().min(1).max(
|
|
18981
|
+
limit: number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT),
|
|
18842
18982
|
/** `slim` drops heavy JSON fields (regions/bbox/zones) and carries an
|
|
18843
18983
|
* optional `mediaUrl` (populated by B5). `full` (default) keeps today's
|
|
18844
18984
|
* exact behaviour. Callers may omit this field — the store defaults to
|
|
@@ -18846,6 +18986,27 @@ var DeviceEventQueryInput = object({
|
|
|
18846
18986
|
projection: _enum(["full", "slim"]).optional()
|
|
18847
18987
|
});
|
|
18848
18988
|
var ObjectEventQueryInput = DeviceEventQueryInput.extend({ classFilter: string().optional() });
|
|
18989
|
+
var RecentTracksQueryInput = object({
|
|
18990
|
+
/** Devices to merge. An empty array yields `{ tracks: [], nextCursor: null }`. */
|
|
18991
|
+
deviceIds: array(number()),
|
|
18992
|
+
/** Window lower bound on `lastSeen` (inclusive). */
|
|
18993
|
+
since: number().optional(),
|
|
18994
|
+
/** Window upper bound on `lastSeen` (inclusive). */
|
|
18995
|
+
until: number().optional(),
|
|
18996
|
+
/** Page size. Default 200, max 1000. */
|
|
18997
|
+
limit: number().int().min(1).max(1e3).default(200),
|
|
18998
|
+
/** Opaque continuation cursor from a previous page's `nextCursor`.
|
|
18999
|
+
* Encodes the (lastSeen, trackId) sort position — treat as opaque. */
|
|
19000
|
+
cursor: string().optional(),
|
|
19001
|
+
/** See {@link TrackProjectionSchema}. Default `full`. */
|
|
19002
|
+
projection: TrackProjectionSchema.optional()
|
|
19003
|
+
});
|
|
19004
|
+
var RecentTracksPageSchema = object({
|
|
19005
|
+
/** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
|
|
19006
|
+
tracks: array(TrackSchema).readonly(),
|
|
19007
|
+
/** Cursor for the next page, or null when this page is the last. */
|
|
19008
|
+
nextCursor: string().nullable()
|
|
19009
|
+
});
|
|
18849
19010
|
var KeyEventQueryInput = object({
|
|
18850
19011
|
deviceId: number(),
|
|
18851
19012
|
/** Window lower bound (track firstSeen ≥ since). */
|
|
@@ -18928,11 +19089,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
18928
19089
|
deviceId: number(),
|
|
18929
19090
|
since: number().optional(),
|
|
18930
19091
|
until: number().optional(),
|
|
18931
|
-
limit: number().optional()
|
|
18932
|
-
|
|
19092
|
+
limit: number().optional(),
|
|
19093
|
+
/** Spatial filter — only tracks whose trajectory intersects the zone
|
|
19094
|
+
* (normalized 0..1 rect or polygon). SQL-prefiltered on the persisted
|
|
19095
|
+
* envelope columns, then precisely tested per position. Tracks with
|
|
19096
|
+
* an unknown envelope (no frame dims at persist time) always match. */
|
|
19097
|
+
zone: TrackZoneFilterSchema.optional(),
|
|
19098
|
+
/** See {@link TrackProjectionSchema}. Default `full` (backward
|
|
19099
|
+
* compatible — omitting the field keeps today's exact behaviour). */
|
|
19100
|
+
projection: TrackProjectionSchema.optional()
|
|
19101
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
18933
19102
|
kind: "mutation",
|
|
18934
19103
|
auth: "admin"
|
|
18935
|
-
}), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(
|
|
19104
|
+
}), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(object({ deviceId: number() }), array(EventKindDescriptorSchema).readonly()), method(object({
|
|
19105
|
+
deviceId: number(),
|
|
19106
|
+
since: number().optional(),
|
|
19107
|
+
until: number().optional(),
|
|
19108
|
+
kinds: array(string()).optional(),
|
|
19109
|
+
limit: number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT)
|
|
19110
|
+
}), array(SensorEventSchema).readonly()), method(KeyEventQueryInput, array(KeyEventSchema).readonly()), method(object({
|
|
18936
19111
|
deviceId: number(),
|
|
18937
19112
|
since: number(),
|
|
18938
19113
|
until: number(),
|
|
@@ -22133,7 +22308,12 @@ var RecordingStorageUsageSchema = object({
|
|
|
22133
22308
|
/**
|
|
22134
22309
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
22135
22310
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
22136
|
-
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
22311
|
+
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
22312
|
+
* and the backward covered edge `prevEndMs` (exclusive end of the nearest
|
|
22313
|
+
* footage behind the epoch; `null` when none — optional so older providers
|
|
22314
|
+
* that omit it stay valid). `prevEndMs` lets a backward frame-step hop the
|
|
22315
|
+
* small inter-segment cracks (durMs under-covers the span to the next
|
|
22316
|
+
* startMs by ~11-17 ms) instead of no-opping at a segment head.
|
|
22137
22317
|
*/
|
|
22138
22318
|
var LocateSegmentResultSchema = discriminatedUnion("kind", [object({
|
|
22139
22319
|
kind: literal("segment"),
|
|
@@ -22142,7 +22322,8 @@ var LocateSegmentResultSchema = discriminatedUnion("kind", [object({
|
|
|
22142
22322
|
bytes: number()
|
|
22143
22323
|
}), object({
|
|
22144
22324
|
kind: literal("gap"),
|
|
22145
|
-
nearestEdgeMs: number().nullable()
|
|
22325
|
+
nearestEdgeMs: number().nullable(),
|
|
22326
|
+
prevEndMs: number().nullable().optional()
|
|
22146
22327
|
})]);
|
|
22147
22328
|
/** Raw bytes of one finalized footage segment (read off disk on the recording node). */
|
|
22148
22329
|
var ReadSegmentBytesResultSchema = object({ data: _instanceof(Uint8Array) });
|
|
@@ -23711,6 +23892,12 @@ Object.freeze({
|
|
|
23711
23892
|
addonId: null,
|
|
23712
23893
|
access: "view"
|
|
23713
23894
|
},
|
|
23895
|
+
"deviceManager.getLinkedDevices": {
|
|
23896
|
+
capName: "device-manager",
|
|
23897
|
+
capScope: "system",
|
|
23898
|
+
addonId: null,
|
|
23899
|
+
access: "view"
|
|
23900
|
+
},
|
|
23714
23901
|
"deviceManager.getRoleDisplayDefaults": {
|
|
23715
23902
|
capName: "device-manager",
|
|
23716
23903
|
capScope: "system",
|
|
@@ -25265,6 +25452,12 @@ Object.freeze({
|
|
|
25265
25452
|
addonId: null,
|
|
25266
25453
|
access: "view"
|
|
25267
25454
|
},
|
|
25455
|
+
"pipelineAnalytics.getSensorEvents": {
|
|
25456
|
+
capName: "pipeline-analytics",
|
|
25457
|
+
capScope: "device",
|
|
25458
|
+
addonId: null,
|
|
25459
|
+
access: "view"
|
|
25460
|
+
},
|
|
25268
25461
|
"pipelineAnalytics.getTrack": {
|
|
25269
25462
|
capName: "pipeline-analytics",
|
|
25270
25463
|
capScope: "device",
|
|
@@ -25277,6 +25470,18 @@ Object.freeze({
|
|
|
25277
25470
|
addonId: null,
|
|
25278
25471
|
access: "view"
|
|
25279
25472
|
},
|
|
25473
|
+
"pipelineAnalytics.listEventKinds": {
|
|
25474
|
+
capName: "pipeline-analytics",
|
|
25475
|
+
capScope: "device",
|
|
25476
|
+
addonId: null,
|
|
25477
|
+
access: "view"
|
|
25478
|
+
},
|
|
25479
|
+
"pipelineAnalytics.listRecentTracks": {
|
|
25480
|
+
capName: "pipeline-analytics",
|
|
25481
|
+
capScope: "device",
|
|
25482
|
+
addonId: null,
|
|
25483
|
+
access: "view"
|
|
25484
|
+
},
|
|
25280
25485
|
"pipelineAnalytics.listTracks": {
|
|
25281
25486
|
capName: "pipeline-analytics",
|
|
25282
25487
|
capScope: "device",
|
package/package.json
CHANGED