@camstack/addon-smtp-nodemailer 1.2.98 → 1.2.99
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/smtp.addon.js +131 -50
- package/dist/smtp.addon.mjs +131 -50
- package/package.json +1 -1
package/dist/smtp.addon.js
CHANGED
|
@@ -36,7 +36,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
36
36
|
}) : target, mod));
|
|
37
37
|
var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
38
38
|
//#endregion
|
|
39
|
-
//#region ../types/dist/event-category-
|
|
39
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
40
40
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
41
41
|
EventCategory["SystemBoot"] = "system.boot";
|
|
42
42
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -597,7 +597,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
597
597
|
* a package zone — a newly-appeared stationary object of a package class
|
|
598
598
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
599
599
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
600
|
-
* entryId, className, zoneIds,
|
|
600
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
601
601
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
602
602
|
* this bus topic drives notifier rules + live UI. See
|
|
603
603
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5383,7 +5383,7 @@ var ZodIssueCode = {
|
|
|
5383
5383
|
var ZodFirstPartyTypeKind;
|
|
5384
5384
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5385
5385
|
//#endregion
|
|
5386
|
-
//#region ../types/dist/sleep-
|
|
5386
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5387
5387
|
/**
|
|
5388
5388
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5389
5389
|
* window to float samples (D455).
|
|
@@ -7334,13 +7334,30 @@ new Set([
|
|
|
7334
7334
|
"scene",
|
|
7335
7335
|
"motion",
|
|
7336
7336
|
"object",
|
|
7337
|
-
"audio"
|
|
7337
|
+
"audio",
|
|
7338
|
+
"mosaic"
|
|
7338
7339
|
]);
|
|
7339
|
-
|
|
7340
|
+
/**
|
|
7341
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7342
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7343
|
+
* does not re-spell the list and drift from it.
|
|
7344
|
+
*/
|
|
7345
|
+
var EVENT_OWNER_TYPES = [
|
|
7340
7346
|
"motion",
|
|
7341
7347
|
"object",
|
|
7342
7348
|
"audio"
|
|
7343
|
-
]
|
|
7349
|
+
];
|
|
7350
|
+
/**
|
|
7351
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7352
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7353
|
+
* `(table, id)`).
|
|
7354
|
+
*
|
|
7355
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7356
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7357
|
+
* nothing failing until a caller asked.
|
|
7358
|
+
*/
|
|
7359
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7360
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7344
7361
|
var EncodeProfileSchema = object({
|
|
7345
7362
|
video: object({
|
|
7346
7363
|
codec: _enum([
|
|
@@ -12437,6 +12454,16 @@ method(object({
|
|
|
12437
12454
|
filter: QueryFilterSchema.optional(),
|
|
12438
12455
|
columns: array(string()).readonly().optional()
|
|
12439
12456
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12457
|
+
namespace: string().optional(),
|
|
12458
|
+
collection: string(),
|
|
12459
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12460
|
+
* index on the collection. Never empty. */
|
|
12461
|
+
conflict: array(string()).readonly(),
|
|
12462
|
+
record: BulkRecordSchema
|
|
12463
|
+
}), object({
|
|
12464
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12465
|
+
* row's own id on an update. */
|
|
12466
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12440
12467
|
namespace: string().optional(),
|
|
12441
12468
|
collection: string(),
|
|
12442
12469
|
record: object({
|
|
@@ -12571,6 +12598,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12571
12598
|
id: union([string(), number()]) }), {
|
|
12572
12599
|
kind: "mutation",
|
|
12573
12600
|
auth: "admin"
|
|
12601
|
+
}), method(object({
|
|
12602
|
+
namespace: string().optional(),
|
|
12603
|
+
collection: string(),
|
|
12604
|
+
conflict: array(string()).readonly(),
|
|
12605
|
+
record: BulkRecordSchema
|
|
12606
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12607
|
+
kind: "mutation",
|
|
12608
|
+
auth: "admin"
|
|
12574
12609
|
}), method(object({
|
|
12575
12610
|
namespace: string().optional(),
|
|
12576
12611
|
collection: string(),
|
|
@@ -18787,8 +18822,8 @@ var TrackPositionSchema = object({
|
|
|
18787
18822
|
var TrackSnapshotSchema = object({
|
|
18788
18823
|
timestamp: number(),
|
|
18789
18824
|
position: TrackPositionSchema,
|
|
18790
|
-
/**
|
|
18791
|
-
|
|
18825
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
18826
|
+
mediaId: number().int()
|
|
18792
18827
|
});
|
|
18793
18828
|
/**
|
|
18794
18829
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19392,14 +19427,14 @@ var ObjectEventSchema = object({
|
|
|
19392
19427
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19393
19428
|
frameWidth: number().optional(),
|
|
19394
19429
|
frameHeight: number().optional(),
|
|
19395
|
-
/**
|
|
19396
|
-
|
|
19397
|
-
/** Design B:
|
|
19430
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19431
|
+
mediaId: number().int().optional(),
|
|
19432
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19398
19433
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19399
|
-
* (`/addon/<addonId>/event-media/<
|
|
19434
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19400
19435
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19401
|
-
* sources — consumers fall back to `
|
|
19402
|
-
|
|
19436
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19437
|
+
keyFrameMediaId: number().int().optional(),
|
|
19403
19438
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19404
19439
|
mediaUrl: string().optional(),
|
|
19405
19440
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19449,7 +19484,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19449
19484
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19450
19485
|
*
|
|
19451
19486
|
* `url` points at the `event-media` data plane
|
|
19452
|
-
* (`/addon/<addonId>/event-media/<
|
|
19487
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19453
19488
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19454
19489
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19455
19490
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19457,10 +19492,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19457
19492
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19458
19493
|
* (per-device scoping).
|
|
19459
19494
|
*
|
|
19460
|
-
* The URL is built from the row's
|
|
19461
|
-
*
|
|
19495
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19496
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19497
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19462
19498
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19463
|
-
* `faceCrop`/`plateCrop
|
|
19499
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19500
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19501
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19464
19502
|
*
|
|
19465
19503
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19466
19504
|
*
|
|
@@ -19473,7 +19511,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19473
19511
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19474
19512
|
*/
|
|
19475
19513
|
var MediaFileSchema = object({
|
|
19476
|
-
|
|
19514
|
+
/**
|
|
19515
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19516
|
+
*
|
|
19517
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19518
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19519
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19520
|
+
* different rows that spell the same number, and a track whose
|
|
19521
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19522
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19523
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19524
|
+
* at all.
|
|
19525
|
+
*/
|
|
19526
|
+
mediaId: number().int(),
|
|
19477
19527
|
kind: MediaFileKindEnum,
|
|
19478
19528
|
sizeBytes: number(),
|
|
19479
19529
|
timestamp: number()
|
|
@@ -19581,7 +19631,7 @@ var RetrainTrackSchema = object({
|
|
|
19581
19631
|
});
|
|
19582
19632
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19583
19633
|
var RetrainFrameCandidateSchema = object({
|
|
19584
|
-
|
|
19634
|
+
mediaId: number().int(),
|
|
19585
19635
|
kind: MediaFileKindEnum,
|
|
19586
19636
|
timestamp: number(),
|
|
19587
19637
|
sizeBytes: number().int(),
|
|
@@ -19595,7 +19645,7 @@ var RetrainFrameSchema = object({
|
|
|
19595
19645
|
deviceId: number(),
|
|
19596
19646
|
trackId: string(),
|
|
19597
19647
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19598
|
-
|
|
19648
|
+
sourceMediaId: number().int(),
|
|
19599
19649
|
sourceKind: MediaFileKindEnum,
|
|
19600
19650
|
sizeBytes: number().int(),
|
|
19601
19651
|
width: number().int(),
|
|
@@ -19611,7 +19661,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19611
19661
|
var RetrainFrameSelectionSchema = object({
|
|
19612
19662
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19613
19663
|
refused: array(object({
|
|
19614
|
-
|
|
19664
|
+
sourceMediaId: number().int(),
|
|
19615
19665
|
reason: RetrainCopyRefusalSchema
|
|
19616
19666
|
})).readonly()
|
|
19617
19667
|
});
|
|
@@ -19619,7 +19669,7 @@ var RetrainFrameListSchema = object({
|
|
|
19619
19669
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19620
19670
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19621
19671
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19622
|
-
|
|
19672
|
+
autoPickMediaId: number().int().optional()
|
|
19623
19673
|
});
|
|
19624
19674
|
/** What the operator asked the assist to look for. */
|
|
19625
19675
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -19714,9 +19764,11 @@ var RecentTracksQueryInput = object({
|
|
|
19714
19764
|
});
|
|
19715
19765
|
/**
|
|
19716
19766
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
19717
|
-
* `
|
|
19718
|
-
* served by the event-media plane
|
|
19719
|
-
* member visible has been materialised
|
|
19767
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
19768
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
19769
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
19770
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
19771
|
+
* row once event ids became per-table rowids).
|
|
19720
19772
|
*/
|
|
19721
19773
|
var SummarySchema = object({
|
|
19722
19774
|
id: string(),
|
|
@@ -19725,7 +19777,7 @@ var SummarySchema = object({
|
|
|
19725
19777
|
lastActiveAt: number(),
|
|
19726
19778
|
sealedAt: number().nullable(),
|
|
19727
19779
|
memberCount: number().int().nonnegative(),
|
|
19728
|
-
|
|
19780
|
+
groupShotMediaId: number().int().nullable()
|
|
19729
19781
|
});
|
|
19730
19782
|
var SummariesQueryInput = object({
|
|
19731
19783
|
deviceIds: array(number()).min(1),
|
|
@@ -20279,7 +20331,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20279
20331
|
}), method(object({
|
|
20280
20332
|
deviceId: number(),
|
|
20281
20333
|
trackId: string(),
|
|
20282
|
-
|
|
20334
|
+
mediaIds: array(number().int()).min(1)
|
|
20283
20335
|
}), RetrainFrameSelectionSchema, {
|
|
20284
20336
|
kind: "mutation",
|
|
20285
20337
|
auth: "admin"
|
|
@@ -20347,7 +20399,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20347
20399
|
kind: "query",
|
|
20348
20400
|
auth: "admin"
|
|
20349
20401
|
}), method(object({
|
|
20350
|
-
|
|
20402
|
+
/** Which of the three event tables owns the row. */
|
|
20403
|
+
ownerType: EventOwnerTypeSchema,
|
|
20404
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20405
|
+
eventId: number().int(),
|
|
20351
20406
|
kind: MediaFileKindEnum.optional(),
|
|
20352
20407
|
deviceId: number()
|
|
20353
20408
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20358,7 +20413,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20358
20413
|
trackId: string(),
|
|
20359
20414
|
deviceId: number()
|
|
20360
20415
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20361
|
-
|
|
20416
|
+
ownerType: EventOwnerTypeSchema,
|
|
20417
|
+
eventId: number().int(),
|
|
20362
20418
|
deviceId: number()
|
|
20363
20419
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20364
20420
|
kind: "mutation",
|
|
@@ -24834,8 +24890,8 @@ var IdentitySchema = object({
|
|
|
24834
24890
|
id: string(),
|
|
24835
24891
|
name: string(),
|
|
24836
24892
|
sampleCount: number().int().nonnegative(),
|
|
24837
|
-
|
|
24838
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
24893
|
+
coverMediaId: number().int().optional(),
|
|
24894
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
24839
24895
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
24840
24896
|
coverBase64: string().optional()
|
|
24841
24897
|
});
|
|
@@ -24861,8 +24917,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
24861
24917
|
enrolledAt: number().int(),
|
|
24862
24918
|
deviceId: number().int().optional(),
|
|
24863
24919
|
source: _enum(["detected", "photo"]),
|
|
24864
|
-
/** The enrolled crop's media
|
|
24865
|
-
|
|
24920
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
24921
|
+
mediaId: number().int().optional(),
|
|
24866
24922
|
/**
|
|
24867
24923
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
24868
24924
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -24931,15 +24987,15 @@ var FaceInfoSchema = object({
|
|
|
24931
24987
|
*/
|
|
24932
24988
|
cropUrl: string().optional(),
|
|
24933
24989
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
24934
|
-
* view draw the box over the native `
|
|
24990
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
24935
24991
|
* legacy rows written before design B. */
|
|
24936
24992
|
faceBbox: BoundingBoxSchema.optional(),
|
|
24937
24993
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
24938
24994
|
* Fetch the native JPEG via the event-media data-plane
|
|
24939
|
-
* (`/addon/<addonId>/event-media/<
|
|
24995
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
24940
24996
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
24941
24997
|
* back to the inline `base64` face crop. */
|
|
24942
|
-
|
|
24998
|
+
keyFrameMediaId: number().int().optional(),
|
|
24943
24999
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
24944
25000
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
24945
25001
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -25008,11 +25064,14 @@ var FaceClusterSchema = object({
|
|
|
25008
25064
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
25009
25065
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
25010
25066
|
*
|
|
25011
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
25012
|
-
* media
|
|
25067
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
25068
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
25069
|
+
* access decision.
|
|
25013
25070
|
*/
|
|
25014
25071
|
var MediaFileLiteSchema$1 = object({
|
|
25015
|
-
|
|
25072
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
25073
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
25074
|
+
mediaId: number().int(),
|
|
25016
25075
|
kind: string(),
|
|
25017
25076
|
url: string(),
|
|
25018
25077
|
sizeBytes: number(),
|
|
@@ -25029,7 +25088,7 @@ method(object({
|
|
|
25029
25088
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
25030
25089
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
25031
25090
|
*
|
|
25032
|
-
* Nothing loses its avatar: `
|
|
25091
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
25033
25092
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
25034
25093
|
*
|
|
25035
25094
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -27497,8 +27556,8 @@ var VehicleSchema = object({
|
|
|
27497
27556
|
id: string(),
|
|
27498
27557
|
name: string(),
|
|
27499
27558
|
sampleCount: number().int().nonnegative(),
|
|
27500
|
-
|
|
27501
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
27559
|
+
coverMediaId: number().int().optional(),
|
|
27560
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
27502
27561
|
coverBase64: string().optional()
|
|
27503
27562
|
});
|
|
27504
27563
|
var VehicleSampleInfoSchema = object({
|
|
@@ -27531,7 +27590,7 @@ var PlateInfoSchema = object({
|
|
|
27531
27590
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
27532
27591
|
plateBbox: BoundingBoxSchema.optional(),
|
|
27533
27592
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
27534
|
-
|
|
27593
|
+
keyFrameMediaId: number().int().optional(),
|
|
27535
27594
|
base64: string().optional(),
|
|
27536
27595
|
/**
|
|
27537
27596
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -27552,11 +27611,14 @@ var PlateInfoSchema = object({
|
|
|
27552
27611
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27553
27612
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27554
27613
|
*
|
|
27555
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27556
|
-
* media
|
|
27614
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27615
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27616
|
+
* access decision.
|
|
27557
27617
|
*/
|
|
27558
27618
|
var MediaFileLiteSchema = object({
|
|
27559
|
-
|
|
27619
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27620
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27621
|
+
mediaId: number().int(),
|
|
27560
27622
|
kind: string(),
|
|
27561
27623
|
url: string(),
|
|
27562
27624
|
sizeBytes: number(),
|
|
@@ -27615,7 +27677,7 @@ method(object({
|
|
|
27615
27677
|
}), method(object({
|
|
27616
27678
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
27617
27679
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
27618
|
-
* option; `
|
|
27680
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
27619
27681
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
27620
27682
|
* resolves to `false` and is exactly the intended default. */
|
|
27621
27683
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -28939,7 +29001,14 @@ var SceneReferenceSchema = object({
|
|
|
28939
29001
|
modelId: string(),
|
|
28940
29002
|
condition: SceneConditionSchema,
|
|
28941
29003
|
capturedAt: number(),
|
|
28942
|
-
|
|
29004
|
+
/**
|
|
29005
|
+
* The reference thumbnail's media ROW id (D482).
|
|
29006
|
+
*
|
|
29007
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
29008
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
29009
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
29010
|
+
*/
|
|
29011
|
+
thumbnailMediaId: number().int().optional(),
|
|
28943
29012
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
28944
29013
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
28945
29014
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -30387,7 +30456,7 @@ var StationaryObjectSchema = object({
|
|
|
30387
30456
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
30388
30457
|
label: string().optional(),
|
|
30389
30458
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
30390
|
-
|
|
30459
|
+
keyFrameMediaId: number().int().optional()
|
|
30391
30460
|
});
|
|
30392
30461
|
var CameraOccupancySnapshotSchema = object({
|
|
30393
30462
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -31543,6 +31612,12 @@ Object.freeze({
|
|
|
31543
31612
|
addonId: null,
|
|
31544
31613
|
access: "create"
|
|
31545
31614
|
},
|
|
31615
|
+
"dataStoreProvider.upsert": {
|
|
31616
|
+
capName: "data-store-provider",
|
|
31617
|
+
capScope: "system",
|
|
31618
|
+
addonId: null,
|
|
31619
|
+
access: "create"
|
|
31620
|
+
},
|
|
31546
31621
|
"dayNight.getOptions": {
|
|
31547
31622
|
capName: "day-night",
|
|
31548
31623
|
capScope: "device",
|
|
@@ -35407,6 +35482,12 @@ Object.freeze({
|
|
|
35407
35482
|
addonId: null,
|
|
35408
35483
|
access: "create"
|
|
35409
35484
|
},
|
|
35485
|
+
"settingsStore.upsert": {
|
|
35486
|
+
capName: "settings-store",
|
|
35487
|
+
capScope: "system",
|
|
35488
|
+
addonId: null,
|
|
35489
|
+
access: "create"
|
|
35490
|
+
},
|
|
35410
35491
|
"smtpProvider.getStatus": {
|
|
35411
35492
|
capName: "smtp-provider",
|
|
35412
35493
|
capScope: "system",
|
package/dist/smtp.addon.mjs
CHANGED
|
@@ -34,7 +34,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
34
34
|
var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
35
35
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
36
36
|
//#endregion
|
|
37
|
-
//#region ../types/dist/event-category-
|
|
37
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
38
38
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
39
39
|
EventCategory["SystemBoot"] = "system.boot";
|
|
40
40
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -595,7 +595,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
595
595
|
* a package zone — a newly-appeared stationary object of a package class
|
|
596
596
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
597
597
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
598
|
-
* entryId, className, zoneIds,
|
|
598
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
599
599
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
600
600
|
* this bus topic drives notifier rules + live UI. See
|
|
601
601
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5381,7 +5381,7 @@ var ZodIssueCode = {
|
|
|
5381
5381
|
var ZodFirstPartyTypeKind;
|
|
5382
5382
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5383
5383
|
//#endregion
|
|
5384
|
-
//#region ../types/dist/sleep-
|
|
5384
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5385
5385
|
/**
|
|
5386
5386
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5387
5387
|
* window to float samples (D455).
|
|
@@ -7332,13 +7332,30 @@ new Set([
|
|
|
7332
7332
|
"scene",
|
|
7333
7333
|
"motion",
|
|
7334
7334
|
"object",
|
|
7335
|
-
"audio"
|
|
7335
|
+
"audio",
|
|
7336
|
+
"mosaic"
|
|
7336
7337
|
]);
|
|
7337
|
-
|
|
7338
|
+
/**
|
|
7339
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7340
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7341
|
+
* does not re-spell the list and drift from it.
|
|
7342
|
+
*/
|
|
7343
|
+
var EVENT_OWNER_TYPES = [
|
|
7338
7344
|
"motion",
|
|
7339
7345
|
"object",
|
|
7340
7346
|
"audio"
|
|
7341
|
-
]
|
|
7347
|
+
];
|
|
7348
|
+
/**
|
|
7349
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7350
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7351
|
+
* `(table, id)`).
|
|
7352
|
+
*
|
|
7353
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7354
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7355
|
+
* nothing failing until a caller asked.
|
|
7356
|
+
*/
|
|
7357
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7358
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7342
7359
|
var EncodeProfileSchema = object({
|
|
7343
7360
|
video: object({
|
|
7344
7361
|
codec: _enum([
|
|
@@ -12435,6 +12452,16 @@ method(object({
|
|
|
12435
12452
|
filter: QueryFilterSchema.optional(),
|
|
12436
12453
|
columns: array(string()).readonly().optional()
|
|
12437
12454
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12455
|
+
namespace: string().optional(),
|
|
12456
|
+
collection: string(),
|
|
12457
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12458
|
+
* index on the collection. Never empty. */
|
|
12459
|
+
conflict: array(string()).readonly(),
|
|
12460
|
+
record: BulkRecordSchema
|
|
12461
|
+
}), object({
|
|
12462
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12463
|
+
* row's own id on an update. */
|
|
12464
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12438
12465
|
namespace: string().optional(),
|
|
12439
12466
|
collection: string(),
|
|
12440
12467
|
record: object({
|
|
@@ -12569,6 +12596,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12569
12596
|
id: union([string(), number()]) }), {
|
|
12570
12597
|
kind: "mutation",
|
|
12571
12598
|
auth: "admin"
|
|
12599
|
+
}), method(object({
|
|
12600
|
+
namespace: string().optional(),
|
|
12601
|
+
collection: string(),
|
|
12602
|
+
conflict: array(string()).readonly(),
|
|
12603
|
+
record: BulkRecordSchema
|
|
12604
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12605
|
+
kind: "mutation",
|
|
12606
|
+
auth: "admin"
|
|
12572
12607
|
}), method(object({
|
|
12573
12608
|
namespace: string().optional(),
|
|
12574
12609
|
collection: string(),
|
|
@@ -18785,8 +18820,8 @@ var TrackPositionSchema = object({
|
|
|
18785
18820
|
var TrackSnapshotSchema = object({
|
|
18786
18821
|
timestamp: number(),
|
|
18787
18822
|
position: TrackPositionSchema,
|
|
18788
|
-
/**
|
|
18789
|
-
|
|
18823
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
18824
|
+
mediaId: number().int()
|
|
18790
18825
|
});
|
|
18791
18826
|
/**
|
|
18792
18827
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19390,14 +19425,14 @@ var ObjectEventSchema = object({
|
|
|
19390
19425
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19391
19426
|
frameWidth: number().optional(),
|
|
19392
19427
|
frameHeight: number().optional(),
|
|
19393
|
-
/**
|
|
19394
|
-
|
|
19395
|
-
/** Design B:
|
|
19428
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19429
|
+
mediaId: number().int().optional(),
|
|
19430
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19396
19431
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19397
|
-
* (`/addon/<addonId>/event-media/<
|
|
19432
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19398
19433
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19399
|
-
* sources — consumers fall back to `
|
|
19400
|
-
|
|
19434
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19435
|
+
keyFrameMediaId: number().int().optional(),
|
|
19401
19436
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19402
19437
|
mediaUrl: string().optional(),
|
|
19403
19438
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19447,7 +19482,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19447
19482
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19448
19483
|
*
|
|
19449
19484
|
* `url` points at the `event-media` data plane
|
|
19450
|
-
* (`/addon/<addonId>/event-media/<
|
|
19485
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19451
19486
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19452
19487
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19453
19488
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19455,10 +19490,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19455
19490
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19456
19491
|
* (per-device scoping).
|
|
19457
19492
|
*
|
|
19458
|
-
* The URL is built from the row's
|
|
19459
|
-
*
|
|
19493
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19494
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19495
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19460
19496
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19461
|
-
* `faceCrop`/`plateCrop
|
|
19497
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19498
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19499
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19462
19500
|
*
|
|
19463
19501
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19464
19502
|
*
|
|
@@ -19471,7 +19509,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19471
19509
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19472
19510
|
*/
|
|
19473
19511
|
var MediaFileSchema = object({
|
|
19474
|
-
|
|
19512
|
+
/**
|
|
19513
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19514
|
+
*
|
|
19515
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19516
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19517
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19518
|
+
* different rows that spell the same number, and a track whose
|
|
19519
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19520
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19521
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19522
|
+
* at all.
|
|
19523
|
+
*/
|
|
19524
|
+
mediaId: number().int(),
|
|
19475
19525
|
kind: MediaFileKindEnum,
|
|
19476
19526
|
sizeBytes: number(),
|
|
19477
19527
|
timestamp: number()
|
|
@@ -19579,7 +19629,7 @@ var RetrainTrackSchema = object({
|
|
|
19579
19629
|
});
|
|
19580
19630
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19581
19631
|
var RetrainFrameCandidateSchema = object({
|
|
19582
|
-
|
|
19632
|
+
mediaId: number().int(),
|
|
19583
19633
|
kind: MediaFileKindEnum,
|
|
19584
19634
|
timestamp: number(),
|
|
19585
19635
|
sizeBytes: number().int(),
|
|
@@ -19593,7 +19643,7 @@ var RetrainFrameSchema = object({
|
|
|
19593
19643
|
deviceId: number(),
|
|
19594
19644
|
trackId: string(),
|
|
19595
19645
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19596
|
-
|
|
19646
|
+
sourceMediaId: number().int(),
|
|
19597
19647
|
sourceKind: MediaFileKindEnum,
|
|
19598
19648
|
sizeBytes: number().int(),
|
|
19599
19649
|
width: number().int(),
|
|
@@ -19609,7 +19659,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19609
19659
|
var RetrainFrameSelectionSchema = object({
|
|
19610
19660
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19611
19661
|
refused: array(object({
|
|
19612
|
-
|
|
19662
|
+
sourceMediaId: number().int(),
|
|
19613
19663
|
reason: RetrainCopyRefusalSchema
|
|
19614
19664
|
})).readonly()
|
|
19615
19665
|
});
|
|
@@ -19617,7 +19667,7 @@ var RetrainFrameListSchema = object({
|
|
|
19617
19667
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19618
19668
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19619
19669
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19620
|
-
|
|
19670
|
+
autoPickMediaId: number().int().optional()
|
|
19621
19671
|
});
|
|
19622
19672
|
/** What the operator asked the assist to look for. */
|
|
19623
19673
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -19712,9 +19762,11 @@ var RecentTracksQueryInput = object({
|
|
|
19712
19762
|
});
|
|
19713
19763
|
/**
|
|
19714
19764
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
19715
|
-
* `
|
|
19716
|
-
* served by the event-media plane
|
|
19717
|
-
* member visible has been materialised
|
|
19765
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
19766
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
19767
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
19768
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
19769
|
+
* row once event ids became per-table rowids).
|
|
19718
19770
|
*/
|
|
19719
19771
|
var SummarySchema = object({
|
|
19720
19772
|
id: string(),
|
|
@@ -19723,7 +19775,7 @@ var SummarySchema = object({
|
|
|
19723
19775
|
lastActiveAt: number(),
|
|
19724
19776
|
sealedAt: number().nullable(),
|
|
19725
19777
|
memberCount: number().int().nonnegative(),
|
|
19726
|
-
|
|
19778
|
+
groupShotMediaId: number().int().nullable()
|
|
19727
19779
|
});
|
|
19728
19780
|
var SummariesQueryInput = object({
|
|
19729
19781
|
deviceIds: array(number()).min(1),
|
|
@@ -20277,7 +20329,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20277
20329
|
}), method(object({
|
|
20278
20330
|
deviceId: number(),
|
|
20279
20331
|
trackId: string(),
|
|
20280
|
-
|
|
20332
|
+
mediaIds: array(number().int()).min(1)
|
|
20281
20333
|
}), RetrainFrameSelectionSchema, {
|
|
20282
20334
|
kind: "mutation",
|
|
20283
20335
|
auth: "admin"
|
|
@@ -20345,7 +20397,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20345
20397
|
kind: "query",
|
|
20346
20398
|
auth: "admin"
|
|
20347
20399
|
}), method(object({
|
|
20348
|
-
|
|
20400
|
+
/** Which of the three event tables owns the row. */
|
|
20401
|
+
ownerType: EventOwnerTypeSchema,
|
|
20402
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20403
|
+
eventId: number().int(),
|
|
20349
20404
|
kind: MediaFileKindEnum.optional(),
|
|
20350
20405
|
deviceId: number()
|
|
20351
20406
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20356,7 +20411,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20356
20411
|
trackId: string(),
|
|
20357
20412
|
deviceId: number()
|
|
20358
20413
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20359
|
-
|
|
20414
|
+
ownerType: EventOwnerTypeSchema,
|
|
20415
|
+
eventId: number().int(),
|
|
20360
20416
|
deviceId: number()
|
|
20361
20417
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20362
20418
|
kind: "mutation",
|
|
@@ -24832,8 +24888,8 @@ var IdentitySchema = object({
|
|
|
24832
24888
|
id: string(),
|
|
24833
24889
|
name: string(),
|
|
24834
24890
|
sampleCount: number().int().nonnegative(),
|
|
24835
|
-
|
|
24836
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
24891
|
+
coverMediaId: number().int().optional(),
|
|
24892
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
24837
24893
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
24838
24894
|
coverBase64: string().optional()
|
|
24839
24895
|
});
|
|
@@ -24859,8 +24915,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
24859
24915
|
enrolledAt: number().int(),
|
|
24860
24916
|
deviceId: number().int().optional(),
|
|
24861
24917
|
source: _enum(["detected", "photo"]),
|
|
24862
|
-
/** The enrolled crop's media
|
|
24863
|
-
|
|
24918
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
24919
|
+
mediaId: number().int().optional(),
|
|
24864
24920
|
/**
|
|
24865
24921
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
24866
24922
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -24929,15 +24985,15 @@ var FaceInfoSchema = object({
|
|
|
24929
24985
|
*/
|
|
24930
24986
|
cropUrl: string().optional(),
|
|
24931
24987
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
24932
|
-
* view draw the box over the native `
|
|
24988
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
24933
24989
|
* legacy rows written before design B. */
|
|
24934
24990
|
faceBbox: BoundingBoxSchema.optional(),
|
|
24935
24991
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
24936
24992
|
* Fetch the native JPEG via the event-media data-plane
|
|
24937
|
-
* (`/addon/<addonId>/event-media/<
|
|
24993
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
24938
24994
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
24939
24995
|
* back to the inline `base64` face crop. */
|
|
24940
|
-
|
|
24996
|
+
keyFrameMediaId: number().int().optional(),
|
|
24941
24997
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
24942
24998
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
24943
24999
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -25006,11 +25062,14 @@ var FaceClusterSchema = object({
|
|
|
25006
25062
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
25007
25063
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
25008
25064
|
*
|
|
25009
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
25010
|
-
* media
|
|
25065
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
25066
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
25067
|
+
* access decision.
|
|
25011
25068
|
*/
|
|
25012
25069
|
var MediaFileLiteSchema$1 = object({
|
|
25013
|
-
|
|
25070
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
25071
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
25072
|
+
mediaId: number().int(),
|
|
25014
25073
|
kind: string(),
|
|
25015
25074
|
url: string(),
|
|
25016
25075
|
sizeBytes: number(),
|
|
@@ -25027,7 +25086,7 @@ method(object({
|
|
|
25027
25086
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
25028
25087
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
25029
25088
|
*
|
|
25030
|
-
* Nothing loses its avatar: `
|
|
25089
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
25031
25090
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
25032
25091
|
*
|
|
25033
25092
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -27495,8 +27554,8 @@ var VehicleSchema = object({
|
|
|
27495
27554
|
id: string(),
|
|
27496
27555
|
name: string(),
|
|
27497
27556
|
sampleCount: number().int().nonnegative(),
|
|
27498
|
-
|
|
27499
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
27557
|
+
coverMediaId: number().int().optional(),
|
|
27558
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
27500
27559
|
coverBase64: string().optional()
|
|
27501
27560
|
});
|
|
27502
27561
|
var VehicleSampleInfoSchema = object({
|
|
@@ -27529,7 +27588,7 @@ var PlateInfoSchema = object({
|
|
|
27529
27588
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
27530
27589
|
plateBbox: BoundingBoxSchema.optional(),
|
|
27531
27590
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
27532
|
-
|
|
27591
|
+
keyFrameMediaId: number().int().optional(),
|
|
27533
27592
|
base64: string().optional(),
|
|
27534
27593
|
/**
|
|
27535
27594
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -27550,11 +27609,14 @@ var PlateInfoSchema = object({
|
|
|
27550
27609
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27551
27610
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27552
27611
|
*
|
|
27553
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27554
|
-
* media
|
|
27612
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27613
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27614
|
+
* access decision.
|
|
27555
27615
|
*/
|
|
27556
27616
|
var MediaFileLiteSchema = object({
|
|
27557
|
-
|
|
27617
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27618
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27619
|
+
mediaId: number().int(),
|
|
27558
27620
|
kind: string(),
|
|
27559
27621
|
url: string(),
|
|
27560
27622
|
sizeBytes: number(),
|
|
@@ -27613,7 +27675,7 @@ method(object({
|
|
|
27613
27675
|
}), method(object({
|
|
27614
27676
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
27615
27677
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
27616
|
-
* option; `
|
|
27678
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
27617
27679
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
27618
27680
|
* resolves to `false` and is exactly the intended default. */
|
|
27619
27681
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -28937,7 +28999,14 @@ var SceneReferenceSchema = object({
|
|
|
28937
28999
|
modelId: string(),
|
|
28938
29000
|
condition: SceneConditionSchema,
|
|
28939
29001
|
capturedAt: number(),
|
|
28940
|
-
|
|
29002
|
+
/**
|
|
29003
|
+
* The reference thumbnail's media ROW id (D482).
|
|
29004
|
+
*
|
|
29005
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
29006
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
29007
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
29008
|
+
*/
|
|
29009
|
+
thumbnailMediaId: number().int().optional(),
|
|
28941
29010
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
28942
29011
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
28943
29012
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -30385,7 +30454,7 @@ var StationaryObjectSchema = object({
|
|
|
30385
30454
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
30386
30455
|
label: string().optional(),
|
|
30387
30456
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
30388
|
-
|
|
30457
|
+
keyFrameMediaId: number().int().optional()
|
|
30389
30458
|
});
|
|
30390
30459
|
var CameraOccupancySnapshotSchema = object({
|
|
30391
30460
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -31541,6 +31610,12 @@ Object.freeze({
|
|
|
31541
31610
|
addonId: null,
|
|
31542
31611
|
access: "create"
|
|
31543
31612
|
},
|
|
31613
|
+
"dataStoreProvider.upsert": {
|
|
31614
|
+
capName: "data-store-provider",
|
|
31615
|
+
capScope: "system",
|
|
31616
|
+
addonId: null,
|
|
31617
|
+
access: "create"
|
|
31618
|
+
},
|
|
31544
31619
|
"dayNight.getOptions": {
|
|
31545
31620
|
capName: "day-night",
|
|
31546
31621
|
capScope: "device",
|
|
@@ -35405,6 +35480,12 @@ Object.freeze({
|
|
|
35405
35480
|
addonId: null,
|
|
35406
35481
|
access: "create"
|
|
35407
35482
|
},
|
|
35483
|
+
"settingsStore.upsert": {
|
|
35484
|
+
capName: "settings-store",
|
|
35485
|
+
capScope: "system",
|
|
35486
|
+
addonId: null,
|
|
35487
|
+
access: "create"
|
|
35488
|
+
},
|
|
35408
35489
|
"smtpProvider.getStatus": {
|
|
35409
35490
|
capName: "smtp-provider",
|
|
35410
35491
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-smtp-nodemailer",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.99",
|
|
4
4
|
"description": "SMTP email provider addon for CamStack — wraps `nodemailer` and registers a `smtp-provider` cap collection entry. Used by magic-link login + notifier addons.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|