@camstack/addon-mqtt-broker 1.2.99 → 1.2.100

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.
@@ -44,7 +44,7 @@ let crypto$10 = __toESM(crypto$1, 1);
44
44
  crypto$1 = __toESM(crypto$1);
45
45
  let node_fs = require("node:fs");
46
46
  let node_path = require("node:path");
47
- //#region ../types/dist/event-category-DAXzJeTX.mjs
47
+ //#region ../types/dist/event-category-ZyX6jcse.mjs
48
48
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
49
49
  EventCategory["SystemBoot"] = "system.boot";
50
50
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -605,7 +605,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
605
605
  * a package zone — a newly-appeared stationary object of a package class
606
606
  * that cleared the class / zone / dwell / size gates. Payload:
607
607
  * `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
608
- * entryId, className, zoneIds, keyFrameMediaKey?, bbox, timestamp }`.
608
+ * entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
609
609
  * Telemetry (D8): the durable record is the `package-events` store row;
610
610
  * this bus topic drives notifier rules + live UI. See
611
611
  * docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
@@ -5391,7 +5391,7 @@ var ZodIssueCode = {
5391
5391
  var ZodFirstPartyTypeKind;
5392
5392
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5393
5393
  //#endregion
5394
- //#region ../types/dist/sleep-BnujYGPe.mjs
5394
+ //#region ../types/dist/sleep-CnLyvg3w.mjs
5395
5395
  /**
5396
5396
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5397
5397
  * window to float samples (D455).
@@ -7342,13 +7342,30 @@ new Set([
7342
7342
  "scene",
7343
7343
  "motion",
7344
7344
  "object",
7345
- "audio"
7345
+ "audio",
7346
+ "mosaic"
7346
7347
  ]);
7347
- new Set([
7348
+ /**
7349
+ * The owner types that are event tables, in the order the event-media resolver
7350
+ * should consider them. Exported so a consumer asking "is this key an event?"
7351
+ * does not re-spell the list and drift from it.
7352
+ */
7353
+ var EVENT_OWNER_TYPES = [
7348
7354
  "motion",
7349
7355
  "object",
7350
7356
  "audio"
7351
- ]);
7357
+ ];
7358
+ /**
7359
+ * The same list as a Zod enum, for the cap inputs that must NAME the table
7360
+ * (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
7361
+ * `(table, id)`).
7362
+ *
7363
+ * Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
7364
+ * table would otherwise be accepted by the codec and refused at the door, with
7365
+ * nothing failing until a caller asked.
7366
+ */
7367
+ var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
7368
+ new Set(EVENT_OWNER_TYPES);
7352
7369
  var EncodeProfileSchema = object({
7353
7370
  video: object({
7354
7371
  codec: _enum([
@@ -12494,6 +12511,16 @@ method(object({
12494
12511
  filter: QueryFilterSchema.optional(),
12495
12512
  columns: array(string()).readonly().optional()
12496
12513
  }), array(SettingsRecordSchema).readonly()), method(object({
12514
+ namespace: string().optional(),
12515
+ collection: string(),
12516
+ /** Declared columns identifying the slot; must be covered by a UNIQUE
12517
+ * index on the collection. Never empty. */
12518
+ conflict: array(string()).readonly(),
12519
+ record: BulkRecordSchema
12520
+ }), object({
12521
+ /** The id the row HAS: assigned by SQLite on an insert, or the existing
12522
+ * row's own id on an update. */
12523
+ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
12497
12524
  namespace: string().optional(),
12498
12525
  collection: string(),
12499
12526
  record: object({
@@ -12628,6 +12655,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
12628
12655
  id: union([string(), number()]) }), {
12629
12656
  kind: "mutation",
12630
12657
  auth: "admin"
12658
+ }), method(object({
12659
+ namespace: string().optional(),
12660
+ collection: string(),
12661
+ conflict: array(string()).readonly(),
12662
+ record: BulkRecordSchema
12663
+ }), object({ id: union([string(), number()]) }), {
12664
+ kind: "mutation",
12665
+ auth: "admin"
12631
12666
  }), method(object({
12632
12667
  namespace: string().optional(),
12633
12668
  collection: string(),
@@ -18863,8 +18898,8 @@ var TrackPositionSchema = object({
18863
18898
  var TrackSnapshotSchema = object({
18864
18899
  timestamp: number(),
18865
18900
  position: TrackPositionSchema,
18866
- /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
18867
- mediaKey: string()
18901
+ /** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
18902
+ mediaId: number().int()
18868
18903
  });
18869
18904
  /**
18870
18905
  * Normalized 0..1 trajectory envelope (min/max over every position bbox,
@@ -19468,14 +19503,14 @@ var ObjectEventSchema = object({
19468
19503
  * pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
19469
19504
  frameWidth: number().optional(),
19470
19505
  frameHeight: number().optional(),
19471
- /** MediaStore key for the crop attached to this event (if any). */
19472
- mediaKey: string().optional(),
19473
- /** Design B: MediaStore key of the track's native-resolution key frame (the
19506
+ /** Media row id of the crop attached to this event (if any) — D482. */
19507
+ mediaId: number().int().optional(),
19508
+ /** Design B: media row id of the track's native-resolution key frame (the
19474
19509
  * best-detection full frame). Resolve via the event-media data-plane
19475
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`) for a detail view that
19510
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
19476
19511
  * draws `bbox` over the native frame. Absent on legacy rows / non-decoded
19477
- * sources — consumers fall back to `mediaKey` (the tight crop). */
19478
- keyFrameMediaKey: string().optional(),
19512
+ * sources — consumers fall back to `mediaId` (the tight crop). */
19513
+ keyFrameMediaId: number().int().optional(),
19479
19514
  /** Populated by B5 (recording playback URL for this event). */
19480
19515
  mediaUrl: string().optional(),
19481
19516
  /** The parent track's key-event importance [0,1], propagated to every object
@@ -19525,7 +19560,7 @@ var MediaFileKindEnum = _enum([
19525
19560
  * hub-main's heap on the way past — for an `<img>` that would have cached it.
19526
19561
  *
19527
19562
  * `url` points at the `event-media` data plane
19528
- * (`/addon/<addonId>/event-media/<storedKey>`), which serves the same blob
19563
+ * (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
19529
19564
  * with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
19530
19565
  * render a `?variant=thumb`, and streams. The hub gate in front of it requires
19531
19566
  * a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
@@ -19533,10 +19568,13 @@ var MediaFileKindEnum = _enum([
19533
19568
  * `data-plane-access.ts` for the rule and the one gap it does not close
19534
19569
  * (per-device scoping).
19535
19570
  *
19536
- * The URL is built from the row's **stored** key, which is not always its
19537
- * published `kind`: a track's face/plate crop is stored as `crop` under
19571
+ * The URL is built from the row's own id, which since D482 says nothing about
19572
+ * the row's owner or kind — and that is the point. The published `kind` is not
19573
+ * the stored one (a track's face/plate crop is stored as `crop` under
19538
19574
  * `('face'|'plate', '<prefix>-<trackId>')` and published as
19539
- * `faceCrop`/`plateCrop`. `MediaStore.getByKey` knows only the stored key.
19575
+ * `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
19576
+ * taken from `row.key` verbatim or it 404'd exactly those two rows. An id
19577
+ * cannot be mis-reconstructed, because there is nothing in it to reconstruct.
19540
19578
  *
19541
19579
  * ## `base64` is TRANSITIONAL and is going away
19542
19580
  *
@@ -19549,7 +19587,19 @@ var MediaFileKindEnum = _enum([
19549
19587
  * `analytics-query-facade.ts`; nothing else reads it.
19550
19588
  */
19551
19589
  var MediaFileSchema = object({
19552
- key: string(),
19590
+ /**
19591
+ * The media row's OWN id — the rowid SQLite assigned it (D482).
19592
+ *
19593
+ * It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
19594
+ * [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
19595
+ * per-table rowid aliases, so `object:101314` and `motion:101314` are two
19596
+ * different rows that spell the same number, and a track whose
19597
+ * `bestEventId` was an object event was served a motion event's snapshot —
19598
+ * a night-time thumbnail on an afternoon track, with no error anywhere. A
19599
+ * surrogate id cannot name the wrong row's owner, because it names no owner
19600
+ * at all.
19601
+ */
19602
+ mediaId: number().int(),
19553
19603
  kind: MediaFileKindEnum,
19554
19604
  sizeBytes: number(),
19555
19605
  timestamp: number()
@@ -19657,7 +19707,7 @@ var RetrainTrackSchema = object({
19657
19707
  });
19658
19708
  /** A frame the picker may offer — an index row, no blob was read to produce it. */
19659
19709
  var RetrainFrameCandidateSchema = object({
19660
- mediaKey: string(),
19710
+ mediaId: number().int(),
19661
19711
  kind: MediaFileKindEnum,
19662
19712
  timestamp: number(),
19663
19713
  sizeBytes: number().int(),
@@ -19671,7 +19721,7 @@ var RetrainFrameSchema = object({
19671
19721
  deviceId: number(),
19672
19722
  trackId: string(),
19673
19723
  /** Provenance only. It may already point at nothing — that is expected. */
19674
- sourceMediaKey: string(),
19724
+ sourceMediaId: number().int(),
19675
19725
  sourceKind: MediaFileKindEnum,
19676
19726
  sizeBytes: number().int(),
19677
19727
  width: number().int(),
@@ -19687,7 +19737,7 @@ var RetrainCopyRefusalSchema = _enum([
19687
19737
  var RetrainFrameSelectionSchema = object({
19688
19738
  copied: array(RetrainFrameSchema).readonly(),
19689
19739
  refused: array(object({
19690
- sourceMediaKey: string(),
19740
+ sourceMediaId: number().int(),
19691
19741
  reason: RetrainCopyRefusalSchema
19692
19742
  })).readonly()
19693
19743
  });
@@ -19695,7 +19745,7 @@ var RetrainFrameListSchema = object({
19695
19745
  candidates: array(RetrainFrameCandidateSchema).readonly(),
19696
19746
  copies: array(RetrainFrameSchema).readonly(),
19697
19747
  /** What the page pre-selects — the native key frame when one survives. */
19698
- autoPickMediaKey: string().optional()
19748
+ autoPickMediaId: number().int().optional()
19699
19749
  });
19700
19750
  /** What the operator asked the assist to look for. */
19701
19751
  var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
@@ -19790,9 +19840,11 @@ var RecentTracksQueryInput = object({
19790
19840
  });
19791
19841
  /**
19792
19842
  * A Summary (D359): the per-camera session envelope that references tracks.
19793
- * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
19794
- * served by the event-media plane by key), null until the first frame with a
19795
- * member visible has been materialised.
19843
+ * `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
19844
+ * 'summary'`, served by the event-media plane at `/m/<id>`), null until the
19845
+ * first frame with a member visible has been materialised (D482 — it was the
19846
+ * row's composite key, which embedded the owner and could name another table's
19847
+ * row once event ids became per-table rowids).
19796
19848
  */
19797
19849
  var SummarySchema = object({
19798
19850
  id: string(),
@@ -19801,7 +19853,7 @@ var SummarySchema = object({
19801
19853
  lastActiveAt: number(),
19802
19854
  sealedAt: number().nullable(),
19803
19855
  memberCount: number().int().nonnegative(),
19804
- groupShotKey: string().nullable()
19856
+ groupShotMediaId: number().int().nullable()
19805
19857
  });
19806
19858
  var SummariesQueryInput = object({
19807
19859
  deviceIds: array(number()).min(1),
@@ -20355,7 +20407,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20355
20407
  }), method(object({
20356
20408
  deviceId: number(),
20357
20409
  trackId: string(),
20358
- mediaKeys: array(string()).min(1)
20410
+ mediaIds: array(number().int()).min(1)
20359
20411
  }), RetrainFrameSelectionSchema, {
20360
20412
  kind: "mutation",
20361
20413
  auth: "admin"
@@ -20423,7 +20475,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20423
20475
  kind: "query",
20424
20476
  auth: "admin"
20425
20477
  }), method(object({
20426
- eventId: string(),
20478
+ /** Which of the three event tables owns the row. */
20479
+ ownerType: EventOwnerTypeSchema,
20480
+ /** The event's rowid in that table (D474: an event id is a number). */
20481
+ eventId: number().int(),
20427
20482
  kind: MediaFileKindEnum.optional(),
20428
20483
  deviceId: number()
20429
20484
  }), array(MediaFileSchema).readonly()), method(object({
@@ -20434,7 +20489,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20434
20489
  trackId: string(),
20435
20490
  deviceId: number()
20436
20491
  }), array(MediaFileInfoSchema).readonly()), method(object({
20437
- eventId: string(),
20492
+ ownerType: EventOwnerTypeSchema,
20493
+ eventId: number().int(),
20438
20494
  deviceId: number()
20439
20495
  }), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
20440
20496
  kind: "mutation",
@@ -24897,8 +24953,8 @@ var IdentitySchema = object({
24897
24953
  id: string(),
24898
24954
  name: string(),
24899
24955
  sampleCount: number().int().nonnegative(),
24900
- coverMediaKey: string().optional(),
24901
- /** Inline base64 of the cover sample's crop, resolved from `coverMediaKey`.
24956
+ coverMediaId: number().int().optional(),
24957
+ /** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
24902
24958
  * Lets the UI render the person's face avatar instead of a placeholder icon. */
24903
24959
  coverBase64: string().optional()
24904
24960
  });
@@ -24924,8 +24980,8 @@ var IdentitySampleAuditRowSchema = object({
24924
24980
  enrolledAt: number().int(),
24925
24981
  deviceId: number().int().optional(),
24926
24982
  source: _enum(["detected", "photo"]),
24927
- /** The enrolled crop's media key, so the panel can show the evidence. */
24928
- mediaKey: string().optional(),
24983
+ /** The enrolled crop's media row id, so the panel can show the evidence. */
24984
+ mediaId: number().int().optional(),
24929
24985
  /**
24930
24986
  * False = the sample is stamped with a DIFFERENT face model, and a cosine
24931
24987
  * across feature spaces is a well-formed float with no meaning. Every number
@@ -24994,15 +25050,15 @@ var FaceInfoSchema = object({
24994
25050
  */
24995
25051
  cropUrl: string().optional(),
24996
25052
  /** Design B: the face bbox (pixel space) on the key frame — lets a detail
24997
- * view draw the box over the native `keyFrameMediaKey` frame. Absent on
25053
+ * view draw the box over the native `keyFrameMediaId` frame. Absent on
24998
25054
  * legacy rows written before design B. */
24999
25055
  faceBbox: BoundingBoxSchema.optional(),
25000
25056
  /** Design B: MediaStore key of the track's native-resolution key frame.
25001
25057
  * Fetch the native JPEG via the event-media data-plane
25002
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`). Absent when the
25058
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
25003
25059
  * track produced no key frame (e.g. native/onboard source) — the UI falls
25004
25060
  * back to the inline `base64` face crop. */
25005
- keyFrameMediaKey: string().optional(),
25061
+ keyFrameMediaId: number().int().optional(),
25006
25062
  /** Winning identity-match cosine (0..1) for this face's track, when an
25007
25063
  * identity was auto-confirmed. Lets the UI surface WHY a face was assigned
25008
25064
  * (confidence badge / low-confidence audit). Absent on legacy rows and on
@@ -25071,11 +25127,14 @@ var FaceClusterSchema = object({
25071
25127
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
25072
25128
  * dialog already rendering its key FRAME from the `event-media` plane.
25073
25129
  *
25074
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
25075
- * media key directly, so this needed no new plane and no new access decision.
25130
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
25131
+ * resolves a media row by its own id, so this needed no new plane and no new
25132
+ * access decision.
25076
25133
  */
25077
25134
  var MediaFileLiteSchema$1 = object({
25078
- key: string(),
25135
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
25136
+ * (D482). It was the row's composite key, which embedded the owner. */
25137
+ mediaId: number().int(),
25079
25138
  kind: string(),
25080
25139
  url: string(),
25081
25140
  sizeBytes: number(),
@@ -25092,7 +25151,7 @@ method(object({
25092
25151
  * covers inline, ~10 KB of base64 per row, on a query this UI mounts
25093
25152
  * four times and the viewer holds at `staleTime: 30_000`.
25094
25153
  *
25095
- * Nothing loses its avatar: `coverMediaKey` is already on every row and
25154
+ * Nothing loses its avatar: `coverMediaId` is already on every row and
25096
25155
  * the `event-media` plane serves that key `immutable` with an ETag.
25097
25156
  *
25098
25157
  * **This is an INPUT field, so it does not reach the addon until the
@@ -27560,8 +27619,8 @@ var VehicleSchema = object({
27560
27619
  id: string(),
27561
27620
  name: string(),
27562
27621
  sampleCount: number().int().nonnegative(),
27563
- coverMediaKey: string().optional(),
27564
- /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
27622
+ coverMediaId: number().int().optional(),
27623
+ /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
27565
27624
  coverBase64: string().optional()
27566
27625
  });
27567
27626
  var VehicleSampleInfoSchema = object({
@@ -27594,7 +27653,7 @@ var PlateInfoSchema = object({
27594
27653
  /** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
27595
27654
  plateBbox: BoundingBoxSchema.optional(),
27596
27655
  /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
27597
- keyFrameMediaKey: string().optional(),
27656
+ keyFrameMediaId: number().int().optional(),
27598
27657
  base64: string().optional(),
27599
27658
  /**
27600
27659
  * Same crop as a data-plane URL, always present when the plate has a stored
@@ -27615,11 +27674,14 @@ var PlateInfoSchema = object({
27615
27674
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
27616
27675
  * dialog already rendering its key FRAME from the `event-media` plane.
27617
27676
  *
27618
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
27619
- * media key directly, so this needed no new plane and no new access decision.
27677
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
27678
+ * resolves a media row by its own id, so this needed no new plane and no new
27679
+ * access decision.
27620
27680
  */
27621
27681
  var MediaFileLiteSchema = object({
27622
- key: string(),
27682
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
27683
+ * (D482). It was the row's composite key, which embedded the owner. */
27684
+ mediaId: number().int(),
27623
27685
  kind: string(),
27624
27686
  url: string(),
27625
27687
  sizeBytes: number(),
@@ -27678,7 +27740,7 @@ method(object({
27678
27740
  }), method(object({
27679
27741
  /** Inline {@link VehicleSchema.coverBase64} on every row. Default
27680
27742
  * `false` — the vehicle twin of `faceGallery.listIdentities`'s
27681
- * option; `coverMediaKey` + the `event-media` plane carry the picture.
27743
+ * option; `coverMediaId` + the `event-media` plane carry the picture.
27682
27744
  * INPUT field: stripped by the hub router until the train ships, which
27683
27745
  * resolves to `false` and is exactly the intended default. */
27684
27746
  includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
@@ -29002,7 +29064,14 @@ var SceneReferenceSchema = object({
29002
29064
  modelId: string(),
29003
29065
  condition: SceneConditionSchema,
29004
29066
  capturedAt: number(),
29005
- thumbnailMediaId: string().optional(),
29067
+ /**
29068
+ * The reference thumbnail's media ROW id (D482).
29069
+ *
29070
+ * The name already said `mediaId` while the value was the row's composite
29071
+ * key — a leftover that read as done and was not. It is the row's own id
29072
+ * now, addressed at `/addon/<addonId>/event-media/m/<id>`.
29073
+ */
29074
+ thumbnailMediaId: number().int().optional(),
29006
29075
  /** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
29007
29076
  * anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
29008
29077
  * normalized rect frame a different piece of world, and the scene would
@@ -30450,7 +30519,7 @@ var StationaryObjectSchema = object({
30450
30519
  /** Enrichment label carried from the source track (identity / plate). */
30451
30520
  label: string().optional(),
30452
30521
  /** Native-resolution key-frame media key for the parked object's best image. */
30453
- keyFrameMediaKey: string().optional()
30522
+ keyFrameMediaId: number().int().optional()
30454
30523
  });
30455
30524
  var CameraOccupancySnapshotSchema = object({
30456
30525
  /** Frame timestamp of the inference result that produced this snapshot. */
@@ -31606,6 +31675,12 @@ Object.freeze({
31606
31675
  addonId: null,
31607
31676
  access: "create"
31608
31677
  },
31678
+ "dataStoreProvider.upsert": {
31679
+ capName: "data-store-provider",
31680
+ capScope: "system",
31681
+ addonId: null,
31682
+ access: "create"
31683
+ },
31609
31684
  "dayNight.getOptions": {
31610
31685
  capName: "day-night",
31611
31686
  capScope: "device",
@@ -35470,6 +35545,12 @@ Object.freeze({
35470
35545
  addonId: null,
35471
35546
  access: "create"
35472
35547
  },
35548
+ "settingsStore.upsert": {
35549
+ capName: "settings-store",
35550
+ capScope: "system",
35551
+ addonId: null,
35552
+ access: "create"
35553
+ },
35473
35554
  "smtpProvider.getStatus": {
35474
35555
  capName: "smtp-provider",
35475
35556
  capScope: "system",
@@ -39,7 +39,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
39
39
  var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
40
40
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
41
41
  //#endregion
42
- //#region ../types/dist/event-category-DAXzJeTX.mjs
42
+ //#region ../types/dist/event-category-ZyX6jcse.mjs
43
43
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
44
44
  EventCategory["SystemBoot"] = "system.boot";
45
45
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -600,7 +600,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
600
600
  * a package zone — a newly-appeared stationary object of a package class
601
601
  * that cleared the class / zone / dwell / size gates. Payload:
602
602
  * `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
603
- * entryId, className, zoneIds, keyFrameMediaKey?, bbox, timestamp }`.
603
+ * entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
604
604
  * Telemetry (D8): the durable record is the `package-events` store row;
605
605
  * this bus topic drives notifier rules + live UI. See
606
606
  * docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
@@ -5386,7 +5386,7 @@ var ZodIssueCode = {
5386
5386
  var ZodFirstPartyTypeKind;
5387
5387
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5388
5388
  //#endregion
5389
- //#region ../types/dist/sleep-BnujYGPe.mjs
5389
+ //#region ../types/dist/sleep-CnLyvg3w.mjs
5390
5390
  /**
5391
5391
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5392
5392
  * window to float samples (D455).
@@ -7337,13 +7337,30 @@ new Set([
7337
7337
  "scene",
7338
7338
  "motion",
7339
7339
  "object",
7340
- "audio"
7340
+ "audio",
7341
+ "mosaic"
7341
7342
  ]);
7342
- new Set([
7343
+ /**
7344
+ * The owner types that are event tables, in the order the event-media resolver
7345
+ * should consider them. Exported so a consumer asking "is this key an event?"
7346
+ * does not re-spell the list and drift from it.
7347
+ */
7348
+ var EVENT_OWNER_TYPES = [
7343
7349
  "motion",
7344
7350
  "object",
7345
7351
  "audio"
7346
- ]);
7352
+ ];
7353
+ /**
7354
+ * The same list as a Zod enum, for the cap inputs that must NAME the table
7355
+ * (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
7356
+ * `(table, id)`).
7357
+ *
7358
+ * Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
7359
+ * table would otherwise be accepted by the codec and refused at the door, with
7360
+ * nothing failing until a caller asked.
7361
+ */
7362
+ var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
7363
+ new Set(EVENT_OWNER_TYPES);
7347
7364
  var EncodeProfileSchema = object({
7348
7365
  video: object({
7349
7366
  codec: _enum([
@@ -12489,6 +12506,16 @@ method(object({
12489
12506
  filter: QueryFilterSchema.optional(),
12490
12507
  columns: array(string()).readonly().optional()
12491
12508
  }), array(SettingsRecordSchema).readonly()), method(object({
12509
+ namespace: string().optional(),
12510
+ collection: string(),
12511
+ /** Declared columns identifying the slot; must be covered by a UNIQUE
12512
+ * index on the collection. Never empty. */
12513
+ conflict: array(string()).readonly(),
12514
+ record: BulkRecordSchema
12515
+ }), object({
12516
+ /** The id the row HAS: assigned by SQLite on an insert, or the existing
12517
+ * row's own id on an update. */
12518
+ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
12492
12519
  namespace: string().optional(),
12493
12520
  collection: string(),
12494
12521
  record: object({
@@ -12623,6 +12650,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
12623
12650
  id: union([string(), number()]) }), {
12624
12651
  kind: "mutation",
12625
12652
  auth: "admin"
12653
+ }), method(object({
12654
+ namespace: string().optional(),
12655
+ collection: string(),
12656
+ conflict: array(string()).readonly(),
12657
+ record: BulkRecordSchema
12658
+ }), object({ id: union([string(), number()]) }), {
12659
+ kind: "mutation",
12660
+ auth: "admin"
12626
12661
  }), method(object({
12627
12662
  namespace: string().optional(),
12628
12663
  collection: string(),
@@ -18858,8 +18893,8 @@ var TrackPositionSchema = object({
18858
18893
  var TrackSnapshotSchema = object({
18859
18894
  timestamp: number(),
18860
18895
  position: TrackPositionSchema,
18861
- /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
18862
- mediaKey: string()
18896
+ /** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
18897
+ mediaId: number().int()
18863
18898
  });
18864
18899
  /**
18865
18900
  * Normalized 0..1 trajectory envelope (min/max over every position bbox,
@@ -19463,14 +19498,14 @@ var ObjectEventSchema = object({
19463
19498
  * pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
19464
19499
  frameWidth: number().optional(),
19465
19500
  frameHeight: number().optional(),
19466
- /** MediaStore key for the crop attached to this event (if any). */
19467
- mediaKey: string().optional(),
19468
- /** Design B: MediaStore key of the track's native-resolution key frame (the
19501
+ /** Media row id of the crop attached to this event (if any) — D482. */
19502
+ mediaId: number().int().optional(),
19503
+ /** Design B: media row id of the track's native-resolution key frame (the
19469
19504
  * best-detection full frame). Resolve via the event-media data-plane
19470
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`) for a detail view that
19505
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
19471
19506
  * draws `bbox` over the native frame. Absent on legacy rows / non-decoded
19472
- * sources — consumers fall back to `mediaKey` (the tight crop). */
19473
- keyFrameMediaKey: string().optional(),
19507
+ * sources — consumers fall back to `mediaId` (the tight crop). */
19508
+ keyFrameMediaId: number().int().optional(),
19474
19509
  /** Populated by B5 (recording playback URL for this event). */
19475
19510
  mediaUrl: string().optional(),
19476
19511
  /** The parent track's key-event importance [0,1], propagated to every object
@@ -19520,7 +19555,7 @@ var MediaFileKindEnum = _enum([
19520
19555
  * hub-main's heap on the way past — for an `<img>` that would have cached it.
19521
19556
  *
19522
19557
  * `url` points at the `event-media` data plane
19523
- * (`/addon/<addonId>/event-media/<storedKey>`), which serves the same blob
19558
+ * (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
19524
19559
  * with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
19525
19560
  * render a `?variant=thumb`, and streams. The hub gate in front of it requires
19526
19561
  * a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
@@ -19528,10 +19563,13 @@ var MediaFileKindEnum = _enum([
19528
19563
  * `data-plane-access.ts` for the rule and the one gap it does not close
19529
19564
  * (per-device scoping).
19530
19565
  *
19531
- * The URL is built from the row's **stored** key, which is not always its
19532
- * published `kind`: a track's face/plate crop is stored as `crop` under
19566
+ * The URL is built from the row's own id, which since D482 says nothing about
19567
+ * the row's owner or kind — and that is the point. The published `kind` is not
19568
+ * the stored one (a track's face/plate crop is stored as `crop` under
19533
19569
  * `('face'|'plate', '<prefix>-<trackId>')` and published as
19534
- * `faceCrop`/`plateCrop`. `MediaStore.getByKey` knows only the stored key.
19570
+ * `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
19571
+ * taken from `row.key` verbatim or it 404'd exactly those two rows. An id
19572
+ * cannot be mis-reconstructed, because there is nothing in it to reconstruct.
19535
19573
  *
19536
19574
  * ## `base64` is TRANSITIONAL and is going away
19537
19575
  *
@@ -19544,7 +19582,19 @@ var MediaFileKindEnum = _enum([
19544
19582
  * `analytics-query-facade.ts`; nothing else reads it.
19545
19583
  */
19546
19584
  var MediaFileSchema = object({
19547
- key: string(),
19585
+ /**
19586
+ * The media row's OWN id — the rowid SQLite assigned it (D482).
19587
+ *
19588
+ * It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
19589
+ * [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
19590
+ * per-table rowid aliases, so `object:101314` and `motion:101314` are two
19591
+ * different rows that spell the same number, and a track whose
19592
+ * `bestEventId` was an object event was served a motion event's snapshot —
19593
+ * a night-time thumbnail on an afternoon track, with no error anywhere. A
19594
+ * surrogate id cannot name the wrong row's owner, because it names no owner
19595
+ * at all.
19596
+ */
19597
+ mediaId: number().int(),
19548
19598
  kind: MediaFileKindEnum,
19549
19599
  sizeBytes: number(),
19550
19600
  timestamp: number()
@@ -19652,7 +19702,7 @@ var RetrainTrackSchema = object({
19652
19702
  });
19653
19703
  /** A frame the picker may offer — an index row, no blob was read to produce it. */
19654
19704
  var RetrainFrameCandidateSchema = object({
19655
- mediaKey: string(),
19705
+ mediaId: number().int(),
19656
19706
  kind: MediaFileKindEnum,
19657
19707
  timestamp: number(),
19658
19708
  sizeBytes: number().int(),
@@ -19666,7 +19716,7 @@ var RetrainFrameSchema = object({
19666
19716
  deviceId: number(),
19667
19717
  trackId: string(),
19668
19718
  /** Provenance only. It may already point at nothing — that is expected. */
19669
- sourceMediaKey: string(),
19719
+ sourceMediaId: number().int(),
19670
19720
  sourceKind: MediaFileKindEnum,
19671
19721
  sizeBytes: number().int(),
19672
19722
  width: number().int(),
@@ -19682,7 +19732,7 @@ var RetrainCopyRefusalSchema = _enum([
19682
19732
  var RetrainFrameSelectionSchema = object({
19683
19733
  copied: array(RetrainFrameSchema).readonly(),
19684
19734
  refused: array(object({
19685
- sourceMediaKey: string(),
19735
+ sourceMediaId: number().int(),
19686
19736
  reason: RetrainCopyRefusalSchema
19687
19737
  })).readonly()
19688
19738
  });
@@ -19690,7 +19740,7 @@ var RetrainFrameListSchema = object({
19690
19740
  candidates: array(RetrainFrameCandidateSchema).readonly(),
19691
19741
  copies: array(RetrainFrameSchema).readonly(),
19692
19742
  /** What the page pre-selects — the native key frame when one survives. */
19693
- autoPickMediaKey: string().optional()
19743
+ autoPickMediaId: number().int().optional()
19694
19744
  });
19695
19745
  /** What the operator asked the assist to look for. */
19696
19746
  var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
@@ -19785,9 +19835,11 @@ var RecentTracksQueryInput = object({
19785
19835
  });
19786
19836
  /**
19787
19837
  * A Summary (D359): the per-camera session envelope that references tracks.
19788
- * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
19789
- * served by the event-media plane by key), null until the first frame with a
19790
- * member visible has been materialised.
19838
+ * `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
19839
+ * 'summary'`, served by the event-media plane at `/m/<id>`), null until the
19840
+ * first frame with a member visible has been materialised (D482 — it was the
19841
+ * row's composite key, which embedded the owner and could name another table's
19842
+ * row once event ids became per-table rowids).
19791
19843
  */
19792
19844
  var SummarySchema = object({
19793
19845
  id: string(),
@@ -19796,7 +19848,7 @@ var SummarySchema = object({
19796
19848
  lastActiveAt: number(),
19797
19849
  sealedAt: number().nullable(),
19798
19850
  memberCount: number().int().nonnegative(),
19799
- groupShotKey: string().nullable()
19851
+ groupShotMediaId: number().int().nullable()
19800
19852
  });
19801
19853
  var SummariesQueryInput = object({
19802
19854
  deviceIds: array(number()).min(1),
@@ -20350,7 +20402,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20350
20402
  }), method(object({
20351
20403
  deviceId: number(),
20352
20404
  trackId: string(),
20353
- mediaKeys: array(string()).min(1)
20405
+ mediaIds: array(number().int()).min(1)
20354
20406
  }), RetrainFrameSelectionSchema, {
20355
20407
  kind: "mutation",
20356
20408
  auth: "admin"
@@ -20418,7 +20470,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20418
20470
  kind: "query",
20419
20471
  auth: "admin"
20420
20472
  }), method(object({
20421
- eventId: string(),
20473
+ /** Which of the three event tables owns the row. */
20474
+ ownerType: EventOwnerTypeSchema,
20475
+ /** The event's rowid in that table (D474: an event id is a number). */
20476
+ eventId: number().int(),
20422
20477
  kind: MediaFileKindEnum.optional(),
20423
20478
  deviceId: number()
20424
20479
  }), array(MediaFileSchema).readonly()), method(object({
@@ -20429,7 +20484,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20429
20484
  trackId: string(),
20430
20485
  deviceId: number()
20431
20486
  }), array(MediaFileInfoSchema).readonly()), method(object({
20432
- eventId: string(),
20487
+ ownerType: EventOwnerTypeSchema,
20488
+ eventId: number().int(),
20433
20489
  deviceId: number()
20434
20490
  }), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
20435
20491
  kind: "mutation",
@@ -24892,8 +24948,8 @@ var IdentitySchema = object({
24892
24948
  id: string(),
24893
24949
  name: string(),
24894
24950
  sampleCount: number().int().nonnegative(),
24895
- coverMediaKey: string().optional(),
24896
- /** Inline base64 of the cover sample's crop, resolved from `coverMediaKey`.
24951
+ coverMediaId: number().int().optional(),
24952
+ /** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
24897
24953
  * Lets the UI render the person's face avatar instead of a placeholder icon. */
24898
24954
  coverBase64: string().optional()
24899
24955
  });
@@ -24919,8 +24975,8 @@ var IdentitySampleAuditRowSchema = object({
24919
24975
  enrolledAt: number().int(),
24920
24976
  deviceId: number().int().optional(),
24921
24977
  source: _enum(["detected", "photo"]),
24922
- /** The enrolled crop's media key, so the panel can show the evidence. */
24923
- mediaKey: string().optional(),
24978
+ /** The enrolled crop's media row id, so the panel can show the evidence. */
24979
+ mediaId: number().int().optional(),
24924
24980
  /**
24925
24981
  * False = the sample is stamped with a DIFFERENT face model, and a cosine
24926
24982
  * across feature spaces is a well-formed float with no meaning. Every number
@@ -24989,15 +25045,15 @@ var FaceInfoSchema = object({
24989
25045
  */
24990
25046
  cropUrl: string().optional(),
24991
25047
  /** Design B: the face bbox (pixel space) on the key frame — lets a detail
24992
- * view draw the box over the native `keyFrameMediaKey` frame. Absent on
25048
+ * view draw the box over the native `keyFrameMediaId` frame. Absent on
24993
25049
  * legacy rows written before design B. */
24994
25050
  faceBbox: BoundingBoxSchema.optional(),
24995
25051
  /** Design B: MediaStore key of the track's native-resolution key frame.
24996
25052
  * Fetch the native JPEG via the event-media data-plane
24997
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`). Absent when the
25053
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
24998
25054
  * track produced no key frame (e.g. native/onboard source) — the UI falls
24999
25055
  * back to the inline `base64` face crop. */
25000
- keyFrameMediaKey: string().optional(),
25056
+ keyFrameMediaId: number().int().optional(),
25001
25057
  /** Winning identity-match cosine (0..1) for this face's track, when an
25002
25058
  * identity was auto-confirmed. Lets the UI surface WHY a face was assigned
25003
25059
  * (confidence badge / low-confidence audit). Absent on legacy rows and on
@@ -25066,11 +25122,14 @@ var FaceClusterSchema = object({
25066
25122
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
25067
25123
  * dialog already rendering its key FRAME from the `event-media` plane.
25068
25124
  *
25069
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
25070
- * media key directly, so this needed no new plane and no new access decision.
25125
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
25126
+ * resolves a media row by its own id, so this needed no new plane and no new
25127
+ * access decision.
25071
25128
  */
25072
25129
  var MediaFileLiteSchema$1 = object({
25073
- key: string(),
25130
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
25131
+ * (D482). It was the row's composite key, which embedded the owner. */
25132
+ mediaId: number().int(),
25074
25133
  kind: string(),
25075
25134
  url: string(),
25076
25135
  sizeBytes: number(),
@@ -25087,7 +25146,7 @@ method(object({
25087
25146
  * covers inline, ~10 KB of base64 per row, on a query this UI mounts
25088
25147
  * four times and the viewer holds at `staleTime: 30_000`.
25089
25148
  *
25090
- * Nothing loses its avatar: `coverMediaKey` is already on every row and
25149
+ * Nothing loses its avatar: `coverMediaId` is already on every row and
25091
25150
  * the `event-media` plane serves that key `immutable` with an ETag.
25092
25151
  *
25093
25152
  * **This is an INPUT field, so it does not reach the addon until the
@@ -27555,8 +27614,8 @@ var VehicleSchema = object({
27555
27614
  id: string(),
27556
27615
  name: string(),
27557
27616
  sampleCount: number().int().nonnegative(),
27558
- coverMediaKey: string().optional(),
27559
- /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
27617
+ coverMediaId: number().int().optional(),
27618
+ /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
27560
27619
  coverBase64: string().optional()
27561
27620
  });
27562
27621
  var VehicleSampleInfoSchema = object({
@@ -27589,7 +27648,7 @@ var PlateInfoSchema = object({
27589
27648
  /** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
27590
27649
  plateBbox: BoundingBoxSchema.optional(),
27591
27650
  /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
27592
- keyFrameMediaKey: string().optional(),
27651
+ keyFrameMediaId: number().int().optional(),
27593
27652
  base64: string().optional(),
27594
27653
  /**
27595
27654
  * Same crop as a data-plane URL, always present when the plate has a stored
@@ -27610,11 +27669,14 @@ var PlateInfoSchema = object({
27610
27669
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
27611
27670
  * dialog already rendering its key FRAME from the `event-media` plane.
27612
27671
  *
27613
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
27614
- * media key directly, so this needed no new plane and no new access decision.
27672
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
27673
+ * resolves a media row by its own id, so this needed no new plane and no new
27674
+ * access decision.
27615
27675
  */
27616
27676
  var MediaFileLiteSchema = object({
27617
- key: string(),
27677
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
27678
+ * (D482). It was the row's composite key, which embedded the owner. */
27679
+ mediaId: number().int(),
27618
27680
  kind: string(),
27619
27681
  url: string(),
27620
27682
  sizeBytes: number(),
@@ -27673,7 +27735,7 @@ method(object({
27673
27735
  }), method(object({
27674
27736
  /** Inline {@link VehicleSchema.coverBase64} on every row. Default
27675
27737
  * `false` — the vehicle twin of `faceGallery.listIdentities`'s
27676
- * option; `coverMediaKey` + the `event-media` plane carry the picture.
27738
+ * option; `coverMediaId` + the `event-media` plane carry the picture.
27677
27739
  * INPUT field: stripped by the hub router until the train ships, which
27678
27740
  * resolves to `false` and is exactly the intended default. */
27679
27741
  includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
@@ -28997,7 +29059,14 @@ var SceneReferenceSchema = object({
28997
29059
  modelId: string(),
28998
29060
  condition: SceneConditionSchema,
28999
29061
  capturedAt: number(),
29000
- thumbnailMediaId: string().optional(),
29062
+ /**
29063
+ * The reference thumbnail's media ROW id (D482).
29064
+ *
29065
+ * The name already said `mediaId` while the value was the row's composite
29066
+ * key — a leftover that read as done and was not. It is the row's own id
29067
+ * now, addressed at `/addon/<addonId>/event-media/m/<id>`.
29068
+ */
29069
+ thumbnailMediaId: number().int().optional(),
29001
29070
  /** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
29002
29071
  * anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
29003
29072
  * normalized rect frame a different piece of world, and the scene would
@@ -30445,7 +30514,7 @@ var StationaryObjectSchema = object({
30445
30514
  /** Enrichment label carried from the source track (identity / plate). */
30446
30515
  label: string().optional(),
30447
30516
  /** Native-resolution key-frame media key for the parked object's best image. */
30448
- keyFrameMediaKey: string().optional()
30517
+ keyFrameMediaId: number().int().optional()
30449
30518
  });
30450
30519
  var CameraOccupancySnapshotSchema = object({
30451
30520
  /** Frame timestamp of the inference result that produced this snapshot. */
@@ -31601,6 +31670,12 @@ Object.freeze({
31601
31670
  addonId: null,
31602
31671
  access: "create"
31603
31672
  },
31673
+ "dataStoreProvider.upsert": {
31674
+ capName: "data-store-provider",
31675
+ capScope: "system",
31676
+ addonId: null,
31677
+ access: "create"
31678
+ },
31604
31679
  "dayNight.getOptions": {
31605
31680
  capName: "day-night",
31606
31681
  capScope: "device",
@@ -35465,6 +35540,12 @@ Object.freeze({
35465
35540
  addonId: null,
35466
35541
  access: "create"
35467
35542
  },
35543
+ "settingsStore.upsert": {
35544
+ capName: "settings-store",
35545
+ capScope: "system",
35546
+ addonId: null,
35547
+ access: "create"
35548
+ },
35468
35549
  "smtpProvider.getStatus": {
35469
35550
  capName: "smtp-provider",
35470
35551
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-mqtt-broker",
3
- "version": "1.2.99",
3
+ "version": "1.2.100",
4
4
  "description": "MQTT broker registry addon for CamStack — manages external broker entries + an optional embedded aedes broker. Consumers spin up their own `mqtt.js` clients via the `mqtt-broker` cap.",
5
5
  "keywords": [
6
6
  "camstack",