@camstack/addon-pipeline-orchestrator 1.2.187 → 1.2.189

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -30,7 +30,7 @@ node_fs = __toESM(node_fs);
30
30
  let node_path = require("node:path");
31
31
  node_path = __toESM(node_path);
32
32
  let node_url = require("node:url");
33
- //#region ../types/dist/event-category-DAXzJeTX.mjs
33
+ //#region ../types/dist/event-category-ZyX6jcse.mjs
34
34
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
35
35
  EventCategory["SystemBoot"] = "system.boot";
36
36
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -591,7 +591,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
591
591
  * a package zone — a newly-appeared stationary object of a package class
592
592
  * that cleared the class / zone / dwell / size gates. Payload:
593
593
  * `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
594
- * entryId, className, zoneIds, keyFrameMediaKey?, bbox, timestamp }`.
594
+ * entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
595
595
  * Telemetry (D8): the durable record is the `package-events` store row;
596
596
  * this bus topic drives notifier rules + live UI. See
597
597
  * docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
@@ -5377,7 +5377,7 @@ var ZodIssueCode = {
5377
5377
  var ZodFirstPartyTypeKind;
5378
5378
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5379
5379
  //#endregion
5380
- //#region ../types/dist/sleep-BnujYGPe.mjs
5380
+ //#region ../types/dist/sleep-CnLyvg3w.mjs
5381
5381
  /**
5382
5382
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5383
5383
  * window to float samples (D455).
@@ -7908,13 +7908,30 @@ new Set([
7908
7908
  "scene",
7909
7909
  "motion",
7910
7910
  "object",
7911
- "audio"
7911
+ "audio",
7912
+ "mosaic"
7912
7913
  ]);
7913
- new Set([
7914
+ /**
7915
+ * The owner types that are event tables, in the order the event-media resolver
7916
+ * should consider them. Exported so a consumer asking "is this key an event?"
7917
+ * does not re-spell the list and drift from it.
7918
+ */
7919
+ var EVENT_OWNER_TYPES = [
7914
7920
  "motion",
7915
7921
  "object",
7916
7922
  "audio"
7917
- ]);
7923
+ ];
7924
+ /**
7925
+ * The same list as a Zod enum, for the cap inputs that must NAME the table
7926
+ * (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
7927
+ * `(table, id)`).
7928
+ *
7929
+ * Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
7930
+ * table would otherwise be accepted by the codec and refused at the door, with
7931
+ * nothing failing until a caller asked.
7932
+ */
7933
+ var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
7934
+ new Set(EVENT_OWNER_TYPES);
7918
7935
  var EncodeProfileSchema = object({
7919
7936
  video: object({
7920
7937
  codec: _enum([
@@ -13371,6 +13388,16 @@ method(object({
13371
13388
  filter: QueryFilterSchema.optional(),
13372
13389
  columns: array(string()).readonly().optional()
13373
13390
  }), array(SettingsRecordSchema).readonly()), method(object({
13391
+ namespace: string().optional(),
13392
+ collection: string(),
13393
+ /** Declared columns identifying the slot; must be covered by a UNIQUE
13394
+ * index on the collection. Never empty. */
13395
+ conflict: array(string()).readonly(),
13396
+ record: BulkRecordSchema
13397
+ }), object({
13398
+ /** The id the row HAS: assigned by SQLite on an insert, or the existing
13399
+ * row's own id on an update. */
13400
+ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
13374
13401
  namespace: string().optional(),
13375
13402
  collection: string(),
13376
13403
  record: object({
@@ -13505,6 +13532,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
13505
13532
  id: union([string(), number()]) }), {
13506
13533
  kind: "mutation",
13507
13534
  auth: "admin"
13535
+ }), method(object({
13536
+ namespace: string().optional(),
13537
+ collection: string(),
13538
+ conflict: array(string()).readonly(),
13539
+ record: BulkRecordSchema
13540
+ }), object({ id: union([string(), number()]) }), {
13541
+ kind: "mutation",
13542
+ auth: "admin"
13508
13543
  }), method(object({
13509
13544
  namespace: string().optional(),
13510
13545
  collection: string(),
@@ -19945,8 +19980,8 @@ var TrackPositionSchema = object({
19945
19980
  var TrackSnapshotSchema = object({
19946
19981
  timestamp: number(),
19947
19982
  position: TrackPositionSchema,
19948
- /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
19949
- mediaKey: string()
19983
+ /** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
19984
+ mediaId: number().int()
19950
19985
  });
19951
19986
  /**
19952
19987
  * Normalized 0..1 trajectory envelope (min/max over every position bbox,
@@ -20550,14 +20585,14 @@ var ObjectEventSchema = object({
20550
20585
  * pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
20551
20586
  frameWidth: number().optional(),
20552
20587
  frameHeight: number().optional(),
20553
- /** MediaStore key for the crop attached to this event (if any). */
20554
- mediaKey: string().optional(),
20555
- /** Design B: MediaStore key of the track's native-resolution key frame (the
20588
+ /** Media row id of the crop attached to this event (if any) — D482. */
20589
+ mediaId: number().int().optional(),
20590
+ /** Design B: media row id of the track's native-resolution key frame (the
20556
20591
  * best-detection full frame). Resolve via the event-media data-plane
20557
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`) for a detail view that
20592
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
20558
20593
  * draws `bbox` over the native frame. Absent on legacy rows / non-decoded
20559
- * sources — consumers fall back to `mediaKey` (the tight crop). */
20560
- keyFrameMediaKey: string().optional(),
20594
+ * sources — consumers fall back to `mediaId` (the tight crop). */
20595
+ keyFrameMediaId: number().int().optional(),
20561
20596
  /** Populated by B5 (recording playback URL for this event). */
20562
20597
  mediaUrl: string().optional(),
20563
20598
  /** The parent track's key-event importance [0,1], propagated to every object
@@ -20607,7 +20642,7 @@ var MediaFileKindEnum = _enum([
20607
20642
  * hub-main's heap on the way past — for an `<img>` that would have cached it.
20608
20643
  *
20609
20644
  * `url` points at the `event-media` data plane
20610
- * (`/addon/<addonId>/event-media/<storedKey>`), which serves the same blob
20645
+ * (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
20611
20646
  * with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
20612
20647
  * render a `?variant=thumb`, and streams. The hub gate in front of it requires
20613
20648
  * a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
@@ -20615,10 +20650,13 @@ var MediaFileKindEnum = _enum([
20615
20650
  * `data-plane-access.ts` for the rule and the one gap it does not close
20616
20651
  * (per-device scoping).
20617
20652
  *
20618
- * The URL is built from the row's **stored** key, which is not always its
20619
- * published `kind`: a track's face/plate crop is stored as `crop` under
20653
+ * The URL is built from the row's own id, which since D482 says nothing about
20654
+ * the row's owner or kind and that is the point. The published `kind` is not
20655
+ * the stored one (a track's face/plate crop is stored as `crop` under
20620
20656
  * `('face'|'plate', '<prefix>-<trackId>')` and published as
20621
- * `faceCrop`/`plateCrop`. `MediaStore.getByKey` knows only the stored key.
20657
+ * `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
20658
+ * taken from `row.key` verbatim or it 404'd exactly those two rows. An id
20659
+ * cannot be mis-reconstructed, because there is nothing in it to reconstruct.
20622
20660
  *
20623
20661
  * ## `base64` is TRANSITIONAL and is going away
20624
20662
  *
@@ -20631,7 +20669,19 @@ var MediaFileKindEnum = _enum([
20631
20669
  * `analytics-query-facade.ts`; nothing else reads it.
20632
20670
  */
20633
20671
  var MediaFileSchema = object({
20634
- key: string(),
20672
+ /**
20673
+ * The media row's OWN id — the rowid SQLite assigned it (D482).
20674
+ *
20675
+ * It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
20676
+ * [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
20677
+ * per-table rowid aliases, so `object:101314` and `motion:101314` are two
20678
+ * different rows that spell the same number, and a track whose
20679
+ * `bestEventId` was an object event was served a motion event's snapshot —
20680
+ * a night-time thumbnail on an afternoon track, with no error anywhere. A
20681
+ * surrogate id cannot name the wrong row's owner, because it names no owner
20682
+ * at all.
20683
+ */
20684
+ mediaId: number().int(),
20635
20685
  kind: MediaFileKindEnum,
20636
20686
  sizeBytes: number(),
20637
20687
  timestamp: number()
@@ -20739,7 +20789,7 @@ var RetrainTrackSchema = object({
20739
20789
  });
20740
20790
  /** A frame the picker may offer — an index row, no blob was read to produce it. */
20741
20791
  var RetrainFrameCandidateSchema = object({
20742
- mediaKey: string(),
20792
+ mediaId: number().int(),
20743
20793
  kind: MediaFileKindEnum,
20744
20794
  timestamp: number(),
20745
20795
  sizeBytes: number().int(),
@@ -20753,7 +20803,7 @@ var RetrainFrameSchema = object({
20753
20803
  deviceId: number(),
20754
20804
  trackId: string(),
20755
20805
  /** Provenance only. It may already point at nothing — that is expected. */
20756
- sourceMediaKey: string(),
20806
+ sourceMediaId: number().int(),
20757
20807
  sourceKind: MediaFileKindEnum,
20758
20808
  sizeBytes: number().int(),
20759
20809
  width: number().int(),
@@ -20769,7 +20819,7 @@ var RetrainCopyRefusalSchema = _enum([
20769
20819
  var RetrainFrameSelectionSchema = object({
20770
20820
  copied: array(RetrainFrameSchema).readonly(),
20771
20821
  refused: array(object({
20772
- sourceMediaKey: string(),
20822
+ sourceMediaId: number().int(),
20773
20823
  reason: RetrainCopyRefusalSchema
20774
20824
  })).readonly()
20775
20825
  });
@@ -20777,7 +20827,7 @@ var RetrainFrameListSchema = object({
20777
20827
  candidates: array(RetrainFrameCandidateSchema).readonly(),
20778
20828
  copies: array(RetrainFrameSchema).readonly(),
20779
20829
  /** What the page pre-selects — the native key frame when one survives. */
20780
- autoPickMediaKey: string().optional()
20830
+ autoPickMediaId: number().int().optional()
20781
20831
  });
20782
20832
  /** What the operator asked the assist to look for. */
20783
20833
  var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
@@ -20872,9 +20922,11 @@ var RecentTracksQueryInput = object({
20872
20922
  });
20873
20923
  /**
20874
20924
  * A Summary (D359): the per-camera session envelope that references tracks.
20875
- * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
20876
- * served by the event-media plane by key), null until the first frame with a
20877
- * member visible has been materialised.
20925
+ * `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
20926
+ * 'summary'`, served by the event-media plane at `/m/<id>`), null until the
20927
+ * first frame with a member visible has been materialised (D482 — it was the
20928
+ * row's composite key, which embedded the owner and could name another table's
20929
+ * row once event ids became per-table rowids).
20878
20930
  */
20879
20931
  var SummarySchema = object({
20880
20932
  id: string(),
@@ -20883,7 +20935,7 @@ var SummarySchema = object({
20883
20935
  lastActiveAt: number(),
20884
20936
  sealedAt: number().nullable(),
20885
20937
  memberCount: number().int().nonnegative(),
20886
- groupShotKey: string().nullable()
20938
+ groupShotMediaId: number().int().nullable()
20887
20939
  });
20888
20940
  var SummariesQueryInput = object({
20889
20941
  deviceIds: array(number()).min(1),
@@ -21437,7 +21489,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
21437
21489
  }), method(object({
21438
21490
  deviceId: number(),
21439
21491
  trackId: string(),
21440
- mediaKeys: array(string()).min(1)
21492
+ mediaIds: array(number().int()).min(1)
21441
21493
  }), RetrainFrameSelectionSchema, {
21442
21494
  kind: "mutation",
21443
21495
  auth: "admin"
@@ -21505,7 +21557,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
21505
21557
  kind: "query",
21506
21558
  auth: "admin"
21507
21559
  }), method(object({
21508
- eventId: string(),
21560
+ /** Which of the three event tables owns the row. */
21561
+ ownerType: EventOwnerTypeSchema,
21562
+ /** The event's rowid in that table (D474: an event id is a number). */
21563
+ eventId: number().int(),
21509
21564
  kind: MediaFileKindEnum.optional(),
21510
21565
  deviceId: number()
21511
21566
  }), array(MediaFileSchema).readonly()), method(object({
@@ -21516,7 +21571,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
21516
21571
  trackId: string(),
21517
21572
  deviceId: number()
21518
21573
  }), array(MediaFileInfoSchema).readonly()), method(object({
21519
- eventId: string(),
21574
+ ownerType: EventOwnerTypeSchema,
21575
+ eventId: number().int(),
21520
21576
  deviceId: number()
21521
21577
  }), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
21522
21578
  kind: "mutation",
@@ -26497,8 +26553,8 @@ var IdentitySchema = object({
26497
26553
  id: string(),
26498
26554
  name: string(),
26499
26555
  sampleCount: number().int().nonnegative(),
26500
- coverMediaKey: string().optional(),
26501
- /** Inline base64 of the cover sample's crop, resolved from `coverMediaKey`.
26556
+ coverMediaId: number().int().optional(),
26557
+ /** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
26502
26558
  * Lets the UI render the person's face avatar instead of a placeholder icon. */
26503
26559
  coverBase64: string().optional()
26504
26560
  });
@@ -26524,8 +26580,8 @@ var IdentitySampleAuditRowSchema = object({
26524
26580
  enrolledAt: number().int(),
26525
26581
  deviceId: number().int().optional(),
26526
26582
  source: _enum(["detected", "photo"]),
26527
- /** The enrolled crop's media key, so the panel can show the evidence. */
26528
- mediaKey: string().optional(),
26583
+ /** The enrolled crop's media row id, so the panel can show the evidence. */
26584
+ mediaId: number().int().optional(),
26529
26585
  /**
26530
26586
  * False = the sample is stamped with a DIFFERENT face model, and a cosine
26531
26587
  * across feature spaces is a well-formed float with no meaning. Every number
@@ -26594,15 +26650,15 @@ var FaceInfoSchema = object({
26594
26650
  */
26595
26651
  cropUrl: string().optional(),
26596
26652
  /** Design B: the face bbox (pixel space) on the key frame — lets a detail
26597
- * view draw the box over the native `keyFrameMediaKey` frame. Absent on
26653
+ * view draw the box over the native `keyFrameMediaId` frame. Absent on
26598
26654
  * legacy rows written before design B. */
26599
26655
  faceBbox: BoundingBoxSchema.optional(),
26600
26656
  /** Design B: MediaStore key of the track's native-resolution key frame.
26601
26657
  * Fetch the native JPEG via the event-media data-plane
26602
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`). Absent when the
26658
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
26603
26659
  * track produced no key frame (e.g. native/onboard source) — the UI falls
26604
26660
  * back to the inline `base64` face crop. */
26605
- keyFrameMediaKey: string().optional(),
26661
+ keyFrameMediaId: number().int().optional(),
26606
26662
  /** Winning identity-match cosine (0..1) for this face's track, when an
26607
26663
  * identity was auto-confirmed. Lets the UI surface WHY a face was assigned
26608
26664
  * (confidence badge / low-confidence audit). Absent on legacy rows and on
@@ -26671,11 +26727,14 @@ var FaceClusterSchema = object({
26671
26727
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
26672
26728
  * dialog already rendering its key FRAME from the `event-media` plane.
26673
26729
  *
26674
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
26675
- * media key directly, so this needed no new plane and no new access decision.
26730
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
26731
+ * resolves a media row by its own id, so this needed no new plane and no new
26732
+ * access decision.
26676
26733
  */
26677
26734
  var MediaFileLiteSchema$1 = object({
26678
- key: string(),
26735
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
26736
+ * (D482). It was the row's composite key, which embedded the owner. */
26737
+ mediaId: number().int(),
26679
26738
  kind: string(),
26680
26739
  url: string(),
26681
26740
  sizeBytes: number(),
@@ -26692,7 +26751,7 @@ method(object({
26692
26751
  * covers inline, ~10 KB of base64 per row, on a query this UI mounts
26693
26752
  * four times and the viewer holds at `staleTime: 30_000`.
26694
26753
  *
26695
- * Nothing loses its avatar: `coverMediaKey` is already on every row and
26754
+ * Nothing loses its avatar: `coverMediaId` is already on every row and
26696
26755
  * the `event-media` plane serves that key `immutable` with an ETag.
26697
26756
  *
26698
26757
  * **This is an INPUT field, so it does not reach the addon until the
@@ -29160,8 +29219,8 @@ var VehicleSchema = object({
29160
29219
  id: string(),
29161
29220
  name: string(),
29162
29221
  sampleCount: number().int().nonnegative(),
29163
- coverMediaKey: string().optional(),
29164
- /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
29222
+ coverMediaId: number().int().optional(),
29223
+ /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
29165
29224
  coverBase64: string().optional()
29166
29225
  });
29167
29226
  var VehicleSampleInfoSchema = object({
@@ -29194,7 +29253,7 @@ var PlateInfoSchema = object({
29194
29253
  /** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
29195
29254
  plateBbox: BoundingBoxSchema.optional(),
29196
29255
  /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
29197
- keyFrameMediaKey: string().optional(),
29256
+ keyFrameMediaId: number().int().optional(),
29198
29257
  base64: string().optional(),
29199
29258
  /**
29200
29259
  * Same crop as a data-plane URL, always present when the plate has a stored
@@ -29215,11 +29274,14 @@ var PlateInfoSchema = object({
29215
29274
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
29216
29275
  * dialog already rendering its key FRAME from the `event-media` plane.
29217
29276
  *
29218
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
29219
- * media key directly, so this needed no new plane and no new access decision.
29277
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
29278
+ * resolves a media row by its own id, so this needed no new plane and no new
29279
+ * access decision.
29220
29280
  */
29221
29281
  var MediaFileLiteSchema = object({
29222
- key: string(),
29282
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
29283
+ * (D482). It was the row's composite key, which embedded the owner. */
29284
+ mediaId: number().int(),
29223
29285
  kind: string(),
29224
29286
  url: string(),
29225
29287
  sizeBytes: number(),
@@ -29278,7 +29340,7 @@ method(object({
29278
29340
  }), method(object({
29279
29341
  /** Inline {@link VehicleSchema.coverBase64} on every row. Default
29280
29342
  * `false` — the vehicle twin of `faceGallery.listIdentities`'s
29281
- * option; `coverMediaKey` + the `event-media` plane carry the picture.
29343
+ * option; `coverMediaId` + the `event-media` plane carry the picture.
29282
29344
  * INPUT field: stripped by the hub router until the train ships, which
29283
29345
  * resolves to `false` and is exactly the intended default. */
29284
29346
  includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
@@ -30632,7 +30694,14 @@ var SceneReferenceSchema = object({
30632
30694
  modelId: string(),
30633
30695
  condition: SceneConditionSchema,
30634
30696
  capturedAt: number(),
30635
- thumbnailMediaId: string().optional(),
30697
+ /**
30698
+ * The reference thumbnail's media ROW id (D482).
30699
+ *
30700
+ * The name already said `mediaId` while the value was the row's composite
30701
+ * key — a leftover that read as done and was not. It is the row's own id
30702
+ * now, addressed at `/addon/<addonId>/event-media/m/<id>`.
30703
+ */
30704
+ thumbnailMediaId: number().int().optional(),
30636
30705
  /** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
30637
30706
  * anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
30638
30707
  * normalized rect frame a different piece of world, and the scene would
@@ -32080,7 +32149,7 @@ var StationaryObjectSchema = object({
32080
32149
  /** Enrichment label carried from the source track (identity / plate). */
32081
32150
  label: string().optional(),
32082
32151
  /** Native-resolution key-frame media key for the parked object's best image. */
32083
- keyFrameMediaKey: string().optional()
32152
+ keyFrameMediaId: number().int().optional()
32084
32153
  });
32085
32154
  var CameraOccupancySnapshotSchema = object({
32086
32155
  /** Frame timestamp of the inference result that produced this snapshot. */
@@ -33320,6 +33389,12 @@ Object.freeze({
33320
33389
  addonId: null,
33321
33390
  access: "create"
33322
33391
  },
33392
+ "dataStoreProvider.upsert": {
33393
+ capName: "data-store-provider",
33394
+ capScope: "system",
33395
+ addonId: null,
33396
+ access: "create"
33397
+ },
33323
33398
  "dayNight.getOptions": {
33324
33399
  capName: "day-night",
33325
33400
  capScope: "device",
@@ -37184,6 +37259,12 @@ Object.freeze({
37184
37259
  addonId: null,
37185
37260
  access: "create"
37186
37261
  },
37262
+ "settingsStore.upsert": {
37263
+ capName: "settings-store",
37264
+ capScope: "system",
37265
+ addonId: null,
37266
+ access: "create"
37267
+ },
37187
37268
  "smtpProvider.getStatus": {
37188
37269
  capName: "smtp-provider",
37189
37270
  capScope: "system",