@camstack/addon-decoder-nodeav 1.2.98 → 1.2.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +131 -50
- package/dist/index.mjs +131 -50
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
let node_crypto = require("node:crypto");
|
|
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([
|
|
@@ -12453,6 +12470,16 @@ method(object({
|
|
|
12453
12470
|
filter: QueryFilterSchema.optional(),
|
|
12454
12471
|
columns: array(string()).readonly().optional()
|
|
12455
12472
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12473
|
+
namespace: string().optional(),
|
|
12474
|
+
collection: string(),
|
|
12475
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12476
|
+
* index on the collection. Never empty. */
|
|
12477
|
+
conflict: array(string()).readonly(),
|
|
12478
|
+
record: BulkRecordSchema
|
|
12479
|
+
}), object({
|
|
12480
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12481
|
+
* row's own id on an update. */
|
|
12482
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12456
12483
|
namespace: string().optional(),
|
|
12457
12484
|
collection: string(),
|
|
12458
12485
|
record: object({
|
|
@@ -12587,6 +12614,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12587
12614
|
id: union([string(), number()]) }), {
|
|
12588
12615
|
kind: "mutation",
|
|
12589
12616
|
auth: "admin"
|
|
12617
|
+
}), method(object({
|
|
12618
|
+
namespace: string().optional(),
|
|
12619
|
+
collection: string(),
|
|
12620
|
+
conflict: array(string()).readonly(),
|
|
12621
|
+
record: BulkRecordSchema
|
|
12622
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12623
|
+
kind: "mutation",
|
|
12624
|
+
auth: "admin"
|
|
12590
12625
|
}), method(object({
|
|
12591
12626
|
namespace: string().optional(),
|
|
12592
12627
|
collection: string(),
|
|
@@ -18896,8 +18931,8 @@ var TrackPositionSchema = object({
|
|
|
18896
18931
|
var TrackSnapshotSchema = object({
|
|
18897
18932
|
timestamp: number(),
|
|
18898
18933
|
position: TrackPositionSchema,
|
|
18899
|
-
/**
|
|
18900
|
-
|
|
18934
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
18935
|
+
mediaId: number().int()
|
|
18901
18936
|
});
|
|
18902
18937
|
/**
|
|
18903
18938
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19501,14 +19536,14 @@ var ObjectEventSchema = object({
|
|
|
19501
19536
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19502
19537
|
frameWidth: number().optional(),
|
|
19503
19538
|
frameHeight: number().optional(),
|
|
19504
|
-
/**
|
|
19505
|
-
|
|
19506
|
-
/** Design B:
|
|
19539
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19540
|
+
mediaId: number().int().optional(),
|
|
19541
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19507
19542
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19508
|
-
* (`/addon/<addonId>/event-media/<
|
|
19543
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19509
19544
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19510
|
-
* sources — consumers fall back to `
|
|
19511
|
-
|
|
19545
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19546
|
+
keyFrameMediaId: number().int().optional(),
|
|
19512
19547
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19513
19548
|
mediaUrl: string().optional(),
|
|
19514
19549
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19558,7 +19593,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19558
19593
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19559
19594
|
*
|
|
19560
19595
|
* `url` points at the `event-media` data plane
|
|
19561
|
-
* (`/addon/<addonId>/event-media/<
|
|
19596
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19562
19597
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19563
19598
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19564
19599
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19566,10 +19601,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19566
19601
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19567
19602
|
* (per-device scoping).
|
|
19568
19603
|
*
|
|
19569
|
-
* The URL is built from the row's
|
|
19570
|
-
*
|
|
19604
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19605
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19606
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19571
19607
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19572
|
-
* `faceCrop`/`plateCrop
|
|
19608
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19609
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19610
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19573
19611
|
*
|
|
19574
19612
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19575
19613
|
*
|
|
@@ -19582,7 +19620,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19582
19620
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19583
19621
|
*/
|
|
19584
19622
|
var MediaFileSchema = object({
|
|
19585
|
-
|
|
19623
|
+
/**
|
|
19624
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19625
|
+
*
|
|
19626
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19627
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19628
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19629
|
+
* different rows that spell the same number, and a track whose
|
|
19630
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19631
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19632
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19633
|
+
* at all.
|
|
19634
|
+
*/
|
|
19635
|
+
mediaId: number().int(),
|
|
19586
19636
|
kind: MediaFileKindEnum,
|
|
19587
19637
|
sizeBytes: number(),
|
|
19588
19638
|
timestamp: number()
|
|
@@ -19690,7 +19740,7 @@ var RetrainTrackSchema = object({
|
|
|
19690
19740
|
});
|
|
19691
19741
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19692
19742
|
var RetrainFrameCandidateSchema = object({
|
|
19693
|
-
|
|
19743
|
+
mediaId: number().int(),
|
|
19694
19744
|
kind: MediaFileKindEnum,
|
|
19695
19745
|
timestamp: number(),
|
|
19696
19746
|
sizeBytes: number().int(),
|
|
@@ -19704,7 +19754,7 @@ var RetrainFrameSchema = object({
|
|
|
19704
19754
|
deviceId: number(),
|
|
19705
19755
|
trackId: string(),
|
|
19706
19756
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19707
|
-
|
|
19757
|
+
sourceMediaId: number().int(),
|
|
19708
19758
|
sourceKind: MediaFileKindEnum,
|
|
19709
19759
|
sizeBytes: number().int(),
|
|
19710
19760
|
width: number().int(),
|
|
@@ -19720,7 +19770,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19720
19770
|
var RetrainFrameSelectionSchema = object({
|
|
19721
19771
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19722
19772
|
refused: array(object({
|
|
19723
|
-
|
|
19773
|
+
sourceMediaId: number().int(),
|
|
19724
19774
|
reason: RetrainCopyRefusalSchema
|
|
19725
19775
|
})).readonly()
|
|
19726
19776
|
});
|
|
@@ -19728,7 +19778,7 @@ var RetrainFrameListSchema = object({
|
|
|
19728
19778
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19729
19779
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19730
19780
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19731
|
-
|
|
19781
|
+
autoPickMediaId: number().int().optional()
|
|
19732
19782
|
});
|
|
19733
19783
|
/** What the operator asked the assist to look for. */
|
|
19734
19784
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -19823,9 +19873,11 @@ var RecentTracksQueryInput = object({
|
|
|
19823
19873
|
});
|
|
19824
19874
|
/**
|
|
19825
19875
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
19826
|
-
* `
|
|
19827
|
-
* served by the event-media plane
|
|
19828
|
-
* member visible has been materialised
|
|
19876
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
19877
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
19878
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
19879
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
19880
|
+
* row once event ids became per-table rowids).
|
|
19829
19881
|
*/
|
|
19830
19882
|
var SummarySchema = object({
|
|
19831
19883
|
id: string(),
|
|
@@ -19834,7 +19886,7 @@ var SummarySchema = object({
|
|
|
19834
19886
|
lastActiveAt: number(),
|
|
19835
19887
|
sealedAt: number().nullable(),
|
|
19836
19888
|
memberCount: number().int().nonnegative(),
|
|
19837
|
-
|
|
19889
|
+
groupShotMediaId: number().int().nullable()
|
|
19838
19890
|
});
|
|
19839
19891
|
var SummariesQueryInput = object({
|
|
19840
19892
|
deviceIds: array(number()).min(1),
|
|
@@ -20388,7 +20440,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20388
20440
|
}), method(object({
|
|
20389
20441
|
deviceId: number(),
|
|
20390
20442
|
trackId: string(),
|
|
20391
|
-
|
|
20443
|
+
mediaIds: array(number().int()).min(1)
|
|
20392
20444
|
}), RetrainFrameSelectionSchema, {
|
|
20393
20445
|
kind: "mutation",
|
|
20394
20446
|
auth: "admin"
|
|
@@ -20456,7 +20508,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20456
20508
|
kind: "query",
|
|
20457
20509
|
auth: "admin"
|
|
20458
20510
|
}), method(object({
|
|
20459
|
-
|
|
20511
|
+
/** Which of the three event tables owns the row. */
|
|
20512
|
+
ownerType: EventOwnerTypeSchema,
|
|
20513
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20514
|
+
eventId: number().int(),
|
|
20460
20515
|
kind: MediaFileKindEnum.optional(),
|
|
20461
20516
|
deviceId: number()
|
|
20462
20517
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20467,7 +20522,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20467
20522
|
trackId: string(),
|
|
20468
20523
|
deviceId: number()
|
|
20469
20524
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20470
|
-
|
|
20525
|
+
ownerType: EventOwnerTypeSchema,
|
|
20526
|
+
eventId: number().int(),
|
|
20471
20527
|
deviceId: number()
|
|
20472
20528
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20473
20529
|
kind: "mutation",
|
|
@@ -24930,8 +24986,8 @@ var IdentitySchema = object({
|
|
|
24930
24986
|
id: string(),
|
|
24931
24987
|
name: string(),
|
|
24932
24988
|
sampleCount: number().int().nonnegative(),
|
|
24933
|
-
|
|
24934
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
24989
|
+
coverMediaId: number().int().optional(),
|
|
24990
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
24935
24991
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
24936
24992
|
coverBase64: string().optional()
|
|
24937
24993
|
});
|
|
@@ -24957,8 +25013,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
24957
25013
|
enrolledAt: number().int(),
|
|
24958
25014
|
deviceId: number().int().optional(),
|
|
24959
25015
|
source: _enum(["detected", "photo"]),
|
|
24960
|
-
/** The enrolled crop's media
|
|
24961
|
-
|
|
25016
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
25017
|
+
mediaId: number().int().optional(),
|
|
24962
25018
|
/**
|
|
24963
25019
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
24964
25020
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -25027,15 +25083,15 @@ var FaceInfoSchema = object({
|
|
|
25027
25083
|
*/
|
|
25028
25084
|
cropUrl: string().optional(),
|
|
25029
25085
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
25030
|
-
* view draw the box over the native `
|
|
25086
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
25031
25087
|
* legacy rows written before design B. */
|
|
25032
25088
|
faceBbox: BoundingBoxSchema.optional(),
|
|
25033
25089
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
25034
25090
|
* Fetch the native JPEG via the event-media data-plane
|
|
25035
|
-
* (`/addon/<addonId>/event-media/<
|
|
25091
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
25036
25092
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
25037
25093
|
* back to the inline `base64` face crop. */
|
|
25038
|
-
|
|
25094
|
+
keyFrameMediaId: number().int().optional(),
|
|
25039
25095
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
25040
25096
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
25041
25097
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -25104,11 +25160,14 @@ var FaceClusterSchema = object({
|
|
|
25104
25160
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
25105
25161
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
25106
25162
|
*
|
|
25107
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
25108
|
-
* media
|
|
25163
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
25164
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
25165
|
+
* access decision.
|
|
25109
25166
|
*/
|
|
25110
25167
|
var MediaFileLiteSchema$1 = object({
|
|
25111
|
-
|
|
25168
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
25169
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
25170
|
+
mediaId: number().int(),
|
|
25112
25171
|
kind: string(),
|
|
25113
25172
|
url: string(),
|
|
25114
25173
|
sizeBytes: number(),
|
|
@@ -25125,7 +25184,7 @@ method(object({
|
|
|
25125
25184
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
25126
25185
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
25127
25186
|
*
|
|
25128
|
-
* Nothing loses its avatar: `
|
|
25187
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
25129
25188
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
25130
25189
|
*
|
|
25131
25190
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -27593,8 +27652,8 @@ var VehicleSchema = object({
|
|
|
27593
27652
|
id: string(),
|
|
27594
27653
|
name: string(),
|
|
27595
27654
|
sampleCount: number().int().nonnegative(),
|
|
27596
|
-
|
|
27597
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
27655
|
+
coverMediaId: number().int().optional(),
|
|
27656
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
27598
27657
|
coverBase64: string().optional()
|
|
27599
27658
|
});
|
|
27600
27659
|
var VehicleSampleInfoSchema = object({
|
|
@@ -27627,7 +27686,7 @@ var PlateInfoSchema = object({
|
|
|
27627
27686
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
27628
27687
|
plateBbox: BoundingBoxSchema.optional(),
|
|
27629
27688
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
27630
|
-
|
|
27689
|
+
keyFrameMediaId: number().int().optional(),
|
|
27631
27690
|
base64: string().optional(),
|
|
27632
27691
|
/**
|
|
27633
27692
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -27648,11 +27707,14 @@ var PlateInfoSchema = object({
|
|
|
27648
27707
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27649
27708
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27650
27709
|
*
|
|
27651
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27652
|
-
* media
|
|
27710
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27711
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27712
|
+
* access decision.
|
|
27653
27713
|
*/
|
|
27654
27714
|
var MediaFileLiteSchema = object({
|
|
27655
|
-
|
|
27715
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27716
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27717
|
+
mediaId: number().int(),
|
|
27656
27718
|
kind: string(),
|
|
27657
27719
|
url: string(),
|
|
27658
27720
|
sizeBytes: number(),
|
|
@@ -27711,7 +27773,7 @@ method(object({
|
|
|
27711
27773
|
}), method(object({
|
|
27712
27774
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
27713
27775
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
27714
|
-
* option; `
|
|
27776
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
27715
27777
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
27716
27778
|
* resolves to `false` and is exactly the intended default. */
|
|
27717
27779
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -29035,7 +29097,14 @@ var SceneReferenceSchema = object({
|
|
|
29035
29097
|
modelId: string(),
|
|
29036
29098
|
condition: SceneConditionSchema,
|
|
29037
29099
|
capturedAt: number(),
|
|
29038
|
-
|
|
29100
|
+
/**
|
|
29101
|
+
* The reference thumbnail's media ROW id (D482).
|
|
29102
|
+
*
|
|
29103
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
29104
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
29105
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
29106
|
+
*/
|
|
29107
|
+
thumbnailMediaId: number().int().optional(),
|
|
29039
29108
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
29040
29109
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
29041
29110
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -30483,7 +30552,7 @@ var StationaryObjectSchema = object({
|
|
|
30483
30552
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
30484
30553
|
label: string().optional(),
|
|
30485
30554
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
30486
|
-
|
|
30555
|
+
keyFrameMediaId: number().int().optional()
|
|
30487
30556
|
});
|
|
30488
30557
|
var CameraOccupancySnapshotSchema = object({
|
|
30489
30558
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -31639,6 +31708,12 @@ Object.freeze({
|
|
|
31639
31708
|
addonId: null,
|
|
31640
31709
|
access: "create"
|
|
31641
31710
|
},
|
|
31711
|
+
"dataStoreProvider.upsert": {
|
|
31712
|
+
capName: "data-store-provider",
|
|
31713
|
+
capScope: "system",
|
|
31714
|
+
addonId: null,
|
|
31715
|
+
access: "create"
|
|
31716
|
+
},
|
|
31642
31717
|
"dayNight.getOptions": {
|
|
31643
31718
|
capName: "day-night",
|
|
31644
31719
|
capScope: "device",
|
|
@@ -35503,6 +35578,12 @@ Object.freeze({
|
|
|
35503
35578
|
addonId: null,
|
|
35504
35579
|
access: "create"
|
|
35505
35580
|
},
|
|
35581
|
+
"settingsStore.upsert": {
|
|
35582
|
+
capName: "settings-store",
|
|
35583
|
+
capScope: "system",
|
|
35584
|
+
addonId: null,
|
|
35585
|
+
access: "create"
|
|
35586
|
+
},
|
|
35506
35587
|
"smtpProvider.getStatus": {
|
|
35507
35588
|
capName: "smtp-provider",
|
|
35508
35589
|
capScope: "system",
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
//#region ../types/dist/event-category-
|
|
2
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
3
3
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4
4
|
EventCategory["SystemBoot"] = "system.boot";
|
|
5
5
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -560,7 +560,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
560
560
|
* a package zone — a newly-appeared stationary object of a package class
|
|
561
561
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
562
562
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
563
|
-
* entryId, className, zoneIds,
|
|
563
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
564
564
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
565
565
|
* this bus topic drives notifier rules + live UI. See
|
|
566
566
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5346,7 +5346,7 @@ var ZodIssueCode = {
|
|
|
5346
5346
|
var ZodFirstPartyTypeKind;
|
|
5347
5347
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5348
5348
|
//#endregion
|
|
5349
|
-
//#region ../types/dist/sleep-
|
|
5349
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5350
5350
|
/**
|
|
5351
5351
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5352
5352
|
* window to float samples (D455).
|
|
@@ -7309,13 +7309,30 @@ new Set([
|
|
|
7309
7309
|
"scene",
|
|
7310
7310
|
"motion",
|
|
7311
7311
|
"object",
|
|
7312
|
-
"audio"
|
|
7312
|
+
"audio",
|
|
7313
|
+
"mosaic"
|
|
7313
7314
|
]);
|
|
7314
|
-
|
|
7315
|
+
/**
|
|
7316
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7317
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7318
|
+
* does not re-spell the list and drift from it.
|
|
7319
|
+
*/
|
|
7320
|
+
var EVENT_OWNER_TYPES = [
|
|
7315
7321
|
"motion",
|
|
7316
7322
|
"object",
|
|
7317
7323
|
"audio"
|
|
7318
|
-
]
|
|
7324
|
+
];
|
|
7325
|
+
/**
|
|
7326
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7327
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7328
|
+
* `(table, id)`).
|
|
7329
|
+
*
|
|
7330
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7331
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7332
|
+
* nothing failing until a caller asked.
|
|
7333
|
+
*/
|
|
7334
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7335
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7319
7336
|
var EncodeProfileSchema = object({
|
|
7320
7337
|
video: object({
|
|
7321
7338
|
codec: _enum([
|
|
@@ -12449,6 +12466,16 @@ method(object({
|
|
|
12449
12466
|
filter: QueryFilterSchema.optional(),
|
|
12450
12467
|
columns: array(string()).readonly().optional()
|
|
12451
12468
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12469
|
+
namespace: string().optional(),
|
|
12470
|
+
collection: string(),
|
|
12471
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12472
|
+
* index on the collection. Never empty. */
|
|
12473
|
+
conflict: array(string()).readonly(),
|
|
12474
|
+
record: BulkRecordSchema
|
|
12475
|
+
}), object({
|
|
12476
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12477
|
+
* row's own id on an update. */
|
|
12478
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12452
12479
|
namespace: string().optional(),
|
|
12453
12480
|
collection: string(),
|
|
12454
12481
|
record: object({
|
|
@@ -12583,6 +12610,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12583
12610
|
id: union([string(), number()]) }), {
|
|
12584
12611
|
kind: "mutation",
|
|
12585
12612
|
auth: "admin"
|
|
12613
|
+
}), method(object({
|
|
12614
|
+
namespace: string().optional(),
|
|
12615
|
+
collection: string(),
|
|
12616
|
+
conflict: array(string()).readonly(),
|
|
12617
|
+
record: BulkRecordSchema
|
|
12618
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12619
|
+
kind: "mutation",
|
|
12620
|
+
auth: "admin"
|
|
12586
12621
|
}), method(object({
|
|
12587
12622
|
namespace: string().optional(),
|
|
12588
12623
|
collection: string(),
|
|
@@ -18892,8 +18927,8 @@ var TrackPositionSchema = object({
|
|
|
18892
18927
|
var TrackSnapshotSchema = object({
|
|
18893
18928
|
timestamp: number(),
|
|
18894
18929
|
position: TrackPositionSchema,
|
|
18895
|
-
/**
|
|
18896
|
-
|
|
18930
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
18931
|
+
mediaId: number().int()
|
|
18897
18932
|
});
|
|
18898
18933
|
/**
|
|
18899
18934
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19497,14 +19532,14 @@ var ObjectEventSchema = object({
|
|
|
19497
19532
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19498
19533
|
frameWidth: number().optional(),
|
|
19499
19534
|
frameHeight: number().optional(),
|
|
19500
|
-
/**
|
|
19501
|
-
|
|
19502
|
-
/** Design B:
|
|
19535
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19536
|
+
mediaId: number().int().optional(),
|
|
19537
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19503
19538
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19504
|
-
* (`/addon/<addonId>/event-media/<
|
|
19539
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19505
19540
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19506
|
-
* sources — consumers fall back to `
|
|
19507
|
-
|
|
19541
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19542
|
+
keyFrameMediaId: number().int().optional(),
|
|
19508
19543
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19509
19544
|
mediaUrl: string().optional(),
|
|
19510
19545
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19554,7 +19589,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19554
19589
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19555
19590
|
*
|
|
19556
19591
|
* `url` points at the `event-media` data plane
|
|
19557
|
-
* (`/addon/<addonId>/event-media/<
|
|
19592
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19558
19593
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19559
19594
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19560
19595
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19562,10 +19597,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19562
19597
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19563
19598
|
* (per-device scoping).
|
|
19564
19599
|
*
|
|
19565
|
-
* The URL is built from the row's
|
|
19566
|
-
*
|
|
19600
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19601
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19602
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19567
19603
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19568
|
-
* `faceCrop`/`plateCrop
|
|
19604
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19605
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19606
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19569
19607
|
*
|
|
19570
19608
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19571
19609
|
*
|
|
@@ -19578,7 +19616,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19578
19616
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19579
19617
|
*/
|
|
19580
19618
|
var MediaFileSchema = object({
|
|
19581
|
-
|
|
19619
|
+
/**
|
|
19620
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19621
|
+
*
|
|
19622
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19623
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19624
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19625
|
+
* different rows that spell the same number, and a track whose
|
|
19626
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19627
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19628
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19629
|
+
* at all.
|
|
19630
|
+
*/
|
|
19631
|
+
mediaId: number().int(),
|
|
19582
19632
|
kind: MediaFileKindEnum,
|
|
19583
19633
|
sizeBytes: number(),
|
|
19584
19634
|
timestamp: number()
|
|
@@ -19686,7 +19736,7 @@ var RetrainTrackSchema = object({
|
|
|
19686
19736
|
});
|
|
19687
19737
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19688
19738
|
var RetrainFrameCandidateSchema = object({
|
|
19689
|
-
|
|
19739
|
+
mediaId: number().int(),
|
|
19690
19740
|
kind: MediaFileKindEnum,
|
|
19691
19741
|
timestamp: number(),
|
|
19692
19742
|
sizeBytes: number().int(),
|
|
@@ -19700,7 +19750,7 @@ var RetrainFrameSchema = object({
|
|
|
19700
19750
|
deviceId: number(),
|
|
19701
19751
|
trackId: string(),
|
|
19702
19752
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19703
|
-
|
|
19753
|
+
sourceMediaId: number().int(),
|
|
19704
19754
|
sourceKind: MediaFileKindEnum,
|
|
19705
19755
|
sizeBytes: number().int(),
|
|
19706
19756
|
width: number().int(),
|
|
@@ -19716,7 +19766,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19716
19766
|
var RetrainFrameSelectionSchema = object({
|
|
19717
19767
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19718
19768
|
refused: array(object({
|
|
19719
|
-
|
|
19769
|
+
sourceMediaId: number().int(),
|
|
19720
19770
|
reason: RetrainCopyRefusalSchema
|
|
19721
19771
|
})).readonly()
|
|
19722
19772
|
});
|
|
@@ -19724,7 +19774,7 @@ var RetrainFrameListSchema = object({
|
|
|
19724
19774
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19725
19775
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19726
19776
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19727
|
-
|
|
19777
|
+
autoPickMediaId: number().int().optional()
|
|
19728
19778
|
});
|
|
19729
19779
|
/** What the operator asked the assist to look for. */
|
|
19730
19780
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -19819,9 +19869,11 @@ var RecentTracksQueryInput = object({
|
|
|
19819
19869
|
});
|
|
19820
19870
|
/**
|
|
19821
19871
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
19822
|
-
* `
|
|
19823
|
-
* served by the event-media plane
|
|
19824
|
-
* member visible has been materialised
|
|
19872
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
19873
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
19874
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
19875
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
19876
|
+
* row once event ids became per-table rowids).
|
|
19825
19877
|
*/
|
|
19826
19878
|
var SummarySchema = object({
|
|
19827
19879
|
id: string(),
|
|
@@ -19830,7 +19882,7 @@ var SummarySchema = object({
|
|
|
19830
19882
|
lastActiveAt: number(),
|
|
19831
19883
|
sealedAt: number().nullable(),
|
|
19832
19884
|
memberCount: number().int().nonnegative(),
|
|
19833
|
-
|
|
19885
|
+
groupShotMediaId: number().int().nullable()
|
|
19834
19886
|
});
|
|
19835
19887
|
var SummariesQueryInput = object({
|
|
19836
19888
|
deviceIds: array(number()).min(1),
|
|
@@ -20384,7 +20436,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20384
20436
|
}), method(object({
|
|
20385
20437
|
deviceId: number(),
|
|
20386
20438
|
trackId: string(),
|
|
20387
|
-
|
|
20439
|
+
mediaIds: array(number().int()).min(1)
|
|
20388
20440
|
}), RetrainFrameSelectionSchema, {
|
|
20389
20441
|
kind: "mutation",
|
|
20390
20442
|
auth: "admin"
|
|
@@ -20452,7 +20504,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20452
20504
|
kind: "query",
|
|
20453
20505
|
auth: "admin"
|
|
20454
20506
|
}), method(object({
|
|
20455
|
-
|
|
20507
|
+
/** Which of the three event tables owns the row. */
|
|
20508
|
+
ownerType: EventOwnerTypeSchema,
|
|
20509
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20510
|
+
eventId: number().int(),
|
|
20456
20511
|
kind: MediaFileKindEnum.optional(),
|
|
20457
20512
|
deviceId: number()
|
|
20458
20513
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20463,7 +20518,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20463
20518
|
trackId: string(),
|
|
20464
20519
|
deviceId: number()
|
|
20465
20520
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20466
|
-
|
|
20521
|
+
ownerType: EventOwnerTypeSchema,
|
|
20522
|
+
eventId: number().int(),
|
|
20467
20523
|
deviceId: number()
|
|
20468
20524
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20469
20525
|
kind: "mutation",
|
|
@@ -24926,8 +24982,8 @@ var IdentitySchema = object({
|
|
|
24926
24982
|
id: string(),
|
|
24927
24983
|
name: string(),
|
|
24928
24984
|
sampleCount: number().int().nonnegative(),
|
|
24929
|
-
|
|
24930
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
24985
|
+
coverMediaId: number().int().optional(),
|
|
24986
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
24931
24987
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
24932
24988
|
coverBase64: string().optional()
|
|
24933
24989
|
});
|
|
@@ -24953,8 +25009,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
24953
25009
|
enrolledAt: number().int(),
|
|
24954
25010
|
deviceId: number().int().optional(),
|
|
24955
25011
|
source: _enum(["detected", "photo"]),
|
|
24956
|
-
/** The enrolled crop's media
|
|
24957
|
-
|
|
25012
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
25013
|
+
mediaId: number().int().optional(),
|
|
24958
25014
|
/**
|
|
24959
25015
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
24960
25016
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -25023,15 +25079,15 @@ var FaceInfoSchema = object({
|
|
|
25023
25079
|
*/
|
|
25024
25080
|
cropUrl: string().optional(),
|
|
25025
25081
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
25026
|
-
* view draw the box over the native `
|
|
25082
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
25027
25083
|
* legacy rows written before design B. */
|
|
25028
25084
|
faceBbox: BoundingBoxSchema.optional(),
|
|
25029
25085
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
25030
25086
|
* Fetch the native JPEG via the event-media data-plane
|
|
25031
|
-
* (`/addon/<addonId>/event-media/<
|
|
25087
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
25032
25088
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
25033
25089
|
* back to the inline `base64` face crop. */
|
|
25034
|
-
|
|
25090
|
+
keyFrameMediaId: number().int().optional(),
|
|
25035
25091
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
25036
25092
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
25037
25093
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -25100,11 +25156,14 @@ var FaceClusterSchema = object({
|
|
|
25100
25156
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
25101
25157
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
25102
25158
|
*
|
|
25103
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
25104
|
-
* media
|
|
25159
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
25160
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
25161
|
+
* access decision.
|
|
25105
25162
|
*/
|
|
25106
25163
|
var MediaFileLiteSchema$1 = object({
|
|
25107
|
-
|
|
25164
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
25165
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
25166
|
+
mediaId: number().int(),
|
|
25108
25167
|
kind: string(),
|
|
25109
25168
|
url: string(),
|
|
25110
25169
|
sizeBytes: number(),
|
|
@@ -25121,7 +25180,7 @@ method(object({
|
|
|
25121
25180
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
25122
25181
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
25123
25182
|
*
|
|
25124
|
-
* Nothing loses its avatar: `
|
|
25183
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
25125
25184
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
25126
25185
|
*
|
|
25127
25186
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -27589,8 +27648,8 @@ var VehicleSchema = object({
|
|
|
27589
27648
|
id: string(),
|
|
27590
27649
|
name: string(),
|
|
27591
27650
|
sampleCount: number().int().nonnegative(),
|
|
27592
|
-
|
|
27593
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
27651
|
+
coverMediaId: number().int().optional(),
|
|
27652
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
27594
27653
|
coverBase64: string().optional()
|
|
27595
27654
|
});
|
|
27596
27655
|
var VehicleSampleInfoSchema = object({
|
|
@@ -27623,7 +27682,7 @@ var PlateInfoSchema = object({
|
|
|
27623
27682
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
27624
27683
|
plateBbox: BoundingBoxSchema.optional(),
|
|
27625
27684
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
27626
|
-
|
|
27685
|
+
keyFrameMediaId: number().int().optional(),
|
|
27627
27686
|
base64: string().optional(),
|
|
27628
27687
|
/**
|
|
27629
27688
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -27644,11 +27703,14 @@ var PlateInfoSchema = object({
|
|
|
27644
27703
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27645
27704
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27646
27705
|
*
|
|
27647
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27648
|
-
* media
|
|
27706
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27707
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27708
|
+
* access decision.
|
|
27649
27709
|
*/
|
|
27650
27710
|
var MediaFileLiteSchema = object({
|
|
27651
|
-
|
|
27711
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27712
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27713
|
+
mediaId: number().int(),
|
|
27652
27714
|
kind: string(),
|
|
27653
27715
|
url: string(),
|
|
27654
27716
|
sizeBytes: number(),
|
|
@@ -27707,7 +27769,7 @@ method(object({
|
|
|
27707
27769
|
}), method(object({
|
|
27708
27770
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
27709
27771
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
27710
|
-
* option; `
|
|
27772
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
27711
27773
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
27712
27774
|
* resolves to `false` and is exactly the intended default. */
|
|
27713
27775
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -29031,7 +29093,14 @@ var SceneReferenceSchema = object({
|
|
|
29031
29093
|
modelId: string(),
|
|
29032
29094
|
condition: SceneConditionSchema,
|
|
29033
29095
|
capturedAt: number(),
|
|
29034
|
-
|
|
29096
|
+
/**
|
|
29097
|
+
* The reference thumbnail's media ROW id (D482).
|
|
29098
|
+
*
|
|
29099
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
29100
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
29101
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
29102
|
+
*/
|
|
29103
|
+
thumbnailMediaId: number().int().optional(),
|
|
29035
29104
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
29036
29105
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
29037
29106
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -30479,7 +30548,7 @@ var StationaryObjectSchema = object({
|
|
|
30479
30548
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
30480
30549
|
label: string().optional(),
|
|
30481
30550
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
30482
|
-
|
|
30551
|
+
keyFrameMediaId: number().int().optional()
|
|
30483
30552
|
});
|
|
30484
30553
|
var CameraOccupancySnapshotSchema = object({
|
|
30485
30554
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -31635,6 +31704,12 @@ Object.freeze({
|
|
|
31635
31704
|
addonId: null,
|
|
31636
31705
|
access: "create"
|
|
31637
31706
|
},
|
|
31707
|
+
"dataStoreProvider.upsert": {
|
|
31708
|
+
capName: "data-store-provider",
|
|
31709
|
+
capScope: "system",
|
|
31710
|
+
addonId: null,
|
|
31711
|
+
access: "create"
|
|
31712
|
+
},
|
|
31638
31713
|
"dayNight.getOptions": {
|
|
31639
31714
|
capName: "day-night",
|
|
31640
31715
|
capScope: "device",
|
|
@@ -35499,6 +35574,12 @@ Object.freeze({
|
|
|
35499
35574
|
addonId: null,
|
|
35500
35575
|
access: "create"
|
|
35501
35576
|
},
|
|
35577
|
+
"settingsStore.upsert": {
|
|
35578
|
+
capName: "settings-store",
|
|
35579
|
+
capScope: "system",
|
|
35580
|
+
addonId: null,
|
|
35581
|
+
access: "create"
|
|
35582
|
+
},
|
|
35502
35583
|
"smtpProvider.getStatus": {
|
|
35503
35584
|
capName: "smtp-provider",
|
|
35504
35585
|
capScope: "system",
|