@camstack/addon-provider-dreame 0.2.99 → 0.2.101

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 (3) hide show
  1. package/dist/addon.js +131 -50
  2. package/dist/addon.mjs +131 -50
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -52672,7 +52672,7 @@ var DreameCameraStream = class extends TypedEmitter {
52672
52672
  }
52673
52673
  };
52674
52674
  //#endregion
52675
- //#region ../types/dist/event-category-DAXzJeTX.mjs
52675
+ //#region ../types/dist/event-category-ZyX6jcse.mjs
52676
52676
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
52677
52677
  EventCategory["SystemBoot"] = "system.boot";
52678
52678
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -53233,7 +53233,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
53233
53233
  * a package zone — a newly-appeared stationary object of a package class
53234
53234
  * that cleared the class / zone / dwell / size gates. Payload:
53235
53235
  * `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
53236
- * entryId, className, zoneIds, keyFrameMediaKey?, bbox, timestamp }`.
53236
+ * entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
53237
53237
  * Telemetry (D8): the durable record is the `package-events` store row;
53238
53238
  * this bus topic drives notifier rules + live UI. See
53239
53239
  * docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
@@ -58019,7 +58019,7 @@ var ZodIssueCode = {
58019
58019
  var ZodFirstPartyTypeKind;
58020
58020
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
58021
58021
  //#endregion
58022
- //#region ../types/dist/sleep-BnujYGPe.mjs
58022
+ //#region ../types/dist/sleep-CnLyvg3w.mjs
58023
58023
  /**
58024
58024
  * The audio chunk plane's byte format, and the ONE expansion from a coded
58025
58025
  * window to float samples (D455).
@@ -59986,13 +59986,30 @@ new Set([
59986
59986
  "scene",
59987
59987
  "motion",
59988
59988
  "object",
59989
- "audio"
59989
+ "audio",
59990
+ "mosaic"
59990
59991
  ]);
59991
- new Set([
59992
+ /**
59993
+ * The owner types that are event tables, in the order the event-media resolver
59994
+ * should consider them. Exported so a consumer asking "is this key an event?"
59995
+ * does not re-spell the list and drift from it.
59996
+ */
59997
+ var EVENT_OWNER_TYPES = [
59992
59998
  "motion",
59993
59999
  "object",
59994
60000
  "audio"
59995
- ]);
60001
+ ];
60002
+ /**
60003
+ * The same list as a Zod enum, for the cap inputs that must NAME the table
60004
+ * (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
60005
+ * `(table, id)`).
60006
+ *
60007
+ * Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
60008
+ * table would otherwise be accepted by the codec and refused at the door, with
60009
+ * nothing failing until a caller asked.
60010
+ */
60011
+ var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
60012
+ new Set(EVENT_OWNER_TYPES);
59996
60013
  var EncodeProfileSchema = object({
59997
60014
  video: object({
59998
60015
  codec: _enum([
@@ -65191,6 +65208,16 @@ method(object({
65191
65208
  filter: QueryFilterSchema.optional(),
65192
65209
  columns: array(string()).readonly().optional()
65193
65210
  }), array(SettingsRecordSchema).readonly()), method(object({
65211
+ namespace: string().optional(),
65212
+ collection: string(),
65213
+ /** Declared columns identifying the slot; must be covered by a UNIQUE
65214
+ * index on the collection. Never empty. */
65215
+ conflict: array(string()).readonly(),
65216
+ record: BulkRecordSchema
65217
+ }), object({
65218
+ /** The id the row HAS: assigned by SQLite on an insert, or the existing
65219
+ * row's own id on an update. */
65220
+ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
65194
65221
  namespace: string().optional(),
65195
65222
  collection: string(),
65196
65223
  record: object({
@@ -65325,6 +65352,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
65325
65352
  id: union([string(), number()]) }), {
65326
65353
  kind: "mutation",
65327
65354
  auth: "admin"
65355
+ }), method(object({
65356
+ namespace: string().optional(),
65357
+ collection: string(),
65358
+ conflict: array(string()).readonly(),
65359
+ record: BulkRecordSchema
65360
+ }), object({ id: union([string(), number()]) }), {
65361
+ kind: "mutation",
65362
+ auth: "admin"
65328
65363
  }), method(object({
65329
65364
  namespace: string().optional(),
65330
65365
  collection: string(),
@@ -71824,8 +71859,8 @@ var TrackPositionSchema = object({
71824
71859
  var TrackSnapshotSchema = object({
71825
71860
  timestamp: number(),
71826
71861
  position: TrackPositionSchema,
71827
- /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
71828
- mediaKey: string()
71862
+ /** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
71863
+ mediaId: number().int()
71829
71864
  });
71830
71865
  /**
71831
71866
  * Normalized 0..1 trajectory envelope (min/max over every position bbox,
@@ -72429,14 +72464,14 @@ var ObjectEventSchema = object({
72429
72464
  * pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
72430
72465
  frameWidth: number().optional(),
72431
72466
  frameHeight: number().optional(),
72432
- /** MediaStore key for the crop attached to this event (if any). */
72433
- mediaKey: string().optional(),
72434
- /** Design B: MediaStore key of the track's native-resolution key frame (the
72467
+ /** Media row id of the crop attached to this event (if any) — D482. */
72468
+ mediaId: number().int().optional(),
72469
+ /** Design B: media row id of the track's native-resolution key frame (the
72435
72470
  * best-detection full frame). Resolve via the event-media data-plane
72436
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`) for a detail view that
72471
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
72437
72472
  * draws `bbox` over the native frame. Absent on legacy rows / non-decoded
72438
- * sources — consumers fall back to `mediaKey` (the tight crop). */
72439
- keyFrameMediaKey: string().optional(),
72473
+ * sources — consumers fall back to `mediaId` (the tight crop). */
72474
+ keyFrameMediaId: number().int().optional(),
72440
72475
  /** Populated by B5 (recording playback URL for this event). */
72441
72476
  mediaUrl: string().optional(),
72442
72477
  /** The parent track's key-event importance [0,1], propagated to every object
@@ -72486,7 +72521,7 @@ var MediaFileKindEnum = _enum([
72486
72521
  * hub-main's heap on the way past — for an `<img>` that would have cached it.
72487
72522
  *
72488
72523
  * `url` points at the `event-media` data plane
72489
- * (`/addon/<addonId>/event-media/<storedKey>`), which serves the same blob
72524
+ * (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
72490
72525
  * with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
72491
72526
  * render a `?variant=thumb`, and streams. The hub gate in front of it requires
72492
72527
  * a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
@@ -72494,10 +72529,13 @@ var MediaFileKindEnum = _enum([
72494
72529
  * `data-plane-access.ts` for the rule and the one gap it does not close
72495
72530
  * (per-device scoping).
72496
72531
  *
72497
- * The URL is built from the row's **stored** key, which is not always its
72498
- * published `kind`: a track's face/plate crop is stored as `crop` under
72532
+ * The URL is built from the row's own id, which since D482 says nothing about
72533
+ * the row's owner or kind — and that is the point. The published `kind` is not
72534
+ * the stored one (a track's face/plate crop is stored as `crop` under
72499
72535
  * `('face'|'plate', '<prefix>-<trackId>')` and published as
72500
- * `faceCrop`/`plateCrop`. `MediaStore.getByKey` knows only the stored key.
72536
+ * `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
72537
+ * taken from `row.key` verbatim or it 404'd exactly those two rows. An id
72538
+ * cannot be mis-reconstructed, because there is nothing in it to reconstruct.
72501
72539
  *
72502
72540
  * ## `base64` is TRANSITIONAL and is going away
72503
72541
  *
@@ -72510,7 +72548,19 @@ var MediaFileKindEnum = _enum([
72510
72548
  * `analytics-query-facade.ts`; nothing else reads it.
72511
72549
  */
72512
72550
  var MediaFileSchema = object({
72513
- key: string(),
72551
+ /**
72552
+ * The media row's OWN id — the rowid SQLite assigned it (D482).
72553
+ *
72554
+ * It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
72555
+ * [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
72556
+ * per-table rowid aliases, so `object:101314` and `motion:101314` are two
72557
+ * different rows that spell the same number, and a track whose
72558
+ * `bestEventId` was an object event was served a motion event's snapshot —
72559
+ * a night-time thumbnail on an afternoon track, with no error anywhere. A
72560
+ * surrogate id cannot name the wrong row's owner, because it names no owner
72561
+ * at all.
72562
+ */
72563
+ mediaId: number().int(),
72514
72564
  kind: MediaFileKindEnum,
72515
72565
  sizeBytes: number(),
72516
72566
  timestamp: number()
@@ -72618,7 +72668,7 @@ var RetrainTrackSchema = object({
72618
72668
  });
72619
72669
  /** A frame the picker may offer — an index row, no blob was read to produce it. */
72620
72670
  var RetrainFrameCandidateSchema = object({
72621
- mediaKey: string(),
72671
+ mediaId: number().int(),
72622
72672
  kind: MediaFileKindEnum,
72623
72673
  timestamp: number(),
72624
72674
  sizeBytes: number().int(),
@@ -72632,7 +72682,7 @@ var RetrainFrameSchema = object({
72632
72682
  deviceId: number(),
72633
72683
  trackId: string(),
72634
72684
  /** Provenance only. It may already point at nothing — that is expected. */
72635
- sourceMediaKey: string(),
72685
+ sourceMediaId: number().int(),
72636
72686
  sourceKind: MediaFileKindEnum,
72637
72687
  sizeBytes: number().int(),
72638
72688
  width: number().int(),
@@ -72648,7 +72698,7 @@ var RetrainCopyRefusalSchema = _enum([
72648
72698
  var RetrainFrameSelectionSchema = object({
72649
72699
  copied: array(RetrainFrameSchema).readonly(),
72650
72700
  refused: array(object({
72651
- sourceMediaKey: string(),
72701
+ sourceMediaId: number().int(),
72652
72702
  reason: RetrainCopyRefusalSchema
72653
72703
  })).readonly()
72654
72704
  });
@@ -72656,7 +72706,7 @@ var RetrainFrameListSchema = object({
72656
72706
  candidates: array(RetrainFrameCandidateSchema).readonly(),
72657
72707
  copies: array(RetrainFrameSchema).readonly(),
72658
72708
  /** What the page pre-selects — the native key frame when one survives. */
72659
- autoPickMediaKey: string().optional()
72709
+ autoPickMediaId: number().int().optional()
72660
72710
  });
72661
72711
  /** What the operator asked the assist to look for. */
72662
72712
  var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
@@ -72751,9 +72801,11 @@ var RecentTracksQueryInput = object({
72751
72801
  });
72752
72802
  /**
72753
72803
  * A Summary (D359): the per-camera session envelope that references tracks.
72754
- * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
72755
- * served by the event-media plane by key), null until the first frame with a
72756
- * member visible has been materialised.
72804
+ * `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
72805
+ * 'summary'`, served by the event-media plane at `/m/<id>`), null until the
72806
+ * first frame with a member visible has been materialised (D482 — it was the
72807
+ * row's composite key, which embedded the owner and could name another table's
72808
+ * row once event ids became per-table rowids).
72757
72809
  */
72758
72810
  var SummarySchema = object({
72759
72811
  id: string(),
@@ -72762,7 +72814,7 @@ var SummarySchema = object({
72762
72814
  lastActiveAt: number(),
72763
72815
  sealedAt: number().nullable(),
72764
72816
  memberCount: number().int().nonnegative(),
72765
- groupShotKey: string().nullable()
72817
+ groupShotMediaId: number().int().nullable()
72766
72818
  });
72767
72819
  var SummariesQueryInput = object({
72768
72820
  deviceIds: array(number()).min(1),
@@ -73316,7 +73368,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
73316
73368
  }), method(object({
73317
73369
  deviceId: number(),
73318
73370
  trackId: string(),
73319
- mediaKeys: array(string()).min(1)
73371
+ mediaIds: array(number().int()).min(1)
73320
73372
  }), RetrainFrameSelectionSchema, {
73321
73373
  kind: "mutation",
73322
73374
  auth: "admin"
@@ -73384,7 +73436,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
73384
73436
  kind: "query",
73385
73437
  auth: "admin"
73386
73438
  }), method(object({
73387
- eventId: string(),
73439
+ /** Which of the three event tables owns the row. */
73440
+ ownerType: EventOwnerTypeSchema,
73441
+ /** The event's rowid in that table (D474: an event id is a number). */
73442
+ eventId: number().int(),
73388
73443
  kind: MediaFileKindEnum.optional(),
73389
73444
  deviceId: number()
73390
73445
  }), array(MediaFileSchema).readonly()), method(object({
@@ -73395,7 +73450,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
73395
73450
  trackId: string(),
73396
73451
  deviceId: number()
73397
73452
  }), array(MediaFileInfoSchema).readonly()), method(object({
73398
- eventId: string(),
73453
+ ownerType: EventOwnerTypeSchema,
73454
+ eventId: number().int(),
73399
73455
  deviceId: number()
73400
73456
  }), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
73401
73457
  kind: "mutation",
@@ -78613,8 +78669,8 @@ var IdentitySchema = object({
78613
78669
  id: string(),
78614
78670
  name: string(),
78615
78671
  sampleCount: number().int().nonnegative(),
78616
- coverMediaKey: string().optional(),
78617
- /** Inline base64 of the cover sample's crop, resolved from `coverMediaKey`.
78672
+ coverMediaId: number().int().optional(),
78673
+ /** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
78618
78674
  * Lets the UI render the person's face avatar instead of a placeholder icon. */
78619
78675
  coverBase64: string().optional()
78620
78676
  });
@@ -78640,8 +78696,8 @@ var IdentitySampleAuditRowSchema = object({
78640
78696
  enrolledAt: number().int(),
78641
78697
  deviceId: number().int().optional(),
78642
78698
  source: _enum(["detected", "photo"]),
78643
- /** The enrolled crop's media key, so the panel can show the evidence. */
78644
- mediaKey: string().optional(),
78699
+ /** The enrolled crop's media row id, so the panel can show the evidence. */
78700
+ mediaId: number().int().optional(),
78645
78701
  /**
78646
78702
  * False = the sample is stamped with a DIFFERENT face model, and a cosine
78647
78703
  * across feature spaces is a well-formed float with no meaning. Every number
@@ -78710,15 +78766,15 @@ var FaceInfoSchema = object({
78710
78766
  */
78711
78767
  cropUrl: string().optional(),
78712
78768
  /** Design B: the face bbox (pixel space) on the key frame — lets a detail
78713
- * view draw the box over the native `keyFrameMediaKey` frame. Absent on
78769
+ * view draw the box over the native `keyFrameMediaId` frame. Absent on
78714
78770
  * legacy rows written before design B. */
78715
78771
  faceBbox: BoundingBoxSchema.optional(),
78716
78772
  /** Design B: MediaStore key of the track's native-resolution key frame.
78717
78773
  * Fetch the native JPEG via the event-media data-plane
78718
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`). Absent when the
78774
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
78719
78775
  * track produced no key frame (e.g. native/onboard source) — the UI falls
78720
78776
  * back to the inline `base64` face crop. */
78721
- keyFrameMediaKey: string().optional(),
78777
+ keyFrameMediaId: number().int().optional(),
78722
78778
  /** Winning identity-match cosine (0..1) for this face's track, when an
78723
78779
  * identity was auto-confirmed. Lets the UI surface WHY a face was assigned
78724
78780
  * (confidence badge / low-confidence audit). Absent on legacy rows and on
@@ -78787,11 +78843,14 @@ var FaceClusterSchema = object({
78787
78843
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
78788
78844
  * dialog already rendering its key FRAME from the `event-media` plane.
78789
78845
  *
78790
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
78791
- * media key directly, so this needed no new plane and no new access decision.
78846
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
78847
+ * resolves a media row by its own id, so this needed no new plane and no new
78848
+ * access decision.
78792
78849
  */
78793
78850
  var MediaFileLiteSchema$1 = object({
78794
- key: string(),
78851
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
78852
+ * (D482). It was the row's composite key, which embedded the owner. */
78853
+ mediaId: number().int(),
78795
78854
  kind: string(),
78796
78855
  url: string(),
78797
78856
  sizeBytes: number(),
@@ -78808,7 +78867,7 @@ method(object({
78808
78867
  * covers inline, ~10 KB of base64 per row, on a query this UI mounts
78809
78868
  * four times and the viewer holds at `staleTime: 30_000`.
78810
78869
  *
78811
- * Nothing loses its avatar: `coverMediaKey` is already on every row and
78870
+ * Nothing loses its avatar: `coverMediaId` is already on every row and
78812
78871
  * the `event-media` plane serves that key `immutable` with an ETag.
78813
78872
  *
78814
78873
  * **This is an INPUT field, so it does not reach the addon until the
@@ -82319,8 +82378,8 @@ var VehicleSchema = object({
82319
82378
  id: string(),
82320
82379
  name: string(),
82321
82380
  sampleCount: number().int().nonnegative(),
82322
- coverMediaKey: string().optional(),
82323
- /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
82381
+ coverMediaId: number().int().optional(),
82382
+ /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
82324
82383
  coverBase64: string().optional()
82325
82384
  });
82326
82385
  var VehicleSampleInfoSchema = object({
@@ -82353,7 +82412,7 @@ var PlateInfoSchema = object({
82353
82412
  /** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
82354
82413
  plateBbox: BoundingBoxSchema.optional(),
82355
82414
  /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
82356
- keyFrameMediaKey: string().optional(),
82415
+ keyFrameMediaId: number().int().optional(),
82357
82416
  base64: string().optional(),
82358
82417
  /**
82359
82418
  * Same crop as a data-plane URL, always present when the plate has a stored
@@ -82374,11 +82433,14 @@ var PlateInfoSchema = object({
82374
82433
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
82375
82434
  * dialog already rendering its key FRAME from the `event-media` plane.
82376
82435
  *
82377
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
82378
- * media key directly, so this needed no new plane and no new access decision.
82436
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
82437
+ * resolves a media row by its own id, so this needed no new plane and no new
82438
+ * access decision.
82379
82439
  */
82380
82440
  var MediaFileLiteSchema = object({
82381
- key: string(),
82441
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
82442
+ * (D482). It was the row's composite key, which embedded the owner. */
82443
+ mediaId: number().int(),
82382
82444
  kind: string(),
82383
82445
  url: string(),
82384
82446
  sizeBytes: number(),
@@ -82437,7 +82499,7 @@ method(object({
82437
82499
  }), method(object({
82438
82500
  /** Inline {@link VehicleSchema.coverBase64} on every row. Default
82439
82501
  * `false` — the vehicle twin of `faceGallery.listIdentities`'s
82440
- * option; `coverMediaKey` + the `event-media` plane carry the picture.
82502
+ * option; `coverMediaId` + the `event-media` plane carry the picture.
82441
82503
  * INPUT field: stripped by the hub router until the train ships, which
82442
82504
  * resolves to `false` and is exactly the intended default. */
82443
82505
  includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
@@ -84006,7 +84068,14 @@ var SceneReferenceSchema = object({
84006
84068
  modelId: string(),
84007
84069
  condition: SceneConditionSchema,
84008
84070
  capturedAt: number(),
84009
- thumbnailMediaId: string().optional(),
84071
+ /**
84072
+ * The reference thumbnail's media ROW id (D482).
84073
+ *
84074
+ * The name already said `mediaId` while the value was the row's composite
84075
+ * key — a leftover that read as done and was not. It is the row's own id
84076
+ * now, addressed at `/addon/<addonId>/event-media/m/<id>`.
84077
+ */
84078
+ thumbnailMediaId: number().int().optional(),
84010
84079
  /** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
84011
84080
  * anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
84012
84081
  * normalized rect frame a different piece of world, and the scene would
@@ -85990,7 +86059,7 @@ var StationaryObjectSchema = object({
85990
86059
  /** Enrichment label carried from the source track (identity / plate). */
85991
86060
  label: string().optional(),
85992
86061
  /** Native-resolution key-frame media key for the parked object's best image. */
85993
- keyFrameMediaKey: string().optional()
86062
+ keyFrameMediaId: number().int().optional()
85994
86063
  });
85995
86064
  var CameraOccupancySnapshotSchema = object({
85996
86065
  /** Frame timestamp of the inference result that produced this snapshot. */
@@ -88728,6 +88797,12 @@ Object.freeze({
88728
88797
  addonId: null,
88729
88798
  access: "create"
88730
88799
  },
88800
+ "dataStoreProvider.upsert": {
88801
+ capName: "data-store-provider",
88802
+ capScope: "system",
88803
+ addonId: null,
88804
+ access: "create"
88805
+ },
88731
88806
  "dayNight.getOptions": {
88732
88807
  capName: "day-night",
88733
88808
  capScope: "device",
@@ -92592,6 +92667,12 @@ Object.freeze({
92592
92667
  addonId: null,
92593
92668
  access: "create"
92594
92669
  },
92670
+ "settingsStore.upsert": {
92671
+ capName: "settings-store",
92672
+ capScope: "system",
92673
+ addonId: null,
92674
+ access: "create"
92675
+ },
92595
92676
  "smtpProvider.getStatus": {
92596
92677
  capName: "smtp-provider",
92597
92678
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -52669,7 +52669,7 @@ var DreameCameraStream = class extends TypedEmitter {
52669
52669
  }
52670
52670
  };
52671
52671
  //#endregion
52672
- //#region ../types/dist/event-category-DAXzJeTX.mjs
52672
+ //#region ../types/dist/event-category-ZyX6jcse.mjs
52673
52673
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
52674
52674
  EventCategory["SystemBoot"] = "system.boot";
52675
52675
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -53230,7 +53230,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
53230
53230
  * a package zone — a newly-appeared stationary object of a package class
53231
53231
  * that cleared the class / zone / dwell / size gates. Payload:
53232
53232
  * `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
53233
- * entryId, className, zoneIds, keyFrameMediaKey?, bbox, timestamp }`.
53233
+ * entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
53234
53234
  * Telemetry (D8): the durable record is the `package-events` store row;
53235
53235
  * this bus topic drives notifier rules + live UI. See
53236
53236
  * docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
@@ -58016,7 +58016,7 @@ var ZodIssueCode = {
58016
58016
  var ZodFirstPartyTypeKind;
58017
58017
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
58018
58018
  //#endregion
58019
- //#region ../types/dist/sleep-BnujYGPe.mjs
58019
+ //#region ../types/dist/sleep-CnLyvg3w.mjs
58020
58020
  /**
58021
58021
  * The audio chunk plane's byte format, and the ONE expansion from a coded
58022
58022
  * window to float samples (D455).
@@ -59983,13 +59983,30 @@ new Set([
59983
59983
  "scene",
59984
59984
  "motion",
59985
59985
  "object",
59986
- "audio"
59986
+ "audio",
59987
+ "mosaic"
59987
59988
  ]);
59988
- new Set([
59989
+ /**
59990
+ * The owner types that are event tables, in the order the event-media resolver
59991
+ * should consider them. Exported so a consumer asking "is this key an event?"
59992
+ * does not re-spell the list and drift from it.
59993
+ */
59994
+ var EVENT_OWNER_TYPES = [
59989
59995
  "motion",
59990
59996
  "object",
59991
59997
  "audio"
59992
- ]);
59998
+ ];
59999
+ /**
60000
+ * The same list as a Zod enum, for the cap inputs that must NAME the table
60001
+ * (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
60002
+ * `(table, id)`).
60003
+ *
60004
+ * Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
60005
+ * table would otherwise be accepted by the codec and refused at the door, with
60006
+ * nothing failing until a caller asked.
60007
+ */
60008
+ var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
60009
+ new Set(EVENT_OWNER_TYPES);
59993
60010
  var EncodeProfileSchema = object({
59994
60011
  video: object({
59995
60012
  codec: _enum([
@@ -65188,6 +65205,16 @@ method(object({
65188
65205
  filter: QueryFilterSchema.optional(),
65189
65206
  columns: array(string()).readonly().optional()
65190
65207
  }), array(SettingsRecordSchema).readonly()), method(object({
65208
+ namespace: string().optional(),
65209
+ collection: string(),
65210
+ /** Declared columns identifying the slot; must be covered by a UNIQUE
65211
+ * index on the collection. Never empty. */
65212
+ conflict: array(string()).readonly(),
65213
+ record: BulkRecordSchema
65214
+ }), object({
65215
+ /** The id the row HAS: assigned by SQLite on an insert, or the existing
65216
+ * row's own id on an update. */
65217
+ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
65191
65218
  namespace: string().optional(),
65192
65219
  collection: string(),
65193
65220
  record: object({
@@ -65322,6 +65349,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
65322
65349
  id: union([string(), number()]) }), {
65323
65350
  kind: "mutation",
65324
65351
  auth: "admin"
65352
+ }), method(object({
65353
+ namespace: string().optional(),
65354
+ collection: string(),
65355
+ conflict: array(string()).readonly(),
65356
+ record: BulkRecordSchema
65357
+ }), object({ id: union([string(), number()]) }), {
65358
+ kind: "mutation",
65359
+ auth: "admin"
65325
65360
  }), method(object({
65326
65361
  namespace: string().optional(),
65327
65362
  collection: string(),
@@ -71821,8 +71856,8 @@ var TrackPositionSchema = object({
71821
71856
  var TrackSnapshotSchema = object({
71822
71857
  timestamp: number(),
71823
71858
  position: TrackPositionSchema,
71824
- /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
71825
- mediaKey: string()
71859
+ /** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
71860
+ mediaId: number().int()
71826
71861
  });
71827
71862
  /**
71828
71863
  * Normalized 0..1 trajectory envelope (min/max over every position bbox,
@@ -72426,14 +72461,14 @@ var ObjectEventSchema = object({
72426
72461
  * pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
72427
72462
  frameWidth: number().optional(),
72428
72463
  frameHeight: number().optional(),
72429
- /** MediaStore key for the crop attached to this event (if any). */
72430
- mediaKey: string().optional(),
72431
- /** Design B: MediaStore key of the track's native-resolution key frame (the
72464
+ /** Media row id of the crop attached to this event (if any) — D482. */
72465
+ mediaId: number().int().optional(),
72466
+ /** Design B: media row id of the track's native-resolution key frame (the
72432
72467
  * best-detection full frame). Resolve via the event-media data-plane
72433
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`) for a detail view that
72468
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
72434
72469
  * draws `bbox` over the native frame. Absent on legacy rows / non-decoded
72435
- * sources — consumers fall back to `mediaKey` (the tight crop). */
72436
- keyFrameMediaKey: string().optional(),
72470
+ * sources — consumers fall back to `mediaId` (the tight crop). */
72471
+ keyFrameMediaId: number().int().optional(),
72437
72472
  /** Populated by B5 (recording playback URL for this event). */
72438
72473
  mediaUrl: string().optional(),
72439
72474
  /** The parent track's key-event importance [0,1], propagated to every object
@@ -72483,7 +72518,7 @@ var MediaFileKindEnum = _enum([
72483
72518
  * hub-main's heap on the way past — for an `<img>` that would have cached it.
72484
72519
  *
72485
72520
  * `url` points at the `event-media` data plane
72486
- * (`/addon/<addonId>/event-media/<storedKey>`), which serves the same blob
72521
+ * (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
72487
72522
  * with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
72488
72523
  * render a `?variant=thumb`, and streams. The hub gate in front of it requires
72489
72524
  * a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
@@ -72491,10 +72526,13 @@ var MediaFileKindEnum = _enum([
72491
72526
  * `data-plane-access.ts` for the rule and the one gap it does not close
72492
72527
  * (per-device scoping).
72493
72528
  *
72494
- * The URL is built from the row's **stored** key, which is not always its
72495
- * published `kind`: a track's face/plate crop is stored as `crop` under
72529
+ * The URL is built from the row's own id, which since D482 says nothing about
72530
+ * the row's owner or kind — and that is the point. The published `kind` is not
72531
+ * the stored one (a track's face/plate crop is stored as `crop` under
72496
72532
  * `('face'|'plate', '<prefix>-<trackId>')` and published as
72497
- * `faceCrop`/`plateCrop`. `MediaStore.getByKey` knows only the stored key.
72533
+ * `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
72534
+ * taken from `row.key` verbatim or it 404'd exactly those two rows. An id
72535
+ * cannot be mis-reconstructed, because there is nothing in it to reconstruct.
72498
72536
  *
72499
72537
  * ## `base64` is TRANSITIONAL and is going away
72500
72538
  *
@@ -72507,7 +72545,19 @@ var MediaFileKindEnum = _enum([
72507
72545
  * `analytics-query-facade.ts`; nothing else reads it.
72508
72546
  */
72509
72547
  var MediaFileSchema = object({
72510
- key: string(),
72548
+ /**
72549
+ * The media row's OWN id — the rowid SQLite assigned it (D482).
72550
+ *
72551
+ * It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
72552
+ * [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
72553
+ * per-table rowid aliases, so `object:101314` and `motion:101314` are two
72554
+ * different rows that spell the same number, and a track whose
72555
+ * `bestEventId` was an object event was served a motion event's snapshot —
72556
+ * a night-time thumbnail on an afternoon track, with no error anywhere. A
72557
+ * surrogate id cannot name the wrong row's owner, because it names no owner
72558
+ * at all.
72559
+ */
72560
+ mediaId: number().int(),
72511
72561
  kind: MediaFileKindEnum,
72512
72562
  sizeBytes: number(),
72513
72563
  timestamp: number()
@@ -72615,7 +72665,7 @@ var RetrainTrackSchema = object({
72615
72665
  });
72616
72666
  /** A frame the picker may offer — an index row, no blob was read to produce it. */
72617
72667
  var RetrainFrameCandidateSchema = object({
72618
- mediaKey: string(),
72668
+ mediaId: number().int(),
72619
72669
  kind: MediaFileKindEnum,
72620
72670
  timestamp: number(),
72621
72671
  sizeBytes: number().int(),
@@ -72629,7 +72679,7 @@ var RetrainFrameSchema = object({
72629
72679
  deviceId: number(),
72630
72680
  trackId: string(),
72631
72681
  /** Provenance only. It may already point at nothing — that is expected. */
72632
- sourceMediaKey: string(),
72682
+ sourceMediaId: number().int(),
72633
72683
  sourceKind: MediaFileKindEnum,
72634
72684
  sizeBytes: number().int(),
72635
72685
  width: number().int(),
@@ -72645,7 +72695,7 @@ var RetrainCopyRefusalSchema = _enum([
72645
72695
  var RetrainFrameSelectionSchema = object({
72646
72696
  copied: array(RetrainFrameSchema).readonly(),
72647
72697
  refused: array(object({
72648
- sourceMediaKey: string(),
72698
+ sourceMediaId: number().int(),
72649
72699
  reason: RetrainCopyRefusalSchema
72650
72700
  })).readonly()
72651
72701
  });
@@ -72653,7 +72703,7 @@ var RetrainFrameListSchema = object({
72653
72703
  candidates: array(RetrainFrameCandidateSchema).readonly(),
72654
72704
  copies: array(RetrainFrameSchema).readonly(),
72655
72705
  /** What the page pre-selects — the native key frame when one survives. */
72656
- autoPickMediaKey: string().optional()
72706
+ autoPickMediaId: number().int().optional()
72657
72707
  });
72658
72708
  /** What the operator asked the assist to look for. */
72659
72709
  var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
@@ -72748,9 +72798,11 @@ var RecentTracksQueryInput = object({
72748
72798
  });
72749
72799
  /**
72750
72800
  * A Summary (D359): the per-camera session envelope that references tracks.
72751
- * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
72752
- * served by the event-media plane by key), null until the first frame with a
72753
- * member visible has been materialised.
72801
+ * `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
72802
+ * 'summary'`, served by the event-media plane at `/m/<id>`), null until the
72803
+ * first frame with a member visible has been materialised (D482 — it was the
72804
+ * row's composite key, which embedded the owner and could name another table's
72805
+ * row once event ids became per-table rowids).
72754
72806
  */
72755
72807
  var SummarySchema = object({
72756
72808
  id: string(),
@@ -72759,7 +72811,7 @@ var SummarySchema = object({
72759
72811
  lastActiveAt: number(),
72760
72812
  sealedAt: number().nullable(),
72761
72813
  memberCount: number().int().nonnegative(),
72762
- groupShotKey: string().nullable()
72814
+ groupShotMediaId: number().int().nullable()
72763
72815
  });
72764
72816
  var SummariesQueryInput = object({
72765
72817
  deviceIds: array(number()).min(1),
@@ -73313,7 +73365,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
73313
73365
  }), method(object({
73314
73366
  deviceId: number(),
73315
73367
  trackId: string(),
73316
- mediaKeys: array(string()).min(1)
73368
+ mediaIds: array(number().int()).min(1)
73317
73369
  }), RetrainFrameSelectionSchema, {
73318
73370
  kind: "mutation",
73319
73371
  auth: "admin"
@@ -73381,7 +73433,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
73381
73433
  kind: "query",
73382
73434
  auth: "admin"
73383
73435
  }), method(object({
73384
- eventId: string(),
73436
+ /** Which of the three event tables owns the row. */
73437
+ ownerType: EventOwnerTypeSchema,
73438
+ /** The event's rowid in that table (D474: an event id is a number). */
73439
+ eventId: number().int(),
73385
73440
  kind: MediaFileKindEnum.optional(),
73386
73441
  deviceId: number()
73387
73442
  }), array(MediaFileSchema).readonly()), method(object({
@@ -73392,7 +73447,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
73392
73447
  trackId: string(),
73393
73448
  deviceId: number()
73394
73449
  }), array(MediaFileInfoSchema).readonly()), method(object({
73395
- eventId: string(),
73450
+ ownerType: EventOwnerTypeSchema,
73451
+ eventId: number().int(),
73396
73452
  deviceId: number()
73397
73453
  }), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
73398
73454
  kind: "mutation",
@@ -78610,8 +78666,8 @@ var IdentitySchema = object({
78610
78666
  id: string(),
78611
78667
  name: string(),
78612
78668
  sampleCount: number().int().nonnegative(),
78613
- coverMediaKey: string().optional(),
78614
- /** Inline base64 of the cover sample's crop, resolved from `coverMediaKey`.
78669
+ coverMediaId: number().int().optional(),
78670
+ /** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
78615
78671
  * Lets the UI render the person's face avatar instead of a placeholder icon. */
78616
78672
  coverBase64: string().optional()
78617
78673
  });
@@ -78637,8 +78693,8 @@ var IdentitySampleAuditRowSchema = object({
78637
78693
  enrolledAt: number().int(),
78638
78694
  deviceId: number().int().optional(),
78639
78695
  source: _enum(["detected", "photo"]),
78640
- /** The enrolled crop's media key, so the panel can show the evidence. */
78641
- mediaKey: string().optional(),
78696
+ /** The enrolled crop's media row id, so the panel can show the evidence. */
78697
+ mediaId: number().int().optional(),
78642
78698
  /**
78643
78699
  * False = the sample is stamped with a DIFFERENT face model, and a cosine
78644
78700
  * across feature spaces is a well-formed float with no meaning. Every number
@@ -78707,15 +78763,15 @@ var FaceInfoSchema = object({
78707
78763
  */
78708
78764
  cropUrl: string().optional(),
78709
78765
  /** Design B: the face bbox (pixel space) on the key frame — lets a detail
78710
- * view draw the box over the native `keyFrameMediaKey` frame. Absent on
78766
+ * view draw the box over the native `keyFrameMediaId` frame. Absent on
78711
78767
  * legacy rows written before design B. */
78712
78768
  faceBbox: BoundingBoxSchema.optional(),
78713
78769
  /** Design B: MediaStore key of the track's native-resolution key frame.
78714
78770
  * Fetch the native JPEG via the event-media data-plane
78715
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`). Absent when the
78771
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
78716
78772
  * track produced no key frame (e.g. native/onboard source) — the UI falls
78717
78773
  * back to the inline `base64` face crop. */
78718
- keyFrameMediaKey: string().optional(),
78774
+ keyFrameMediaId: number().int().optional(),
78719
78775
  /** Winning identity-match cosine (0..1) for this face's track, when an
78720
78776
  * identity was auto-confirmed. Lets the UI surface WHY a face was assigned
78721
78777
  * (confidence badge / low-confidence audit). Absent on legacy rows and on
@@ -78784,11 +78840,14 @@ var FaceClusterSchema = object({
78784
78840
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
78785
78841
  * dialog already rendering its key FRAME from the `event-media` plane.
78786
78842
  *
78787
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
78788
- * media key directly, so this needed no new plane and no new access decision.
78843
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
78844
+ * resolves a media row by its own id, so this needed no new plane and no new
78845
+ * access decision.
78789
78846
  */
78790
78847
  var MediaFileLiteSchema$1 = object({
78791
- key: string(),
78848
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
78849
+ * (D482). It was the row's composite key, which embedded the owner. */
78850
+ mediaId: number().int(),
78792
78851
  kind: string(),
78793
78852
  url: string(),
78794
78853
  sizeBytes: number(),
@@ -78805,7 +78864,7 @@ method(object({
78805
78864
  * covers inline, ~10 KB of base64 per row, on a query this UI mounts
78806
78865
  * four times and the viewer holds at `staleTime: 30_000`.
78807
78866
  *
78808
- * Nothing loses its avatar: `coverMediaKey` is already on every row and
78867
+ * Nothing loses its avatar: `coverMediaId` is already on every row and
78809
78868
  * the `event-media` plane serves that key `immutable` with an ETag.
78810
78869
  *
78811
78870
  * **This is an INPUT field, so it does not reach the addon until the
@@ -82316,8 +82375,8 @@ var VehicleSchema = object({
82316
82375
  id: string(),
82317
82376
  name: string(),
82318
82377
  sampleCount: number().int().nonnegative(),
82319
- coverMediaKey: string().optional(),
82320
- /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
82378
+ coverMediaId: number().int().optional(),
82379
+ /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
82321
82380
  coverBase64: string().optional()
82322
82381
  });
82323
82382
  var VehicleSampleInfoSchema = object({
@@ -82350,7 +82409,7 @@ var PlateInfoSchema = object({
82350
82409
  /** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
82351
82410
  plateBbox: BoundingBoxSchema.optional(),
82352
82411
  /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
82353
- keyFrameMediaKey: string().optional(),
82412
+ keyFrameMediaId: number().int().optional(),
82354
82413
  base64: string().optional(),
82355
82414
  /**
82356
82415
  * Same crop as a data-plane URL, always present when the plate has a stored
@@ -82371,11 +82430,14 @@ var PlateInfoSchema = object({
82371
82430
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
82372
82431
  * dialog already rendering its key FRAME from the `event-media` plane.
82373
82432
  *
82374
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
82375
- * media key directly, so this needed no new plane and no new access decision.
82433
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
82434
+ * resolves a media row by its own id, so this needed no new plane and no new
82435
+ * access decision.
82376
82436
  */
82377
82437
  var MediaFileLiteSchema = object({
82378
- key: string(),
82438
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
82439
+ * (D482). It was the row's composite key, which embedded the owner. */
82440
+ mediaId: number().int(),
82379
82441
  kind: string(),
82380
82442
  url: string(),
82381
82443
  sizeBytes: number(),
@@ -82434,7 +82496,7 @@ method(object({
82434
82496
  }), method(object({
82435
82497
  /** Inline {@link VehicleSchema.coverBase64} on every row. Default
82436
82498
  * `false` — the vehicle twin of `faceGallery.listIdentities`'s
82437
- * option; `coverMediaKey` + the `event-media` plane carry the picture.
82499
+ * option; `coverMediaId` + the `event-media` plane carry the picture.
82438
82500
  * INPUT field: stripped by the hub router until the train ships, which
82439
82501
  * resolves to `false` and is exactly the intended default. */
82440
82502
  includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
@@ -84003,7 +84065,14 @@ var SceneReferenceSchema = object({
84003
84065
  modelId: string(),
84004
84066
  condition: SceneConditionSchema,
84005
84067
  capturedAt: number(),
84006
- thumbnailMediaId: string().optional(),
84068
+ /**
84069
+ * The reference thumbnail's media ROW id (D482).
84070
+ *
84071
+ * The name already said `mediaId` while the value was the row's composite
84072
+ * key — a leftover that read as done and was not. It is the row's own id
84073
+ * now, addressed at `/addon/<addonId>/event-media/m/<id>`.
84074
+ */
84075
+ thumbnailMediaId: number().int().optional(),
84007
84076
  /** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
84008
84077
  * anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
84009
84078
  * normalized rect frame a different piece of world, and the scene would
@@ -85987,7 +86056,7 @@ var StationaryObjectSchema = object({
85987
86056
  /** Enrichment label carried from the source track (identity / plate). */
85988
86057
  label: string().optional(),
85989
86058
  /** Native-resolution key-frame media key for the parked object's best image. */
85990
- keyFrameMediaKey: string().optional()
86059
+ keyFrameMediaId: number().int().optional()
85991
86060
  });
85992
86061
  var CameraOccupancySnapshotSchema = object({
85993
86062
  /** Frame timestamp of the inference result that produced this snapshot. */
@@ -88725,6 +88794,12 @@ Object.freeze({
88725
88794
  addonId: null,
88726
88795
  access: "create"
88727
88796
  },
88797
+ "dataStoreProvider.upsert": {
88798
+ capName: "data-store-provider",
88799
+ capScope: "system",
88800
+ addonId: null,
88801
+ access: "create"
88802
+ },
88728
88803
  "dayNight.getOptions": {
88729
88804
  capName: "day-night",
88730
88805
  capScope: "device",
@@ -92589,6 +92664,12 @@ Object.freeze({
92589
92664
  addonId: null,
92590
92665
  access: "create"
92591
92666
  },
92667
+ "settingsStore.upsert": {
92668
+ capName: "settings-store",
92669
+ capScope: "system",
92670
+ addonId: null,
92671
+ access: "create"
92672
+ },
92592
92673
  "smtpProvider.getStatus": {
92593
92674
  capName: "smtp-provider",
92594
92675
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-dreame",
3
- "version": "0.2.99",
3
+ "version": "0.2.101",
4
4
  "description": "Dreame robot-vacuum / lawn-mower device-provider addon for CamStack — wraps the @apocaliss92/nodedreame Dreamehome cloud client",
5
5
  "keywords": [
6
6
  "camstack",