@camstack/addon-provider-onvif 1.2.97 → 1.2.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.js +131 -50
- package/dist/addon.mjs +131 -50
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
//#region \0rolldown/runtime.js
|
|
3
3
|
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
4
4
|
//#endregion
|
|
5
|
-
//#region ../types/dist/event-category-
|
|
5
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
6
6
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
7
7
|
EventCategory["SystemBoot"] = "system.boot";
|
|
8
8
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -563,7 +563,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
563
563
|
* a package zone — a newly-appeared stationary object of a package class
|
|
564
564
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
565
565
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
566
|
-
* entryId, className, zoneIds,
|
|
566
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
567
567
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
568
568
|
* this bus topic drives notifier rules + live UI. See
|
|
569
569
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5349,7 +5349,7 @@ var ZodIssueCode = {
|
|
|
5349
5349
|
var ZodFirstPartyTypeKind;
|
|
5350
5350
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5351
5351
|
//#endregion
|
|
5352
|
-
//#region ../types/dist/sleep-
|
|
5352
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5353
5353
|
/**
|
|
5354
5354
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5355
5355
|
* window to float samples (D455).
|
|
@@ -7312,13 +7312,30 @@ new Set([
|
|
|
7312
7312
|
"scene",
|
|
7313
7313
|
"motion",
|
|
7314
7314
|
"object",
|
|
7315
|
-
"audio"
|
|
7315
|
+
"audio",
|
|
7316
|
+
"mosaic"
|
|
7316
7317
|
]);
|
|
7317
|
-
|
|
7318
|
+
/**
|
|
7319
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7320
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7321
|
+
* does not re-spell the list and drift from it.
|
|
7322
|
+
*/
|
|
7323
|
+
var EVENT_OWNER_TYPES = [
|
|
7318
7324
|
"motion",
|
|
7319
7325
|
"object",
|
|
7320
7326
|
"audio"
|
|
7321
|
-
]
|
|
7327
|
+
];
|
|
7328
|
+
/**
|
|
7329
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7330
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7331
|
+
* `(table, id)`).
|
|
7332
|
+
*
|
|
7333
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7334
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7335
|
+
* nothing failing until a caller asked.
|
|
7336
|
+
*/
|
|
7337
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7338
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7322
7339
|
var EncodeProfileSchema = object({
|
|
7323
7340
|
video: object({
|
|
7324
7341
|
codec: _enum([
|
|
@@ -12415,6 +12432,16 @@ method(object({
|
|
|
12415
12432
|
filter: QueryFilterSchema.optional(),
|
|
12416
12433
|
columns: array(string()).readonly().optional()
|
|
12417
12434
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12435
|
+
namespace: string().optional(),
|
|
12436
|
+
collection: string(),
|
|
12437
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12438
|
+
* index on the collection. Never empty. */
|
|
12439
|
+
conflict: array(string()).readonly(),
|
|
12440
|
+
record: BulkRecordSchema
|
|
12441
|
+
}), object({
|
|
12442
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12443
|
+
* row's own id on an update. */
|
|
12444
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12418
12445
|
namespace: string().optional(),
|
|
12419
12446
|
collection: string(),
|
|
12420
12447
|
record: object({
|
|
@@ -12549,6 +12576,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12549
12576
|
id: union([string(), number()]) }), {
|
|
12550
12577
|
kind: "mutation",
|
|
12551
12578
|
auth: "admin"
|
|
12579
|
+
}), method(object({
|
|
12580
|
+
namespace: string().optional(),
|
|
12581
|
+
collection: string(),
|
|
12582
|
+
conflict: array(string()).readonly(),
|
|
12583
|
+
record: BulkRecordSchema
|
|
12584
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12585
|
+
kind: "mutation",
|
|
12586
|
+
auth: "admin"
|
|
12552
12587
|
}), method(object({
|
|
12553
12588
|
namespace: string().optional(),
|
|
12554
12589
|
collection: string(),
|
|
@@ -18846,8 +18881,8 @@ var TrackPositionSchema = object({
|
|
|
18846
18881
|
var TrackSnapshotSchema = object({
|
|
18847
18882
|
timestamp: number(),
|
|
18848
18883
|
position: TrackPositionSchema,
|
|
18849
|
-
/**
|
|
18850
|
-
|
|
18884
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
18885
|
+
mediaId: number().int()
|
|
18851
18886
|
});
|
|
18852
18887
|
/**
|
|
18853
18888
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19451,14 +19486,14 @@ var ObjectEventSchema = object({
|
|
|
19451
19486
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19452
19487
|
frameWidth: number().optional(),
|
|
19453
19488
|
frameHeight: number().optional(),
|
|
19454
|
-
/**
|
|
19455
|
-
|
|
19456
|
-
/** Design B:
|
|
19489
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19490
|
+
mediaId: number().int().optional(),
|
|
19491
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19457
19492
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19458
|
-
* (`/addon/<addonId>/event-media/<
|
|
19493
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19459
19494
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19460
|
-
* sources — consumers fall back to `
|
|
19461
|
-
|
|
19495
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19496
|
+
keyFrameMediaId: number().int().optional(),
|
|
19462
19497
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19463
19498
|
mediaUrl: string().optional(),
|
|
19464
19499
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19508,7 +19543,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19508
19543
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19509
19544
|
*
|
|
19510
19545
|
* `url` points at the `event-media` data plane
|
|
19511
|
-
* (`/addon/<addonId>/event-media/<
|
|
19546
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19512
19547
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19513
19548
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19514
19549
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19516,10 +19551,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19516
19551
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19517
19552
|
* (per-device scoping).
|
|
19518
19553
|
*
|
|
19519
|
-
* The URL is built from the row's
|
|
19520
|
-
*
|
|
19554
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19555
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19556
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19521
19557
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19522
|
-
* `faceCrop`/`plateCrop
|
|
19558
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19559
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19560
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19523
19561
|
*
|
|
19524
19562
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19525
19563
|
*
|
|
@@ -19532,7 +19570,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19532
19570
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19533
19571
|
*/
|
|
19534
19572
|
var MediaFileSchema = object({
|
|
19535
|
-
|
|
19573
|
+
/**
|
|
19574
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19575
|
+
*
|
|
19576
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19577
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19578
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19579
|
+
* different rows that spell the same number, and a track whose
|
|
19580
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19581
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19582
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19583
|
+
* at all.
|
|
19584
|
+
*/
|
|
19585
|
+
mediaId: number().int(),
|
|
19536
19586
|
kind: MediaFileKindEnum,
|
|
19537
19587
|
sizeBytes: number(),
|
|
19538
19588
|
timestamp: number()
|
|
@@ -19640,7 +19690,7 @@ var RetrainTrackSchema = object({
|
|
|
19640
19690
|
});
|
|
19641
19691
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19642
19692
|
var RetrainFrameCandidateSchema = object({
|
|
19643
|
-
|
|
19693
|
+
mediaId: number().int(),
|
|
19644
19694
|
kind: MediaFileKindEnum,
|
|
19645
19695
|
timestamp: number(),
|
|
19646
19696
|
sizeBytes: number().int(),
|
|
@@ -19654,7 +19704,7 @@ var RetrainFrameSchema = object({
|
|
|
19654
19704
|
deviceId: number(),
|
|
19655
19705
|
trackId: string(),
|
|
19656
19706
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19657
|
-
|
|
19707
|
+
sourceMediaId: number().int(),
|
|
19658
19708
|
sourceKind: MediaFileKindEnum,
|
|
19659
19709
|
sizeBytes: number().int(),
|
|
19660
19710
|
width: number().int(),
|
|
@@ -19670,7 +19720,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19670
19720
|
var RetrainFrameSelectionSchema = object({
|
|
19671
19721
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19672
19722
|
refused: array(object({
|
|
19673
|
-
|
|
19723
|
+
sourceMediaId: number().int(),
|
|
19674
19724
|
reason: RetrainCopyRefusalSchema
|
|
19675
19725
|
})).readonly()
|
|
19676
19726
|
});
|
|
@@ -19678,7 +19728,7 @@ var RetrainFrameListSchema = object({
|
|
|
19678
19728
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19679
19729
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19680
19730
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19681
|
-
|
|
19731
|
+
autoPickMediaId: number().int().optional()
|
|
19682
19732
|
});
|
|
19683
19733
|
/** What the operator asked the assist to look for. */
|
|
19684
19734
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -19773,9 +19823,11 @@ var RecentTracksQueryInput = object({
|
|
|
19773
19823
|
});
|
|
19774
19824
|
/**
|
|
19775
19825
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
19776
|
-
* `
|
|
19777
|
-
* served by the event-media plane
|
|
19778
|
-
* member visible has been materialised
|
|
19826
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
19827
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
19828
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
19829
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
19830
|
+
* row once event ids became per-table rowids).
|
|
19779
19831
|
*/
|
|
19780
19832
|
var SummarySchema = object({
|
|
19781
19833
|
id: string(),
|
|
@@ -19784,7 +19836,7 @@ var SummarySchema = object({
|
|
|
19784
19836
|
lastActiveAt: number(),
|
|
19785
19837
|
sealedAt: number().nullable(),
|
|
19786
19838
|
memberCount: number().int().nonnegative(),
|
|
19787
|
-
|
|
19839
|
+
groupShotMediaId: number().int().nullable()
|
|
19788
19840
|
});
|
|
19789
19841
|
var SummariesQueryInput = object({
|
|
19790
19842
|
deviceIds: array(number()).min(1),
|
|
@@ -20338,7 +20390,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20338
20390
|
}), method(object({
|
|
20339
20391
|
deviceId: number(),
|
|
20340
20392
|
trackId: string(),
|
|
20341
|
-
|
|
20393
|
+
mediaIds: array(number().int()).min(1)
|
|
20342
20394
|
}), RetrainFrameSelectionSchema, {
|
|
20343
20395
|
kind: "mutation",
|
|
20344
20396
|
auth: "admin"
|
|
@@ -20406,7 +20458,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20406
20458
|
kind: "query",
|
|
20407
20459
|
auth: "admin"
|
|
20408
20460
|
}), method(object({
|
|
20409
|
-
|
|
20461
|
+
/** Which of the three event tables owns the row. */
|
|
20462
|
+
ownerType: EventOwnerTypeSchema,
|
|
20463
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20464
|
+
eventId: number().int(),
|
|
20410
20465
|
kind: MediaFileKindEnum.optional(),
|
|
20411
20466
|
deviceId: number()
|
|
20412
20467
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20417,7 +20472,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20417
20472
|
trackId: string(),
|
|
20418
20473
|
deviceId: number()
|
|
20419
20474
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20420
|
-
|
|
20475
|
+
ownerType: EventOwnerTypeSchema,
|
|
20476
|
+
eventId: number().int(),
|
|
20421
20477
|
deviceId: number()
|
|
20422
20478
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20423
20479
|
kind: "mutation",
|
|
@@ -24984,8 +25040,8 @@ var IdentitySchema = object({
|
|
|
24984
25040
|
id: string(),
|
|
24985
25041
|
name: string(),
|
|
24986
25042
|
sampleCount: number().int().nonnegative(),
|
|
24987
|
-
|
|
24988
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
25043
|
+
coverMediaId: number().int().optional(),
|
|
25044
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
24989
25045
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
24990
25046
|
coverBase64: string().optional()
|
|
24991
25047
|
});
|
|
@@ -25011,8 +25067,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
25011
25067
|
enrolledAt: number().int(),
|
|
25012
25068
|
deviceId: number().int().optional(),
|
|
25013
25069
|
source: _enum(["detected", "photo"]),
|
|
25014
|
-
/** The enrolled crop's media
|
|
25015
|
-
|
|
25070
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
25071
|
+
mediaId: number().int().optional(),
|
|
25016
25072
|
/**
|
|
25017
25073
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
25018
25074
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -25081,15 +25137,15 @@ var FaceInfoSchema = object({
|
|
|
25081
25137
|
*/
|
|
25082
25138
|
cropUrl: string().optional(),
|
|
25083
25139
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
25084
|
-
* view draw the box over the native `
|
|
25140
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
25085
25141
|
* legacy rows written before design B. */
|
|
25086
25142
|
faceBbox: BoundingBoxSchema.optional(),
|
|
25087
25143
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
25088
25144
|
* Fetch the native JPEG via the event-media data-plane
|
|
25089
|
-
* (`/addon/<addonId>/event-media/<
|
|
25145
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
25090
25146
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
25091
25147
|
* back to the inline `base64` face crop. */
|
|
25092
|
-
|
|
25148
|
+
keyFrameMediaId: number().int().optional(),
|
|
25093
25149
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
25094
25150
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
25095
25151
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -25158,11 +25214,14 @@ var FaceClusterSchema = object({
|
|
|
25158
25214
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
25159
25215
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
25160
25216
|
*
|
|
25161
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
25162
|
-
* media
|
|
25217
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
25218
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
25219
|
+
* access decision.
|
|
25163
25220
|
*/
|
|
25164
25221
|
var MediaFileLiteSchema$1 = object({
|
|
25165
|
-
|
|
25222
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
25223
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
25224
|
+
mediaId: number().int(),
|
|
25166
25225
|
kind: string(),
|
|
25167
25226
|
url: string(),
|
|
25168
25227
|
sizeBytes: number(),
|
|
@@ -25179,7 +25238,7 @@ method(object({
|
|
|
25179
25238
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
25180
25239
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
25181
25240
|
*
|
|
25182
|
-
* Nothing loses its avatar: `
|
|
25241
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
25183
25242
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
25184
25243
|
*
|
|
25185
25244
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -27647,8 +27706,8 @@ var VehicleSchema = object({
|
|
|
27647
27706
|
id: string(),
|
|
27648
27707
|
name: string(),
|
|
27649
27708
|
sampleCount: number().int().nonnegative(),
|
|
27650
|
-
|
|
27651
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
27709
|
+
coverMediaId: number().int().optional(),
|
|
27710
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
27652
27711
|
coverBase64: string().optional()
|
|
27653
27712
|
});
|
|
27654
27713
|
var VehicleSampleInfoSchema = object({
|
|
@@ -27681,7 +27740,7 @@ var PlateInfoSchema = object({
|
|
|
27681
27740
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
27682
27741
|
plateBbox: BoundingBoxSchema.optional(),
|
|
27683
27742
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
27684
|
-
|
|
27743
|
+
keyFrameMediaId: number().int().optional(),
|
|
27685
27744
|
base64: string().optional(),
|
|
27686
27745
|
/**
|
|
27687
27746
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -27702,11 +27761,14 @@ var PlateInfoSchema = object({
|
|
|
27702
27761
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27703
27762
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27704
27763
|
*
|
|
27705
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27706
|
-
* media
|
|
27764
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27765
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27766
|
+
* access decision.
|
|
27707
27767
|
*/
|
|
27708
27768
|
var MediaFileLiteSchema = object({
|
|
27709
|
-
|
|
27769
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27770
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27771
|
+
mediaId: number().int(),
|
|
27710
27772
|
kind: string(),
|
|
27711
27773
|
url: string(),
|
|
27712
27774
|
sizeBytes: number(),
|
|
@@ -27765,7 +27827,7 @@ method(object({
|
|
|
27765
27827
|
}), method(object({
|
|
27766
27828
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
27767
27829
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
27768
|
-
* option; `
|
|
27830
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
27769
27831
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
27770
27832
|
* resolves to `false` and is exactly the intended default. */
|
|
27771
27833
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -29131,7 +29193,14 @@ var SceneReferenceSchema = object({
|
|
|
29131
29193
|
modelId: string(),
|
|
29132
29194
|
condition: SceneConditionSchema,
|
|
29133
29195
|
capturedAt: number(),
|
|
29134
|
-
|
|
29196
|
+
/**
|
|
29197
|
+
* The reference thumbnail's media ROW id (D482).
|
|
29198
|
+
*
|
|
29199
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
29200
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
29201
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
29202
|
+
*/
|
|
29203
|
+
thumbnailMediaId: number().int().optional(),
|
|
29135
29204
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
29136
29205
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
29137
29206
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -30579,7 +30648,7 @@ var StationaryObjectSchema = object({
|
|
|
30579
30648
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
30580
30649
|
label: string().optional(),
|
|
30581
30650
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
30582
|
-
|
|
30651
|
+
keyFrameMediaId: number().int().optional()
|
|
30583
30652
|
});
|
|
30584
30653
|
var CameraOccupancySnapshotSchema = object({
|
|
30585
30654
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -32561,6 +32630,12 @@ Object.freeze({
|
|
|
32561
32630
|
addonId: null,
|
|
32562
32631
|
access: "create"
|
|
32563
32632
|
},
|
|
32633
|
+
"dataStoreProvider.upsert": {
|
|
32634
|
+
capName: "data-store-provider",
|
|
32635
|
+
capScope: "system",
|
|
32636
|
+
addonId: null,
|
|
32637
|
+
access: "create"
|
|
32638
|
+
},
|
|
32564
32639
|
"dayNight.getOptions": {
|
|
32565
32640
|
capName: "day-night",
|
|
32566
32641
|
capScope: "device",
|
|
@@ -36425,6 +36500,12 @@ Object.freeze({
|
|
|
36425
36500
|
addonId: null,
|
|
36426
36501
|
access: "create"
|
|
36427
36502
|
},
|
|
36503
|
+
"settingsStore.upsert": {
|
|
36504
|
+
capName: "settings-store",
|
|
36505
|
+
capScope: "system",
|
|
36506
|
+
addonId: null,
|
|
36507
|
+
access: "create"
|
|
36508
|
+
},
|
|
36428
36509
|
"smtpProvider.getStatus": {
|
|
36429
36510
|
capName: "smtp-provider",
|
|
36430
36511
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { createRequire } from "node:module";
|
|
|
3
3
|
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
4
4
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
5
5
|
//#endregion
|
|
6
|
-
//#region ../types/dist/event-category-
|
|
6
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
7
7
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
8
8
|
EventCategory["SystemBoot"] = "system.boot";
|
|
9
9
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -564,7 +564,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
564
564
|
* a package zone — a newly-appeared stationary object of a package class
|
|
565
565
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
566
566
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
567
|
-
* entryId, className, zoneIds,
|
|
567
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
568
568
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
569
569
|
* this bus topic drives notifier rules + live UI. See
|
|
570
570
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5350,7 +5350,7 @@ var ZodIssueCode = {
|
|
|
5350
5350
|
var ZodFirstPartyTypeKind;
|
|
5351
5351
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5352
5352
|
//#endregion
|
|
5353
|
-
//#region ../types/dist/sleep-
|
|
5353
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5354
5354
|
/**
|
|
5355
5355
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5356
5356
|
* window to float samples (D455).
|
|
@@ -7313,13 +7313,30 @@ new Set([
|
|
|
7313
7313
|
"scene",
|
|
7314
7314
|
"motion",
|
|
7315
7315
|
"object",
|
|
7316
|
-
"audio"
|
|
7316
|
+
"audio",
|
|
7317
|
+
"mosaic"
|
|
7317
7318
|
]);
|
|
7318
|
-
|
|
7319
|
+
/**
|
|
7320
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7321
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7322
|
+
* does not re-spell the list and drift from it.
|
|
7323
|
+
*/
|
|
7324
|
+
var EVENT_OWNER_TYPES = [
|
|
7319
7325
|
"motion",
|
|
7320
7326
|
"object",
|
|
7321
7327
|
"audio"
|
|
7322
|
-
]
|
|
7328
|
+
];
|
|
7329
|
+
/**
|
|
7330
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7331
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7332
|
+
* `(table, id)`).
|
|
7333
|
+
*
|
|
7334
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7335
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7336
|
+
* nothing failing until a caller asked.
|
|
7337
|
+
*/
|
|
7338
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7339
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7323
7340
|
var EncodeProfileSchema = object({
|
|
7324
7341
|
video: object({
|
|
7325
7342
|
codec: _enum([
|
|
@@ -12416,6 +12433,16 @@ method(object({
|
|
|
12416
12433
|
filter: QueryFilterSchema.optional(),
|
|
12417
12434
|
columns: array(string()).readonly().optional()
|
|
12418
12435
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12436
|
+
namespace: string().optional(),
|
|
12437
|
+
collection: string(),
|
|
12438
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12439
|
+
* index on the collection. Never empty. */
|
|
12440
|
+
conflict: array(string()).readonly(),
|
|
12441
|
+
record: BulkRecordSchema
|
|
12442
|
+
}), object({
|
|
12443
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12444
|
+
* row's own id on an update. */
|
|
12445
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12419
12446
|
namespace: string().optional(),
|
|
12420
12447
|
collection: string(),
|
|
12421
12448
|
record: object({
|
|
@@ -12550,6 +12577,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12550
12577
|
id: union([string(), number()]) }), {
|
|
12551
12578
|
kind: "mutation",
|
|
12552
12579
|
auth: "admin"
|
|
12580
|
+
}), method(object({
|
|
12581
|
+
namespace: string().optional(),
|
|
12582
|
+
collection: string(),
|
|
12583
|
+
conflict: array(string()).readonly(),
|
|
12584
|
+
record: BulkRecordSchema
|
|
12585
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12586
|
+
kind: "mutation",
|
|
12587
|
+
auth: "admin"
|
|
12553
12588
|
}), method(object({
|
|
12554
12589
|
namespace: string().optional(),
|
|
12555
12590
|
collection: string(),
|
|
@@ -18847,8 +18882,8 @@ var TrackPositionSchema = object({
|
|
|
18847
18882
|
var TrackSnapshotSchema = object({
|
|
18848
18883
|
timestamp: number(),
|
|
18849
18884
|
position: TrackPositionSchema,
|
|
18850
|
-
/**
|
|
18851
|
-
|
|
18885
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
18886
|
+
mediaId: number().int()
|
|
18852
18887
|
});
|
|
18853
18888
|
/**
|
|
18854
18889
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19452,14 +19487,14 @@ var ObjectEventSchema = object({
|
|
|
19452
19487
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19453
19488
|
frameWidth: number().optional(),
|
|
19454
19489
|
frameHeight: number().optional(),
|
|
19455
|
-
/**
|
|
19456
|
-
|
|
19457
|
-
/** Design B:
|
|
19490
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19491
|
+
mediaId: number().int().optional(),
|
|
19492
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19458
19493
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19459
|
-
* (`/addon/<addonId>/event-media/<
|
|
19494
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19460
19495
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19461
|
-
* sources — consumers fall back to `
|
|
19462
|
-
|
|
19496
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19497
|
+
keyFrameMediaId: number().int().optional(),
|
|
19463
19498
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19464
19499
|
mediaUrl: string().optional(),
|
|
19465
19500
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19509,7 +19544,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19509
19544
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19510
19545
|
*
|
|
19511
19546
|
* `url` points at the `event-media` data plane
|
|
19512
|
-
* (`/addon/<addonId>/event-media/<
|
|
19547
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19513
19548
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19514
19549
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19515
19550
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19517,10 +19552,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19517
19552
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19518
19553
|
* (per-device scoping).
|
|
19519
19554
|
*
|
|
19520
|
-
* The URL is built from the row's
|
|
19521
|
-
*
|
|
19555
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19556
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19557
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19522
19558
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19523
|
-
* `faceCrop`/`plateCrop
|
|
19559
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19560
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19561
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19524
19562
|
*
|
|
19525
19563
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19526
19564
|
*
|
|
@@ -19533,7 +19571,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19533
19571
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19534
19572
|
*/
|
|
19535
19573
|
var MediaFileSchema = object({
|
|
19536
|
-
|
|
19574
|
+
/**
|
|
19575
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19576
|
+
*
|
|
19577
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19578
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19579
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19580
|
+
* different rows that spell the same number, and a track whose
|
|
19581
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19582
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19583
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19584
|
+
* at all.
|
|
19585
|
+
*/
|
|
19586
|
+
mediaId: number().int(),
|
|
19537
19587
|
kind: MediaFileKindEnum,
|
|
19538
19588
|
sizeBytes: number(),
|
|
19539
19589
|
timestamp: number()
|
|
@@ -19641,7 +19691,7 @@ var RetrainTrackSchema = object({
|
|
|
19641
19691
|
});
|
|
19642
19692
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19643
19693
|
var RetrainFrameCandidateSchema = object({
|
|
19644
|
-
|
|
19694
|
+
mediaId: number().int(),
|
|
19645
19695
|
kind: MediaFileKindEnum,
|
|
19646
19696
|
timestamp: number(),
|
|
19647
19697
|
sizeBytes: number().int(),
|
|
@@ -19655,7 +19705,7 @@ var RetrainFrameSchema = object({
|
|
|
19655
19705
|
deviceId: number(),
|
|
19656
19706
|
trackId: string(),
|
|
19657
19707
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19658
|
-
|
|
19708
|
+
sourceMediaId: number().int(),
|
|
19659
19709
|
sourceKind: MediaFileKindEnum,
|
|
19660
19710
|
sizeBytes: number().int(),
|
|
19661
19711
|
width: number().int(),
|
|
@@ -19671,7 +19721,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19671
19721
|
var RetrainFrameSelectionSchema = object({
|
|
19672
19722
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19673
19723
|
refused: array(object({
|
|
19674
|
-
|
|
19724
|
+
sourceMediaId: number().int(),
|
|
19675
19725
|
reason: RetrainCopyRefusalSchema
|
|
19676
19726
|
})).readonly()
|
|
19677
19727
|
});
|
|
@@ -19679,7 +19729,7 @@ var RetrainFrameListSchema = object({
|
|
|
19679
19729
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19680
19730
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19681
19731
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19682
|
-
|
|
19732
|
+
autoPickMediaId: number().int().optional()
|
|
19683
19733
|
});
|
|
19684
19734
|
/** What the operator asked the assist to look for. */
|
|
19685
19735
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -19774,9 +19824,11 @@ var RecentTracksQueryInput = object({
|
|
|
19774
19824
|
});
|
|
19775
19825
|
/**
|
|
19776
19826
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
19777
|
-
* `
|
|
19778
|
-
* served by the event-media plane
|
|
19779
|
-
* member visible has been materialised
|
|
19827
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
19828
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
19829
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
19830
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
19831
|
+
* row once event ids became per-table rowids).
|
|
19780
19832
|
*/
|
|
19781
19833
|
var SummarySchema = object({
|
|
19782
19834
|
id: string(),
|
|
@@ -19785,7 +19837,7 @@ var SummarySchema = object({
|
|
|
19785
19837
|
lastActiveAt: number(),
|
|
19786
19838
|
sealedAt: number().nullable(),
|
|
19787
19839
|
memberCount: number().int().nonnegative(),
|
|
19788
|
-
|
|
19840
|
+
groupShotMediaId: number().int().nullable()
|
|
19789
19841
|
});
|
|
19790
19842
|
var SummariesQueryInput = object({
|
|
19791
19843
|
deviceIds: array(number()).min(1),
|
|
@@ -20339,7 +20391,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20339
20391
|
}), method(object({
|
|
20340
20392
|
deviceId: number(),
|
|
20341
20393
|
trackId: string(),
|
|
20342
|
-
|
|
20394
|
+
mediaIds: array(number().int()).min(1)
|
|
20343
20395
|
}), RetrainFrameSelectionSchema, {
|
|
20344
20396
|
kind: "mutation",
|
|
20345
20397
|
auth: "admin"
|
|
@@ -20407,7 +20459,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20407
20459
|
kind: "query",
|
|
20408
20460
|
auth: "admin"
|
|
20409
20461
|
}), method(object({
|
|
20410
|
-
|
|
20462
|
+
/** Which of the three event tables owns the row. */
|
|
20463
|
+
ownerType: EventOwnerTypeSchema,
|
|
20464
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20465
|
+
eventId: number().int(),
|
|
20411
20466
|
kind: MediaFileKindEnum.optional(),
|
|
20412
20467
|
deviceId: number()
|
|
20413
20468
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20418,7 +20473,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20418
20473
|
trackId: string(),
|
|
20419
20474
|
deviceId: number()
|
|
20420
20475
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20421
|
-
|
|
20476
|
+
ownerType: EventOwnerTypeSchema,
|
|
20477
|
+
eventId: number().int(),
|
|
20422
20478
|
deviceId: number()
|
|
20423
20479
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20424
20480
|
kind: "mutation",
|
|
@@ -24985,8 +25041,8 @@ var IdentitySchema = object({
|
|
|
24985
25041
|
id: string(),
|
|
24986
25042
|
name: string(),
|
|
24987
25043
|
sampleCount: number().int().nonnegative(),
|
|
24988
|
-
|
|
24989
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
25044
|
+
coverMediaId: number().int().optional(),
|
|
25045
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
24990
25046
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
24991
25047
|
coverBase64: string().optional()
|
|
24992
25048
|
});
|
|
@@ -25012,8 +25068,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
25012
25068
|
enrolledAt: number().int(),
|
|
25013
25069
|
deviceId: number().int().optional(),
|
|
25014
25070
|
source: _enum(["detected", "photo"]),
|
|
25015
|
-
/** The enrolled crop's media
|
|
25016
|
-
|
|
25071
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
25072
|
+
mediaId: number().int().optional(),
|
|
25017
25073
|
/**
|
|
25018
25074
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
25019
25075
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -25082,15 +25138,15 @@ var FaceInfoSchema = object({
|
|
|
25082
25138
|
*/
|
|
25083
25139
|
cropUrl: string().optional(),
|
|
25084
25140
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
25085
|
-
* view draw the box over the native `
|
|
25141
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
25086
25142
|
* legacy rows written before design B. */
|
|
25087
25143
|
faceBbox: BoundingBoxSchema.optional(),
|
|
25088
25144
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
25089
25145
|
* Fetch the native JPEG via the event-media data-plane
|
|
25090
|
-
* (`/addon/<addonId>/event-media/<
|
|
25146
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
25091
25147
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
25092
25148
|
* back to the inline `base64` face crop. */
|
|
25093
|
-
|
|
25149
|
+
keyFrameMediaId: number().int().optional(),
|
|
25094
25150
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
25095
25151
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
25096
25152
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -25159,11 +25215,14 @@ var FaceClusterSchema = object({
|
|
|
25159
25215
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
25160
25216
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
25161
25217
|
*
|
|
25162
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
25163
|
-
* media
|
|
25218
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
25219
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
25220
|
+
* access decision.
|
|
25164
25221
|
*/
|
|
25165
25222
|
var MediaFileLiteSchema$1 = object({
|
|
25166
|
-
|
|
25223
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
25224
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
25225
|
+
mediaId: number().int(),
|
|
25167
25226
|
kind: string(),
|
|
25168
25227
|
url: string(),
|
|
25169
25228
|
sizeBytes: number(),
|
|
@@ -25180,7 +25239,7 @@ method(object({
|
|
|
25180
25239
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
25181
25240
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
25182
25241
|
*
|
|
25183
|
-
* Nothing loses its avatar: `
|
|
25242
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
25184
25243
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
25185
25244
|
*
|
|
25186
25245
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -27648,8 +27707,8 @@ var VehicleSchema = object({
|
|
|
27648
27707
|
id: string(),
|
|
27649
27708
|
name: string(),
|
|
27650
27709
|
sampleCount: number().int().nonnegative(),
|
|
27651
|
-
|
|
27652
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
27710
|
+
coverMediaId: number().int().optional(),
|
|
27711
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
27653
27712
|
coverBase64: string().optional()
|
|
27654
27713
|
});
|
|
27655
27714
|
var VehicleSampleInfoSchema = object({
|
|
@@ -27682,7 +27741,7 @@ var PlateInfoSchema = object({
|
|
|
27682
27741
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
27683
27742
|
plateBbox: BoundingBoxSchema.optional(),
|
|
27684
27743
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
27685
|
-
|
|
27744
|
+
keyFrameMediaId: number().int().optional(),
|
|
27686
27745
|
base64: string().optional(),
|
|
27687
27746
|
/**
|
|
27688
27747
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -27703,11 +27762,14 @@ var PlateInfoSchema = object({
|
|
|
27703
27762
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27704
27763
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27705
27764
|
*
|
|
27706
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27707
|
-
* media
|
|
27765
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27766
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27767
|
+
* access decision.
|
|
27708
27768
|
*/
|
|
27709
27769
|
var MediaFileLiteSchema = object({
|
|
27710
|
-
|
|
27770
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27771
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27772
|
+
mediaId: number().int(),
|
|
27711
27773
|
kind: string(),
|
|
27712
27774
|
url: string(),
|
|
27713
27775
|
sizeBytes: number(),
|
|
@@ -27766,7 +27828,7 @@ method(object({
|
|
|
27766
27828
|
}), method(object({
|
|
27767
27829
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
27768
27830
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
27769
|
-
* option; `
|
|
27831
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
27770
27832
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
27771
27833
|
* resolves to `false` and is exactly the intended default. */
|
|
27772
27834
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -29132,7 +29194,14 @@ var SceneReferenceSchema = object({
|
|
|
29132
29194
|
modelId: string(),
|
|
29133
29195
|
condition: SceneConditionSchema,
|
|
29134
29196
|
capturedAt: number(),
|
|
29135
|
-
|
|
29197
|
+
/**
|
|
29198
|
+
* The reference thumbnail's media ROW id (D482).
|
|
29199
|
+
*
|
|
29200
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
29201
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
29202
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
29203
|
+
*/
|
|
29204
|
+
thumbnailMediaId: number().int().optional(),
|
|
29136
29205
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
29137
29206
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
29138
29207
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -30580,7 +30649,7 @@ var StationaryObjectSchema = object({
|
|
|
30580
30649
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
30581
30650
|
label: string().optional(),
|
|
30582
30651
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
30583
|
-
|
|
30652
|
+
keyFrameMediaId: number().int().optional()
|
|
30584
30653
|
});
|
|
30585
30654
|
var CameraOccupancySnapshotSchema = object({
|
|
30586
30655
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -32562,6 +32631,12 @@ Object.freeze({
|
|
|
32562
32631
|
addonId: null,
|
|
32563
32632
|
access: "create"
|
|
32564
32633
|
},
|
|
32634
|
+
"dataStoreProvider.upsert": {
|
|
32635
|
+
capName: "data-store-provider",
|
|
32636
|
+
capScope: "system",
|
|
32637
|
+
addonId: null,
|
|
32638
|
+
access: "create"
|
|
32639
|
+
},
|
|
32565
32640
|
"dayNight.getOptions": {
|
|
32566
32641
|
capName: "day-night",
|
|
32567
32642
|
capScope: "device",
|
|
@@ -36426,6 +36501,12 @@ Object.freeze({
|
|
|
36426
36501
|
addonId: null,
|
|
36427
36502
|
access: "create"
|
|
36428
36503
|
},
|
|
36504
|
+
"settingsStore.upsert": {
|
|
36505
|
+
capName: "settings-store",
|
|
36506
|
+
capScope: "system",
|
|
36507
|
+
addonId: null,
|
|
36508
|
+
access: "create"
|
|
36509
|
+
},
|
|
36429
36510
|
"smtpProvider.getStatus": {
|
|
36430
36511
|
capName: "smtp-provider",
|
|
36431
36512
|
capScope: "system",
|