@camstack/addon-provider-petkit 0.2.98 → 0.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
|
@@ -1101,7 +1101,7 @@ var Nodepetkit = class {
|
|
|
1101
1101
|
}
|
|
1102
1102
|
};
|
|
1103
1103
|
//#endregion
|
|
1104
|
-
//#region ../types/dist/event-category-
|
|
1104
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
1105
1105
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
1106
1106
|
EventCategory["SystemBoot"] = "system.boot";
|
|
1107
1107
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -1662,7 +1662,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
1662
1662
|
* a package zone — a newly-appeared stationary object of a package class
|
|
1663
1663
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
1664
1664
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
1665
|
-
* entryId, className, zoneIds,
|
|
1665
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
1666
1666
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
1667
1667
|
* this bus topic drives notifier rules + live UI. See
|
|
1668
1668
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -6448,7 +6448,7 @@ var ZodIssueCode = {
|
|
|
6448
6448
|
var ZodFirstPartyTypeKind;
|
|
6449
6449
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6450
6450
|
//#endregion
|
|
6451
|
-
//#region ../types/dist/sleep-
|
|
6451
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
6452
6452
|
/**
|
|
6453
6453
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6454
6454
|
* window to float samples (D455).
|
|
@@ -8415,13 +8415,30 @@ new Set([
|
|
|
8415
8415
|
"scene",
|
|
8416
8416
|
"motion",
|
|
8417
8417
|
"object",
|
|
8418
|
-
"audio"
|
|
8418
|
+
"audio",
|
|
8419
|
+
"mosaic"
|
|
8419
8420
|
]);
|
|
8420
|
-
|
|
8421
|
+
/**
|
|
8422
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
8423
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
8424
|
+
* does not re-spell the list and drift from it.
|
|
8425
|
+
*/
|
|
8426
|
+
var EVENT_OWNER_TYPES = [
|
|
8421
8427
|
"motion",
|
|
8422
8428
|
"object",
|
|
8423
8429
|
"audio"
|
|
8424
|
-
]
|
|
8430
|
+
];
|
|
8431
|
+
/**
|
|
8432
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
8433
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
8434
|
+
* `(table, id)`).
|
|
8435
|
+
*
|
|
8436
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
8437
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
8438
|
+
* nothing failing until a caller asked.
|
|
8439
|
+
*/
|
|
8440
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
8441
|
+
new Set(EVENT_OWNER_TYPES);
|
|
8425
8442
|
var EncodeProfileSchema = object({
|
|
8426
8443
|
video: object({
|
|
8427
8444
|
codec: _enum([
|
|
@@ -13620,6 +13637,16 @@ method(object({
|
|
|
13620
13637
|
filter: QueryFilterSchema.optional(),
|
|
13621
13638
|
columns: array(string()).readonly().optional()
|
|
13622
13639
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
13640
|
+
namespace: string().optional(),
|
|
13641
|
+
collection: string(),
|
|
13642
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
13643
|
+
* index on the collection. Never empty. */
|
|
13644
|
+
conflict: array(string()).readonly(),
|
|
13645
|
+
record: BulkRecordSchema
|
|
13646
|
+
}), object({
|
|
13647
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
13648
|
+
* row's own id on an update. */
|
|
13649
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
13623
13650
|
namespace: string().optional(),
|
|
13624
13651
|
collection: string(),
|
|
13625
13652
|
record: object({
|
|
@@ -13754,6 +13781,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
13754
13781
|
id: union([string(), number()]) }), {
|
|
13755
13782
|
kind: "mutation",
|
|
13756
13783
|
auth: "admin"
|
|
13784
|
+
}), method(object({
|
|
13785
|
+
namespace: string().optional(),
|
|
13786
|
+
collection: string(),
|
|
13787
|
+
conflict: array(string()).readonly(),
|
|
13788
|
+
record: BulkRecordSchema
|
|
13789
|
+
}), object({ id: union([string(), number()]) }), {
|
|
13790
|
+
kind: "mutation",
|
|
13791
|
+
auth: "admin"
|
|
13757
13792
|
}), method(object({
|
|
13758
13793
|
namespace: string().optional(),
|
|
13759
13794
|
collection: string(),
|
|
@@ -20253,8 +20288,8 @@ var TrackPositionSchema = object({
|
|
|
20253
20288
|
var TrackSnapshotSchema = object({
|
|
20254
20289
|
timestamp: number(),
|
|
20255
20290
|
position: TrackPositionSchema,
|
|
20256
|
-
/**
|
|
20257
|
-
|
|
20291
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
20292
|
+
mediaId: number().int()
|
|
20258
20293
|
});
|
|
20259
20294
|
/**
|
|
20260
20295
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -20858,14 +20893,14 @@ var ObjectEventSchema = object({
|
|
|
20858
20893
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
20859
20894
|
frameWidth: number().optional(),
|
|
20860
20895
|
frameHeight: number().optional(),
|
|
20861
|
-
/**
|
|
20862
|
-
|
|
20863
|
-
/** Design B:
|
|
20896
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
20897
|
+
mediaId: number().int().optional(),
|
|
20898
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
20864
20899
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
20865
|
-
* (`/addon/<addonId>/event-media/<
|
|
20900
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
20866
20901
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
20867
|
-
* sources — consumers fall back to `
|
|
20868
|
-
|
|
20902
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
20903
|
+
keyFrameMediaId: number().int().optional(),
|
|
20869
20904
|
/** Populated by B5 (recording playback URL for this event). */
|
|
20870
20905
|
mediaUrl: string().optional(),
|
|
20871
20906
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -20915,7 +20950,7 @@ var MediaFileKindEnum = _enum([
|
|
|
20915
20950
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
20916
20951
|
*
|
|
20917
20952
|
* `url` points at the `event-media` data plane
|
|
20918
|
-
* (`/addon/<addonId>/event-media/<
|
|
20953
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
20919
20954
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
20920
20955
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
20921
20956
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -20923,10 +20958,13 @@ var MediaFileKindEnum = _enum([
|
|
|
20923
20958
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
20924
20959
|
* (per-device scoping).
|
|
20925
20960
|
*
|
|
20926
|
-
* The URL is built from the row's
|
|
20927
|
-
*
|
|
20961
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
20962
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
20963
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
20928
20964
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
20929
|
-
* `faceCrop`/`plateCrop
|
|
20965
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
20966
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
20967
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
20930
20968
|
*
|
|
20931
20969
|
* ## `base64` is TRANSITIONAL and is going away
|
|
20932
20970
|
*
|
|
@@ -20939,7 +20977,19 @@ var MediaFileKindEnum = _enum([
|
|
|
20939
20977
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
20940
20978
|
*/
|
|
20941
20979
|
var MediaFileSchema = object({
|
|
20942
|
-
|
|
20980
|
+
/**
|
|
20981
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
20982
|
+
*
|
|
20983
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
20984
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
20985
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
20986
|
+
* different rows that spell the same number, and a track whose
|
|
20987
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
20988
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
20989
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
20990
|
+
* at all.
|
|
20991
|
+
*/
|
|
20992
|
+
mediaId: number().int(),
|
|
20943
20993
|
kind: MediaFileKindEnum,
|
|
20944
20994
|
sizeBytes: number(),
|
|
20945
20995
|
timestamp: number()
|
|
@@ -21047,7 +21097,7 @@ var RetrainTrackSchema = object({
|
|
|
21047
21097
|
});
|
|
21048
21098
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
21049
21099
|
var RetrainFrameCandidateSchema = object({
|
|
21050
|
-
|
|
21100
|
+
mediaId: number().int(),
|
|
21051
21101
|
kind: MediaFileKindEnum,
|
|
21052
21102
|
timestamp: number(),
|
|
21053
21103
|
sizeBytes: number().int(),
|
|
@@ -21061,7 +21111,7 @@ var RetrainFrameSchema = object({
|
|
|
21061
21111
|
deviceId: number(),
|
|
21062
21112
|
trackId: string(),
|
|
21063
21113
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
21064
|
-
|
|
21114
|
+
sourceMediaId: number().int(),
|
|
21065
21115
|
sourceKind: MediaFileKindEnum,
|
|
21066
21116
|
sizeBytes: number().int(),
|
|
21067
21117
|
width: number().int(),
|
|
@@ -21077,7 +21127,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
21077
21127
|
var RetrainFrameSelectionSchema = object({
|
|
21078
21128
|
copied: array(RetrainFrameSchema).readonly(),
|
|
21079
21129
|
refused: array(object({
|
|
21080
|
-
|
|
21130
|
+
sourceMediaId: number().int(),
|
|
21081
21131
|
reason: RetrainCopyRefusalSchema
|
|
21082
21132
|
})).readonly()
|
|
21083
21133
|
});
|
|
@@ -21085,7 +21135,7 @@ var RetrainFrameListSchema = object({
|
|
|
21085
21135
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
21086
21136
|
copies: array(RetrainFrameSchema).readonly(),
|
|
21087
21137
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
21088
|
-
|
|
21138
|
+
autoPickMediaId: number().int().optional()
|
|
21089
21139
|
});
|
|
21090
21140
|
/** What the operator asked the assist to look for. */
|
|
21091
21141
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -21180,9 +21230,11 @@ var RecentTracksQueryInput = object({
|
|
|
21180
21230
|
});
|
|
21181
21231
|
/**
|
|
21182
21232
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
21183
|
-
* `
|
|
21184
|
-
* served by the event-media plane
|
|
21185
|
-
* member visible has been materialised
|
|
21233
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
21234
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
21235
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
21236
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
21237
|
+
* row once event ids became per-table rowids).
|
|
21186
21238
|
*/
|
|
21187
21239
|
var SummarySchema = object({
|
|
21188
21240
|
id: string(),
|
|
@@ -21191,7 +21243,7 @@ var SummarySchema = object({
|
|
|
21191
21243
|
lastActiveAt: number(),
|
|
21192
21244
|
sealedAt: number().nullable(),
|
|
21193
21245
|
memberCount: number().int().nonnegative(),
|
|
21194
|
-
|
|
21246
|
+
groupShotMediaId: number().int().nullable()
|
|
21195
21247
|
});
|
|
21196
21248
|
var SummariesQueryInput = object({
|
|
21197
21249
|
deviceIds: array(number()).min(1),
|
|
@@ -21745,7 +21797,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21745
21797
|
}), method(object({
|
|
21746
21798
|
deviceId: number(),
|
|
21747
21799
|
trackId: string(),
|
|
21748
|
-
|
|
21800
|
+
mediaIds: array(number().int()).min(1)
|
|
21749
21801
|
}), RetrainFrameSelectionSchema, {
|
|
21750
21802
|
kind: "mutation",
|
|
21751
21803
|
auth: "admin"
|
|
@@ -21813,7 +21865,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21813
21865
|
kind: "query",
|
|
21814
21866
|
auth: "admin"
|
|
21815
21867
|
}), method(object({
|
|
21816
|
-
|
|
21868
|
+
/** Which of the three event tables owns the row. */
|
|
21869
|
+
ownerType: EventOwnerTypeSchema,
|
|
21870
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
21871
|
+
eventId: number().int(),
|
|
21817
21872
|
kind: MediaFileKindEnum.optional(),
|
|
21818
21873
|
deviceId: number()
|
|
21819
21874
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -21824,7 +21879,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21824
21879
|
trackId: string(),
|
|
21825
21880
|
deviceId: number()
|
|
21826
21881
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
21827
|
-
|
|
21882
|
+
ownerType: EventOwnerTypeSchema,
|
|
21883
|
+
eventId: number().int(),
|
|
21828
21884
|
deviceId: number()
|
|
21829
21885
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
21830
21886
|
kind: "mutation",
|
|
@@ -27025,8 +27081,8 @@ var IdentitySchema = object({
|
|
|
27025
27081
|
id: string(),
|
|
27026
27082
|
name: string(),
|
|
27027
27083
|
sampleCount: number().int().nonnegative(),
|
|
27028
|
-
|
|
27029
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
27084
|
+
coverMediaId: number().int().optional(),
|
|
27085
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
27030
27086
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
27031
27087
|
coverBase64: string().optional()
|
|
27032
27088
|
});
|
|
@@ -27052,8 +27108,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
27052
27108
|
enrolledAt: number().int(),
|
|
27053
27109
|
deviceId: number().int().optional(),
|
|
27054
27110
|
source: _enum(["detected", "photo"]),
|
|
27055
|
-
/** The enrolled crop's media
|
|
27056
|
-
|
|
27111
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
27112
|
+
mediaId: number().int().optional(),
|
|
27057
27113
|
/**
|
|
27058
27114
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
27059
27115
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -27122,15 +27178,15 @@ var FaceInfoSchema = object({
|
|
|
27122
27178
|
*/
|
|
27123
27179
|
cropUrl: string().optional(),
|
|
27124
27180
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
27125
|
-
* view draw the box over the native `
|
|
27181
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
27126
27182
|
* legacy rows written before design B. */
|
|
27127
27183
|
faceBbox: BoundingBoxSchema.optional(),
|
|
27128
27184
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
27129
27185
|
* Fetch the native JPEG via the event-media data-plane
|
|
27130
|
-
* (`/addon/<addonId>/event-media/<
|
|
27186
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
27131
27187
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
27132
27188
|
* back to the inline `base64` face crop. */
|
|
27133
|
-
|
|
27189
|
+
keyFrameMediaId: number().int().optional(),
|
|
27134
27190
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
27135
27191
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
27136
27192
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -27199,11 +27255,14 @@ var FaceClusterSchema = object({
|
|
|
27199
27255
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27200
27256
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27201
27257
|
*
|
|
27202
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27203
|
-
* media
|
|
27258
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27259
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27260
|
+
* access decision.
|
|
27204
27261
|
*/
|
|
27205
27262
|
var MediaFileLiteSchema$1 = object({
|
|
27206
|
-
|
|
27263
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27264
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27265
|
+
mediaId: number().int(),
|
|
27207
27266
|
kind: string(),
|
|
27208
27267
|
url: string(),
|
|
27209
27268
|
sizeBytes: number(),
|
|
@@ -27220,7 +27279,7 @@ method(object({
|
|
|
27220
27279
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
27221
27280
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
27222
27281
|
*
|
|
27223
|
-
* Nothing loses its avatar: `
|
|
27282
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
27224
27283
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
27225
27284
|
*
|
|
27226
27285
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -30583,8 +30642,8 @@ var VehicleSchema = object({
|
|
|
30583
30642
|
id: string(),
|
|
30584
30643
|
name: string(),
|
|
30585
30644
|
sampleCount: number().int().nonnegative(),
|
|
30586
|
-
|
|
30587
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
30645
|
+
coverMediaId: number().int().optional(),
|
|
30646
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
30588
30647
|
coverBase64: string().optional()
|
|
30589
30648
|
});
|
|
30590
30649
|
var VehicleSampleInfoSchema = object({
|
|
@@ -30617,7 +30676,7 @@ var PlateInfoSchema = object({
|
|
|
30617
30676
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
30618
30677
|
plateBbox: BoundingBoxSchema.optional(),
|
|
30619
30678
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
30620
|
-
|
|
30679
|
+
keyFrameMediaId: number().int().optional(),
|
|
30621
30680
|
base64: string().optional(),
|
|
30622
30681
|
/**
|
|
30623
30682
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -30638,11 +30697,14 @@ var PlateInfoSchema = object({
|
|
|
30638
30697
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
30639
30698
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
30640
30699
|
*
|
|
30641
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
30642
|
-
* media
|
|
30700
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
30701
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
30702
|
+
* access decision.
|
|
30643
30703
|
*/
|
|
30644
30704
|
var MediaFileLiteSchema = object({
|
|
30645
|
-
|
|
30705
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
30706
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
30707
|
+
mediaId: number().int(),
|
|
30646
30708
|
kind: string(),
|
|
30647
30709
|
url: string(),
|
|
30648
30710
|
sizeBytes: number(),
|
|
@@ -30701,7 +30763,7 @@ method(object({
|
|
|
30701
30763
|
}), method(object({
|
|
30702
30764
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
30703
30765
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
30704
|
-
* option; `
|
|
30766
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
30705
30767
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
30706
30768
|
* resolves to `false` and is exactly the intended default. */
|
|
30707
30769
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -32270,7 +32332,14 @@ var SceneReferenceSchema = object({
|
|
|
32270
32332
|
modelId: string(),
|
|
32271
32333
|
condition: SceneConditionSchema,
|
|
32272
32334
|
capturedAt: number(),
|
|
32273
|
-
|
|
32335
|
+
/**
|
|
32336
|
+
* The reference thumbnail's media ROW id (D482).
|
|
32337
|
+
*
|
|
32338
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
32339
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
32340
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
32341
|
+
*/
|
|
32342
|
+
thumbnailMediaId: number().int().optional(),
|
|
32274
32343
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
32275
32344
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
32276
32345
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -34254,7 +34323,7 @@ var StationaryObjectSchema = object({
|
|
|
34254
34323
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
34255
34324
|
label: string().optional(),
|
|
34256
34325
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
34257
|
-
|
|
34326
|
+
keyFrameMediaId: number().int().optional()
|
|
34258
34327
|
});
|
|
34259
34328
|
var CameraOccupancySnapshotSchema = object({
|
|
34260
34329
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -36992,6 +37061,12 @@ Object.freeze({
|
|
|
36992
37061
|
addonId: null,
|
|
36993
37062
|
access: "create"
|
|
36994
37063
|
},
|
|
37064
|
+
"dataStoreProvider.upsert": {
|
|
37065
|
+
capName: "data-store-provider",
|
|
37066
|
+
capScope: "system",
|
|
37067
|
+
addonId: null,
|
|
37068
|
+
access: "create"
|
|
37069
|
+
},
|
|
36995
37070
|
"dayNight.getOptions": {
|
|
36996
37071
|
capName: "day-night",
|
|
36997
37072
|
capScope: "device",
|
|
@@ -40856,6 +40931,12 @@ Object.freeze({
|
|
|
40856
40931
|
addonId: null,
|
|
40857
40932
|
access: "create"
|
|
40858
40933
|
},
|
|
40934
|
+
"settingsStore.upsert": {
|
|
40935
|
+
capName: "settings-store",
|
|
40936
|
+
capScope: "system",
|
|
40937
|
+
addonId: null,
|
|
40938
|
+
access: "create"
|
|
40939
|
+
},
|
|
40859
40940
|
"smtpProvider.getStatus": {
|
|
40860
40941
|
capName: "smtp-provider",
|
|
40861
40942
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -1100,7 +1100,7 @@ var Nodepetkit = class {
|
|
|
1100
1100
|
}
|
|
1101
1101
|
};
|
|
1102
1102
|
//#endregion
|
|
1103
|
-
//#region ../types/dist/event-category-
|
|
1103
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
1104
1104
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
1105
1105
|
EventCategory["SystemBoot"] = "system.boot";
|
|
1106
1106
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -1661,7 +1661,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
1661
1661
|
* a package zone — a newly-appeared stationary object of a package class
|
|
1662
1662
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
1663
1663
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
1664
|
-
* entryId, className, zoneIds,
|
|
1664
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
1665
1665
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
1666
1666
|
* this bus topic drives notifier rules + live UI. See
|
|
1667
1667
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -6447,7 +6447,7 @@ var ZodIssueCode = {
|
|
|
6447
6447
|
var ZodFirstPartyTypeKind;
|
|
6448
6448
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6449
6449
|
//#endregion
|
|
6450
|
-
//#region ../types/dist/sleep-
|
|
6450
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
6451
6451
|
/**
|
|
6452
6452
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6453
6453
|
* window to float samples (D455).
|
|
@@ -8414,13 +8414,30 @@ new Set([
|
|
|
8414
8414
|
"scene",
|
|
8415
8415
|
"motion",
|
|
8416
8416
|
"object",
|
|
8417
|
-
"audio"
|
|
8417
|
+
"audio",
|
|
8418
|
+
"mosaic"
|
|
8418
8419
|
]);
|
|
8419
|
-
|
|
8420
|
+
/**
|
|
8421
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
8422
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
8423
|
+
* does not re-spell the list and drift from it.
|
|
8424
|
+
*/
|
|
8425
|
+
var EVENT_OWNER_TYPES = [
|
|
8420
8426
|
"motion",
|
|
8421
8427
|
"object",
|
|
8422
8428
|
"audio"
|
|
8423
|
-
]
|
|
8429
|
+
];
|
|
8430
|
+
/**
|
|
8431
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
8432
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
8433
|
+
* `(table, id)`).
|
|
8434
|
+
*
|
|
8435
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
8436
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
8437
|
+
* nothing failing until a caller asked.
|
|
8438
|
+
*/
|
|
8439
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
8440
|
+
new Set(EVENT_OWNER_TYPES);
|
|
8424
8441
|
var EncodeProfileSchema = object({
|
|
8425
8442
|
video: object({
|
|
8426
8443
|
codec: _enum([
|
|
@@ -13619,6 +13636,16 @@ method(object({
|
|
|
13619
13636
|
filter: QueryFilterSchema.optional(),
|
|
13620
13637
|
columns: array(string()).readonly().optional()
|
|
13621
13638
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
13639
|
+
namespace: string().optional(),
|
|
13640
|
+
collection: string(),
|
|
13641
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
13642
|
+
* index on the collection. Never empty. */
|
|
13643
|
+
conflict: array(string()).readonly(),
|
|
13644
|
+
record: BulkRecordSchema
|
|
13645
|
+
}), object({
|
|
13646
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
13647
|
+
* row's own id on an update. */
|
|
13648
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
13622
13649
|
namespace: string().optional(),
|
|
13623
13650
|
collection: string(),
|
|
13624
13651
|
record: object({
|
|
@@ -13753,6 +13780,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
13753
13780
|
id: union([string(), number()]) }), {
|
|
13754
13781
|
kind: "mutation",
|
|
13755
13782
|
auth: "admin"
|
|
13783
|
+
}), method(object({
|
|
13784
|
+
namespace: string().optional(),
|
|
13785
|
+
collection: string(),
|
|
13786
|
+
conflict: array(string()).readonly(),
|
|
13787
|
+
record: BulkRecordSchema
|
|
13788
|
+
}), object({ id: union([string(), number()]) }), {
|
|
13789
|
+
kind: "mutation",
|
|
13790
|
+
auth: "admin"
|
|
13756
13791
|
}), method(object({
|
|
13757
13792
|
namespace: string().optional(),
|
|
13758
13793
|
collection: string(),
|
|
@@ -20252,8 +20287,8 @@ var TrackPositionSchema = object({
|
|
|
20252
20287
|
var TrackSnapshotSchema = object({
|
|
20253
20288
|
timestamp: number(),
|
|
20254
20289
|
position: TrackPositionSchema,
|
|
20255
|
-
/**
|
|
20256
|
-
|
|
20290
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
20291
|
+
mediaId: number().int()
|
|
20257
20292
|
});
|
|
20258
20293
|
/**
|
|
20259
20294
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -20857,14 +20892,14 @@ var ObjectEventSchema = object({
|
|
|
20857
20892
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
20858
20893
|
frameWidth: number().optional(),
|
|
20859
20894
|
frameHeight: number().optional(),
|
|
20860
|
-
/**
|
|
20861
|
-
|
|
20862
|
-
/** Design B:
|
|
20895
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
20896
|
+
mediaId: number().int().optional(),
|
|
20897
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
20863
20898
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
20864
|
-
* (`/addon/<addonId>/event-media/<
|
|
20899
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
20865
20900
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
20866
|
-
* sources — consumers fall back to `
|
|
20867
|
-
|
|
20901
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
20902
|
+
keyFrameMediaId: number().int().optional(),
|
|
20868
20903
|
/** Populated by B5 (recording playback URL for this event). */
|
|
20869
20904
|
mediaUrl: string().optional(),
|
|
20870
20905
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -20914,7 +20949,7 @@ var MediaFileKindEnum = _enum([
|
|
|
20914
20949
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
20915
20950
|
*
|
|
20916
20951
|
* `url` points at the `event-media` data plane
|
|
20917
|
-
* (`/addon/<addonId>/event-media/<
|
|
20952
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
20918
20953
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
20919
20954
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
20920
20955
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -20922,10 +20957,13 @@ var MediaFileKindEnum = _enum([
|
|
|
20922
20957
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
20923
20958
|
* (per-device scoping).
|
|
20924
20959
|
*
|
|
20925
|
-
* The URL is built from the row's
|
|
20926
|
-
*
|
|
20960
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
20961
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
20962
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
20927
20963
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
20928
|
-
* `faceCrop`/`plateCrop
|
|
20964
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
20965
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
20966
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
20929
20967
|
*
|
|
20930
20968
|
* ## `base64` is TRANSITIONAL and is going away
|
|
20931
20969
|
*
|
|
@@ -20938,7 +20976,19 @@ var MediaFileKindEnum = _enum([
|
|
|
20938
20976
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
20939
20977
|
*/
|
|
20940
20978
|
var MediaFileSchema = object({
|
|
20941
|
-
|
|
20979
|
+
/**
|
|
20980
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
20981
|
+
*
|
|
20982
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
20983
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
20984
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
20985
|
+
* different rows that spell the same number, and a track whose
|
|
20986
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
20987
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
20988
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
20989
|
+
* at all.
|
|
20990
|
+
*/
|
|
20991
|
+
mediaId: number().int(),
|
|
20942
20992
|
kind: MediaFileKindEnum,
|
|
20943
20993
|
sizeBytes: number(),
|
|
20944
20994
|
timestamp: number()
|
|
@@ -21046,7 +21096,7 @@ var RetrainTrackSchema = object({
|
|
|
21046
21096
|
});
|
|
21047
21097
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
21048
21098
|
var RetrainFrameCandidateSchema = object({
|
|
21049
|
-
|
|
21099
|
+
mediaId: number().int(),
|
|
21050
21100
|
kind: MediaFileKindEnum,
|
|
21051
21101
|
timestamp: number(),
|
|
21052
21102
|
sizeBytes: number().int(),
|
|
@@ -21060,7 +21110,7 @@ var RetrainFrameSchema = object({
|
|
|
21060
21110
|
deviceId: number(),
|
|
21061
21111
|
trackId: string(),
|
|
21062
21112
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
21063
|
-
|
|
21113
|
+
sourceMediaId: number().int(),
|
|
21064
21114
|
sourceKind: MediaFileKindEnum,
|
|
21065
21115
|
sizeBytes: number().int(),
|
|
21066
21116
|
width: number().int(),
|
|
@@ -21076,7 +21126,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
21076
21126
|
var RetrainFrameSelectionSchema = object({
|
|
21077
21127
|
copied: array(RetrainFrameSchema).readonly(),
|
|
21078
21128
|
refused: array(object({
|
|
21079
|
-
|
|
21129
|
+
sourceMediaId: number().int(),
|
|
21080
21130
|
reason: RetrainCopyRefusalSchema
|
|
21081
21131
|
})).readonly()
|
|
21082
21132
|
});
|
|
@@ -21084,7 +21134,7 @@ var RetrainFrameListSchema = object({
|
|
|
21084
21134
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
21085
21135
|
copies: array(RetrainFrameSchema).readonly(),
|
|
21086
21136
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
21087
|
-
|
|
21137
|
+
autoPickMediaId: number().int().optional()
|
|
21088
21138
|
});
|
|
21089
21139
|
/** What the operator asked the assist to look for. */
|
|
21090
21140
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -21179,9 +21229,11 @@ var RecentTracksQueryInput = object({
|
|
|
21179
21229
|
});
|
|
21180
21230
|
/**
|
|
21181
21231
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
21182
|
-
* `
|
|
21183
|
-
* served by the event-media plane
|
|
21184
|
-
* member visible has been materialised
|
|
21232
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
21233
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
21234
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
21235
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
21236
|
+
* row once event ids became per-table rowids).
|
|
21185
21237
|
*/
|
|
21186
21238
|
var SummarySchema = object({
|
|
21187
21239
|
id: string(),
|
|
@@ -21190,7 +21242,7 @@ var SummarySchema = object({
|
|
|
21190
21242
|
lastActiveAt: number(),
|
|
21191
21243
|
sealedAt: number().nullable(),
|
|
21192
21244
|
memberCount: number().int().nonnegative(),
|
|
21193
|
-
|
|
21245
|
+
groupShotMediaId: number().int().nullable()
|
|
21194
21246
|
});
|
|
21195
21247
|
var SummariesQueryInput = object({
|
|
21196
21248
|
deviceIds: array(number()).min(1),
|
|
@@ -21744,7 +21796,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21744
21796
|
}), method(object({
|
|
21745
21797
|
deviceId: number(),
|
|
21746
21798
|
trackId: string(),
|
|
21747
|
-
|
|
21799
|
+
mediaIds: array(number().int()).min(1)
|
|
21748
21800
|
}), RetrainFrameSelectionSchema, {
|
|
21749
21801
|
kind: "mutation",
|
|
21750
21802
|
auth: "admin"
|
|
@@ -21812,7 +21864,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21812
21864
|
kind: "query",
|
|
21813
21865
|
auth: "admin"
|
|
21814
21866
|
}), method(object({
|
|
21815
|
-
|
|
21867
|
+
/** Which of the three event tables owns the row. */
|
|
21868
|
+
ownerType: EventOwnerTypeSchema,
|
|
21869
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
21870
|
+
eventId: number().int(),
|
|
21816
21871
|
kind: MediaFileKindEnum.optional(),
|
|
21817
21872
|
deviceId: number()
|
|
21818
21873
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -21823,7 +21878,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21823
21878
|
trackId: string(),
|
|
21824
21879
|
deviceId: number()
|
|
21825
21880
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
21826
|
-
|
|
21881
|
+
ownerType: EventOwnerTypeSchema,
|
|
21882
|
+
eventId: number().int(),
|
|
21827
21883
|
deviceId: number()
|
|
21828
21884
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
21829
21885
|
kind: "mutation",
|
|
@@ -27024,8 +27080,8 @@ var IdentitySchema = object({
|
|
|
27024
27080
|
id: string(),
|
|
27025
27081
|
name: string(),
|
|
27026
27082
|
sampleCount: number().int().nonnegative(),
|
|
27027
|
-
|
|
27028
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
27083
|
+
coverMediaId: number().int().optional(),
|
|
27084
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
27029
27085
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
27030
27086
|
coverBase64: string().optional()
|
|
27031
27087
|
});
|
|
@@ -27051,8 +27107,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
27051
27107
|
enrolledAt: number().int(),
|
|
27052
27108
|
deviceId: number().int().optional(),
|
|
27053
27109
|
source: _enum(["detected", "photo"]),
|
|
27054
|
-
/** The enrolled crop's media
|
|
27055
|
-
|
|
27110
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
27111
|
+
mediaId: number().int().optional(),
|
|
27056
27112
|
/**
|
|
27057
27113
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
27058
27114
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -27121,15 +27177,15 @@ var FaceInfoSchema = object({
|
|
|
27121
27177
|
*/
|
|
27122
27178
|
cropUrl: string().optional(),
|
|
27123
27179
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
27124
|
-
* view draw the box over the native `
|
|
27180
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
27125
27181
|
* legacy rows written before design B. */
|
|
27126
27182
|
faceBbox: BoundingBoxSchema.optional(),
|
|
27127
27183
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
27128
27184
|
* Fetch the native JPEG via the event-media data-plane
|
|
27129
|
-
* (`/addon/<addonId>/event-media/<
|
|
27185
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
27130
27186
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
27131
27187
|
* back to the inline `base64` face crop. */
|
|
27132
|
-
|
|
27188
|
+
keyFrameMediaId: number().int().optional(),
|
|
27133
27189
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
27134
27190
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
27135
27191
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -27198,11 +27254,14 @@ var FaceClusterSchema = object({
|
|
|
27198
27254
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27199
27255
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27200
27256
|
*
|
|
27201
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27202
|
-
* media
|
|
27257
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27258
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27259
|
+
* access decision.
|
|
27203
27260
|
*/
|
|
27204
27261
|
var MediaFileLiteSchema$1 = object({
|
|
27205
|
-
|
|
27262
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27263
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27264
|
+
mediaId: number().int(),
|
|
27206
27265
|
kind: string(),
|
|
27207
27266
|
url: string(),
|
|
27208
27267
|
sizeBytes: number(),
|
|
@@ -27219,7 +27278,7 @@ method(object({
|
|
|
27219
27278
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
27220
27279
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
27221
27280
|
*
|
|
27222
|
-
* Nothing loses its avatar: `
|
|
27281
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
27223
27282
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
27224
27283
|
*
|
|
27225
27284
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -30582,8 +30641,8 @@ var VehicleSchema = object({
|
|
|
30582
30641
|
id: string(),
|
|
30583
30642
|
name: string(),
|
|
30584
30643
|
sampleCount: number().int().nonnegative(),
|
|
30585
|
-
|
|
30586
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
30644
|
+
coverMediaId: number().int().optional(),
|
|
30645
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
30587
30646
|
coverBase64: string().optional()
|
|
30588
30647
|
});
|
|
30589
30648
|
var VehicleSampleInfoSchema = object({
|
|
@@ -30616,7 +30675,7 @@ var PlateInfoSchema = object({
|
|
|
30616
30675
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
30617
30676
|
plateBbox: BoundingBoxSchema.optional(),
|
|
30618
30677
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
30619
|
-
|
|
30678
|
+
keyFrameMediaId: number().int().optional(),
|
|
30620
30679
|
base64: string().optional(),
|
|
30621
30680
|
/**
|
|
30622
30681
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -30637,11 +30696,14 @@ var PlateInfoSchema = object({
|
|
|
30637
30696
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
30638
30697
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
30639
30698
|
*
|
|
30640
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
30641
|
-
* media
|
|
30699
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
30700
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
30701
|
+
* access decision.
|
|
30642
30702
|
*/
|
|
30643
30703
|
var MediaFileLiteSchema = object({
|
|
30644
|
-
|
|
30704
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
30705
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
30706
|
+
mediaId: number().int(),
|
|
30645
30707
|
kind: string(),
|
|
30646
30708
|
url: string(),
|
|
30647
30709
|
sizeBytes: number(),
|
|
@@ -30700,7 +30762,7 @@ method(object({
|
|
|
30700
30762
|
}), method(object({
|
|
30701
30763
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
30702
30764
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
30703
|
-
* option; `
|
|
30765
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
30704
30766
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
30705
30767
|
* resolves to `false` and is exactly the intended default. */
|
|
30706
30768
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -32269,7 +32331,14 @@ var SceneReferenceSchema = object({
|
|
|
32269
32331
|
modelId: string(),
|
|
32270
32332
|
condition: SceneConditionSchema,
|
|
32271
32333
|
capturedAt: number(),
|
|
32272
|
-
|
|
32334
|
+
/**
|
|
32335
|
+
* The reference thumbnail's media ROW id (D482).
|
|
32336
|
+
*
|
|
32337
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
32338
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
32339
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
32340
|
+
*/
|
|
32341
|
+
thumbnailMediaId: number().int().optional(),
|
|
32273
32342
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
32274
32343
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
32275
32344
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -34253,7 +34322,7 @@ var StationaryObjectSchema = object({
|
|
|
34253
34322
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
34254
34323
|
label: string().optional(),
|
|
34255
34324
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
34256
|
-
|
|
34325
|
+
keyFrameMediaId: number().int().optional()
|
|
34257
34326
|
});
|
|
34258
34327
|
var CameraOccupancySnapshotSchema = object({
|
|
34259
34328
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -36991,6 +37060,12 @@ Object.freeze({
|
|
|
36991
37060
|
addonId: null,
|
|
36992
37061
|
access: "create"
|
|
36993
37062
|
},
|
|
37063
|
+
"dataStoreProvider.upsert": {
|
|
37064
|
+
capName: "data-store-provider",
|
|
37065
|
+
capScope: "system",
|
|
37066
|
+
addonId: null,
|
|
37067
|
+
access: "create"
|
|
37068
|
+
},
|
|
36994
37069
|
"dayNight.getOptions": {
|
|
36995
37070
|
capName: "day-night",
|
|
36996
37071
|
capScope: "device",
|
|
@@ -40855,6 +40930,12 @@ Object.freeze({
|
|
|
40855
40930
|
addonId: null,
|
|
40856
40931
|
access: "create"
|
|
40857
40932
|
},
|
|
40933
|
+
"settingsStore.upsert": {
|
|
40934
|
+
capName: "settings-store",
|
|
40935
|
+
capScope: "system",
|
|
40936
|
+
addonId: null,
|
|
40937
|
+
access: "create"
|
|
40938
|
+
},
|
|
40858
40939
|
"smtpProvider.getStatus": {
|
|
40859
40940
|
capName: "smtp-provider",
|
|
40860
40941
|
capScope: "system",
|
package/package.json
CHANGED