@camstack/addon-provider-rtsp 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/addon.js +131 -50
- package/dist/addon.mjs +131 -50
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -23,7 +23,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
23
23
|
//#endregion
|
|
24
24
|
let node_net = require("node:net");
|
|
25
25
|
node_net = __toESM(node_net);
|
|
26
|
-
//#region ../types/dist/event-category-
|
|
26
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
27
27
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
28
28
|
EventCategory["SystemBoot"] = "system.boot";
|
|
29
29
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -584,7 +584,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
584
584
|
* a package zone — a newly-appeared stationary object of a package class
|
|
585
585
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
586
586
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
587
|
-
* entryId, className, zoneIds,
|
|
587
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
588
588
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
589
589
|
* this bus topic drives notifier rules + live UI. See
|
|
590
590
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5370,7 +5370,7 @@ var ZodIssueCode = {
|
|
|
5370
5370
|
var ZodFirstPartyTypeKind;
|
|
5371
5371
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5372
5372
|
//#endregion
|
|
5373
|
-
//#region ../types/dist/sleep-
|
|
5373
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5374
5374
|
/**
|
|
5375
5375
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5376
5376
|
* window to float samples (D455).
|
|
@@ -7337,13 +7337,30 @@ new Set([
|
|
|
7337
7337
|
"scene",
|
|
7338
7338
|
"motion",
|
|
7339
7339
|
"object",
|
|
7340
|
-
"audio"
|
|
7340
|
+
"audio",
|
|
7341
|
+
"mosaic"
|
|
7341
7342
|
]);
|
|
7342
|
-
|
|
7343
|
+
/**
|
|
7344
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7345
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7346
|
+
* does not re-spell the list and drift from it.
|
|
7347
|
+
*/
|
|
7348
|
+
var EVENT_OWNER_TYPES = [
|
|
7343
7349
|
"motion",
|
|
7344
7350
|
"object",
|
|
7345
7351
|
"audio"
|
|
7346
|
-
]
|
|
7352
|
+
];
|
|
7353
|
+
/**
|
|
7354
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7355
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7356
|
+
* `(table, id)`).
|
|
7357
|
+
*
|
|
7358
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7359
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7360
|
+
* nothing failing until a caller asked.
|
|
7361
|
+
*/
|
|
7362
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7363
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7347
7364
|
var EncodeProfileSchema = object({
|
|
7348
7365
|
video: object({
|
|
7349
7366
|
codec: _enum([
|
|
@@ -12574,6 +12591,16 @@ method(object({
|
|
|
12574
12591
|
filter: QueryFilterSchema.optional(),
|
|
12575
12592
|
columns: array(string()).readonly().optional()
|
|
12576
12593
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12594
|
+
namespace: string().optional(),
|
|
12595
|
+
collection: string(),
|
|
12596
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12597
|
+
* index on the collection. Never empty. */
|
|
12598
|
+
conflict: array(string()).readonly(),
|
|
12599
|
+
record: BulkRecordSchema
|
|
12600
|
+
}), object({
|
|
12601
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12602
|
+
* row's own id on an update. */
|
|
12603
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12577
12604
|
namespace: string().optional(),
|
|
12578
12605
|
collection: string(),
|
|
12579
12606
|
record: object({
|
|
@@ -12708,6 +12735,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12708
12735
|
id: union([string(), number()]) }), {
|
|
12709
12736
|
kind: "mutation",
|
|
12710
12737
|
auth: "admin"
|
|
12738
|
+
}), method(object({
|
|
12739
|
+
namespace: string().optional(),
|
|
12740
|
+
collection: string(),
|
|
12741
|
+
conflict: array(string()).readonly(),
|
|
12742
|
+
record: BulkRecordSchema
|
|
12743
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12744
|
+
kind: "mutation",
|
|
12745
|
+
auth: "admin"
|
|
12711
12746
|
}), method(object({
|
|
12712
12747
|
namespace: string().optional(),
|
|
12713
12748
|
collection: string(),
|
|
@@ -19190,8 +19225,8 @@ var TrackPositionSchema = object({
|
|
|
19190
19225
|
var TrackSnapshotSchema = object({
|
|
19191
19226
|
timestamp: number(),
|
|
19192
19227
|
position: TrackPositionSchema,
|
|
19193
|
-
/**
|
|
19194
|
-
|
|
19228
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19229
|
+
mediaId: number().int()
|
|
19195
19230
|
});
|
|
19196
19231
|
/**
|
|
19197
19232
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19795,14 +19830,14 @@ var ObjectEventSchema = object({
|
|
|
19795
19830
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19796
19831
|
frameWidth: number().optional(),
|
|
19797
19832
|
frameHeight: number().optional(),
|
|
19798
|
-
/**
|
|
19799
|
-
|
|
19800
|
-
/** Design B:
|
|
19833
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19834
|
+
mediaId: number().int().optional(),
|
|
19835
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19801
19836
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19802
|
-
* (`/addon/<addonId>/event-media/<
|
|
19837
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19803
19838
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19804
|
-
* sources — consumers fall back to `
|
|
19805
|
-
|
|
19839
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19840
|
+
keyFrameMediaId: number().int().optional(),
|
|
19806
19841
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19807
19842
|
mediaUrl: string().optional(),
|
|
19808
19843
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19852,7 +19887,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19852
19887
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19853
19888
|
*
|
|
19854
19889
|
* `url` points at the `event-media` data plane
|
|
19855
|
-
* (`/addon/<addonId>/event-media/<
|
|
19890
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19856
19891
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19857
19892
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19858
19893
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19860,10 +19895,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19860
19895
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19861
19896
|
* (per-device scoping).
|
|
19862
19897
|
*
|
|
19863
|
-
* The URL is built from the row's
|
|
19864
|
-
*
|
|
19898
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19899
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19900
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19865
19901
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19866
|
-
* `faceCrop`/`plateCrop
|
|
19902
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19903
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19904
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19867
19905
|
*
|
|
19868
19906
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19869
19907
|
*
|
|
@@ -19876,7 +19914,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19876
19914
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19877
19915
|
*/
|
|
19878
19916
|
var MediaFileSchema = object({
|
|
19879
|
-
|
|
19917
|
+
/**
|
|
19918
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19919
|
+
*
|
|
19920
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19921
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19922
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19923
|
+
* different rows that spell the same number, and a track whose
|
|
19924
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19925
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19926
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19927
|
+
* at all.
|
|
19928
|
+
*/
|
|
19929
|
+
mediaId: number().int(),
|
|
19880
19930
|
kind: MediaFileKindEnum,
|
|
19881
19931
|
sizeBytes: number(),
|
|
19882
19932
|
timestamp: number()
|
|
@@ -19984,7 +20034,7 @@ var RetrainTrackSchema = object({
|
|
|
19984
20034
|
});
|
|
19985
20035
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19986
20036
|
var RetrainFrameCandidateSchema = object({
|
|
19987
|
-
|
|
20037
|
+
mediaId: number().int(),
|
|
19988
20038
|
kind: MediaFileKindEnum,
|
|
19989
20039
|
timestamp: number(),
|
|
19990
20040
|
sizeBytes: number().int(),
|
|
@@ -19998,7 +20048,7 @@ var RetrainFrameSchema = object({
|
|
|
19998
20048
|
deviceId: number(),
|
|
19999
20049
|
trackId: string(),
|
|
20000
20050
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
20001
|
-
|
|
20051
|
+
sourceMediaId: number().int(),
|
|
20002
20052
|
sourceKind: MediaFileKindEnum,
|
|
20003
20053
|
sizeBytes: number().int(),
|
|
20004
20054
|
width: number().int(),
|
|
@@ -20014,7 +20064,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
20014
20064
|
var RetrainFrameSelectionSchema = object({
|
|
20015
20065
|
copied: array(RetrainFrameSchema).readonly(),
|
|
20016
20066
|
refused: array(object({
|
|
20017
|
-
|
|
20067
|
+
sourceMediaId: number().int(),
|
|
20018
20068
|
reason: RetrainCopyRefusalSchema
|
|
20019
20069
|
})).readonly()
|
|
20020
20070
|
});
|
|
@@ -20022,7 +20072,7 @@ var RetrainFrameListSchema = object({
|
|
|
20022
20072
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
20023
20073
|
copies: array(RetrainFrameSchema).readonly(),
|
|
20024
20074
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
20025
|
-
|
|
20075
|
+
autoPickMediaId: number().int().optional()
|
|
20026
20076
|
});
|
|
20027
20077
|
/** What the operator asked the assist to look for. */
|
|
20028
20078
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20117,9 +20167,11 @@ var RecentTracksQueryInput = object({
|
|
|
20117
20167
|
});
|
|
20118
20168
|
/**
|
|
20119
20169
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20120
|
-
* `
|
|
20121
|
-
* served by the event-media plane
|
|
20122
|
-
* member visible has been materialised
|
|
20170
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20171
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20172
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20173
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20174
|
+
* row once event ids became per-table rowids).
|
|
20123
20175
|
*/
|
|
20124
20176
|
var SummarySchema = object({
|
|
20125
20177
|
id: string(),
|
|
@@ -20128,7 +20180,7 @@ var SummarySchema = object({
|
|
|
20128
20180
|
lastActiveAt: number(),
|
|
20129
20181
|
sealedAt: number().nullable(),
|
|
20130
20182
|
memberCount: number().int().nonnegative(),
|
|
20131
|
-
|
|
20183
|
+
groupShotMediaId: number().int().nullable()
|
|
20132
20184
|
});
|
|
20133
20185
|
var SummariesQueryInput = object({
|
|
20134
20186
|
deviceIds: array(number()).min(1),
|
|
@@ -20682,7 +20734,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20682
20734
|
}), method(object({
|
|
20683
20735
|
deviceId: number(),
|
|
20684
20736
|
trackId: string(),
|
|
20685
|
-
|
|
20737
|
+
mediaIds: array(number().int()).min(1)
|
|
20686
20738
|
}), RetrainFrameSelectionSchema, {
|
|
20687
20739
|
kind: "mutation",
|
|
20688
20740
|
auth: "admin"
|
|
@@ -20750,7 +20802,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20750
20802
|
kind: "query",
|
|
20751
20803
|
auth: "admin"
|
|
20752
20804
|
}), method(object({
|
|
20753
|
-
|
|
20805
|
+
/** Which of the three event tables owns the row. */
|
|
20806
|
+
ownerType: EventOwnerTypeSchema,
|
|
20807
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20808
|
+
eventId: number().int(),
|
|
20754
20809
|
kind: MediaFileKindEnum.optional(),
|
|
20755
20810
|
deviceId: number()
|
|
20756
20811
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20761,7 +20816,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20761
20816
|
trackId: string(),
|
|
20762
20817
|
deviceId: number()
|
|
20763
20818
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20764
|
-
|
|
20819
|
+
ownerType: EventOwnerTypeSchema,
|
|
20820
|
+
eventId: number().int(),
|
|
20765
20821
|
deviceId: number()
|
|
20766
20822
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20767
20823
|
kind: "mutation",
|
|
@@ -26066,8 +26122,8 @@ var IdentitySchema = object({
|
|
|
26066
26122
|
id: string(),
|
|
26067
26123
|
name: string(),
|
|
26068
26124
|
sampleCount: number().int().nonnegative(),
|
|
26069
|
-
|
|
26070
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26125
|
+
coverMediaId: number().int().optional(),
|
|
26126
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26071
26127
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26072
26128
|
coverBase64: string().optional()
|
|
26073
26129
|
});
|
|
@@ -26093,8 +26149,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26093
26149
|
enrolledAt: number().int(),
|
|
26094
26150
|
deviceId: number().int().optional(),
|
|
26095
26151
|
source: _enum(["detected", "photo"]),
|
|
26096
|
-
/** The enrolled crop's media
|
|
26097
|
-
|
|
26152
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26153
|
+
mediaId: number().int().optional(),
|
|
26098
26154
|
/**
|
|
26099
26155
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26100
26156
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26163,15 +26219,15 @@ var FaceInfoSchema = object({
|
|
|
26163
26219
|
*/
|
|
26164
26220
|
cropUrl: string().optional(),
|
|
26165
26221
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26166
|
-
* view draw the box over the native `
|
|
26222
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26167
26223
|
* legacy rows written before design B. */
|
|
26168
26224
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26169
26225
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26170
26226
|
* Fetch the native JPEG via the event-media data-plane
|
|
26171
|
-
* (`/addon/<addonId>/event-media/<
|
|
26227
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26172
26228
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26173
26229
|
* back to the inline `base64` face crop. */
|
|
26174
|
-
|
|
26230
|
+
keyFrameMediaId: number().int().optional(),
|
|
26175
26231
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26176
26232
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26177
26233
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26240,11 +26296,14 @@ var FaceClusterSchema = object({
|
|
|
26240
26296
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26241
26297
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26242
26298
|
*
|
|
26243
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26244
|
-
* media
|
|
26299
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26300
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26301
|
+
* access decision.
|
|
26245
26302
|
*/
|
|
26246
26303
|
var MediaFileLiteSchema$1 = object({
|
|
26247
|
-
|
|
26304
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26305
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26306
|
+
mediaId: number().int(),
|
|
26248
26307
|
kind: string(),
|
|
26249
26308
|
url: string(),
|
|
26250
26309
|
sizeBytes: number(),
|
|
@@ -26261,7 +26320,7 @@ method(object({
|
|
|
26261
26320
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26262
26321
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26263
26322
|
*
|
|
26264
|
-
* Nothing loses its avatar: `
|
|
26323
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26265
26324
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26266
26325
|
*
|
|
26267
26326
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29624,8 +29683,8 @@ var VehicleSchema = object({
|
|
|
29624
29683
|
id: string(),
|
|
29625
29684
|
name: string(),
|
|
29626
29685
|
sampleCount: number().int().nonnegative(),
|
|
29627
|
-
|
|
29628
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29686
|
+
coverMediaId: number().int().optional(),
|
|
29687
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29629
29688
|
coverBase64: string().optional()
|
|
29630
29689
|
});
|
|
29631
29690
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29658,7 +29717,7 @@ var PlateInfoSchema = object({
|
|
|
29658
29717
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29659
29718
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29660
29719
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29661
|
-
|
|
29720
|
+
keyFrameMediaId: number().int().optional(),
|
|
29662
29721
|
base64: string().optional(),
|
|
29663
29722
|
/**
|
|
29664
29723
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29679,11 +29738,14 @@ var PlateInfoSchema = object({
|
|
|
29679
29738
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29680
29739
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29681
29740
|
*
|
|
29682
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29683
|
-
* media
|
|
29741
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29742
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29743
|
+
* access decision.
|
|
29684
29744
|
*/
|
|
29685
29745
|
var MediaFileLiteSchema = object({
|
|
29686
|
-
|
|
29746
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29747
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29748
|
+
mediaId: number().int(),
|
|
29687
29749
|
kind: string(),
|
|
29688
29750
|
url: string(),
|
|
29689
29751
|
sizeBytes: number(),
|
|
@@ -29742,7 +29804,7 @@ method(object({
|
|
|
29742
29804
|
}), method(object({
|
|
29743
29805
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29744
29806
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29745
|
-
* option; `
|
|
29807
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29746
29808
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29747
29809
|
* resolves to `false` and is exactly the intended default. */
|
|
29748
29810
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31311,7 +31373,14 @@ var SceneReferenceSchema = object({
|
|
|
31311
31373
|
modelId: string(),
|
|
31312
31374
|
condition: SceneConditionSchema,
|
|
31313
31375
|
capturedAt: number(),
|
|
31314
|
-
|
|
31376
|
+
/**
|
|
31377
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31378
|
+
*
|
|
31379
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31380
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31381
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31382
|
+
*/
|
|
31383
|
+
thumbnailMediaId: number().int().optional(),
|
|
31315
31384
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31316
31385
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31317
31386
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33295,7 +33364,7 @@ var StationaryObjectSchema = object({
|
|
|
33295
33364
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33296
33365
|
label: string().optional(),
|
|
33297
33366
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33298
|
-
|
|
33367
|
+
keyFrameMediaId: number().int().optional()
|
|
33299
33368
|
});
|
|
33300
33369
|
var CameraOccupancySnapshotSchema = object({
|
|
33301
33370
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -36099,6 +36168,12 @@ Object.freeze({
|
|
|
36099
36168
|
addonId: null,
|
|
36100
36169
|
access: "create"
|
|
36101
36170
|
},
|
|
36171
|
+
"dataStoreProvider.upsert": {
|
|
36172
|
+
capName: "data-store-provider",
|
|
36173
|
+
capScope: "system",
|
|
36174
|
+
addonId: null,
|
|
36175
|
+
access: "create"
|
|
36176
|
+
},
|
|
36102
36177
|
"dayNight.getOptions": {
|
|
36103
36178
|
capName: "day-night",
|
|
36104
36179
|
capScope: "device",
|
|
@@ -39963,6 +40038,12 @@ Object.freeze({
|
|
|
39963
40038
|
addonId: null,
|
|
39964
40039
|
access: "create"
|
|
39965
40040
|
},
|
|
40041
|
+
"settingsStore.upsert": {
|
|
40042
|
+
capName: "settings-store",
|
|
40043
|
+
capScope: "system",
|
|
40044
|
+
addonId: null,
|
|
40045
|
+
access: "create"
|
|
40046
|
+
},
|
|
39966
40047
|
"smtpProvider.getStatus": {
|
|
39967
40048
|
capName: "smtp-provider",
|
|
39968
40049
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import net from "node:net";
|
|
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).
|
|
@@ -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([
|
|
@@ -12550,6 +12567,16 @@ method(object({
|
|
|
12550
12567
|
filter: QueryFilterSchema.optional(),
|
|
12551
12568
|
columns: array(string()).readonly().optional()
|
|
12552
12569
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12570
|
+
namespace: string().optional(),
|
|
12571
|
+
collection: string(),
|
|
12572
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12573
|
+
* index on the collection. Never empty. */
|
|
12574
|
+
conflict: array(string()).readonly(),
|
|
12575
|
+
record: BulkRecordSchema
|
|
12576
|
+
}), object({
|
|
12577
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12578
|
+
* row's own id on an update. */
|
|
12579
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12553
12580
|
namespace: string().optional(),
|
|
12554
12581
|
collection: string(),
|
|
12555
12582
|
record: object({
|
|
@@ -12684,6 +12711,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12684
12711
|
id: union([string(), number()]) }), {
|
|
12685
12712
|
kind: "mutation",
|
|
12686
12713
|
auth: "admin"
|
|
12714
|
+
}), method(object({
|
|
12715
|
+
namespace: string().optional(),
|
|
12716
|
+
collection: string(),
|
|
12717
|
+
conflict: array(string()).readonly(),
|
|
12718
|
+
record: BulkRecordSchema
|
|
12719
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12720
|
+
kind: "mutation",
|
|
12721
|
+
auth: "admin"
|
|
12687
12722
|
}), method(object({
|
|
12688
12723
|
namespace: string().optional(),
|
|
12689
12724
|
collection: string(),
|
|
@@ -19166,8 +19201,8 @@ var TrackPositionSchema = object({
|
|
|
19166
19201
|
var TrackSnapshotSchema = object({
|
|
19167
19202
|
timestamp: number(),
|
|
19168
19203
|
position: TrackPositionSchema,
|
|
19169
|
-
/**
|
|
19170
|
-
|
|
19204
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19205
|
+
mediaId: number().int()
|
|
19171
19206
|
});
|
|
19172
19207
|
/**
|
|
19173
19208
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19771,14 +19806,14 @@ var ObjectEventSchema = object({
|
|
|
19771
19806
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19772
19807
|
frameWidth: number().optional(),
|
|
19773
19808
|
frameHeight: number().optional(),
|
|
19774
|
-
/**
|
|
19775
|
-
|
|
19776
|
-
/** Design B:
|
|
19809
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19810
|
+
mediaId: number().int().optional(),
|
|
19811
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19777
19812
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19778
|
-
* (`/addon/<addonId>/event-media/<
|
|
19813
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19779
19814
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19780
|
-
* sources — consumers fall back to `
|
|
19781
|
-
|
|
19815
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19816
|
+
keyFrameMediaId: number().int().optional(),
|
|
19782
19817
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19783
19818
|
mediaUrl: string().optional(),
|
|
19784
19819
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19828,7 +19863,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19828
19863
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19829
19864
|
*
|
|
19830
19865
|
* `url` points at the `event-media` data plane
|
|
19831
|
-
* (`/addon/<addonId>/event-media/<
|
|
19866
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19832
19867
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19833
19868
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19834
19869
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19836,10 +19871,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19836
19871
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19837
19872
|
* (per-device scoping).
|
|
19838
19873
|
*
|
|
19839
|
-
* The URL is built from the row's
|
|
19840
|
-
*
|
|
19874
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19875
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19876
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19841
19877
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19842
|
-
* `faceCrop`/`plateCrop
|
|
19878
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19879
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19880
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19843
19881
|
*
|
|
19844
19882
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19845
19883
|
*
|
|
@@ -19852,7 +19890,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19852
19890
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19853
19891
|
*/
|
|
19854
19892
|
var MediaFileSchema = object({
|
|
19855
|
-
|
|
19893
|
+
/**
|
|
19894
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19895
|
+
*
|
|
19896
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19897
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19898
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19899
|
+
* different rows that spell the same number, and a track whose
|
|
19900
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19901
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19902
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19903
|
+
* at all.
|
|
19904
|
+
*/
|
|
19905
|
+
mediaId: number().int(),
|
|
19856
19906
|
kind: MediaFileKindEnum,
|
|
19857
19907
|
sizeBytes: number(),
|
|
19858
19908
|
timestamp: number()
|
|
@@ -19960,7 +20010,7 @@ var RetrainTrackSchema = object({
|
|
|
19960
20010
|
});
|
|
19961
20011
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19962
20012
|
var RetrainFrameCandidateSchema = object({
|
|
19963
|
-
|
|
20013
|
+
mediaId: number().int(),
|
|
19964
20014
|
kind: MediaFileKindEnum,
|
|
19965
20015
|
timestamp: number(),
|
|
19966
20016
|
sizeBytes: number().int(),
|
|
@@ -19974,7 +20024,7 @@ var RetrainFrameSchema = object({
|
|
|
19974
20024
|
deviceId: number(),
|
|
19975
20025
|
trackId: string(),
|
|
19976
20026
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19977
|
-
|
|
20027
|
+
sourceMediaId: number().int(),
|
|
19978
20028
|
sourceKind: MediaFileKindEnum,
|
|
19979
20029
|
sizeBytes: number().int(),
|
|
19980
20030
|
width: number().int(),
|
|
@@ -19990,7 +20040,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19990
20040
|
var RetrainFrameSelectionSchema = object({
|
|
19991
20041
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19992
20042
|
refused: array(object({
|
|
19993
|
-
|
|
20043
|
+
sourceMediaId: number().int(),
|
|
19994
20044
|
reason: RetrainCopyRefusalSchema
|
|
19995
20045
|
})).readonly()
|
|
19996
20046
|
});
|
|
@@ -19998,7 +20048,7 @@ var RetrainFrameListSchema = object({
|
|
|
19998
20048
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19999
20049
|
copies: array(RetrainFrameSchema).readonly(),
|
|
20000
20050
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
20001
|
-
|
|
20051
|
+
autoPickMediaId: number().int().optional()
|
|
20002
20052
|
});
|
|
20003
20053
|
/** What the operator asked the assist to look for. */
|
|
20004
20054
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20093,9 +20143,11 @@ var RecentTracksQueryInput = object({
|
|
|
20093
20143
|
});
|
|
20094
20144
|
/**
|
|
20095
20145
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20096
|
-
* `
|
|
20097
|
-
* served by the event-media plane
|
|
20098
|
-
* member visible has been materialised
|
|
20146
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20147
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20148
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20149
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20150
|
+
* row once event ids became per-table rowids).
|
|
20099
20151
|
*/
|
|
20100
20152
|
var SummarySchema = object({
|
|
20101
20153
|
id: string(),
|
|
@@ -20104,7 +20156,7 @@ var SummarySchema = object({
|
|
|
20104
20156
|
lastActiveAt: number(),
|
|
20105
20157
|
sealedAt: number().nullable(),
|
|
20106
20158
|
memberCount: number().int().nonnegative(),
|
|
20107
|
-
|
|
20159
|
+
groupShotMediaId: number().int().nullable()
|
|
20108
20160
|
});
|
|
20109
20161
|
var SummariesQueryInput = object({
|
|
20110
20162
|
deviceIds: array(number()).min(1),
|
|
@@ -20658,7 +20710,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20658
20710
|
}), method(object({
|
|
20659
20711
|
deviceId: number(),
|
|
20660
20712
|
trackId: string(),
|
|
20661
|
-
|
|
20713
|
+
mediaIds: array(number().int()).min(1)
|
|
20662
20714
|
}), RetrainFrameSelectionSchema, {
|
|
20663
20715
|
kind: "mutation",
|
|
20664
20716
|
auth: "admin"
|
|
@@ -20726,7 +20778,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20726
20778
|
kind: "query",
|
|
20727
20779
|
auth: "admin"
|
|
20728
20780
|
}), method(object({
|
|
20729
|
-
|
|
20781
|
+
/** Which of the three event tables owns the row. */
|
|
20782
|
+
ownerType: EventOwnerTypeSchema,
|
|
20783
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20784
|
+
eventId: number().int(),
|
|
20730
20785
|
kind: MediaFileKindEnum.optional(),
|
|
20731
20786
|
deviceId: number()
|
|
20732
20787
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20737,7 +20792,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20737
20792
|
trackId: string(),
|
|
20738
20793
|
deviceId: number()
|
|
20739
20794
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20740
|
-
|
|
20795
|
+
ownerType: EventOwnerTypeSchema,
|
|
20796
|
+
eventId: number().int(),
|
|
20741
20797
|
deviceId: number()
|
|
20742
20798
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20743
20799
|
kind: "mutation",
|
|
@@ -26042,8 +26098,8 @@ var IdentitySchema = object({
|
|
|
26042
26098
|
id: string(),
|
|
26043
26099
|
name: string(),
|
|
26044
26100
|
sampleCount: number().int().nonnegative(),
|
|
26045
|
-
|
|
26046
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26101
|
+
coverMediaId: number().int().optional(),
|
|
26102
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26047
26103
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26048
26104
|
coverBase64: string().optional()
|
|
26049
26105
|
});
|
|
@@ -26069,8 +26125,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26069
26125
|
enrolledAt: number().int(),
|
|
26070
26126
|
deviceId: number().int().optional(),
|
|
26071
26127
|
source: _enum(["detected", "photo"]),
|
|
26072
|
-
/** The enrolled crop's media
|
|
26073
|
-
|
|
26128
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26129
|
+
mediaId: number().int().optional(),
|
|
26074
26130
|
/**
|
|
26075
26131
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26076
26132
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26139,15 +26195,15 @@ var FaceInfoSchema = object({
|
|
|
26139
26195
|
*/
|
|
26140
26196
|
cropUrl: string().optional(),
|
|
26141
26197
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26142
|
-
* view draw the box over the native `
|
|
26198
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26143
26199
|
* legacy rows written before design B. */
|
|
26144
26200
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26145
26201
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26146
26202
|
* Fetch the native JPEG via the event-media data-plane
|
|
26147
|
-
* (`/addon/<addonId>/event-media/<
|
|
26203
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26148
26204
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26149
26205
|
* back to the inline `base64` face crop. */
|
|
26150
|
-
|
|
26206
|
+
keyFrameMediaId: number().int().optional(),
|
|
26151
26207
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26152
26208
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26153
26209
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26216,11 +26272,14 @@ var FaceClusterSchema = object({
|
|
|
26216
26272
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26217
26273
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26218
26274
|
*
|
|
26219
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26220
|
-
* media
|
|
26275
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26276
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26277
|
+
* access decision.
|
|
26221
26278
|
*/
|
|
26222
26279
|
var MediaFileLiteSchema$1 = object({
|
|
26223
|
-
|
|
26280
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26281
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26282
|
+
mediaId: number().int(),
|
|
26224
26283
|
kind: string(),
|
|
26225
26284
|
url: string(),
|
|
26226
26285
|
sizeBytes: number(),
|
|
@@ -26237,7 +26296,7 @@ method(object({
|
|
|
26237
26296
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26238
26297
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26239
26298
|
*
|
|
26240
|
-
* Nothing loses its avatar: `
|
|
26299
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26241
26300
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26242
26301
|
*
|
|
26243
26302
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29600,8 +29659,8 @@ var VehicleSchema = object({
|
|
|
29600
29659
|
id: string(),
|
|
29601
29660
|
name: string(),
|
|
29602
29661
|
sampleCount: number().int().nonnegative(),
|
|
29603
|
-
|
|
29604
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29662
|
+
coverMediaId: number().int().optional(),
|
|
29663
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29605
29664
|
coverBase64: string().optional()
|
|
29606
29665
|
});
|
|
29607
29666
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29634,7 +29693,7 @@ var PlateInfoSchema = object({
|
|
|
29634
29693
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29635
29694
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29636
29695
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29637
|
-
|
|
29696
|
+
keyFrameMediaId: number().int().optional(),
|
|
29638
29697
|
base64: string().optional(),
|
|
29639
29698
|
/**
|
|
29640
29699
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29655,11 +29714,14 @@ var PlateInfoSchema = object({
|
|
|
29655
29714
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29656
29715
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29657
29716
|
*
|
|
29658
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29659
|
-
* media
|
|
29717
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29718
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29719
|
+
* access decision.
|
|
29660
29720
|
*/
|
|
29661
29721
|
var MediaFileLiteSchema = object({
|
|
29662
|
-
|
|
29722
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29723
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29724
|
+
mediaId: number().int(),
|
|
29663
29725
|
kind: string(),
|
|
29664
29726
|
url: string(),
|
|
29665
29727
|
sizeBytes: number(),
|
|
@@ -29718,7 +29780,7 @@ method(object({
|
|
|
29718
29780
|
}), method(object({
|
|
29719
29781
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29720
29782
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29721
|
-
* option; `
|
|
29783
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29722
29784
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29723
29785
|
* resolves to `false` and is exactly the intended default. */
|
|
29724
29786
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31287,7 +31349,14 @@ var SceneReferenceSchema = object({
|
|
|
31287
31349
|
modelId: string(),
|
|
31288
31350
|
condition: SceneConditionSchema,
|
|
31289
31351
|
capturedAt: number(),
|
|
31290
|
-
|
|
31352
|
+
/**
|
|
31353
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31354
|
+
*
|
|
31355
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31356
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31357
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31358
|
+
*/
|
|
31359
|
+
thumbnailMediaId: number().int().optional(),
|
|
31291
31360
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31292
31361
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31293
31362
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33271,7 +33340,7 @@ var StationaryObjectSchema = object({
|
|
|
33271
33340
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33272
33341
|
label: string().optional(),
|
|
33273
33342
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33274
|
-
|
|
33343
|
+
keyFrameMediaId: number().int().optional()
|
|
33275
33344
|
});
|
|
33276
33345
|
var CameraOccupancySnapshotSchema = object({
|
|
33277
33346
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -36075,6 +36144,12 @@ Object.freeze({
|
|
|
36075
36144
|
addonId: null,
|
|
36076
36145
|
access: "create"
|
|
36077
36146
|
},
|
|
36147
|
+
"dataStoreProvider.upsert": {
|
|
36148
|
+
capName: "data-store-provider",
|
|
36149
|
+
capScope: "system",
|
|
36150
|
+
addonId: null,
|
|
36151
|
+
access: "create"
|
|
36152
|
+
},
|
|
36078
36153
|
"dayNight.getOptions": {
|
|
36079
36154
|
capName: "day-night",
|
|
36080
36155
|
capScope: "device",
|
|
@@ -39939,6 +40014,12 @@ Object.freeze({
|
|
|
39939
40014
|
addonId: null,
|
|
39940
40015
|
access: "create"
|
|
39941
40016
|
},
|
|
40017
|
+
"settingsStore.upsert": {
|
|
40018
|
+
capName: "settings-store",
|
|
40019
|
+
capScope: "system",
|
|
40020
|
+
addonId: null,
|
|
40021
|
+
access: "create"
|
|
40022
|
+
},
|
|
39942
40023
|
"smtpProvider.getStatus": {
|
|
39943
40024
|
capName: "smtp-provider",
|
|
39944
40025
|
capScope: "system",
|