@camstack/addon-provider-dreo 0.2.99 → 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
|
@@ -35,7 +35,7 @@ var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["modu
|
|
|
35
35
|
//#endregion
|
|
36
36
|
let crypto$1 = require("crypto");
|
|
37
37
|
let events = require("events");
|
|
38
|
-
//#region ../types/dist/event-category-
|
|
38
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
39
39
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
40
40
|
EventCategory["SystemBoot"] = "system.boot";
|
|
41
41
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -596,7 +596,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
596
596
|
* a package zone — a newly-appeared stationary object of a package class
|
|
597
597
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
598
598
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
599
|
-
* entryId, className, zoneIds,
|
|
599
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
600
600
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
601
601
|
* this bus topic drives notifier rules + live UI. See
|
|
602
602
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5382,7 +5382,7 @@ var ZodIssueCode = {
|
|
|
5382
5382
|
var ZodFirstPartyTypeKind;
|
|
5383
5383
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5384
5384
|
//#endregion
|
|
5385
|
-
//#region ../types/dist/sleep-
|
|
5385
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5386
5386
|
/**
|
|
5387
5387
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5388
5388
|
* window to float samples (D455).
|
|
@@ -7349,13 +7349,30 @@ new Set([
|
|
|
7349
7349
|
"scene",
|
|
7350
7350
|
"motion",
|
|
7351
7351
|
"object",
|
|
7352
|
-
"audio"
|
|
7352
|
+
"audio",
|
|
7353
|
+
"mosaic"
|
|
7353
7354
|
]);
|
|
7354
|
-
|
|
7355
|
+
/**
|
|
7356
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7357
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7358
|
+
* does not re-spell the list and drift from it.
|
|
7359
|
+
*/
|
|
7360
|
+
var EVENT_OWNER_TYPES = [
|
|
7355
7361
|
"motion",
|
|
7356
7362
|
"object",
|
|
7357
7363
|
"audio"
|
|
7358
|
-
]
|
|
7364
|
+
];
|
|
7365
|
+
/**
|
|
7366
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7367
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7368
|
+
* `(table, id)`).
|
|
7369
|
+
*
|
|
7370
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7371
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7372
|
+
* nothing failing until a caller asked.
|
|
7373
|
+
*/
|
|
7374
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7375
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7359
7376
|
var EncodeProfileSchema = object({
|
|
7360
7377
|
video: object({
|
|
7361
7378
|
codec: _enum([
|
|
@@ -12554,6 +12571,16 @@ method(object({
|
|
|
12554
12571
|
filter: QueryFilterSchema.optional(),
|
|
12555
12572
|
columns: array(string()).readonly().optional()
|
|
12556
12573
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12574
|
+
namespace: string().optional(),
|
|
12575
|
+
collection: string(),
|
|
12576
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12577
|
+
* index on the collection. Never empty. */
|
|
12578
|
+
conflict: array(string()).readonly(),
|
|
12579
|
+
record: BulkRecordSchema
|
|
12580
|
+
}), object({
|
|
12581
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12582
|
+
* row's own id on an update. */
|
|
12583
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12557
12584
|
namespace: string().optional(),
|
|
12558
12585
|
collection: string(),
|
|
12559
12586
|
record: object({
|
|
@@ -12688,6 +12715,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12688
12715
|
id: union([string(), number()]) }), {
|
|
12689
12716
|
kind: "mutation",
|
|
12690
12717
|
auth: "admin"
|
|
12718
|
+
}), method(object({
|
|
12719
|
+
namespace: string().optional(),
|
|
12720
|
+
collection: string(),
|
|
12721
|
+
conflict: array(string()).readonly(),
|
|
12722
|
+
record: BulkRecordSchema
|
|
12723
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12724
|
+
kind: "mutation",
|
|
12725
|
+
auth: "admin"
|
|
12691
12726
|
}), method(object({
|
|
12692
12727
|
namespace: string().optional(),
|
|
12693
12728
|
collection: string(),
|
|
@@ -19187,8 +19222,8 @@ var TrackPositionSchema = object({
|
|
|
19187
19222
|
var TrackSnapshotSchema = object({
|
|
19188
19223
|
timestamp: number(),
|
|
19189
19224
|
position: TrackPositionSchema,
|
|
19190
|
-
/**
|
|
19191
|
-
|
|
19225
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19226
|
+
mediaId: number().int()
|
|
19192
19227
|
});
|
|
19193
19228
|
/**
|
|
19194
19229
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19792,14 +19827,14 @@ var ObjectEventSchema = object({
|
|
|
19792
19827
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19793
19828
|
frameWidth: number().optional(),
|
|
19794
19829
|
frameHeight: number().optional(),
|
|
19795
|
-
/**
|
|
19796
|
-
|
|
19797
|
-
/** Design B:
|
|
19830
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19831
|
+
mediaId: number().int().optional(),
|
|
19832
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19798
19833
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19799
|
-
* (`/addon/<addonId>/event-media/<
|
|
19834
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19800
19835
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19801
|
-
* sources — consumers fall back to `
|
|
19802
|
-
|
|
19836
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19837
|
+
keyFrameMediaId: number().int().optional(),
|
|
19803
19838
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19804
19839
|
mediaUrl: string().optional(),
|
|
19805
19840
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19849,7 +19884,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19849
19884
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19850
19885
|
*
|
|
19851
19886
|
* `url` points at the `event-media` data plane
|
|
19852
|
-
* (`/addon/<addonId>/event-media/<
|
|
19887
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19853
19888
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19854
19889
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19855
19890
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19857,10 +19892,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19857
19892
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19858
19893
|
* (per-device scoping).
|
|
19859
19894
|
*
|
|
19860
|
-
* The URL is built from the row's
|
|
19861
|
-
*
|
|
19895
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19896
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19897
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19862
19898
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19863
|
-
* `faceCrop`/`plateCrop
|
|
19899
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19900
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19901
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19864
19902
|
*
|
|
19865
19903
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19866
19904
|
*
|
|
@@ -19873,7 +19911,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19873
19911
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19874
19912
|
*/
|
|
19875
19913
|
var MediaFileSchema = object({
|
|
19876
|
-
|
|
19914
|
+
/**
|
|
19915
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19916
|
+
*
|
|
19917
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19918
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19919
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19920
|
+
* different rows that spell the same number, and a track whose
|
|
19921
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19922
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19923
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19924
|
+
* at all.
|
|
19925
|
+
*/
|
|
19926
|
+
mediaId: number().int(),
|
|
19877
19927
|
kind: MediaFileKindEnum,
|
|
19878
19928
|
sizeBytes: number(),
|
|
19879
19929
|
timestamp: number()
|
|
@@ -19981,7 +20031,7 @@ var RetrainTrackSchema = object({
|
|
|
19981
20031
|
});
|
|
19982
20032
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19983
20033
|
var RetrainFrameCandidateSchema = object({
|
|
19984
|
-
|
|
20034
|
+
mediaId: number().int(),
|
|
19985
20035
|
kind: MediaFileKindEnum,
|
|
19986
20036
|
timestamp: number(),
|
|
19987
20037
|
sizeBytes: number().int(),
|
|
@@ -19995,7 +20045,7 @@ var RetrainFrameSchema = object({
|
|
|
19995
20045
|
deviceId: number(),
|
|
19996
20046
|
trackId: string(),
|
|
19997
20047
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19998
|
-
|
|
20048
|
+
sourceMediaId: number().int(),
|
|
19999
20049
|
sourceKind: MediaFileKindEnum,
|
|
20000
20050
|
sizeBytes: number().int(),
|
|
20001
20051
|
width: number().int(),
|
|
@@ -20011,7 +20061,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
20011
20061
|
var RetrainFrameSelectionSchema = object({
|
|
20012
20062
|
copied: array(RetrainFrameSchema).readonly(),
|
|
20013
20063
|
refused: array(object({
|
|
20014
|
-
|
|
20064
|
+
sourceMediaId: number().int(),
|
|
20015
20065
|
reason: RetrainCopyRefusalSchema
|
|
20016
20066
|
})).readonly()
|
|
20017
20067
|
});
|
|
@@ -20019,7 +20069,7 @@ var RetrainFrameListSchema = object({
|
|
|
20019
20069
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
20020
20070
|
copies: array(RetrainFrameSchema).readonly(),
|
|
20021
20071
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
20022
|
-
|
|
20072
|
+
autoPickMediaId: number().int().optional()
|
|
20023
20073
|
});
|
|
20024
20074
|
/** What the operator asked the assist to look for. */
|
|
20025
20075
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20114,9 +20164,11 @@ var RecentTracksQueryInput = object({
|
|
|
20114
20164
|
});
|
|
20115
20165
|
/**
|
|
20116
20166
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20117
|
-
* `
|
|
20118
|
-
* served by the event-media plane
|
|
20119
|
-
* member visible has been materialised
|
|
20167
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20168
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20169
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20170
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20171
|
+
* row once event ids became per-table rowids).
|
|
20120
20172
|
*/
|
|
20121
20173
|
var SummarySchema = object({
|
|
20122
20174
|
id: string(),
|
|
@@ -20125,7 +20177,7 @@ var SummarySchema = object({
|
|
|
20125
20177
|
lastActiveAt: number(),
|
|
20126
20178
|
sealedAt: number().nullable(),
|
|
20127
20179
|
memberCount: number().int().nonnegative(),
|
|
20128
|
-
|
|
20180
|
+
groupShotMediaId: number().int().nullable()
|
|
20129
20181
|
});
|
|
20130
20182
|
var SummariesQueryInput = object({
|
|
20131
20183
|
deviceIds: array(number()).min(1),
|
|
@@ -20679,7 +20731,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20679
20731
|
}), method(object({
|
|
20680
20732
|
deviceId: number(),
|
|
20681
20733
|
trackId: string(),
|
|
20682
|
-
|
|
20734
|
+
mediaIds: array(number().int()).min(1)
|
|
20683
20735
|
}), RetrainFrameSelectionSchema, {
|
|
20684
20736
|
kind: "mutation",
|
|
20685
20737
|
auth: "admin"
|
|
@@ -20747,7 +20799,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20747
20799
|
kind: "query",
|
|
20748
20800
|
auth: "admin"
|
|
20749
20801
|
}), method(object({
|
|
20750
|
-
|
|
20802
|
+
/** Which of the three event tables owns the row. */
|
|
20803
|
+
ownerType: EventOwnerTypeSchema,
|
|
20804
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20805
|
+
eventId: number().int(),
|
|
20751
20806
|
kind: MediaFileKindEnum.optional(),
|
|
20752
20807
|
deviceId: number()
|
|
20753
20808
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20758,7 +20813,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20758
20813
|
trackId: string(),
|
|
20759
20814
|
deviceId: number()
|
|
20760
20815
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20761
|
-
|
|
20816
|
+
ownerType: EventOwnerTypeSchema,
|
|
20817
|
+
eventId: number().int(),
|
|
20762
20818
|
deviceId: number()
|
|
20763
20819
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20764
20820
|
kind: "mutation",
|
|
@@ -25959,8 +26015,8 @@ var IdentitySchema = object({
|
|
|
25959
26015
|
id: string(),
|
|
25960
26016
|
name: string(),
|
|
25961
26017
|
sampleCount: number().int().nonnegative(),
|
|
25962
|
-
|
|
25963
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26018
|
+
coverMediaId: number().int().optional(),
|
|
26019
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
25964
26020
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
25965
26021
|
coverBase64: string().optional()
|
|
25966
26022
|
});
|
|
@@ -25986,8 +26042,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
25986
26042
|
enrolledAt: number().int(),
|
|
25987
26043
|
deviceId: number().int().optional(),
|
|
25988
26044
|
source: _enum(["detected", "photo"]),
|
|
25989
|
-
/** The enrolled crop's media
|
|
25990
|
-
|
|
26045
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26046
|
+
mediaId: number().int().optional(),
|
|
25991
26047
|
/**
|
|
25992
26048
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
25993
26049
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26056,15 +26112,15 @@ var FaceInfoSchema = object({
|
|
|
26056
26112
|
*/
|
|
26057
26113
|
cropUrl: string().optional(),
|
|
26058
26114
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26059
|
-
* view draw the box over the native `
|
|
26115
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26060
26116
|
* legacy rows written before design B. */
|
|
26061
26117
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26062
26118
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26063
26119
|
* Fetch the native JPEG via the event-media data-plane
|
|
26064
|
-
* (`/addon/<addonId>/event-media/<
|
|
26120
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26065
26121
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26066
26122
|
* back to the inline `base64` face crop. */
|
|
26067
|
-
|
|
26123
|
+
keyFrameMediaId: number().int().optional(),
|
|
26068
26124
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26069
26125
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26070
26126
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26133,11 +26189,14 @@ var FaceClusterSchema = object({
|
|
|
26133
26189
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26134
26190
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26135
26191
|
*
|
|
26136
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26137
|
-
* media
|
|
26192
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26193
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26194
|
+
* access decision.
|
|
26138
26195
|
*/
|
|
26139
26196
|
var MediaFileLiteSchema$1 = object({
|
|
26140
|
-
|
|
26197
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26198
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26199
|
+
mediaId: number().int(),
|
|
26141
26200
|
kind: string(),
|
|
26142
26201
|
url: string(),
|
|
26143
26202
|
sizeBytes: number(),
|
|
@@ -26154,7 +26213,7 @@ method(object({
|
|
|
26154
26213
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26155
26214
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26156
26215
|
*
|
|
26157
|
-
* Nothing loses its avatar: `
|
|
26216
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26158
26217
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26159
26218
|
*
|
|
26160
26219
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29517,8 +29576,8 @@ var VehicleSchema = object({
|
|
|
29517
29576
|
id: string(),
|
|
29518
29577
|
name: string(),
|
|
29519
29578
|
sampleCount: number().int().nonnegative(),
|
|
29520
|
-
|
|
29521
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29579
|
+
coverMediaId: number().int().optional(),
|
|
29580
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29522
29581
|
coverBase64: string().optional()
|
|
29523
29582
|
});
|
|
29524
29583
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29551,7 +29610,7 @@ var PlateInfoSchema = object({
|
|
|
29551
29610
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29552
29611
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29553
29612
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29554
|
-
|
|
29613
|
+
keyFrameMediaId: number().int().optional(),
|
|
29555
29614
|
base64: string().optional(),
|
|
29556
29615
|
/**
|
|
29557
29616
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29572,11 +29631,14 @@ var PlateInfoSchema = object({
|
|
|
29572
29631
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29573
29632
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29574
29633
|
*
|
|
29575
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29576
|
-
* media
|
|
29634
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29635
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29636
|
+
* access decision.
|
|
29577
29637
|
*/
|
|
29578
29638
|
var MediaFileLiteSchema = object({
|
|
29579
|
-
|
|
29639
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29640
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29641
|
+
mediaId: number().int(),
|
|
29580
29642
|
kind: string(),
|
|
29581
29643
|
url: string(),
|
|
29582
29644
|
sizeBytes: number(),
|
|
@@ -29635,7 +29697,7 @@ method(object({
|
|
|
29635
29697
|
}), method(object({
|
|
29636
29698
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29637
29699
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29638
|
-
* option; `
|
|
29700
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29639
29701
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29640
29702
|
* resolves to `false` and is exactly the intended default. */
|
|
29641
29703
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31204,7 +31266,14 @@ var SceneReferenceSchema = object({
|
|
|
31204
31266
|
modelId: string(),
|
|
31205
31267
|
condition: SceneConditionSchema,
|
|
31206
31268
|
capturedAt: number(),
|
|
31207
|
-
|
|
31269
|
+
/**
|
|
31270
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31271
|
+
*
|
|
31272
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31273
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31274
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31275
|
+
*/
|
|
31276
|
+
thumbnailMediaId: number().int().optional(),
|
|
31208
31277
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31209
31278
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31210
31279
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33188,7 +33257,7 @@ var StationaryObjectSchema = object({
|
|
|
33188
33257
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33189
33258
|
label: string().optional(),
|
|
33190
33259
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33191
|
-
|
|
33260
|
+
keyFrameMediaId: number().int().optional()
|
|
33192
33261
|
});
|
|
33193
33262
|
var CameraOccupancySnapshotSchema = object({
|
|
33194
33263
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -35926,6 +35995,12 @@ Object.freeze({
|
|
|
35926
35995
|
addonId: null,
|
|
35927
35996
|
access: "create"
|
|
35928
35997
|
},
|
|
35998
|
+
"dataStoreProvider.upsert": {
|
|
35999
|
+
capName: "data-store-provider",
|
|
36000
|
+
capScope: "system",
|
|
36001
|
+
addonId: null,
|
|
36002
|
+
access: "create"
|
|
36003
|
+
},
|
|
35929
36004
|
"dayNight.getOptions": {
|
|
35930
36005
|
capName: "day-night",
|
|
35931
36006
|
capScope: "device",
|
|
@@ -39790,6 +39865,12 @@ Object.freeze({
|
|
|
39790
39865
|
addonId: null,
|
|
39791
39866
|
access: "create"
|
|
39792
39867
|
},
|
|
39868
|
+
"settingsStore.upsert": {
|
|
39869
|
+
capName: "settings-store",
|
|
39870
|
+
capScope: "system",
|
|
39871
|
+
addonId: null,
|
|
39872
|
+
access: "create"
|
|
39873
|
+
},
|
|
39793
39874
|
"smtpProvider.getStatus": {
|
|
39794
39875
|
capName: "smtp-provider",
|
|
39795
39876
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -36,7 +36,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
36
36
|
var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
37
37
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
38
38
|
//#endregion
|
|
39
|
-
//#region ../types/dist/event-category-
|
|
39
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
40
40
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
41
41
|
EventCategory["SystemBoot"] = "system.boot";
|
|
42
42
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -597,7 +597,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
597
597
|
* a package zone — a newly-appeared stationary object of a package class
|
|
598
598
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
599
599
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
600
|
-
* entryId, className, zoneIds,
|
|
600
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
601
601
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
602
602
|
* this bus topic drives notifier rules + live UI. See
|
|
603
603
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5383,7 +5383,7 @@ var ZodIssueCode = {
|
|
|
5383
5383
|
var ZodFirstPartyTypeKind;
|
|
5384
5384
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5385
5385
|
//#endregion
|
|
5386
|
-
//#region ../types/dist/sleep-
|
|
5386
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5387
5387
|
/**
|
|
5388
5388
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5389
5389
|
* window to float samples (D455).
|
|
@@ -7350,13 +7350,30 @@ new Set([
|
|
|
7350
7350
|
"scene",
|
|
7351
7351
|
"motion",
|
|
7352
7352
|
"object",
|
|
7353
|
-
"audio"
|
|
7353
|
+
"audio",
|
|
7354
|
+
"mosaic"
|
|
7354
7355
|
]);
|
|
7355
|
-
|
|
7356
|
+
/**
|
|
7357
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7358
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7359
|
+
* does not re-spell the list and drift from it.
|
|
7360
|
+
*/
|
|
7361
|
+
var EVENT_OWNER_TYPES = [
|
|
7356
7362
|
"motion",
|
|
7357
7363
|
"object",
|
|
7358
7364
|
"audio"
|
|
7359
|
-
]
|
|
7365
|
+
];
|
|
7366
|
+
/**
|
|
7367
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7368
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7369
|
+
* `(table, id)`).
|
|
7370
|
+
*
|
|
7371
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7372
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7373
|
+
* nothing failing until a caller asked.
|
|
7374
|
+
*/
|
|
7375
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7376
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7360
7377
|
var EncodeProfileSchema = object({
|
|
7361
7378
|
video: object({
|
|
7362
7379
|
codec: _enum([
|
|
@@ -12555,6 +12572,16 @@ method(object({
|
|
|
12555
12572
|
filter: QueryFilterSchema.optional(),
|
|
12556
12573
|
columns: array(string()).readonly().optional()
|
|
12557
12574
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12575
|
+
namespace: string().optional(),
|
|
12576
|
+
collection: string(),
|
|
12577
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12578
|
+
* index on the collection. Never empty. */
|
|
12579
|
+
conflict: array(string()).readonly(),
|
|
12580
|
+
record: BulkRecordSchema
|
|
12581
|
+
}), object({
|
|
12582
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12583
|
+
* row's own id on an update. */
|
|
12584
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12558
12585
|
namespace: string().optional(),
|
|
12559
12586
|
collection: string(),
|
|
12560
12587
|
record: object({
|
|
@@ -12689,6 +12716,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12689
12716
|
id: union([string(), number()]) }), {
|
|
12690
12717
|
kind: "mutation",
|
|
12691
12718
|
auth: "admin"
|
|
12719
|
+
}), method(object({
|
|
12720
|
+
namespace: string().optional(),
|
|
12721
|
+
collection: string(),
|
|
12722
|
+
conflict: array(string()).readonly(),
|
|
12723
|
+
record: BulkRecordSchema
|
|
12724
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12725
|
+
kind: "mutation",
|
|
12726
|
+
auth: "admin"
|
|
12692
12727
|
}), method(object({
|
|
12693
12728
|
namespace: string().optional(),
|
|
12694
12729
|
collection: string(),
|
|
@@ -19188,8 +19223,8 @@ var TrackPositionSchema = object({
|
|
|
19188
19223
|
var TrackSnapshotSchema = object({
|
|
19189
19224
|
timestamp: number(),
|
|
19190
19225
|
position: TrackPositionSchema,
|
|
19191
|
-
/**
|
|
19192
|
-
|
|
19226
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19227
|
+
mediaId: number().int()
|
|
19193
19228
|
});
|
|
19194
19229
|
/**
|
|
19195
19230
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19793,14 +19828,14 @@ var ObjectEventSchema = object({
|
|
|
19793
19828
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19794
19829
|
frameWidth: number().optional(),
|
|
19795
19830
|
frameHeight: number().optional(),
|
|
19796
|
-
/**
|
|
19797
|
-
|
|
19798
|
-
/** Design B:
|
|
19831
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19832
|
+
mediaId: number().int().optional(),
|
|
19833
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19799
19834
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19800
|
-
* (`/addon/<addonId>/event-media/<
|
|
19835
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19801
19836
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19802
|
-
* sources — consumers fall back to `
|
|
19803
|
-
|
|
19837
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19838
|
+
keyFrameMediaId: number().int().optional(),
|
|
19804
19839
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19805
19840
|
mediaUrl: string().optional(),
|
|
19806
19841
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19850,7 +19885,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19850
19885
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19851
19886
|
*
|
|
19852
19887
|
* `url` points at the `event-media` data plane
|
|
19853
|
-
* (`/addon/<addonId>/event-media/<
|
|
19888
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19854
19889
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19855
19890
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19856
19891
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19858,10 +19893,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19858
19893
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19859
19894
|
* (per-device scoping).
|
|
19860
19895
|
*
|
|
19861
|
-
* The URL is built from the row's
|
|
19862
|
-
*
|
|
19896
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19897
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19898
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19863
19899
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19864
|
-
* `faceCrop`/`plateCrop
|
|
19900
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19901
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19902
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19865
19903
|
*
|
|
19866
19904
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19867
19905
|
*
|
|
@@ -19874,7 +19912,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19874
19912
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19875
19913
|
*/
|
|
19876
19914
|
var MediaFileSchema = object({
|
|
19877
|
-
|
|
19915
|
+
/**
|
|
19916
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19917
|
+
*
|
|
19918
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19919
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19920
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19921
|
+
* different rows that spell the same number, and a track whose
|
|
19922
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19923
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19924
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19925
|
+
* at all.
|
|
19926
|
+
*/
|
|
19927
|
+
mediaId: number().int(),
|
|
19878
19928
|
kind: MediaFileKindEnum,
|
|
19879
19929
|
sizeBytes: number(),
|
|
19880
19930
|
timestamp: number()
|
|
@@ -19982,7 +20032,7 @@ var RetrainTrackSchema = object({
|
|
|
19982
20032
|
});
|
|
19983
20033
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19984
20034
|
var RetrainFrameCandidateSchema = object({
|
|
19985
|
-
|
|
20035
|
+
mediaId: number().int(),
|
|
19986
20036
|
kind: MediaFileKindEnum,
|
|
19987
20037
|
timestamp: number(),
|
|
19988
20038
|
sizeBytes: number().int(),
|
|
@@ -19996,7 +20046,7 @@ var RetrainFrameSchema = object({
|
|
|
19996
20046
|
deviceId: number(),
|
|
19997
20047
|
trackId: string(),
|
|
19998
20048
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19999
|
-
|
|
20049
|
+
sourceMediaId: number().int(),
|
|
20000
20050
|
sourceKind: MediaFileKindEnum,
|
|
20001
20051
|
sizeBytes: number().int(),
|
|
20002
20052
|
width: number().int(),
|
|
@@ -20012,7 +20062,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
20012
20062
|
var RetrainFrameSelectionSchema = object({
|
|
20013
20063
|
copied: array(RetrainFrameSchema).readonly(),
|
|
20014
20064
|
refused: array(object({
|
|
20015
|
-
|
|
20065
|
+
sourceMediaId: number().int(),
|
|
20016
20066
|
reason: RetrainCopyRefusalSchema
|
|
20017
20067
|
})).readonly()
|
|
20018
20068
|
});
|
|
@@ -20020,7 +20070,7 @@ var RetrainFrameListSchema = object({
|
|
|
20020
20070
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
20021
20071
|
copies: array(RetrainFrameSchema).readonly(),
|
|
20022
20072
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
20023
|
-
|
|
20073
|
+
autoPickMediaId: number().int().optional()
|
|
20024
20074
|
});
|
|
20025
20075
|
/** What the operator asked the assist to look for. */
|
|
20026
20076
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20115,9 +20165,11 @@ var RecentTracksQueryInput = object({
|
|
|
20115
20165
|
});
|
|
20116
20166
|
/**
|
|
20117
20167
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20118
|
-
* `
|
|
20119
|
-
* served by the event-media plane
|
|
20120
|
-
* member visible has been materialised
|
|
20168
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20169
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20170
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20171
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20172
|
+
* row once event ids became per-table rowids).
|
|
20121
20173
|
*/
|
|
20122
20174
|
var SummarySchema = object({
|
|
20123
20175
|
id: string(),
|
|
@@ -20126,7 +20178,7 @@ var SummarySchema = object({
|
|
|
20126
20178
|
lastActiveAt: number(),
|
|
20127
20179
|
sealedAt: number().nullable(),
|
|
20128
20180
|
memberCount: number().int().nonnegative(),
|
|
20129
|
-
|
|
20181
|
+
groupShotMediaId: number().int().nullable()
|
|
20130
20182
|
});
|
|
20131
20183
|
var SummariesQueryInput = object({
|
|
20132
20184
|
deviceIds: array(number()).min(1),
|
|
@@ -20680,7 +20732,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20680
20732
|
}), method(object({
|
|
20681
20733
|
deviceId: number(),
|
|
20682
20734
|
trackId: string(),
|
|
20683
|
-
|
|
20735
|
+
mediaIds: array(number().int()).min(1)
|
|
20684
20736
|
}), RetrainFrameSelectionSchema, {
|
|
20685
20737
|
kind: "mutation",
|
|
20686
20738
|
auth: "admin"
|
|
@@ -20748,7 +20800,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20748
20800
|
kind: "query",
|
|
20749
20801
|
auth: "admin"
|
|
20750
20802
|
}), method(object({
|
|
20751
|
-
|
|
20803
|
+
/** Which of the three event tables owns the row. */
|
|
20804
|
+
ownerType: EventOwnerTypeSchema,
|
|
20805
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20806
|
+
eventId: number().int(),
|
|
20752
20807
|
kind: MediaFileKindEnum.optional(),
|
|
20753
20808
|
deviceId: number()
|
|
20754
20809
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20759,7 +20814,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20759
20814
|
trackId: string(),
|
|
20760
20815
|
deviceId: number()
|
|
20761
20816
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20762
|
-
|
|
20817
|
+
ownerType: EventOwnerTypeSchema,
|
|
20818
|
+
eventId: number().int(),
|
|
20763
20819
|
deviceId: number()
|
|
20764
20820
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20765
20821
|
kind: "mutation",
|
|
@@ -25960,8 +26016,8 @@ var IdentitySchema = object({
|
|
|
25960
26016
|
id: string(),
|
|
25961
26017
|
name: string(),
|
|
25962
26018
|
sampleCount: number().int().nonnegative(),
|
|
25963
|
-
|
|
25964
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26019
|
+
coverMediaId: number().int().optional(),
|
|
26020
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
25965
26021
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
25966
26022
|
coverBase64: string().optional()
|
|
25967
26023
|
});
|
|
@@ -25987,8 +26043,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
25987
26043
|
enrolledAt: number().int(),
|
|
25988
26044
|
deviceId: number().int().optional(),
|
|
25989
26045
|
source: _enum(["detected", "photo"]),
|
|
25990
|
-
/** The enrolled crop's media
|
|
25991
|
-
|
|
26046
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26047
|
+
mediaId: number().int().optional(),
|
|
25992
26048
|
/**
|
|
25993
26049
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
25994
26050
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26057,15 +26113,15 @@ var FaceInfoSchema = object({
|
|
|
26057
26113
|
*/
|
|
26058
26114
|
cropUrl: string().optional(),
|
|
26059
26115
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26060
|
-
* view draw the box over the native `
|
|
26116
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26061
26117
|
* legacy rows written before design B. */
|
|
26062
26118
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26063
26119
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26064
26120
|
* Fetch the native JPEG via the event-media data-plane
|
|
26065
|
-
* (`/addon/<addonId>/event-media/<
|
|
26121
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26066
26122
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26067
26123
|
* back to the inline `base64` face crop. */
|
|
26068
|
-
|
|
26124
|
+
keyFrameMediaId: number().int().optional(),
|
|
26069
26125
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26070
26126
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26071
26127
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26134,11 +26190,14 @@ var FaceClusterSchema = object({
|
|
|
26134
26190
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26135
26191
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26136
26192
|
*
|
|
26137
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26138
|
-
* media
|
|
26193
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26194
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26195
|
+
* access decision.
|
|
26139
26196
|
*/
|
|
26140
26197
|
var MediaFileLiteSchema$1 = object({
|
|
26141
|
-
|
|
26198
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26199
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26200
|
+
mediaId: number().int(),
|
|
26142
26201
|
kind: string(),
|
|
26143
26202
|
url: string(),
|
|
26144
26203
|
sizeBytes: number(),
|
|
@@ -26155,7 +26214,7 @@ method(object({
|
|
|
26155
26214
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26156
26215
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26157
26216
|
*
|
|
26158
|
-
* Nothing loses its avatar: `
|
|
26217
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26159
26218
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26160
26219
|
*
|
|
26161
26220
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29518,8 +29577,8 @@ var VehicleSchema = object({
|
|
|
29518
29577
|
id: string(),
|
|
29519
29578
|
name: string(),
|
|
29520
29579
|
sampleCount: number().int().nonnegative(),
|
|
29521
|
-
|
|
29522
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29580
|
+
coverMediaId: number().int().optional(),
|
|
29581
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29523
29582
|
coverBase64: string().optional()
|
|
29524
29583
|
});
|
|
29525
29584
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29552,7 +29611,7 @@ var PlateInfoSchema = object({
|
|
|
29552
29611
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29553
29612
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29554
29613
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29555
|
-
|
|
29614
|
+
keyFrameMediaId: number().int().optional(),
|
|
29556
29615
|
base64: string().optional(),
|
|
29557
29616
|
/**
|
|
29558
29617
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29573,11 +29632,14 @@ var PlateInfoSchema = object({
|
|
|
29573
29632
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29574
29633
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29575
29634
|
*
|
|
29576
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29577
|
-
* media
|
|
29635
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29636
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29637
|
+
* access decision.
|
|
29578
29638
|
*/
|
|
29579
29639
|
var MediaFileLiteSchema = object({
|
|
29580
|
-
|
|
29640
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29641
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29642
|
+
mediaId: number().int(),
|
|
29581
29643
|
kind: string(),
|
|
29582
29644
|
url: string(),
|
|
29583
29645
|
sizeBytes: number(),
|
|
@@ -29636,7 +29698,7 @@ method(object({
|
|
|
29636
29698
|
}), method(object({
|
|
29637
29699
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29638
29700
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29639
|
-
* option; `
|
|
29701
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29640
29702
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29641
29703
|
* resolves to `false` and is exactly the intended default. */
|
|
29642
29704
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31205,7 +31267,14 @@ var SceneReferenceSchema = object({
|
|
|
31205
31267
|
modelId: string(),
|
|
31206
31268
|
condition: SceneConditionSchema,
|
|
31207
31269
|
capturedAt: number(),
|
|
31208
|
-
|
|
31270
|
+
/**
|
|
31271
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31272
|
+
*
|
|
31273
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31274
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31275
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31276
|
+
*/
|
|
31277
|
+
thumbnailMediaId: number().int().optional(),
|
|
31209
31278
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31210
31279
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31211
31280
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33189,7 +33258,7 @@ var StationaryObjectSchema = object({
|
|
|
33189
33258
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33190
33259
|
label: string().optional(),
|
|
33191
33260
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33192
|
-
|
|
33261
|
+
keyFrameMediaId: number().int().optional()
|
|
33193
33262
|
});
|
|
33194
33263
|
var CameraOccupancySnapshotSchema = object({
|
|
33195
33264
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -35927,6 +35996,12 @@ Object.freeze({
|
|
|
35927
35996
|
addonId: null,
|
|
35928
35997
|
access: "create"
|
|
35929
35998
|
},
|
|
35999
|
+
"dataStoreProvider.upsert": {
|
|
36000
|
+
capName: "data-store-provider",
|
|
36001
|
+
capScope: "system",
|
|
36002
|
+
addonId: null,
|
|
36003
|
+
access: "create"
|
|
36004
|
+
},
|
|
35930
36005
|
"dayNight.getOptions": {
|
|
35931
36006
|
capName: "day-night",
|
|
35932
36007
|
capScope: "device",
|
|
@@ -39791,6 +39866,12 @@ Object.freeze({
|
|
|
39791
39866
|
addonId: null,
|
|
39792
39867
|
access: "create"
|
|
39793
39868
|
},
|
|
39869
|
+
"settingsStore.upsert": {
|
|
39870
|
+
capName: "settings-store",
|
|
39871
|
+
capScope: "system",
|
|
39872
|
+
addonId: null,
|
|
39873
|
+
access: "create"
|
|
39874
|
+
},
|
|
39794
39875
|
"smtpProvider.getStatus": {
|
|
39795
39876
|
capName: "smtp-provider",
|
|
39796
39877
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-dreo",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.100",
|
|
4
4
|
"description": "Dreo smart-device (fan / air-circulator / purifier / heater / humidifier) device-provider addon for CamStack — wraps the @apocaliss92/nodedreo Dreo cloud client (REST + WebSocket)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|