@camstack/addon-import-alexa 0.2.98 → 0.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/addon.js +131 -50
- package/dist/addon.mjs +131 -50
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -38,7 +38,7 @@ let node_os = require("node:os");
|
|
|
38
38
|
let node_fs = require("node:fs");
|
|
39
39
|
let node_path = require("node:path");
|
|
40
40
|
node_path = __toESM(node_path);
|
|
41
|
-
//#region ../types/dist/event-category-
|
|
41
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
42
42
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
43
43
|
EventCategory["SystemBoot"] = "system.boot";
|
|
44
44
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -599,7 +599,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
599
599
|
* a package zone — a newly-appeared stationary object of a package class
|
|
600
600
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
601
601
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
602
|
-
* entryId, className, zoneIds,
|
|
602
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
603
603
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
604
604
|
* this bus topic drives notifier rules + live UI. See
|
|
605
605
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5385,7 +5385,7 @@ var ZodIssueCode = {
|
|
|
5385
5385
|
var ZodFirstPartyTypeKind;
|
|
5386
5386
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5387
5387
|
//#endregion
|
|
5388
|
-
//#region ../types/dist/sleep-
|
|
5388
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5389
5389
|
/**
|
|
5390
5390
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5391
5391
|
* window to float samples (D455).
|
|
@@ -7352,13 +7352,30 @@ new Set([
|
|
|
7352
7352
|
"scene",
|
|
7353
7353
|
"motion",
|
|
7354
7354
|
"object",
|
|
7355
|
-
"audio"
|
|
7355
|
+
"audio",
|
|
7356
|
+
"mosaic"
|
|
7356
7357
|
]);
|
|
7357
|
-
|
|
7358
|
+
/**
|
|
7359
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7360
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7361
|
+
* does not re-spell the list and drift from it.
|
|
7362
|
+
*/
|
|
7363
|
+
var EVENT_OWNER_TYPES = [
|
|
7358
7364
|
"motion",
|
|
7359
7365
|
"object",
|
|
7360
7366
|
"audio"
|
|
7361
|
-
]
|
|
7367
|
+
];
|
|
7368
|
+
/**
|
|
7369
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7370
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7371
|
+
* `(table, id)`).
|
|
7372
|
+
*
|
|
7373
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7374
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7375
|
+
* nothing failing until a caller asked.
|
|
7376
|
+
*/
|
|
7377
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7378
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7362
7379
|
/**
|
|
7363
7380
|
* Build an `IAddonRouteProvider` from a list of routes. Implements
|
|
7364
7381
|
* both the operator-facing `getRoutes` (returning route descriptors
|
|
@@ -12742,6 +12759,16 @@ method(object({
|
|
|
12742
12759
|
filter: QueryFilterSchema.optional(),
|
|
12743
12760
|
columns: array(string()).readonly().optional()
|
|
12744
12761
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12762
|
+
namespace: string().optional(),
|
|
12763
|
+
collection: string(),
|
|
12764
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12765
|
+
* index on the collection. Never empty. */
|
|
12766
|
+
conflict: array(string()).readonly(),
|
|
12767
|
+
record: BulkRecordSchema
|
|
12768
|
+
}), object({
|
|
12769
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12770
|
+
* row's own id on an update. */
|
|
12771
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12745
12772
|
namespace: string().optional(),
|
|
12746
12773
|
collection: string(),
|
|
12747
12774
|
record: object({
|
|
@@ -12876,6 +12903,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12876
12903
|
id: union([string(), number()]) }), {
|
|
12877
12904
|
kind: "mutation",
|
|
12878
12905
|
auth: "admin"
|
|
12906
|
+
}), method(object({
|
|
12907
|
+
namespace: string().optional(),
|
|
12908
|
+
collection: string(),
|
|
12909
|
+
conflict: array(string()).readonly(),
|
|
12910
|
+
record: BulkRecordSchema
|
|
12911
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12912
|
+
kind: "mutation",
|
|
12913
|
+
auth: "admin"
|
|
12879
12914
|
}), method(object({
|
|
12880
12915
|
namespace: string().optional(),
|
|
12881
12916
|
collection: string(),
|
|
@@ -19375,8 +19410,8 @@ var TrackPositionSchema = object({
|
|
|
19375
19410
|
var TrackSnapshotSchema = object({
|
|
19376
19411
|
timestamp: number(),
|
|
19377
19412
|
position: TrackPositionSchema,
|
|
19378
|
-
/**
|
|
19379
|
-
|
|
19413
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19414
|
+
mediaId: number().int()
|
|
19380
19415
|
});
|
|
19381
19416
|
/**
|
|
19382
19417
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19980,14 +20015,14 @@ var ObjectEventSchema = object({
|
|
|
19980
20015
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19981
20016
|
frameWidth: number().optional(),
|
|
19982
20017
|
frameHeight: number().optional(),
|
|
19983
|
-
/**
|
|
19984
|
-
|
|
19985
|
-
/** Design B:
|
|
20018
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
20019
|
+
mediaId: number().int().optional(),
|
|
20020
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19986
20021
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19987
|
-
* (`/addon/<addonId>/event-media/<
|
|
20022
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19988
20023
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19989
|
-
* sources — consumers fall back to `
|
|
19990
|
-
|
|
20024
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
20025
|
+
keyFrameMediaId: number().int().optional(),
|
|
19991
20026
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19992
20027
|
mediaUrl: string().optional(),
|
|
19993
20028
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -20037,7 +20072,7 @@ var MediaFileKindEnum = _enum([
|
|
|
20037
20072
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
20038
20073
|
*
|
|
20039
20074
|
* `url` points at the `event-media` data plane
|
|
20040
|
-
* (`/addon/<addonId>/event-media/<
|
|
20075
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
20041
20076
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
20042
20077
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
20043
20078
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -20045,10 +20080,13 @@ var MediaFileKindEnum = _enum([
|
|
|
20045
20080
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
20046
20081
|
* (per-device scoping).
|
|
20047
20082
|
*
|
|
20048
|
-
* The URL is built from the row's
|
|
20049
|
-
*
|
|
20083
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
20084
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
20085
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
20050
20086
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
20051
|
-
* `faceCrop`/`plateCrop
|
|
20087
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
20088
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
20089
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
20052
20090
|
*
|
|
20053
20091
|
* ## `base64` is TRANSITIONAL and is going away
|
|
20054
20092
|
*
|
|
@@ -20061,7 +20099,19 @@ var MediaFileKindEnum = _enum([
|
|
|
20061
20099
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
20062
20100
|
*/
|
|
20063
20101
|
var MediaFileSchema = object({
|
|
20064
|
-
|
|
20102
|
+
/**
|
|
20103
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
20104
|
+
*
|
|
20105
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
20106
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
20107
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
20108
|
+
* different rows that spell the same number, and a track whose
|
|
20109
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
20110
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
20111
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
20112
|
+
* at all.
|
|
20113
|
+
*/
|
|
20114
|
+
mediaId: number().int(),
|
|
20065
20115
|
kind: MediaFileKindEnum,
|
|
20066
20116
|
sizeBytes: number(),
|
|
20067
20117
|
timestamp: number()
|
|
@@ -20169,7 +20219,7 @@ var RetrainTrackSchema = object({
|
|
|
20169
20219
|
});
|
|
20170
20220
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
20171
20221
|
var RetrainFrameCandidateSchema = object({
|
|
20172
|
-
|
|
20222
|
+
mediaId: number().int(),
|
|
20173
20223
|
kind: MediaFileKindEnum,
|
|
20174
20224
|
timestamp: number(),
|
|
20175
20225
|
sizeBytes: number().int(),
|
|
@@ -20183,7 +20233,7 @@ var RetrainFrameSchema = object({
|
|
|
20183
20233
|
deviceId: number(),
|
|
20184
20234
|
trackId: string(),
|
|
20185
20235
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
20186
|
-
|
|
20236
|
+
sourceMediaId: number().int(),
|
|
20187
20237
|
sourceKind: MediaFileKindEnum,
|
|
20188
20238
|
sizeBytes: number().int(),
|
|
20189
20239
|
width: number().int(),
|
|
@@ -20199,7 +20249,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
20199
20249
|
var RetrainFrameSelectionSchema = object({
|
|
20200
20250
|
copied: array(RetrainFrameSchema).readonly(),
|
|
20201
20251
|
refused: array(object({
|
|
20202
|
-
|
|
20252
|
+
sourceMediaId: number().int(),
|
|
20203
20253
|
reason: RetrainCopyRefusalSchema
|
|
20204
20254
|
})).readonly()
|
|
20205
20255
|
});
|
|
@@ -20207,7 +20257,7 @@ var RetrainFrameListSchema = object({
|
|
|
20207
20257
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
20208
20258
|
copies: array(RetrainFrameSchema).readonly(),
|
|
20209
20259
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
20210
|
-
|
|
20260
|
+
autoPickMediaId: number().int().optional()
|
|
20211
20261
|
});
|
|
20212
20262
|
/** What the operator asked the assist to look for. */
|
|
20213
20263
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20302,9 +20352,11 @@ var RecentTracksQueryInput = object({
|
|
|
20302
20352
|
});
|
|
20303
20353
|
/**
|
|
20304
20354
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20305
|
-
* `
|
|
20306
|
-
* served by the event-media plane
|
|
20307
|
-
* member visible has been materialised
|
|
20355
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20356
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20357
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20358
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20359
|
+
* row once event ids became per-table rowids).
|
|
20308
20360
|
*/
|
|
20309
20361
|
var SummarySchema = object({
|
|
20310
20362
|
id: string(),
|
|
@@ -20313,7 +20365,7 @@ var SummarySchema = object({
|
|
|
20313
20365
|
lastActiveAt: number(),
|
|
20314
20366
|
sealedAt: number().nullable(),
|
|
20315
20367
|
memberCount: number().int().nonnegative(),
|
|
20316
|
-
|
|
20368
|
+
groupShotMediaId: number().int().nullable()
|
|
20317
20369
|
});
|
|
20318
20370
|
var SummariesQueryInput = object({
|
|
20319
20371
|
deviceIds: array(number()).min(1),
|
|
@@ -20867,7 +20919,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20867
20919
|
}), method(object({
|
|
20868
20920
|
deviceId: number(),
|
|
20869
20921
|
trackId: string(),
|
|
20870
|
-
|
|
20922
|
+
mediaIds: array(number().int()).min(1)
|
|
20871
20923
|
}), RetrainFrameSelectionSchema, {
|
|
20872
20924
|
kind: "mutation",
|
|
20873
20925
|
auth: "admin"
|
|
@@ -20935,7 +20987,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20935
20987
|
kind: "query",
|
|
20936
20988
|
auth: "admin"
|
|
20937
20989
|
}), method(object({
|
|
20938
|
-
|
|
20990
|
+
/** Which of the three event tables owns the row. */
|
|
20991
|
+
ownerType: EventOwnerTypeSchema,
|
|
20992
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20993
|
+
eventId: number().int(),
|
|
20939
20994
|
kind: MediaFileKindEnum.optional(),
|
|
20940
20995
|
deviceId: number()
|
|
20941
20996
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20946,7 +21001,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20946
21001
|
trackId: string(),
|
|
20947
21002
|
deviceId: number()
|
|
20948
21003
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20949
|
-
|
|
21004
|
+
ownerType: EventOwnerTypeSchema,
|
|
21005
|
+
eventId: number().int(),
|
|
20950
21006
|
deviceId: number()
|
|
20951
21007
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20952
21008
|
kind: "mutation",
|
|
@@ -26156,8 +26212,8 @@ var IdentitySchema = object({
|
|
|
26156
26212
|
id: string(),
|
|
26157
26213
|
name: string(),
|
|
26158
26214
|
sampleCount: number().int().nonnegative(),
|
|
26159
|
-
|
|
26160
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26215
|
+
coverMediaId: number().int().optional(),
|
|
26216
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26161
26217
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26162
26218
|
coverBase64: string().optional()
|
|
26163
26219
|
});
|
|
@@ -26183,8 +26239,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26183
26239
|
enrolledAt: number().int(),
|
|
26184
26240
|
deviceId: number().int().optional(),
|
|
26185
26241
|
source: _enum(["detected", "photo"]),
|
|
26186
|
-
/** The enrolled crop's media
|
|
26187
|
-
|
|
26242
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26243
|
+
mediaId: number().int().optional(),
|
|
26188
26244
|
/**
|
|
26189
26245
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26190
26246
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26253,15 +26309,15 @@ var FaceInfoSchema = object({
|
|
|
26253
26309
|
*/
|
|
26254
26310
|
cropUrl: string().optional(),
|
|
26255
26311
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26256
|
-
* view draw the box over the native `
|
|
26312
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26257
26313
|
* legacy rows written before design B. */
|
|
26258
26314
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26259
26315
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26260
26316
|
* Fetch the native JPEG via the event-media data-plane
|
|
26261
|
-
* (`/addon/<addonId>/event-media/<
|
|
26317
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26262
26318
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26263
26319
|
* back to the inline `base64` face crop. */
|
|
26264
|
-
|
|
26320
|
+
keyFrameMediaId: number().int().optional(),
|
|
26265
26321
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26266
26322
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26267
26323
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26330,11 +26386,14 @@ var FaceClusterSchema = object({
|
|
|
26330
26386
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26331
26387
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26332
26388
|
*
|
|
26333
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26334
|
-
* media
|
|
26389
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26390
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26391
|
+
* access decision.
|
|
26335
26392
|
*/
|
|
26336
26393
|
var MediaFileLiteSchema$1 = object({
|
|
26337
|
-
|
|
26394
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26395
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26396
|
+
mediaId: number().int(),
|
|
26338
26397
|
kind: string(),
|
|
26339
26398
|
url: string(),
|
|
26340
26399
|
sizeBytes: number(),
|
|
@@ -26351,7 +26410,7 @@ method(object({
|
|
|
26351
26410
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26352
26411
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26353
26412
|
*
|
|
26354
|
-
* Nothing loses its avatar: `
|
|
26413
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26355
26414
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26356
26415
|
*
|
|
26357
26416
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29714,8 +29773,8 @@ var VehicleSchema = object({
|
|
|
29714
29773
|
id: string(),
|
|
29715
29774
|
name: string(),
|
|
29716
29775
|
sampleCount: number().int().nonnegative(),
|
|
29717
|
-
|
|
29718
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29776
|
+
coverMediaId: number().int().optional(),
|
|
29777
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29719
29778
|
coverBase64: string().optional()
|
|
29720
29779
|
});
|
|
29721
29780
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29748,7 +29807,7 @@ var PlateInfoSchema = object({
|
|
|
29748
29807
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29749
29808
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29750
29809
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29751
|
-
|
|
29810
|
+
keyFrameMediaId: number().int().optional(),
|
|
29752
29811
|
base64: string().optional(),
|
|
29753
29812
|
/**
|
|
29754
29813
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29769,11 +29828,14 @@ var PlateInfoSchema = object({
|
|
|
29769
29828
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29770
29829
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29771
29830
|
*
|
|
29772
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29773
|
-
* media
|
|
29831
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29832
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29833
|
+
* access decision.
|
|
29774
29834
|
*/
|
|
29775
29835
|
var MediaFileLiteSchema = object({
|
|
29776
|
-
|
|
29836
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29837
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29838
|
+
mediaId: number().int(),
|
|
29777
29839
|
kind: string(),
|
|
29778
29840
|
url: string(),
|
|
29779
29841
|
sizeBytes: number(),
|
|
@@ -29832,7 +29894,7 @@ method(object({
|
|
|
29832
29894
|
}), method(object({
|
|
29833
29895
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29834
29896
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29835
|
-
* option; `
|
|
29897
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29836
29898
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29837
29899
|
* resolves to `false` and is exactly the intended default. */
|
|
29838
29900
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31401,7 +31463,14 @@ var SceneReferenceSchema = object({
|
|
|
31401
31463
|
modelId: string(),
|
|
31402
31464
|
condition: SceneConditionSchema,
|
|
31403
31465
|
capturedAt: number(),
|
|
31404
|
-
|
|
31466
|
+
/**
|
|
31467
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31468
|
+
*
|
|
31469
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31470
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31471
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31472
|
+
*/
|
|
31473
|
+
thumbnailMediaId: number().int().optional(),
|
|
31405
31474
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31406
31475
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31407
31476
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33385,7 +33454,7 @@ var StationaryObjectSchema = object({
|
|
|
33385
33454
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33386
33455
|
label: string().optional(),
|
|
33387
33456
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33388
|
-
|
|
33457
|
+
keyFrameMediaId: number().int().optional()
|
|
33389
33458
|
});
|
|
33390
33459
|
var CameraOccupancySnapshotSchema = object({
|
|
33391
33460
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -36123,6 +36192,12 @@ Object.freeze({
|
|
|
36123
36192
|
addonId: null,
|
|
36124
36193
|
access: "create"
|
|
36125
36194
|
},
|
|
36195
|
+
"dataStoreProvider.upsert": {
|
|
36196
|
+
capName: "data-store-provider",
|
|
36197
|
+
capScope: "system",
|
|
36198
|
+
addonId: null,
|
|
36199
|
+
access: "create"
|
|
36200
|
+
},
|
|
36126
36201
|
"dayNight.getOptions": {
|
|
36127
36202
|
capName: "day-night",
|
|
36128
36203
|
capScope: "device",
|
|
@@ -39987,6 +40062,12 @@ Object.freeze({
|
|
|
39987
40062
|
addonId: null,
|
|
39988
40063
|
access: "create"
|
|
39989
40064
|
},
|
|
40065
|
+
"settingsStore.upsert": {
|
|
40066
|
+
capName: "settings-store",
|
|
40067
|
+
capScope: "system",
|
|
40068
|
+
addonId: null,
|
|
40069
|
+
access: "create"
|
|
40070
|
+
},
|
|
39990
40071
|
"smtpProvider.getStatus": {
|
|
39991
40072
|
capName: "smtp-provider",
|
|
39992
40073
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -38,7 +38,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
38
38
|
var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
39
39
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
40
40
|
//#endregion
|
|
41
|
-
//#region ../types/dist/event-category-
|
|
41
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
42
42
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
43
43
|
EventCategory["SystemBoot"] = "system.boot";
|
|
44
44
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -599,7 +599,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
599
599
|
* a package zone — a newly-appeared stationary object of a package class
|
|
600
600
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
601
601
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
602
|
-
* entryId, className, zoneIds,
|
|
602
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
603
603
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
604
604
|
* this bus topic drives notifier rules + live UI. See
|
|
605
605
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5385,7 +5385,7 @@ var ZodIssueCode = {
|
|
|
5385
5385
|
var ZodFirstPartyTypeKind;
|
|
5386
5386
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5387
5387
|
//#endregion
|
|
5388
|
-
//#region ../types/dist/sleep-
|
|
5388
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5389
5389
|
/**
|
|
5390
5390
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5391
5391
|
* window to float samples (D455).
|
|
@@ -7352,13 +7352,30 @@ new Set([
|
|
|
7352
7352
|
"scene",
|
|
7353
7353
|
"motion",
|
|
7354
7354
|
"object",
|
|
7355
|
-
"audio"
|
|
7355
|
+
"audio",
|
|
7356
|
+
"mosaic"
|
|
7356
7357
|
]);
|
|
7357
|
-
|
|
7358
|
+
/**
|
|
7359
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7360
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7361
|
+
* does not re-spell the list and drift from it.
|
|
7362
|
+
*/
|
|
7363
|
+
var EVENT_OWNER_TYPES = [
|
|
7358
7364
|
"motion",
|
|
7359
7365
|
"object",
|
|
7360
7366
|
"audio"
|
|
7361
|
-
]
|
|
7367
|
+
];
|
|
7368
|
+
/**
|
|
7369
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7370
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7371
|
+
* `(table, id)`).
|
|
7372
|
+
*
|
|
7373
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7374
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7375
|
+
* nothing failing until a caller asked.
|
|
7376
|
+
*/
|
|
7377
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7378
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7362
7379
|
/**
|
|
7363
7380
|
* Build an `IAddonRouteProvider` from a list of routes. Implements
|
|
7364
7381
|
* both the operator-facing `getRoutes` (returning route descriptors
|
|
@@ -12742,6 +12759,16 @@ method(object({
|
|
|
12742
12759
|
filter: QueryFilterSchema.optional(),
|
|
12743
12760
|
columns: array(string()).readonly().optional()
|
|
12744
12761
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12762
|
+
namespace: string().optional(),
|
|
12763
|
+
collection: string(),
|
|
12764
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12765
|
+
* index on the collection. Never empty. */
|
|
12766
|
+
conflict: array(string()).readonly(),
|
|
12767
|
+
record: BulkRecordSchema
|
|
12768
|
+
}), object({
|
|
12769
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12770
|
+
* row's own id on an update. */
|
|
12771
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12745
12772
|
namespace: string().optional(),
|
|
12746
12773
|
collection: string(),
|
|
12747
12774
|
record: object({
|
|
@@ -12876,6 +12903,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12876
12903
|
id: union([string(), number()]) }), {
|
|
12877
12904
|
kind: "mutation",
|
|
12878
12905
|
auth: "admin"
|
|
12906
|
+
}), method(object({
|
|
12907
|
+
namespace: string().optional(),
|
|
12908
|
+
collection: string(),
|
|
12909
|
+
conflict: array(string()).readonly(),
|
|
12910
|
+
record: BulkRecordSchema
|
|
12911
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12912
|
+
kind: "mutation",
|
|
12913
|
+
auth: "admin"
|
|
12879
12914
|
}), method(object({
|
|
12880
12915
|
namespace: string().optional(),
|
|
12881
12916
|
collection: string(),
|
|
@@ -19375,8 +19410,8 @@ var TrackPositionSchema = object({
|
|
|
19375
19410
|
var TrackSnapshotSchema = object({
|
|
19376
19411
|
timestamp: number(),
|
|
19377
19412
|
position: TrackPositionSchema,
|
|
19378
|
-
/**
|
|
19379
|
-
|
|
19413
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19414
|
+
mediaId: number().int()
|
|
19380
19415
|
});
|
|
19381
19416
|
/**
|
|
19382
19417
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19980,14 +20015,14 @@ var ObjectEventSchema = object({
|
|
|
19980
20015
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19981
20016
|
frameWidth: number().optional(),
|
|
19982
20017
|
frameHeight: number().optional(),
|
|
19983
|
-
/**
|
|
19984
|
-
|
|
19985
|
-
/** Design B:
|
|
20018
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
20019
|
+
mediaId: number().int().optional(),
|
|
20020
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19986
20021
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19987
|
-
* (`/addon/<addonId>/event-media/<
|
|
20022
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19988
20023
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19989
|
-
* sources — consumers fall back to `
|
|
19990
|
-
|
|
20024
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
20025
|
+
keyFrameMediaId: number().int().optional(),
|
|
19991
20026
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19992
20027
|
mediaUrl: string().optional(),
|
|
19993
20028
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -20037,7 +20072,7 @@ var MediaFileKindEnum = _enum([
|
|
|
20037
20072
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
20038
20073
|
*
|
|
20039
20074
|
* `url` points at the `event-media` data plane
|
|
20040
|
-
* (`/addon/<addonId>/event-media/<
|
|
20075
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
20041
20076
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
20042
20077
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
20043
20078
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -20045,10 +20080,13 @@ var MediaFileKindEnum = _enum([
|
|
|
20045
20080
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
20046
20081
|
* (per-device scoping).
|
|
20047
20082
|
*
|
|
20048
|
-
* The URL is built from the row's
|
|
20049
|
-
*
|
|
20083
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
20084
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
20085
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
20050
20086
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
20051
|
-
* `faceCrop`/`plateCrop
|
|
20087
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
20088
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
20089
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
20052
20090
|
*
|
|
20053
20091
|
* ## `base64` is TRANSITIONAL and is going away
|
|
20054
20092
|
*
|
|
@@ -20061,7 +20099,19 @@ var MediaFileKindEnum = _enum([
|
|
|
20061
20099
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
20062
20100
|
*/
|
|
20063
20101
|
var MediaFileSchema = object({
|
|
20064
|
-
|
|
20102
|
+
/**
|
|
20103
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
20104
|
+
*
|
|
20105
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
20106
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
20107
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
20108
|
+
* different rows that spell the same number, and a track whose
|
|
20109
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
20110
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
20111
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
20112
|
+
* at all.
|
|
20113
|
+
*/
|
|
20114
|
+
mediaId: number().int(),
|
|
20065
20115
|
kind: MediaFileKindEnum,
|
|
20066
20116
|
sizeBytes: number(),
|
|
20067
20117
|
timestamp: number()
|
|
@@ -20169,7 +20219,7 @@ var RetrainTrackSchema = object({
|
|
|
20169
20219
|
});
|
|
20170
20220
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
20171
20221
|
var RetrainFrameCandidateSchema = object({
|
|
20172
|
-
|
|
20222
|
+
mediaId: number().int(),
|
|
20173
20223
|
kind: MediaFileKindEnum,
|
|
20174
20224
|
timestamp: number(),
|
|
20175
20225
|
sizeBytes: number().int(),
|
|
@@ -20183,7 +20233,7 @@ var RetrainFrameSchema = object({
|
|
|
20183
20233
|
deviceId: number(),
|
|
20184
20234
|
trackId: string(),
|
|
20185
20235
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
20186
|
-
|
|
20236
|
+
sourceMediaId: number().int(),
|
|
20187
20237
|
sourceKind: MediaFileKindEnum,
|
|
20188
20238
|
sizeBytes: number().int(),
|
|
20189
20239
|
width: number().int(),
|
|
@@ -20199,7 +20249,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
20199
20249
|
var RetrainFrameSelectionSchema = object({
|
|
20200
20250
|
copied: array(RetrainFrameSchema).readonly(),
|
|
20201
20251
|
refused: array(object({
|
|
20202
|
-
|
|
20252
|
+
sourceMediaId: number().int(),
|
|
20203
20253
|
reason: RetrainCopyRefusalSchema
|
|
20204
20254
|
})).readonly()
|
|
20205
20255
|
});
|
|
@@ -20207,7 +20257,7 @@ var RetrainFrameListSchema = object({
|
|
|
20207
20257
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
20208
20258
|
copies: array(RetrainFrameSchema).readonly(),
|
|
20209
20259
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
20210
|
-
|
|
20260
|
+
autoPickMediaId: number().int().optional()
|
|
20211
20261
|
});
|
|
20212
20262
|
/** What the operator asked the assist to look for. */
|
|
20213
20263
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20302,9 +20352,11 @@ var RecentTracksQueryInput = object({
|
|
|
20302
20352
|
});
|
|
20303
20353
|
/**
|
|
20304
20354
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20305
|
-
* `
|
|
20306
|
-
* served by the event-media plane
|
|
20307
|
-
* member visible has been materialised
|
|
20355
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20356
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20357
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20358
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20359
|
+
* row once event ids became per-table rowids).
|
|
20308
20360
|
*/
|
|
20309
20361
|
var SummarySchema = object({
|
|
20310
20362
|
id: string(),
|
|
@@ -20313,7 +20365,7 @@ var SummarySchema = object({
|
|
|
20313
20365
|
lastActiveAt: number(),
|
|
20314
20366
|
sealedAt: number().nullable(),
|
|
20315
20367
|
memberCount: number().int().nonnegative(),
|
|
20316
|
-
|
|
20368
|
+
groupShotMediaId: number().int().nullable()
|
|
20317
20369
|
});
|
|
20318
20370
|
var SummariesQueryInput = object({
|
|
20319
20371
|
deviceIds: array(number()).min(1),
|
|
@@ -20867,7 +20919,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20867
20919
|
}), method(object({
|
|
20868
20920
|
deviceId: number(),
|
|
20869
20921
|
trackId: string(),
|
|
20870
|
-
|
|
20922
|
+
mediaIds: array(number().int()).min(1)
|
|
20871
20923
|
}), RetrainFrameSelectionSchema, {
|
|
20872
20924
|
kind: "mutation",
|
|
20873
20925
|
auth: "admin"
|
|
@@ -20935,7 +20987,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20935
20987
|
kind: "query",
|
|
20936
20988
|
auth: "admin"
|
|
20937
20989
|
}), method(object({
|
|
20938
|
-
|
|
20990
|
+
/** Which of the three event tables owns the row. */
|
|
20991
|
+
ownerType: EventOwnerTypeSchema,
|
|
20992
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20993
|
+
eventId: number().int(),
|
|
20939
20994
|
kind: MediaFileKindEnum.optional(),
|
|
20940
20995
|
deviceId: number()
|
|
20941
20996
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20946,7 +21001,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20946
21001
|
trackId: string(),
|
|
20947
21002
|
deviceId: number()
|
|
20948
21003
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20949
|
-
|
|
21004
|
+
ownerType: EventOwnerTypeSchema,
|
|
21005
|
+
eventId: number().int(),
|
|
20950
21006
|
deviceId: number()
|
|
20951
21007
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20952
21008
|
kind: "mutation",
|
|
@@ -26156,8 +26212,8 @@ var IdentitySchema = object({
|
|
|
26156
26212
|
id: string(),
|
|
26157
26213
|
name: string(),
|
|
26158
26214
|
sampleCount: number().int().nonnegative(),
|
|
26159
|
-
|
|
26160
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26215
|
+
coverMediaId: number().int().optional(),
|
|
26216
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26161
26217
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26162
26218
|
coverBase64: string().optional()
|
|
26163
26219
|
});
|
|
@@ -26183,8 +26239,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26183
26239
|
enrolledAt: number().int(),
|
|
26184
26240
|
deviceId: number().int().optional(),
|
|
26185
26241
|
source: _enum(["detected", "photo"]),
|
|
26186
|
-
/** The enrolled crop's media
|
|
26187
|
-
|
|
26242
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26243
|
+
mediaId: number().int().optional(),
|
|
26188
26244
|
/**
|
|
26189
26245
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26190
26246
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26253,15 +26309,15 @@ var FaceInfoSchema = object({
|
|
|
26253
26309
|
*/
|
|
26254
26310
|
cropUrl: string().optional(),
|
|
26255
26311
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26256
|
-
* view draw the box over the native `
|
|
26312
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26257
26313
|
* legacy rows written before design B. */
|
|
26258
26314
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26259
26315
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26260
26316
|
* Fetch the native JPEG via the event-media data-plane
|
|
26261
|
-
* (`/addon/<addonId>/event-media/<
|
|
26317
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26262
26318
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26263
26319
|
* back to the inline `base64` face crop. */
|
|
26264
|
-
|
|
26320
|
+
keyFrameMediaId: number().int().optional(),
|
|
26265
26321
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26266
26322
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26267
26323
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26330,11 +26386,14 @@ var FaceClusterSchema = object({
|
|
|
26330
26386
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26331
26387
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26332
26388
|
*
|
|
26333
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26334
|
-
* media
|
|
26389
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26390
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26391
|
+
* access decision.
|
|
26335
26392
|
*/
|
|
26336
26393
|
var MediaFileLiteSchema$1 = object({
|
|
26337
|
-
|
|
26394
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26395
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26396
|
+
mediaId: number().int(),
|
|
26338
26397
|
kind: string(),
|
|
26339
26398
|
url: string(),
|
|
26340
26399
|
sizeBytes: number(),
|
|
@@ -26351,7 +26410,7 @@ method(object({
|
|
|
26351
26410
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26352
26411
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26353
26412
|
*
|
|
26354
|
-
* Nothing loses its avatar: `
|
|
26413
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26355
26414
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26356
26415
|
*
|
|
26357
26416
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29714,8 +29773,8 @@ var VehicleSchema = object({
|
|
|
29714
29773
|
id: string(),
|
|
29715
29774
|
name: string(),
|
|
29716
29775
|
sampleCount: number().int().nonnegative(),
|
|
29717
|
-
|
|
29718
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29776
|
+
coverMediaId: number().int().optional(),
|
|
29777
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29719
29778
|
coverBase64: string().optional()
|
|
29720
29779
|
});
|
|
29721
29780
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29748,7 +29807,7 @@ var PlateInfoSchema = object({
|
|
|
29748
29807
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29749
29808
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29750
29809
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29751
|
-
|
|
29810
|
+
keyFrameMediaId: number().int().optional(),
|
|
29752
29811
|
base64: string().optional(),
|
|
29753
29812
|
/**
|
|
29754
29813
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29769,11 +29828,14 @@ var PlateInfoSchema = object({
|
|
|
29769
29828
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29770
29829
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29771
29830
|
*
|
|
29772
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29773
|
-
* media
|
|
29831
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29832
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29833
|
+
* access decision.
|
|
29774
29834
|
*/
|
|
29775
29835
|
var MediaFileLiteSchema = object({
|
|
29776
|
-
|
|
29836
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29837
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29838
|
+
mediaId: number().int(),
|
|
29777
29839
|
kind: string(),
|
|
29778
29840
|
url: string(),
|
|
29779
29841
|
sizeBytes: number(),
|
|
@@ -29832,7 +29894,7 @@ method(object({
|
|
|
29832
29894
|
}), method(object({
|
|
29833
29895
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29834
29896
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29835
|
-
* option; `
|
|
29897
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29836
29898
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29837
29899
|
* resolves to `false` and is exactly the intended default. */
|
|
29838
29900
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31401,7 +31463,14 @@ var SceneReferenceSchema = object({
|
|
|
31401
31463
|
modelId: string(),
|
|
31402
31464
|
condition: SceneConditionSchema,
|
|
31403
31465
|
capturedAt: number(),
|
|
31404
|
-
|
|
31466
|
+
/**
|
|
31467
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31468
|
+
*
|
|
31469
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31470
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31471
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31472
|
+
*/
|
|
31473
|
+
thumbnailMediaId: number().int().optional(),
|
|
31405
31474
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31406
31475
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31407
31476
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33385,7 +33454,7 @@ var StationaryObjectSchema = object({
|
|
|
33385
33454
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33386
33455
|
label: string().optional(),
|
|
33387
33456
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33388
|
-
|
|
33457
|
+
keyFrameMediaId: number().int().optional()
|
|
33389
33458
|
});
|
|
33390
33459
|
var CameraOccupancySnapshotSchema = object({
|
|
33391
33460
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -36123,6 +36192,12 @@ Object.freeze({
|
|
|
36123
36192
|
addonId: null,
|
|
36124
36193
|
access: "create"
|
|
36125
36194
|
},
|
|
36195
|
+
"dataStoreProvider.upsert": {
|
|
36196
|
+
capName: "data-store-provider",
|
|
36197
|
+
capScope: "system",
|
|
36198
|
+
addonId: null,
|
|
36199
|
+
access: "create"
|
|
36200
|
+
},
|
|
36126
36201
|
"dayNight.getOptions": {
|
|
36127
36202
|
capName: "day-night",
|
|
36128
36203
|
capScope: "device",
|
|
@@ -39987,6 +40062,12 @@ Object.freeze({
|
|
|
39987
40062
|
addonId: null,
|
|
39988
40063
|
access: "create"
|
|
39989
40064
|
},
|
|
40065
|
+
"settingsStore.upsert": {
|
|
40066
|
+
capName: "settings-store",
|
|
40067
|
+
capScope: "system",
|
|
40068
|
+
addonId: null,
|
|
40069
|
+
access: "create"
|
|
40070
|
+
},
|
|
39990
40071
|
"smtpProvider.getStatus": {
|
|
39991
40072
|
capName: "smtp-provider",
|
|
39992
40073
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-import-alexa",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.99",
|
|
4
4
|
"description": "Alexa device-import provider for CamStack — imports the smart-home devices in a user's Alexa account via the unofficial alexa-remote2 cookie/token client (the inverse of the Alexa exporter)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|