@camstack/system 1.1.50 → 1.1.52

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.
Files changed (64) hide show
  1. package/dist/addon-runner.js +2 -2
  2. package/dist/addon-runner.mjs +2 -2
  3. package/dist/addon-utils.js +1 -1
  4. package/dist/addon-utils.mjs +1 -1
  5. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  8. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  9. package/dist/builtins/alerts/alerts.addon.js +1 -1
  10. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  11. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  12. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  13. package/dist/builtins/console-logging/index.js +1 -1
  14. package/dist/builtins/console-logging/index.mjs +1 -1
  15. package/dist/builtins/device-manager/device-linked-devices.d.ts +47 -0
  16. package/dist/builtins/device-manager/device-manager.addon.js +1840 -1712
  17. package/dist/builtins/device-manager/device-manager.addon.mjs +1840 -1712
  18. package/dist/builtins/doorbell/index.d.ts +2 -0
  19. package/dist/builtins/doorbell/index.js +8 -0
  20. package/dist/builtins/doorbell/index.mjs +2 -0
  21. package/dist/builtins/doorbell/trigger-engine.d.ts +69 -0
  22. package/dist/builtins/doorbell/virtual-doorbell.addon.d.ts +87 -0
  23. package/dist/builtins/doorbell/virtual-doorbell.addon.js +489 -0
  24. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +483 -0
  25. package/dist/builtins/hub-forwarder/index.js +1 -1
  26. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  27. package/dist/builtins/local-auth/local-auth.addon.js +2 -2
  28. package/dist/builtins/local-auth/local-auth.addon.mjs +2 -2
  29. package/dist/builtins/local-network/local-network.addon.js +1 -1
  30. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  31. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  32. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  33. package/dist/builtins/platform-probe/index.js +1 -1
  34. package/dist/builtins/platform-probe/index.mjs +1 -1
  35. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  36. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  37. package/dist/builtins/snapshot/index.js +162 -12
  38. package/dist/builtins/snapshot/index.mjs +162 -12
  39. package/dist/builtins/snapshot/snapshot-media-handler.d.ts +38 -0
  40. package/dist/builtins/snapshot/snapshot.addon.d.ts +26 -0
  41. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  42. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  43. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +1 -1
  44. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -1
  45. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  46. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  47. package/dist/builtins/system-config/system-config.addon.js +4 -4
  48. package/dist/builtins/system-config/system-config.addon.mjs +4 -4
  49. package/dist/builtins/winston-logging/index.js +1 -1
  50. package/dist/builtins/winston-logging/index.mjs +1 -1
  51. package/dist/{dist-CC3E-_3h.mjs → dist-B_PSvr-m.mjs} +237 -13
  52. package/dist/{dist-CQYo6Zp8.js → dist-BduBhv6N.js} +242 -12
  53. package/dist/http/file-data-plane.d.ts +8 -0
  54. package/dist/index.d.ts +2 -0
  55. package/dist/index.js +35 -23
  56. package/dist/index.mjs +35 -24
  57. package/dist/kernel/addon-installer.d.ts +8 -0
  58. package/dist/kernel/deps/manifest-native-deps.d.ts +1 -1
  59. package/dist/kernel/deps/npm-command.d.ts +38 -0
  60. package/dist/{manifest-python-deps-DqATCsK0.mjs → manifest-python-deps-CIyvuHAB.mjs} +268 -124
  61. package/dist/{manifest-python-deps-Wy8dNJpr.js → manifest-python-deps-CPAMH5gV.js} +279 -123
  62. package/dist/{model-download-service-C-IHWnXx.mjs → model-download-service-Cp9f4dk6.mjs} +1 -1
  63. package/dist/{model-download-service-D-Umz4-L.js → model-download-service-hf0ookyy.js} +1 -1
  64. package/package.json +13 -1
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- //#region ../types/dist/sleep-_sv7WKkq.mjs
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";
@@ -6903,10 +6906,23 @@ var deviceDiscoveryCapability = {
6903
6906
  }
6904
6907
  };
