@camstack/addon-export-alexa 1.2.105 → 1.2.106
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/export-alexa.addon.js +131 -50
- package/dist/export-alexa.addon.mjs +131 -50
- package/package.json +1 -1
|
@@ -26,7 +26,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
//#endregion
|
|
27
27
|
let node_crypto = require("node:crypto");
|
|
28
28
|
node_crypto = __toESM(node_crypto);
|
|
29
|
-
//#region ../types/dist/event-category-
|
|
29
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
30
30
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
31
31
|
EventCategory["SystemBoot"] = "system.boot";
|
|
32
32
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -587,7 +587,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
587
587
|
* a package zone — a newly-appeared stationary object of a package class
|
|
588
588
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
589
589
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
590
|
-
* entryId, className, zoneIds,
|
|
590
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
591
591
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
592
592
|
* this bus topic drives notifier rules + live UI. See
|
|
593
593
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5373,7 +5373,7 @@ var ZodIssueCode = {
|
|
|
5373
5373
|
var ZodFirstPartyTypeKind;
|
|
5374
5374
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5375
5375
|
//#endregion
|
|
5376
|
-
//#region ../types/dist/sleep-
|
|
5376
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5377
5377
|
/**
|
|
5378
5378
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5379
5379
|
* window to float samples (D455).
|
|
@@ -7336,13 +7336,30 @@ new Set([
|
|
|
7336
7336
|
"scene",
|
|
7337
7337
|
"motion",
|
|
7338
7338
|
"object",
|
|
7339
|
-
"audio"
|
|
7339
|
+
"audio",
|
|
7340
|
+
"mosaic"
|
|
7340
7341
|
]);
|
|
7341
|
-
|
|
7342
|
+
/**
|
|
7343
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7344
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7345
|
+
* does not re-spell the list and drift from it.
|
|
7346
|
+
*/
|
|
7347
|
+
var EVENT_OWNER_TYPES = [
|
|
7342
7348
|
"motion",
|
|
7343
7349
|
"object",
|
|
7344
7350
|
"audio"
|
|
7345
|
-
]
|
|
7351
|
+
];
|
|
7352
|
+
/**
|
|
7353
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7354
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7355
|
+
* `(table, id)`).
|
|
7356
|
+
*
|
|
7357
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7358
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7359
|
+
* nothing failing until a caller asked.
|
|
7360
|
+
*/
|
|
7361
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7362
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7346
7363
|
/**
|
|
7347
7364
|
* Build an `IAddonRouteProvider` from a list of routes. Implements
|
|
7348
7365
|
* both the operator-facing `getRoutes` (returning route descriptors
|
|
@@ -12684,6 +12701,16 @@ method(object({
|
|
|
12684
12701
|
filter: QueryFilterSchema.optional(),
|
|
12685
12702
|
columns: array(string()).readonly().optional()
|
|
12686
12703
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12704
|
+
namespace: string().optional(),
|
|
12705
|
+
collection: string(),
|
|
12706
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12707
|
+
* index on the collection. Never empty. */
|
|
12708
|
+
conflict: array(string()).readonly(),
|
|
12709
|
+
record: BulkRecordSchema
|
|
12710
|
+
}), object({
|
|
12711
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12712
|
+
* row's own id on an update. */
|
|
12713
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12687
12714
|
namespace: string().optional(),
|
|
12688
12715
|
collection: string(),
|
|
12689
12716
|
record: object({
|
|
@@ -12818,6 +12845,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12818
12845
|
id: union([string(), number()]) }), {
|
|
12819
12846
|
kind: "mutation",
|
|
12820
12847
|
auth: "admin"
|
|
12848
|
+
}), method(object({
|
|
12849
|
+
namespace: string().optional(),
|
|
12850
|
+
collection: string(),
|
|
12851
|
+
conflict: array(string()).readonly(),
|
|
12852
|
+
record: BulkRecordSchema
|
|
12853
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12854
|
+
kind: "mutation",
|
|
12855
|
+
auth: "admin"
|
|
12821
12856
|
}), method(object({
|
|
12822
12857
|
namespace: string().optional(),
|
|
12823
12858
|
collection: string(),
|
|
@@ -19075,8 +19110,8 @@ var TrackPositionSchema = object({
|
|
|
19075
19110
|
var TrackSnapshotSchema = object({
|
|
19076
19111
|
timestamp: number(),
|
|
19077
19112
|
position: TrackPositionSchema,
|
|
19078
|
-
/**
|
|
19079
|
-
|
|
19113
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19114
|
+
mediaId: number().int()
|
|
19080
19115
|
});
|
|
19081
19116
|
/**
|
|
19082
19117
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19680,14 +19715,14 @@ var ObjectEventSchema = object({
|
|
|
19680
19715
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19681
19716
|
frameWidth: number().optional(),
|
|
19682
19717
|
frameHeight: number().optional(),
|
|
19683
|
-
/**
|
|
19684
|
-
|
|
19685
|
-
/** Design B:
|
|
19718
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19719
|
+
mediaId: number().int().optional(),
|
|
19720
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19686
19721
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19687
|
-
* (`/addon/<addonId>/event-media/<
|
|
19722
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19688
19723
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19689
|
-
* sources — consumers fall back to `
|
|
19690
|
-
|
|
19724
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19725
|
+
keyFrameMediaId: number().int().optional(),
|
|
19691
19726
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19692
19727
|
mediaUrl: string().optional(),
|
|
19693
19728
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19737,7 +19772,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19737
19772
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19738
19773
|
*
|
|
19739
19774
|
* `url` points at the `event-media` data plane
|
|
19740
|
-
* (`/addon/<addonId>/event-media/<
|
|
19775
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19741
19776
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19742
19777
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19743
19778
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19745,10 +19780,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19745
19780
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19746
19781
|
* (per-device scoping).
|
|
19747
19782
|
*
|
|
19748
|
-
* The URL is built from the row's
|
|
19749
|
-
*
|
|
19783
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19784
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19785
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19750
19786
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19751
|
-
* `faceCrop`/`plateCrop
|
|
19787
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19788
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19789
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19752
19790
|
*
|
|
19753
19791
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19754
19792
|
*
|
|
@@ -19761,7 +19799,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19761
19799
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19762
19800
|
*/
|
|
19763
19801
|
var MediaFileSchema = object({
|
|
19764
|
-
|
|
19802
|
+
/**
|
|
19803
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19804
|
+
*
|
|
19805
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19806
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19807
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19808
|
+
* different rows that spell the same number, and a track whose
|
|
19809
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19810
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19811
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19812
|
+
* at all.
|
|
19813
|
+
*/
|
|
19814
|
+
mediaId: number().int(),
|
|
19765
19815
|
kind: MediaFileKindEnum,
|
|
19766
19816
|
sizeBytes: number(),
|
|
19767
19817
|
timestamp: number()
|
|
@@ -19869,7 +19919,7 @@ var RetrainTrackSchema = object({
|
|
|
19869
19919
|
});
|
|
19870
19920
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19871
19921
|
var RetrainFrameCandidateSchema = object({
|
|
19872
|
-
|
|
19922
|
+
mediaId: number().int(),
|
|
19873
19923
|
kind: MediaFileKindEnum,
|
|
19874
19924
|
timestamp: number(),
|
|
19875
19925
|
sizeBytes: number().int(),
|
|
@@ -19883,7 +19933,7 @@ var RetrainFrameSchema = object({
|
|
|
19883
19933
|
deviceId: number(),
|
|
19884
19934
|
trackId: string(),
|
|
19885
19935
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19886
|
-
|
|
19936
|
+
sourceMediaId: number().int(),
|
|
19887
19937
|
sourceKind: MediaFileKindEnum,
|
|
19888
19938
|
sizeBytes: number().int(),
|
|
19889
19939
|
width: number().int(),
|
|
@@ -19899,7 +19949,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19899
19949
|
var RetrainFrameSelectionSchema = object({
|
|
19900
19950
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19901
19951
|
refused: array(object({
|
|
19902
|
-
|
|
19952
|
+
sourceMediaId: number().int(),
|
|
19903
19953
|
reason: RetrainCopyRefusalSchema
|
|
19904
19954
|
})).readonly()
|
|
19905
19955
|
});
|
|
@@ -19907,7 +19957,7 @@ var RetrainFrameListSchema = object({
|
|
|
19907
19957
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19908
19958
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19909
19959
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19910
|
-
|
|
19960
|
+
autoPickMediaId: number().int().optional()
|
|
19911
19961
|
});
|
|
19912
19962
|
/** What the operator asked the assist to look for. */
|
|
19913
19963
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20002,9 +20052,11 @@ var RecentTracksQueryInput = object({
|
|
|
20002
20052
|
});
|
|
20003
20053
|
/**
|
|
20004
20054
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20005
|
-
* `
|
|
20006
|
-
* served by the event-media plane
|
|
20007
|
-
* member visible has been materialised
|
|
20055
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20056
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20057
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20058
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20059
|
+
* row once event ids became per-table rowids).
|
|
20008
20060
|
*/
|
|
20009
20061
|
var SummarySchema = object({
|
|
20010
20062
|
id: string(),
|
|
@@ -20013,7 +20065,7 @@ var SummarySchema = object({
|
|
|
20013
20065
|
lastActiveAt: number(),
|
|
20014
20066
|
sealedAt: number().nullable(),
|
|
20015
20067
|
memberCount: number().int().nonnegative(),
|
|
20016
|
-
|
|
20068
|
+
groupShotMediaId: number().int().nullable()
|
|
20017
20069
|
});
|
|
20018
20070
|
var SummariesQueryInput = object({
|
|
20019
20071
|
deviceIds: array(number()).min(1),
|
|
@@ -20567,7 +20619,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20567
20619
|
}), method(object({
|
|
20568
20620
|
deviceId: number(),
|
|
20569
20621
|
trackId: string(),
|
|
20570
|
-
|
|
20622
|
+
mediaIds: array(number().int()).min(1)
|
|
20571
20623
|
}), RetrainFrameSelectionSchema, {
|
|
20572
20624
|
kind: "mutation",
|
|
20573
20625
|
auth: "admin"
|
|
@@ -20635,7 +20687,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20635
20687
|
kind: "query",
|
|
20636
20688
|
auth: "admin"
|
|
20637
20689
|
}), method(object({
|
|
20638
|
-
|
|
20690
|
+
/** Which of the three event tables owns the row. */
|
|
20691
|
+
ownerType: EventOwnerTypeSchema,
|
|
20692
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20693
|
+
eventId: number().int(),
|
|
20639
20694
|
kind: MediaFileKindEnum.optional(),
|
|
20640
20695
|
deviceId: number()
|
|
20641
20696
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20646,7 +20701,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20646
20701
|
trackId: string(),
|
|
20647
20702
|
deviceId: number()
|
|
20648
20703
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20649
|
-
|
|
20704
|
+
ownerType: EventOwnerTypeSchema,
|
|
20705
|
+
eventId: number().int(),
|
|
20650
20706
|
deviceId: number()
|
|
20651
20707
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20652
20708
|
kind: "mutation",
|
|
@@ -25109,8 +25165,8 @@ var IdentitySchema = object({
|
|
|
25109
25165
|
id: string(),
|
|
25110
25166
|
name: string(),
|
|
25111
25167
|
sampleCount: number().int().nonnegative(),
|
|
25112
|
-
|
|
25113
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
25168
|
+
coverMediaId: number().int().optional(),
|
|
25169
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
25114
25170
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
25115
25171
|
coverBase64: string().optional()
|
|
25116
25172
|
});
|
|
@@ -25136,8 +25192,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
25136
25192
|
enrolledAt: number().int(),
|
|
25137
25193
|
deviceId: number().int().optional(),
|
|
25138
25194
|
source: _enum(["detected", "photo"]),
|
|
25139
|
-
/** The enrolled crop's media
|
|
25140
|
-
|
|
25195
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
25196
|
+
mediaId: number().int().optional(),
|
|
25141
25197
|
/**
|
|
25142
25198
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
25143
25199
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -25206,15 +25262,15 @@ var FaceInfoSchema = object({
|
|
|
25206
25262
|
*/
|
|
25207
25263
|
cropUrl: string().optional(),
|
|
25208
25264
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
25209
|
-
* view draw the box over the native `
|
|
25265
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
25210
25266
|
* legacy rows written before design B. */
|
|
25211
25267
|
faceBbox: BoundingBoxSchema.optional(),
|
|
25212
25268
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
25213
25269
|
* Fetch the native JPEG via the event-media data-plane
|
|
25214
|
-
* (`/addon/<addonId>/event-media/<
|
|
25270
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
25215
25271
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
25216
25272
|
* back to the inline `base64` face crop. */
|
|
25217
|
-
|
|
25273
|
+
keyFrameMediaId: number().int().optional(),
|
|
25218
25274
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
25219
25275
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
25220
25276
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -25283,11 +25339,14 @@ var FaceClusterSchema = object({
|
|
|
25283
25339
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
25284
25340
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
25285
25341
|
*
|
|
25286
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
25287
|
-
* media
|
|
25342
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
25343
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
25344
|
+
* access decision.
|
|
25288
25345
|
*/
|
|
25289
25346
|
var MediaFileLiteSchema$1 = object({
|
|
25290
|
-
|
|
25347
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
25348
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
25349
|
+
mediaId: number().int(),
|
|
25291
25350
|
kind: string(),
|
|
25292
25351
|
url: string(),
|
|
25293
25352
|
sizeBytes: number(),
|
|
@@ -25304,7 +25363,7 @@ method(object({
|
|
|
25304
25363
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
25305
25364
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
25306
25365
|
*
|
|
25307
|
-
* Nothing loses its avatar: `
|
|
25366
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
25308
25367
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
25309
25368
|
*
|
|
25310
25369
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -27772,8 +27831,8 @@ var VehicleSchema = object({
|
|
|
27772
27831
|
id: string(),
|
|
27773
27832
|
name: string(),
|
|
27774
27833
|
sampleCount: number().int().nonnegative(),
|
|
27775
|
-
|
|
27776
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
27834
|
+
coverMediaId: number().int().optional(),
|
|
27835
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
27777
27836
|
coverBase64: string().optional()
|
|
27778
27837
|
});
|
|
27779
27838
|
var VehicleSampleInfoSchema = object({
|
|
@@ -27806,7 +27865,7 @@ var PlateInfoSchema = object({
|
|
|
27806
27865
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
27807
27866
|
plateBbox: BoundingBoxSchema.optional(),
|
|
27808
27867
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
27809
|
-
|
|
27868
|
+
keyFrameMediaId: number().int().optional(),
|
|
27810
27869
|
base64: string().optional(),
|
|
27811
27870
|
/**
|
|
27812
27871
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -27827,11 +27886,14 @@ var PlateInfoSchema = object({
|
|
|
27827
27886
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27828
27887
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27829
27888
|
*
|
|
27830
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27831
|
-
* media
|
|
27889
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27890
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27891
|
+
* access decision.
|
|
27832
27892
|
*/
|
|
27833
27893
|
var MediaFileLiteSchema = object({
|
|
27834
|
-
|
|
27894
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27895
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27896
|
+
mediaId: number().int(),
|
|
27835
27897
|
kind: string(),
|
|
27836
27898
|
url: string(),
|
|
27837
27899
|
sizeBytes: number(),
|
|
@@ -27890,7 +27952,7 @@ method(object({
|
|
|
27890
27952
|
}), method(object({
|
|
27891
27953
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
27892
27954
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
27893
|
-
* option; `
|
|
27955
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
27894
27956
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
27895
27957
|
* resolves to `false` and is exactly the intended default. */
|
|
27896
27958
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -29214,7 +29276,14 @@ var SceneReferenceSchema = object({
|
|
|
29214
29276
|
modelId: string(),
|
|
29215
29277
|
condition: SceneConditionSchema,
|
|
29216
29278
|
capturedAt: number(),
|
|
29217
|
-
|
|
29279
|
+
/**
|
|
29280
|
+
* The reference thumbnail's media ROW id (D482).
|
|
29281
|
+
*
|
|
29282
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
29283
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
29284
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
29285
|
+
*/
|
|
29286
|
+
thumbnailMediaId: number().int().optional(),
|
|
29218
29287
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
29219
29288
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
29220
29289
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -30662,7 +30731,7 @@ var StationaryObjectSchema = object({
|
|
|
30662
30731
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
30663
30732
|
label: string().optional(),
|
|
30664
30733
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
30665
|
-
|
|
30734
|
+
keyFrameMediaId: number().int().optional()
|
|
30666
30735
|
});
|
|
30667
30736
|
var CameraOccupancySnapshotSchema = object({
|
|
30668
30737
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -31818,6 +31887,12 @@ Object.freeze({
|
|
|
31818
31887
|
addonId: null,
|
|
31819
31888
|
access: "create"
|
|
31820
31889
|
},
|
|
31890
|
+
"dataStoreProvider.upsert": {
|
|
31891
|
+
capName: "data-store-provider",
|
|
31892
|
+
capScope: "system",
|
|
31893
|
+
addonId: null,
|
|
31894
|
+
access: "create"
|
|
31895
|
+
},
|
|
31821
31896
|
"dayNight.getOptions": {
|
|
31822
31897
|
capName: "day-night",
|
|
31823
31898
|
capScope: "device",
|
|
@@ -35682,6 +35757,12 @@ Object.freeze({
|
|
|
35682
35757
|
addonId: null,
|
|
35683
35758
|
access: "create"
|
|
35684
35759
|
},
|
|
35760
|
+
"settingsStore.upsert": {
|
|
35761
|
+
capName: "settings-store",
|
|
35762
|
+
capScope: "system",
|
|
35763
|
+
addonId: null,
|
|
35764
|
+
access: "create"
|
|
35765
|
+
},
|
|
35685
35766
|
"smtpProvider.getStatus": {
|
|
35686
35767
|
capName: "smtp-provider",
|
|
35687
35768
|
capScope: "system",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as crypto$1 from "node:crypto";
|
|
2
|
-
//#region ../types/dist/event-category-
|
|
2
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
3
3
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4
4
|
EventCategory["SystemBoot"] = "system.boot";
|
|
5
5
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -560,7 +560,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
560
560
|
* a package zone — a newly-appeared stationary object of a package class
|
|
561
561
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
562
562
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
563
|
-
* entryId, className, zoneIds,
|
|
563
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
564
564
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
565
565
|
* this bus topic drives notifier rules + live UI. See
|
|
566
566
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5346,7 +5346,7 @@ var ZodIssueCode = {
|
|
|
5346
5346
|
var ZodFirstPartyTypeKind;
|
|
5347
5347
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5348
5348
|
//#endregion
|
|
5349
|
-
//#region ../types/dist/sleep-
|
|
5349
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5350
5350
|
/**
|
|
5351
5351
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5352
5352
|
* window to float samples (D455).
|
|
@@ -7309,13 +7309,30 @@ new Set([
|
|
|
7309
7309
|
"scene",
|
|
7310
7310
|
"motion",
|
|
7311
7311
|
"object",
|
|
7312
|
-
"audio"
|
|
7312
|
+
"audio",
|
|
7313
|
+
"mosaic"
|
|
7313
7314
|
]);
|
|
7314
|
-
|
|
7315
|
+
/**
|
|
7316
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7317
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7318
|
+
* does not re-spell the list and drift from it.
|
|
7319
|
+
*/
|
|
7320
|
+
var EVENT_OWNER_TYPES = [
|
|
7315
7321
|
"motion",
|
|
7316
7322
|
"object",
|
|
7317
7323
|
"audio"
|
|
7318
|
-
]
|
|
7324
|
+
];
|
|
7325
|
+
/**
|
|
7326
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7327
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7328
|
+
* `(table, id)`).
|
|
7329
|
+
*
|
|
7330
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7331
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7332
|
+
* nothing failing until a caller asked.
|
|
7333
|
+
*/
|
|
7334
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7335
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7319
7336
|
/**
|
|
7320
7337
|
* Build an `IAddonRouteProvider` from a list of routes. Implements
|
|
7321
7338
|
* both the operator-facing `getRoutes` (returning route descriptors
|
|
@@ -12657,6 +12674,16 @@ method(object({
|
|
|
12657
12674
|
filter: QueryFilterSchema.optional(),
|
|
12658
12675
|
columns: array(string()).readonly().optional()
|
|
12659
12676
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12677
|
+
namespace: string().optional(),
|
|
12678
|
+
collection: string(),
|
|
12679
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12680
|
+
* index on the collection. Never empty. */
|
|
12681
|
+
conflict: array(string()).readonly(),
|
|
12682
|
+
record: BulkRecordSchema
|
|
12683
|
+
}), object({
|
|
12684
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12685
|
+
* row's own id on an update. */
|
|
12686
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12660
12687
|
namespace: string().optional(),
|
|
12661
12688
|
collection: string(),
|
|
12662
12689
|
record: object({
|
|
@@ -12791,6 +12818,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12791
12818
|
id: union([string(), number()]) }), {
|
|
12792
12819
|
kind: "mutation",
|
|
12793
12820
|
auth: "admin"
|
|
12821
|
+
}), method(object({
|
|
12822
|
+
namespace: string().optional(),
|
|
12823
|
+
collection: string(),
|
|
12824
|
+
conflict: array(string()).readonly(),
|
|
12825
|
+
record: BulkRecordSchema
|
|
12826
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12827
|
+
kind: "mutation",
|
|
12828
|
+
auth: "admin"
|
|
12794
12829
|
}), method(object({
|
|
12795
12830
|
namespace: string().optional(),
|
|
12796
12831
|
collection: string(),
|
|
@@ -19048,8 +19083,8 @@ var TrackPositionSchema = object({
|
|
|
19048
19083
|
var TrackSnapshotSchema = object({
|
|
19049
19084
|
timestamp: number(),
|
|
19050
19085
|
position: TrackPositionSchema,
|
|
19051
|
-
/**
|
|
19052
|
-
|
|
19086
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19087
|
+
mediaId: number().int()
|
|
19053
19088
|
});
|
|
19054
19089
|
/**
|
|
19055
19090
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19653,14 +19688,14 @@ var ObjectEventSchema = object({
|
|
|
19653
19688
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19654
19689
|
frameWidth: number().optional(),
|
|
19655
19690
|
frameHeight: number().optional(),
|
|
19656
|
-
/**
|
|
19657
|
-
|
|
19658
|
-
/** Design B:
|
|
19691
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19692
|
+
mediaId: number().int().optional(),
|
|
19693
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19659
19694
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19660
|
-
* (`/addon/<addonId>/event-media/<
|
|
19695
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19661
19696
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19662
|
-
* sources — consumers fall back to `
|
|
19663
|
-
|
|
19697
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19698
|
+
keyFrameMediaId: number().int().optional(),
|
|
19664
19699
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19665
19700
|
mediaUrl: string().optional(),
|
|
19666
19701
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19710,7 +19745,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19710
19745
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19711
19746
|
*
|
|
19712
19747
|
* `url` points at the `event-media` data plane
|
|
19713
|
-
* (`/addon/<addonId>/event-media/<
|
|
19748
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19714
19749
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19715
19750
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19716
19751
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19718,10 +19753,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19718
19753
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19719
19754
|
* (per-device scoping).
|
|
19720
19755
|
*
|
|
19721
|
-
* The URL is built from the row's
|
|
19722
|
-
*
|
|
19756
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19757
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19758
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19723
19759
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19724
|
-
* `faceCrop`/`plateCrop
|
|
19760
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19761
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19762
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19725
19763
|
*
|
|
19726
19764
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19727
19765
|
*
|
|
@@ -19734,7 +19772,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19734
19772
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19735
19773
|
*/
|
|
19736
19774
|
var MediaFileSchema = object({
|
|
19737
|
-
|
|
19775
|
+
/**
|
|
19776
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19777
|
+
*
|
|
19778
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19779
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19780
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19781
|
+
* different rows that spell the same number, and a track whose
|
|
19782
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19783
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19784
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19785
|
+
* at all.
|
|
19786
|
+
*/
|
|
19787
|
+
mediaId: number().int(),
|
|
19738
19788
|
kind: MediaFileKindEnum,
|
|
19739
19789
|
sizeBytes: number(),
|
|
19740
19790
|
timestamp: number()
|
|
@@ -19842,7 +19892,7 @@ var RetrainTrackSchema = object({
|
|
|
19842
19892
|
});
|
|
19843
19893
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19844
19894
|
var RetrainFrameCandidateSchema = object({
|
|
19845
|
-
|
|
19895
|
+
mediaId: number().int(),
|
|
19846
19896
|
kind: MediaFileKindEnum,
|
|
19847
19897
|
timestamp: number(),
|
|
19848
19898
|
sizeBytes: number().int(),
|
|
@@ -19856,7 +19906,7 @@ var RetrainFrameSchema = object({
|
|
|
19856
19906
|
deviceId: number(),
|
|
19857
19907
|
trackId: string(),
|
|
19858
19908
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19859
|
-
|
|
19909
|
+
sourceMediaId: number().int(),
|
|
19860
19910
|
sourceKind: MediaFileKindEnum,
|
|
19861
19911
|
sizeBytes: number().int(),
|
|
19862
19912
|
width: number().int(),
|
|
@@ -19872,7 +19922,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19872
19922
|
var RetrainFrameSelectionSchema = object({
|
|
19873
19923
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19874
19924
|
refused: array(object({
|
|
19875
|
-
|
|
19925
|
+
sourceMediaId: number().int(),
|
|
19876
19926
|
reason: RetrainCopyRefusalSchema
|
|
19877
19927
|
})).readonly()
|
|
19878
19928
|
});
|
|
@@ -19880,7 +19930,7 @@ var RetrainFrameListSchema = object({
|
|
|
19880
19930
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19881
19931
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19882
19932
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19883
|
-
|
|
19933
|
+
autoPickMediaId: number().int().optional()
|
|
19884
19934
|
});
|
|
19885
19935
|
/** What the operator asked the assist to look for. */
|
|
19886
19936
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -19975,9 +20025,11 @@ var RecentTracksQueryInput = object({
|
|
|
19975
20025
|
});
|
|
19976
20026
|
/**
|
|
19977
20027
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
19978
|
-
* `
|
|
19979
|
-
* served by the event-media plane
|
|
19980
|
-
* member visible has been materialised
|
|
20028
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20029
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20030
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20031
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20032
|
+
* row once event ids became per-table rowids).
|
|
19981
20033
|
*/
|
|
19982
20034
|
var SummarySchema = object({
|
|
19983
20035
|
id: string(),
|
|
@@ -19986,7 +20038,7 @@ var SummarySchema = object({
|
|
|
19986
20038
|
lastActiveAt: number(),
|
|
19987
20039
|
sealedAt: number().nullable(),
|
|
19988
20040
|
memberCount: number().int().nonnegative(),
|
|
19989
|
-
|
|
20041
|
+
groupShotMediaId: number().int().nullable()
|
|
19990
20042
|
});
|
|
19991
20043
|
var SummariesQueryInput = object({
|
|
19992
20044
|
deviceIds: array(number()).min(1),
|
|
@@ -20540,7 +20592,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20540
20592
|
}), method(object({
|
|
20541
20593
|
deviceId: number(),
|
|
20542
20594
|
trackId: string(),
|
|
20543
|
-
|
|
20595
|
+
mediaIds: array(number().int()).min(1)
|
|
20544
20596
|
}), RetrainFrameSelectionSchema, {
|
|
20545
20597
|
kind: "mutation",
|
|
20546
20598
|
auth: "admin"
|
|
@@ -20608,7 +20660,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20608
20660
|
kind: "query",
|
|
20609
20661
|
auth: "admin"
|
|
20610
20662
|
}), method(object({
|
|
20611
|
-
|
|
20663
|
+
/** Which of the three event tables owns the row. */
|
|
20664
|
+
ownerType: EventOwnerTypeSchema,
|
|
20665
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20666
|
+
eventId: number().int(),
|
|
20612
20667
|
kind: MediaFileKindEnum.optional(),
|
|
20613
20668
|
deviceId: number()
|
|
20614
20669
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20619,7 +20674,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20619
20674
|
trackId: string(),
|
|
20620
20675
|
deviceId: number()
|
|
20621
20676
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20622
|
-
|
|
20677
|
+
ownerType: EventOwnerTypeSchema,
|
|
20678
|
+
eventId: number().int(),
|
|
20623
20679
|
deviceId: number()
|
|
20624
20680
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20625
20681
|
kind: "mutation",
|
|
@@ -25082,8 +25138,8 @@ var IdentitySchema = object({
|
|
|
25082
25138
|
id: string(),
|
|
25083
25139
|
name: string(),
|
|
25084
25140
|
sampleCount: number().int().nonnegative(),
|
|
25085
|
-
|
|
25086
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
25141
|
+
coverMediaId: number().int().optional(),
|
|
25142
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
25087
25143
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
25088
25144
|
coverBase64: string().optional()
|
|
25089
25145
|
});
|
|
@@ -25109,8 +25165,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
25109
25165
|
enrolledAt: number().int(),
|
|
25110
25166
|
deviceId: number().int().optional(),
|
|
25111
25167
|
source: _enum(["detected", "photo"]),
|
|
25112
|
-
/** The enrolled crop's media
|
|
25113
|
-
|
|
25168
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
25169
|
+
mediaId: number().int().optional(),
|
|
25114
25170
|
/**
|
|
25115
25171
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
25116
25172
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -25179,15 +25235,15 @@ var FaceInfoSchema = object({
|
|
|
25179
25235
|
*/
|
|
25180
25236
|
cropUrl: string().optional(),
|
|
25181
25237
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
25182
|
-
* view draw the box over the native `
|
|
25238
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
25183
25239
|
* legacy rows written before design B. */
|
|
25184
25240
|
faceBbox: BoundingBoxSchema.optional(),
|
|
25185
25241
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
25186
25242
|
* Fetch the native JPEG via the event-media data-plane
|
|
25187
|
-
* (`/addon/<addonId>/event-media/<
|
|
25243
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
25188
25244
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
25189
25245
|
* back to the inline `base64` face crop. */
|
|
25190
|
-
|
|
25246
|
+
keyFrameMediaId: number().int().optional(),
|
|
25191
25247
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
25192
25248
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
25193
25249
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -25256,11 +25312,14 @@ var FaceClusterSchema = object({
|
|
|
25256
25312
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
25257
25313
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
25258
25314
|
*
|
|
25259
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
25260
|
-
* media
|
|
25315
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
25316
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
25317
|
+
* access decision.
|
|
25261
25318
|
*/
|
|
25262
25319
|
var MediaFileLiteSchema$1 = object({
|
|
25263
|
-
|
|
25320
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
25321
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
25322
|
+
mediaId: number().int(),
|
|
25264
25323
|
kind: string(),
|
|
25265
25324
|
url: string(),
|
|
25266
25325
|
sizeBytes: number(),
|
|
@@ -25277,7 +25336,7 @@ method(object({
|
|
|
25277
25336
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
25278
25337
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
25279
25338
|
*
|
|
25280
|
-
* Nothing loses its avatar: `
|
|
25339
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
25281
25340
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
25282
25341
|
*
|
|
25283
25342
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -27745,8 +27804,8 @@ var VehicleSchema = object({
|
|
|
27745
27804
|
id: string(),
|
|
27746
27805
|
name: string(),
|
|
27747
27806
|
sampleCount: number().int().nonnegative(),
|
|
27748
|
-
|
|
27749
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
27807
|
+
coverMediaId: number().int().optional(),
|
|
27808
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
27750
27809
|
coverBase64: string().optional()
|
|
27751
27810
|
});
|
|
27752
27811
|
var VehicleSampleInfoSchema = object({
|
|
@@ -27779,7 +27838,7 @@ var PlateInfoSchema = object({
|
|
|
27779
27838
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
27780
27839
|
plateBbox: BoundingBoxSchema.optional(),
|
|
27781
27840
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
27782
|
-
|
|
27841
|
+
keyFrameMediaId: number().int().optional(),
|
|
27783
27842
|
base64: string().optional(),
|
|
27784
27843
|
/**
|
|
27785
27844
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -27800,11 +27859,14 @@ var PlateInfoSchema = object({
|
|
|
27800
27859
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27801
27860
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27802
27861
|
*
|
|
27803
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27804
|
-
* media
|
|
27862
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27863
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27864
|
+
* access decision.
|
|
27805
27865
|
*/
|
|
27806
27866
|
var MediaFileLiteSchema = object({
|
|
27807
|
-
|
|
27867
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27868
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27869
|
+
mediaId: number().int(),
|
|
27808
27870
|
kind: string(),
|
|
27809
27871
|
url: string(),
|
|
27810
27872
|
sizeBytes: number(),
|
|
@@ -27863,7 +27925,7 @@ method(object({
|
|
|
27863
27925
|
}), method(object({
|
|
27864
27926
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
27865
27927
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
27866
|
-
* option; `
|
|
27928
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
27867
27929
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
27868
27930
|
* resolves to `false` and is exactly the intended default. */
|
|
27869
27931
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -29187,7 +29249,14 @@ var SceneReferenceSchema = object({
|
|
|
29187
29249
|
modelId: string(),
|
|
29188
29250
|
condition: SceneConditionSchema,
|
|
29189
29251
|
capturedAt: number(),
|
|
29190
|
-
|
|
29252
|
+
/**
|
|
29253
|
+
* The reference thumbnail's media ROW id (D482).
|
|
29254
|
+
*
|
|
29255
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
29256
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
29257
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
29258
|
+
*/
|
|
29259
|
+
thumbnailMediaId: number().int().optional(),
|
|
29191
29260
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
29192
29261
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
29193
29262
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -30635,7 +30704,7 @@ var StationaryObjectSchema = object({
|
|
|
30635
30704
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
30636
30705
|
label: string().optional(),
|
|
30637
30706
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
30638
|
-
|
|
30707
|
+
keyFrameMediaId: number().int().optional()
|
|
30639
30708
|
});
|
|
30640
30709
|
var CameraOccupancySnapshotSchema = object({
|
|
30641
30710
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -31791,6 +31860,12 @@ Object.freeze({
|
|
|
31791
31860
|
addonId: null,
|
|
31792
31861
|
access: "create"
|
|
31793
31862
|
},
|
|
31863
|
+
"dataStoreProvider.upsert": {
|
|
31864
|
+
capName: "data-store-provider",
|
|
31865
|
+
capScope: "system",
|
|
31866
|
+
addonId: null,
|
|
31867
|
+
access: "create"
|
|
31868
|
+
},
|
|
31794
31869
|
"dayNight.getOptions": {
|
|
31795
31870
|
capName: "day-night",
|
|
31796
31871
|
capScope: "device",
|
|
@@ -35655,6 +35730,12 @@ Object.freeze({
|
|
|
35655
35730
|
addonId: null,
|
|
35656
35731
|
access: "create"
|
|
35657
35732
|
},
|
|
35733
|
+
"settingsStore.upsert": {
|
|
35734
|
+
capName: "settings-store",
|
|
35735
|
+
capScope: "system",
|
|
35736
|
+
addonId: null,
|
|
35737
|
+
access: "create"
|
|
35738
|
+
},
|
|
35658
35739
|
"smtpProvider.getStatus": {
|
|
35659
35740
|
capName: "smtp-provider",
|
|
35660
35741
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-export-alexa",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.106",
|
|
4
4
|
"description": "Alexa Smart Home Skill export — hub-side OAuth provider + directive handler. The companion AWS Lambda forwards Alexa directives to this addon's /addon/export-alexa/directive endpoint.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|