6905
6908
  /**
6906
- * Doorbell button cap. Installed on a `DeviceType.Button` accessory
6907
- * with `role: DeviceRole.Doorbell`. Emits an `onPressed` event every
6908
- * time the firmware pushes a ring; status tracks the last press and
6909
- * a pressCount since start (diagnostic).
6909
+ * Doorbell button cap. Two kinds of providers coexist behind this cap
6910
+ * name (same pattern as `snapshot`):
6911
+ *
6912
+ * - **Native** providers: registered per-device by device-driver
6913
+ * addons via `ctx.registerNativeCap` — either on a
6914
+ * `DeviceType.Button` accessory with `role: DeviceRole.Doorbell`,
6915
+ * or directly on the camera (Reolink registers at camera level).
6916
+ * Emits an `onPressed` event every time the firmware pushes a
6917
+ * ring; status tracks the last press and a pressCount since start
6918
+ * (diagnostic).
6919
+ *
6920
+ * - **Wrapper** provider: the `virtual-doorbell` system builtin
6921
+ * (`@camstack/system/builtins/doorbell`). Turns ANY binary-ish
6922
+ * device (contact / switch / event-emitter …) into a doorbell for
6923
+ * a camera. `defaultActive: false` — the operator explicitly binds
6924
+ * it per camera in the device-bindings UI, then picks the source
6925
+ * device + trigger in the per-device settings.
6910
6926
  *
6911
6927
  * The DeviceEventPropagator re-emits `onPressed` on the camera parent
6912
6928
  * — subscribers listening at the camera level receive ring events
@@ -6927,7 +6943,10 @@ var doorbellCapability = {
6927
6943
  scope: "device",
6928
6944
  deviceNative: true,
6929
6945
  mode: "singleton",
6930
- deviceTypes: [DeviceType.Button],
6946
+ kind: "wrapper",
6947
+ defaultActive: false,
6948
+ deviceTypes: [DeviceType.Button, DeviceType.Camera],
6949
+ exposesDeviceSettings: true,
6931
6950
  methods: {},
6932
6951
  events: {
6933
6952
  /**
@@ -13565,6 +13584,14 @@ var ConfigEntrySchema = z.object({
13565
13584
  value: z.unknown(),
13566
13585
  description: z.string().optional()
13567
13586
  });
13587
+ var DeviceLinkModeSchema = z.enum(["auto", "manual"]);
13588
+ /** One resolved linked device — the compact projection consumers need. */
13589
+ var LinkedDeviceSchema = z.object({
13590
+ deviceId: z.number(),
13591
+ name: z.string(),
13592
+ location: z.string().nullable(),
13593
+ features: z.array(z.string())
13594
+ });
13568
13595
  var SavedDeviceRowSchema = z.object({
13569
13596
  /** Numeric id reserved at allocateDeviceId time. */
13570
13597
  id: z.number(),
@@ -13672,6 +13699,7 @@ var deviceManagerCapability = {
13672
13699
  name: "device-manager",
13673
13700
  scope: "system",
13674
13701
  mode: "singleton",
13702
+ exposesDeviceSettings: true,
13675
13703
  methods: {
13676
13704
  /** Reserve (or re-resolve) a progressive numeric id for `(addonId, stableId)`.
13677
13705
  * Idempotent: returns the existing id if one is already persisted for the
@@ -13922,6 +13950,19 @@ var deviceManagerCapability = {
13922
13950
  getDevice: method(z.object({ deviceId: z.number() }), DeviceInfoSchema.nullable()),
13923
13951
  /** List children of a parent device (by parent numeric id). */
13924
13952
  getChildren: method(z.object({ parentDeviceId: z.number() }), z.array(DeviceInfoSchema)),
13953
+ /**
13954
+ * Resolve the devices LINKED to a camera — the single policy authority
13955
+ * both consumers call (viewer devices panel + pipeline-analytics event
13956
+ * kinds/ingest). Device-tree children are ALWAYS included; mode 'auto'
13957
+ * (default) adds every device sharing the camera's non-null `location`,
13958
+ * mode 'manual' adds the persisted manual list instead. Excludes the
13959
+ * camera itself; deduped. Configuration is standard per-device settings
13960
+ * (see the module docblock) — there are no bespoke link mutations.
13961
+ */
13962
+ getLinkedDevices: method(z.object({ deviceId: z.number() }), z.object({
13963
+ mode: DeviceLinkModeSchema,
13964
+ devices: z.array(LinkedDeviceSchema)
13965
+ })),
13925
13966
  /** Get stream sources for a camera device. */
13926
13967
  getStreamSources: method(z.object({ deviceId: z.number() }), z.array(StreamSourceEntrySchema$1)),
13927
13968
  /** Get config entries (key + value + description) for a device. */
@@ -15640,6 +15681,61 @@ var EventKindSchema = z.enum([
15640
15681
  "object",
15641
15682
  "audio"
15642
15683
  ]);
15684
+ /**
15685
+ * Spatial filter for `listTracks` — the rect + polygon variants of the shared
15686
+ * MaskShape vocabulary (see `mask-shape.ts`). Coordinates are NORMALIZED 0..1
15687
+ * of the camera frame (top-left origin), matching the drawing-plane editor.
15688
+ */
15689
+ var TrackZoneFilterSchema = z.discriminatedUnion("kind", [MaskRectShapeSchema, MaskPolygonShapeSchema]);
15690
+ /** Closed icon vocabulary so clients render a known glyph per kind. */
15691
+ var EventKindIconSchema = z.enum([
15692
+ "motion",
15693
+ "audio",
15694
+ "person",
15695
+ "vehicle",
15696
+ "animal",
15697
+ "door",
15698
+ "pir",
15699
+ "smoke",
15700
+ "water",
15701
+ "button",
15702
+ "generic"
15703
+ ]);
15704
+ var EventKindCategorySchema = z.enum([
15705
+ "motion",
15706
+ "audio",
15707
+ "detection",
15708
+ "sensor",
15709
+ "custom"
15710
+ ]);
15711
+ var EventKindDescriptorSchema = z.object({
15712
+ /** Stable kind id (e.g. 'motion', 'person', 'contact'). */
15713
+ kind: z.string(),
15714
+ label: z.string(),
15715
+ /** Hex color for timeline/legend rendering. */
15716
+ color: z.string(),
15717
+ icon: EventKindIconSchema,
15718
+ category: EventKindCategorySchema,
15719
+ /** Which cap + device contributes this kind. For built-ins the camera
15720
+ * itself; for sensor kinds the LINKED source device. */
15721
+ source: z.object({
15722
+ capName: z.string(),
15723
+ deviceId: z.number()
15724
+ })
15725
+ });
15726
+ var SensorEventSchema = z.object({
15727
+ id: z.string(),
15728
+ /** The CAMERA the event is attributed to (a sensor linked to N cameras
15729
+ * yields N rows, one per camera). */
15730
+ deviceId: z.number(),
15731
+ /** The linked sensor device whose state changed. */
15732
+ sourceDeviceId: z.number(),
15733
+ /** Event kind id — matches an `EventKindDescriptor.kind`. */
15734
+ kind: z.string(),
15735
+ /** Snapshot of the sensor cap's runtime-state slice at the change. */
15736
+ value: z.record(z.string(), z.unknown()).nullable(),
15737
+ timestamp: z.number()
15738
+ });
15643
15739
  var TrackPositionSchema = z.object({
15644
15740
  x: z.number(),
15645
15741
  y: z.number(),
@@ -15653,6 +15749,30 @@ var TrackSnapshotSchema = z.object({
15653
15749
  mediaKey: z.string()
15654
15750
  });
15655
15751
  /**
15752
+ * Normalized 0..1 trajectory envelope (min/max over every position bbox,
15753
+ * divided by the track's detection-frame dims), computed at persist time.
15754
+ * Absent when the frame dims were unknown when the track was persisted
15755
+ * (legacy rows / dims-less sources) and on active (in-RAM) tracks.
15756
+ */
15757
+ var TrackEnvelopeSchema = z.object({
15758
+ minX: z.number(),
15759
+ minY: z.number(),
15760
+ maxX: z.number(),
15761
+ maxY: z.number()
15762
+ });
15763
+ /**
15764
+ * Row projection for track list queries. `full` (default) returns the
15765
+ * complete Track including the frame-rate `positions[]` history and the
15766
+ * `snapshots[]` references — megabytes across a page of tracks. `slim`
15767
+ * keeps every scalar the list surfaces actually render (ids, class(es),
15768
+ * label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
15769
+ * zonesVisited, bestEventId, envelope) and returns `positions` /
15770
+ * `snapshots` as EMPTY arrays — detail views re-fetch the full row via
15771
+ * `getTrack`. Mirrors the event-store `projection` convention
15772
+ * (`getObjectEvents` et al.).
15773
+ */
15774
+ var TrackProjectionSchema = z.enum(["full", "slim"]);
15775
+ /**
15656
15776
  * One audio-classification label heard on the track's camera while the
15657
15777
  * track was alive, aggregated per label. An "episode" is one persisted
15658
15778
  * audio event (the confident-classification path: score ≥ the device's
@@ -15703,7 +15823,11 @@ var TrackSchema = z.object({
15703
15823
  /** Audio-classification labels heard on the camera during the track's
15704
15824
  * life (score ≥ device `classificationMinScore`), aggregated per label.
15705
15825
  * Absent on legacy rows / tracks with no confident audio. */
15706
- audioLabels: z.array(TrackAudioLabelSchema).readonly().optional()
15826
+ audioLabels: z.array(TrackAudioLabelSchema).readonly().optional(),
15827
+ /** Normalized 0..1 trajectory envelope (see {@link TrackEnvelopeSchema}).
15828
+ * Populated from the persisted envelope columns on historical reads;
15829
+ * absent on legacy rows, dims-less tracks and active (in-RAM) tracks. */
15830
+ envelope: TrackEnvelopeSchema.optional()
15707
15831
  });
15708
15832
  var BaseEventFields = {
15709
15833
  id: z.string(),
@@ -15813,11 +15937,13 @@ var MediaFileSchema = z.object({
15813
15937
  sizeBytes: z.number(),
15814
15938
  timestamp: z.number()
15815
15939
  });
15940
+ var DEFAULT_EVENT_QUERY_LIMIT = 1e3;
15941
+ var MAX_EVENT_QUERY_LIMIT = 5e3;
15816
15942
  var DeviceEventQueryInput = z.object({
15817
15943
  deviceId: z.number(),
15818
15944
  since: z.number().optional(),
15819
15945
  until: z.number().optional(),
15820
- limit: z.number().int().min(1).max(5e3).default(1e3),
15946
+ limit: z.number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT),
15821
15947
  /** `slim` drops heavy JSON fields (regions/bbox/zones) and carries an
15822
15948
  * optional `mediaUrl` (populated by B5). `full` (default) keeps today's
15823
15949
  * exact behaviour. Callers may omit this field — the store defaults to
@@ -15825,6 +15951,27 @@ var DeviceEventQueryInput = z.object({
15825
15951
  projection: z.enum(["full", "slim"]).optional()
15826
15952
  });
15827
15953
  var ObjectEventQueryInput = DeviceEventQueryInput.extend({ classFilter: z.string().optional() });
15954
+ var RecentTracksQueryInput = z.object({
15955
+ /** Devices to merge. An empty array yields `{ tracks: [], nextCursor: null }`. */
15956
+ deviceIds: z.array(z.number()),
15957
+ /** Window lower bound on `lastSeen` (inclusive). */
15958
+ since: z.number().optional(),
15959
+ /** Window upper bound on `lastSeen` (inclusive). */
15960
+ until: z.number().optional(),
15961
+ /** Page size. Default 200, max 1000. */
15962
+ limit: z.number().int().min(1).max(1e3).default(200),
15963
+ /** Opaque continuation cursor from a previous page's `nextCursor`.
15964
+ * Encodes the (lastSeen, trackId) sort position — treat as opaque. */
15965
+ cursor: z.string().optional(),
15966
+ /** See {@link TrackProjectionSchema}. Default `full`. */
15967
+ projection: TrackProjectionSchema.optional()
15968
+ });
15969
+ var RecentTracksPageSchema = z.object({
15970
+ /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
15971
+ tracks: z.array(TrackSchema).readonly(),
15972
+ /** Cursor for the next page, or null when this page is the last. */
15973
+ nextCursor: z.string().nullable()
15974
+ });
15828
15975
  var KeyEventQueryInput = z.object({
15829
15976
  deviceId: z.number(),
15830
15977
  /** Window lower bound (track firstSeen ≥ since). */
@@ -15921,8 +16068,27 @@ var pipelineAnalyticsCapability = {
15921
16068
  deviceId: z.number(),
15922
16069
  since: z.number().optional(),
15923
16070
  until: z.number().optional(),
15924
- limit: z.number().optional()
16071
+ limit: z.number().optional(),
16072
+ /** Spatial filter — only tracks whose trajectory intersects the zone
16073
+ * (normalized 0..1 rect or polygon). SQL-prefiltered on the persisted
16074
+ * envelope columns, then precisely tested per position. Tracks with
16075
+ * an unknown envelope (no frame dims at persist time) always match. */
16076
+ zone: TrackZoneFilterSchema.optional(),
16077
+ /** See {@link TrackProjectionSchema}. Default `full` (backward
16078
+ * compatible — omitting the field keeps today's exact behaviour). */
16079
+ projection: TrackProjectionSchema.optional()
15925
16080
  }), z.array(TrackSchema).readonly()),
16081
+ /**
16082
+ * Batched cluster-wide track listing — ONE call for the events page /
16083
+ * reel first paint instead of a per-camera `listTracks` fan-out. Merges
16084
+ * the persisted completed tracks of every requested device, sorted by
16085
+ * `lastSeen` DESC with a stable (lastSeen, trackId) cursor. Per-device
16086
+ * indexed pages (`idx_tracks_device_lastSeen`) are k-way merged
16087
+ * provider-side; `projection: 'slim'` drops the heavy `positions[]` /
16088
+ * `snapshots[]` JSON (returned as empty arrays). Active in-RAM tracks
16089
+ * are not included (same contract as `listTracks`).
16090
+ */
16091
+ listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
15926
16092
  clearTracks: method(z.object({ deviceId: z.number() }), z.void(), {
15927
16093
  kind: "mutation",
15928
16094
  auth: "admin"
@@ -15931,6 +16097,26 @@ var pipelineAnalyticsCapability = {
15931
16097
  getObjectEvents: method(ObjectEventQueryInput, z.array(ObjectEventSchema).readonly()),
15932
16098
  getAudioEvents: method(DeviceEventQueryInput, z.array(AudioEventSchema).readonly()),
15933
16099
  /**
16100
+ * Every event kind the device can produce: built-ins (motion + audio),
16101
+ * detection classes actually observed for the device (from the track
16102
+ * history), and sensor kinds contributed by LINKED devices (resolved via
16103
+ * `device-manager.getLinkedDevices`, mapped through `EVENT_KIND_BY_CAP`).
16104
+ */
16105
+ listEventKinds: method(z.object({ deviceId: z.number() }), z.array(EventKindDescriptorSchema).readonly()),
16106
+ /**
16107
+ * Sensor-event history for a camera: state changes of LINKED sensor
16108
+ * devices, attributed to the camera at ingest time (one row per linked
16109
+ * camera). Mirrors `getAudioEvents` query semantics; `kinds` narrows to
16110
+ * a kind subset.
16111
+ */
16112
+ getSensorEvents: method(z.object({
16113
+ deviceId: z.number(),
16114
+ since: z.number().optional(),
16115
+ until: z.number().optional(),
16116
+ kinds: z.array(z.string()).optional(),
16117
+ limit: z.number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT)
16118
+ }), z.array(SensorEventSchema).readonly()),
16119
+ /**
15934
16120
  * Importance-ranked highlights for a device+window. Queries completed
15935
16121
  * tracks by (deviceId, firstSeen ∈ [since,until]), scores each (or reuses
15936
16122
  * the persisted score), filters by minImportance/classFilter, orders by
@@ -17952,7 +18138,15 @@ var webrtcSessionCapability = {
17952
18138
  */
17953
18139
  disableIpv6: z.boolean().optional(),
17954
18140
  /** Subscriber attribution. See `createSession` for the contract. */
17955
- consumerAttribution: BrokerConsumerAttributionSchema.optional()
18141
+ consumerAttribution: BrokerConsumerAttributionSchema.optional(),
18142
+ /**
18143
+ * Client-side stream hints (viewport, downlink) — same contract as
18144
+ * `createSession.hints`. Client-offer viewers (the RN viewer's
18145
+ * `WebrtcLiveSession`) negotiate via `handleOffer`, so without this
18146
+ * field their hints were silently stripped by the schema and the
18147
+ * adaptive ladder started blind on the client's display size.
18148
+ */
18149
+ hints: webrtcClientHintsSchema.optional()
17956
18150
  }), z.object({
17957
18151
  sessionId: z.string(),
17958
18152
  sdpAnswer: z.string()
@@ -20537,7 +20731,12 @@ var RecordingStorageUsageSchema = z.object({
20537
20731
  /**
20538
20732
  * Result of locating footage at a wall-clock instant for one device/profile.
20539
20733
  * `segment` carries the covering segment's window; `gap` reports the forward
20540
- * nearest covered edge (`null` past the end of footage / when none exists).
20734
+ * nearest covered edge (`null` past the end of footage / when none exists)
20735
+ * and the backward covered edge `prevEndMs` (exclusive end of the nearest
20736
+ * footage behind the epoch; `null` when none — optional so older providers
20737
+ * that omit it stay valid). `prevEndMs` lets a backward frame-step hop the
20738
+ * small inter-segment cracks (durMs under-covers the span to the next
20739
+ * startMs by ~11-17 ms) instead of no-opping at a segment head.
20541
20740
  */
20542
20741
  var LocateSegmentResultSchema = z.discriminatedUnion("kind", [z.object({
20543
20742
  kind: z.literal("segment"),
@@ -20546,7 +20745,8 @@ var LocateSegmentResultSchema = z.discriminatedUnion("kind", [z.object({
20546
20745
  bytes: z.number()
20547
20746
  }), z.object({
20548
20747
  kind: z.literal("gap"),
20549
- nearestEdgeMs: z.number().nullable()
20748
+ nearestEdgeMs: z.number().nullable(),
20749
+ prevEndMs: z.number().nullable().optional()
20550
20750
  })]);
20551
20751
  /** Raw bytes of one finalized footage segment (read off disk on the recording node). */
20552
20752
  var ReadSegmentBytesResultSchema = z.object({ data: z.instanceof(Uint8Array) });
@@ -22709,6 +22909,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
22709
22909
  addonId: null,
22710
22910
  access: "view"
22711
22911
  },
22912
+ "deviceManager.getLinkedDevices": {
22913
+ capName: "device-manager",
22914
+ capScope: "system",
22915
+ addonId: null,
22916
+ access: "view"
22917
+ },
22712
22918
  "deviceManager.getRoleDisplayDefaults": {
22713
22919
  capName: "device-manager",
22714
22920
  capScope: "system",
@@ -24263,6 +24469,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
24263
24469
  addonId: null,
24264
24470
  access: "view"
24265
24471
  },
24472
+ "pipelineAnalytics.getSensorEvents": {
24473
+ capName: "pipeline-analytics",
24474
+ capScope: "device",
24475
+ addonId: null,
24476
+ access: "view"
24477
+ },
24266
24478
  "pipelineAnalytics.getTrack": {
24267
24479
  capName: "pipeline-analytics",
24268
24480
  capScope: "device",
@@ -24275,6 +24487,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
24275
24487
  addonId: null,
24276
24488
  access: "view"
24277
24489
  },
24490
+ "pipelineAnalytics.listEventKinds": {
24491
+ capName: "pipeline-analytics",
24492
+ capScope: "device",
24493
+ addonId: null,
24494
+ access: "view"
24495
+ },
24496
+ "pipelineAnalytics.listRecentTracks": {
24497
+ capName: "pipeline-analytics",
24498
+ capScope: "device",
24499
+ addonId: null,
24500
+ access: "view"
24501
+ },
24278
24502
  "pipelineAnalytics.listTracks": {
24279
24503
  capName: "pipeline-analytics",
24280
24504
  capScope: "device",
@@ -26318,4 +26542,4 @@ function scoreRuntimes(hw) {
26318
26542
  };
26319
26543
  }
26320
26544
  //#endregion
26321
- export { toExpressionValue as $, isCollectionArrayMethod as A, normalizeUnit as B, enumerateItemArrayFields as C, parseJsonObject as Ct, filesystemBrowseCapability as D, scopeKey as Dt, extractNestedAddonId as E, resolveCapMount as Et, localNetworkCapability as F, readNodePin as G, parseStreamParamsFormPatch as H, logDestinationCapability as I, settingsStoreCapability as J, scoreRuntimes as K, looseSchema as L, isVoidInput as M, kebabToCamel as N, getByPath as O, sleep as Ot, lifecycleJobSchema as P, streamQualityLabel as Q, metricsProviderCapability as R, deviceStatusCapability as S, isDeviceConfigCap as St, evaluateLinkExpression as T, readinessKey as Tt, platformProbeCapability as U, objectInputDeclaresAddonId as V, procedureAuthKey as W, storageCapability as X, snapshotCapability as Y, storageProviderCapability as Z, authProviderCapability as _, createEvent as _t, DeviceStatusSchema as a, DEVICE_SETTINGS_CONTRIBUTION_METHODS as at, deviceManagerCapability as b, expandCapMethods as bt, STREAM_PROFILE_META as c, DeviceRole as ct, UserRecordSchema as d, ReadinessRegistry as dt, userManagementCapability as et, addonPagesCapability as f, ReadinessTimeoutError as ft, applyTransform as g, asString as gt, alertsCapability as h, asNumber as ht, CAP_NAMES_WITH_STATUS as i, DATAPLANE_SECRET_HEADER as it, isObjectInput as j, isArrayOutputSchema as k, ScopedTokenSchema as l, DeviceType as lt, addonWidgetsCapability as m, asJsonObject as mt, AlertSchema as n, errMsg as nt, METHOD_ACCESS_MAP as o, DEVICE_STATUS_METHOD as ot, addonSettingsCapability as p, WELL_KNOWN_TAB_MAP as pt, setByPath as q, ApiKeyRecordSchema as r, BaseAddon as rt, RUNTIME_DEFAULTS as s, DeviceFeature as st, ALL_CAPABILITY_DEFINITIONS as t, validateExpressionSource as tt, StorageLocationTypeSchema as u, EventCategory as ut, backupCapability as v, emitDownForOwnedCaps as vt, enumerateSchemaFields as w, parseJsonUnknown as wt, deviceStateCapability as x, hydrateSchema as xt, buildStreamParamsConfigSchema as y, emitReadiness as yt, nodePin as z };
26545
+ export { streamQualityLabel as $, isArrayOutputSchema as A, nodePin as B, doorbellCapability as C, parseJsonObject as Ct, extractNestedAddonId as D, scopeKey as Dt, evaluateLinkExpression as E, resolveCapMount as Et, lifecycleJobSchema as F, procedureAuthKey as G, objectInputDeclaresAddonId as H, localNetworkCapability as I, setByPath as J, readNodePin as K, logDestinationCapability as L, isObjectInput as M, isVoidInput as N, filesystemBrowseCapability as O, sleep as Ot, kebabToCamel as P, storageProviderCapability as Q, looseSchema as R, deviceStatusCapability as S, isDeviceConfigCap as St, enumerateSchemaFields as T, readinessKey as Tt, parseStreamParamsFormPatch as U, normalizeUnit as V, platformProbeCapability as W, snapshotCapability as X, settingsStoreCapability as Y, storageCapability as Z, authProviderCapability as _, createEvent as _t, DeviceStatusSchema as a, DATAPLANE_SECRET_HEADER as at, deviceManagerCapability as b, expandCapMethods as bt, STREAM_PROFILE_META as c, DeviceFeature as ct, UserRecordSchema as d, ReadinessRegistry as dt, toExpressionValue as et, addonPagesCapability as f, ReadinessTimeoutError as ft, applyTransform as g, asString as gt, alertsCapability as h, asNumber as ht, CAP_NAMES_WITH_STATUS as i, BaseAddon as it, isCollectionArrayMethod as j, getByPath as k, EventCategory as kt, ScopedTokenSchema as l, DeviceRole as lt, addonWidgetsCapability as m, asJsonObject as mt, AlertSchema as n, validateExpressionSource as nt, METHOD_ACCESS_MAP as o, DEVICE_SETTINGS_CONTRIBUTION_METHODS as ot, addonSettingsCapability as p, WELL_KNOWN_TAB_MAP as pt, scoreRuntimes as q, ApiKeyRecordSchema as r, errMsg as rt, RUNTIME_DEFAULTS as s, DEVICE_STATUS_METHOD as st, ALL_CAPABILITY_DEFINITIONS as t, userManagementCapability as tt, StorageLocationTypeSchema as u, DeviceType as ut, backupCapability as v, emitDownForOwnedCaps as vt, enumerateItemArrayFields as w, parseJsonUnknown as wt, deviceStateCapability as x, hydrateSchema as xt, buildStreamParamsConfigSchema as y, emitReadiness as yt, metricsProviderCapability as z };