@camstack/addon-matter-broker 0.2.98 → 0.2.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.js +131 -50
- package/dist/addon.mjs +131 -50
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -13,7 +13,7 @@ let node_stream_promises = require("node:stream/promises");
|
|
|
13
13
|
let node_net = require("node:net");
|
|
14
14
|
let node_dgram = require("node:dgram");
|
|
15
15
|
node_dgram = require_esm.__toESM(node_dgram, 1);
|
|
16
|
-
//#region ../types/dist/event-category-
|
|
16
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
17
17
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
18
18
|
EventCategory["SystemBoot"] = "system.boot";
|
|
19
19
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -574,7 +574,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
574
574
|
* a package zone — a newly-appeared stationary object of a package class
|
|
575
575
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
576
576
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
577
|
-
* entryId, className, zoneIds,
|
|
577
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
578
578
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
579
579
|
* this bus topic drives notifier rules + live UI. See
|
|
580
580
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5360,7 +5360,7 @@ var ZodIssueCode = {
|
|
|
5360
5360
|
var ZodFirstPartyTypeKind;
|
|
5361
5361
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5362
5362
|
//#endregion
|
|
5363
|
-
//#region ../types/dist/sleep-
|
|
5363
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5364
5364
|
/**
|
|
5365
5365
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5366
5366
|
* window to float samples (D455).
|
|
@@ -7327,13 +7327,30 @@ new Set([
|
|
|
7327
7327
|
"scene",
|
|
7328
7328
|
"motion",
|
|
7329
7329
|
"object",
|
|
7330
|
-
"audio"
|
|
7330
|
+
"audio",
|
|
7331
|
+
"mosaic"
|
|
7331
7332
|
]);
|
|
7332
|
-
|
|
7333
|
+
/**
|
|
7334
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7335
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7336
|
+
* does not re-spell the list and drift from it.
|
|
7337
|
+
*/
|
|
7338
|
+
var EVENT_OWNER_TYPES = [
|
|
7333
7339
|
"motion",
|
|
7334
7340
|
"object",
|
|
7335
7341
|
"audio"
|
|
7336
|
-
]
|
|
7342
|
+
];
|
|
7343
|
+
/**
|
|
7344
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7345
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7346
|
+
* `(table, id)`).
|
|
7347
|
+
*
|
|
7348
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7349
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7350
|
+
* nothing failing until a caller asked.
|
|
7351
|
+
*/
|
|
7352
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7353
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7337
7354
|
var EncodeProfileSchema = object({
|
|
7338
7355
|
video: object({
|
|
7339
7356
|
codec: _enum([
|
|
@@ -12581,6 +12598,16 @@ method(object({
|
|
|
12581
12598
|
filter: QueryFilterSchema.optional(),
|
|
12582
12599
|
columns: array(string$2()).readonly().optional()
|
|
12583
12600
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12601
|
+
namespace: string$2().optional(),
|
|
12602
|
+
collection: string$2(),
|
|
12603
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12604
|
+
* index on the collection. Never empty. */
|
|
12605
|
+
conflict: array(string$2()).readonly(),
|
|
12606
|
+
record: BulkRecordSchema
|
|
12607
|
+
}), object({
|
|
12608
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12609
|
+
* row's own id on an update. */
|
|
12610
|
+
id: union([string$2(), number()]) }), { kind: "mutation" }), method(object({
|
|
12584
12611
|
namespace: string$2().optional(),
|
|
12585
12612
|
collection: string$2(),
|
|
12586
12613
|
record: object({
|
|
@@ -12715,6 +12742,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12715
12742
|
id: union([string$2(), number()]) }), {
|
|
12716
12743
|
kind: "mutation",
|
|
12717
12744
|
auth: "admin"
|
|
12745
|
+
}), method(object({
|
|
12746
|
+
namespace: string$2().optional(),
|
|
12747
|
+
collection: string$2(),
|
|
12748
|
+
conflict: array(string$2()).readonly(),
|
|
12749
|
+
record: BulkRecordSchema
|
|
12750
|
+
}), object({ id: union([string$2(), number()]) }), {
|
|
12751
|
+
kind: "mutation",
|
|
12752
|
+
auth: "admin"
|
|
12718
12753
|
}), method(object({
|
|
12719
12754
|
namespace: string$2().optional(),
|
|
12720
12755
|
collection: string$2(),
|
|
@@ -19214,8 +19249,8 @@ var TrackPositionSchema = object({
|
|
|
19214
19249
|
var TrackSnapshotSchema = object({
|
|
19215
19250
|
timestamp: number(),
|
|
19216
19251
|
position: TrackPositionSchema,
|
|
19217
|
-
/**
|
|
19218
|
-
|
|
19252
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19253
|
+
mediaId: number().int()
|
|
19219
19254
|
});
|
|
19220
19255
|
/**
|
|
19221
19256
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19819,14 +19854,14 @@ var ObjectEventSchema = object({
|
|
|
19819
19854
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19820
19855
|
frameWidth: number().optional(),
|
|
19821
19856
|
frameHeight: number().optional(),
|
|
19822
|
-
/**
|
|
19823
|
-
|
|
19824
|
-
/** Design B:
|
|
19857
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19858
|
+
mediaId: number().int().optional(),
|
|
19859
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19825
19860
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19826
|
-
* (`/addon/<addonId>/event-media/<
|
|
19861
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19827
19862
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19828
|
-
* sources — consumers fall back to `
|
|
19829
|
-
|
|
19863
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19864
|
+
keyFrameMediaId: number().int().optional(),
|
|
19830
19865
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19831
19866
|
mediaUrl: string$2().optional(),
|
|
19832
19867
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19876,7 +19911,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19876
19911
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19877
19912
|
*
|
|
19878
19913
|
* `url` points at the `event-media` data plane
|
|
19879
|
-
* (`/addon/<addonId>/event-media/<
|
|
19914
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19880
19915
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19881
19916
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19882
19917
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19884,10 +19919,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19884
19919
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19885
19920
|
* (per-device scoping).
|
|
19886
19921
|
*
|
|
19887
|
-
* The URL is built from the row's
|
|
19888
|
-
*
|
|
19922
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19923
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19924
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19889
19925
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19890
|
-
* `faceCrop`/`plateCrop
|
|
19926
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19927
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19928
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19891
19929
|
*
|
|
19892
19930
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19893
19931
|
*
|
|
@@ -19900,7 +19938,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19900
19938
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19901
19939
|
*/
|
|
19902
19940
|
var MediaFileSchema = object({
|
|
19903
|
-
|
|
19941
|
+
/**
|
|
19942
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19943
|
+
*
|
|
19944
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19945
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19946
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19947
|
+
* different rows that spell the same number, and a track whose
|
|
19948
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19949
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19950
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19951
|
+
* at all.
|
|
19952
|
+
*/
|
|
19953
|
+
mediaId: number().int(),
|
|
19904
19954
|
kind: MediaFileKindEnum,
|
|
19905
19955
|
sizeBytes: number(),
|
|
19906
19956
|
timestamp: number()
|
|
@@ -20008,7 +20058,7 @@ var RetrainTrackSchema = object({
|
|
|
20008
20058
|
});
|
|
20009
20059
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
20010
20060
|
var RetrainFrameCandidateSchema = object({
|
|
20011
|
-
|
|
20061
|
+
mediaId: number().int(),
|
|
20012
20062
|
kind: MediaFileKindEnum,
|
|
20013
20063
|
timestamp: number(),
|
|
20014
20064
|
sizeBytes: number().int(),
|
|
@@ -20022,7 +20072,7 @@ var RetrainFrameSchema = object({
|
|
|
20022
20072
|
deviceId: number(),
|
|
20023
20073
|
trackId: string$2(),
|
|
20024
20074
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
20025
|
-
|
|
20075
|
+
sourceMediaId: number().int(),
|
|
20026
20076
|
sourceKind: MediaFileKindEnum,
|
|
20027
20077
|
sizeBytes: number().int(),
|
|
20028
20078
|
width: number().int(),
|
|
@@ -20038,7 +20088,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
20038
20088
|
var RetrainFrameSelectionSchema = object({
|
|
20039
20089
|
copied: array(RetrainFrameSchema).readonly(),
|
|
20040
20090
|
refused: array(object({
|
|
20041
|
-
|
|
20091
|
+
sourceMediaId: number().int(),
|
|
20042
20092
|
reason: RetrainCopyRefusalSchema
|
|
20043
20093
|
})).readonly()
|
|
20044
20094
|
});
|
|
@@ -20046,7 +20096,7 @@ var RetrainFrameListSchema = object({
|
|
|
20046
20096
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
20047
20097
|
copies: array(RetrainFrameSchema).readonly(),
|
|
20048
20098
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
20049
|
-
|
|
20099
|
+
autoPickMediaId: number().int().optional()
|
|
20050
20100
|
});
|
|
20051
20101
|
/** What the operator asked the assist to look for. */
|
|
20052
20102
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20141,9 +20191,11 @@ var RecentTracksQueryInput = object({
|
|
|
20141
20191
|
});
|
|
20142
20192
|
/**
|
|
20143
20193
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20144
|
-
* `
|
|
20145
|
-
* served by the event-media plane
|
|
20146
|
-
* member visible has been materialised
|
|
20194
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20195
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20196
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20197
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20198
|
+
* row once event ids became per-table rowids).
|
|
20147
20199
|
*/
|
|
20148
20200
|
var SummarySchema = object({
|
|
20149
20201
|
id: string$2(),
|
|
@@ -20152,7 +20204,7 @@ var SummarySchema = object({
|
|
|
20152
20204
|
lastActiveAt: number(),
|
|
20153
20205
|
sealedAt: number().nullable(),
|
|
20154
20206
|
memberCount: number().int().nonnegative(),
|
|
20155
|
-
|
|
20207
|
+
groupShotMediaId: number().int().nullable()
|
|
20156
20208
|
});
|
|
20157
20209
|
var SummariesQueryInput = object({
|
|
20158
20210
|
deviceIds: array(number()).min(1),
|
|
@@ -20706,7 +20758,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20706
20758
|
}), method(object({
|
|
20707
20759
|
deviceId: number(),
|
|
20708
20760
|
trackId: string$2(),
|
|
20709
|
-
|
|
20761
|
+
mediaIds: array(number().int()).min(1)
|
|
20710
20762
|
}), RetrainFrameSelectionSchema, {
|
|
20711
20763
|
kind: "mutation",
|
|
20712
20764
|
auth: "admin"
|
|
@@ -20774,7 +20826,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20774
20826
|
kind: "query",
|
|
20775
20827
|
auth: "admin"
|
|
20776
20828
|
}), method(object({
|
|
20777
|
-
|
|
20829
|
+
/** Which of the three event tables owns the row. */
|
|
20830
|
+
ownerType: EventOwnerTypeSchema,
|
|
20831
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20832
|
+
eventId: number().int(),
|
|
20778
20833
|
kind: MediaFileKindEnum.optional(),
|
|
20779
20834
|
deviceId: number()
|
|
20780
20835
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20785,7 +20840,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20785
20840
|
trackId: string$2(),
|
|
20786
20841
|
deviceId: number()
|
|
20787
20842
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20788
|
-
|
|
20843
|
+
ownerType: EventOwnerTypeSchema,
|
|
20844
|
+
eventId: number().int(),
|
|
20789
20845
|
deviceId: number()
|
|
20790
20846
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20791
20847
|
kind: "mutation",
|
|
@@ -25995,8 +26051,8 @@ var IdentitySchema = object({
|
|
|
25995
26051
|
id: string$2(),
|
|
25996
26052
|
name: string$2(),
|
|
25997
26053
|
sampleCount: number().int().nonnegative(),
|
|
25998
|
-
|
|
25999
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26054
|
+
coverMediaId: number().int().optional(),
|
|
26055
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26000
26056
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26001
26057
|
coverBase64: string$2().optional()
|
|
26002
26058
|
});
|
|
@@ -26022,8 +26078,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26022
26078
|
enrolledAt: number().int(),
|
|
26023
26079
|
deviceId: number().int().optional(),
|
|
26024
26080
|
source: _enum(["detected", "photo"]),
|
|
26025
|
-
/** The enrolled crop's media
|
|
26026
|
-
|
|
26081
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26082
|
+
mediaId: number().int().optional(),
|
|
26027
26083
|
/**
|
|
26028
26084
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26029
26085
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26092,15 +26148,15 @@ var FaceInfoSchema = object({
|
|
|
26092
26148
|
*/
|
|
26093
26149
|
cropUrl: string$2().optional(),
|
|
26094
26150
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26095
|
-
* view draw the box over the native `
|
|
26151
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26096
26152
|
* legacy rows written before design B. */
|
|
26097
26153
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26098
26154
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26099
26155
|
* Fetch the native JPEG via the event-media data-plane
|
|
26100
|
-
* (`/addon/<addonId>/event-media/<
|
|
26156
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26101
26157
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26102
26158
|
* back to the inline `base64` face crop. */
|
|
26103
|
-
|
|
26159
|
+
keyFrameMediaId: number().int().optional(),
|
|
26104
26160
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26105
26161
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26106
26162
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26169,11 +26225,14 @@ var FaceClusterSchema = object({
|
|
|
26169
26225
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26170
26226
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26171
26227
|
*
|
|
26172
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26173
|
-
* media
|
|
26228
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26229
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26230
|
+
* access decision.
|
|
26174
26231
|
*/
|
|
26175
26232
|
var MediaFileLiteSchema$1 = object({
|
|
26176
|
-
|
|
26233
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26234
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26235
|
+
mediaId: number().int(),
|
|
26177
26236
|
kind: string$2(),
|
|
26178
26237
|
url: string$2(),
|
|
26179
26238
|
sizeBytes: number(),
|
|
@@ -26190,7 +26249,7 @@ method(object({
|
|
|
26190
26249
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26191
26250
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26192
26251
|
*
|
|
26193
|
-
* Nothing loses its avatar: `
|
|
26252
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26194
26253
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26195
26254
|
*
|
|
26196
26255
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29553,8 +29612,8 @@ var VehicleSchema = object({
|
|
|
29553
29612
|
id: string$2(),
|
|
29554
29613
|
name: string$2(),
|
|
29555
29614
|
sampleCount: number().int().nonnegative(),
|
|
29556
|
-
|
|
29557
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29615
|
+
coverMediaId: number().int().optional(),
|
|
29616
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29558
29617
|
coverBase64: string$2().optional()
|
|
29559
29618
|
});
|
|
29560
29619
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29587,7 +29646,7 @@ var PlateInfoSchema = object({
|
|
|
29587
29646
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29588
29647
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29589
29648
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29590
|
-
|
|
29649
|
+
keyFrameMediaId: number().int().optional(),
|
|
29591
29650
|
base64: string$2().optional(),
|
|
29592
29651
|
/**
|
|
29593
29652
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29608,11 +29667,14 @@ var PlateInfoSchema = object({
|
|
|
29608
29667
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29609
29668
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29610
29669
|
*
|
|
29611
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29612
|
-
* media
|
|
29670
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29671
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29672
|
+
* access decision.
|
|
29613
29673
|
*/
|
|
29614
29674
|
var MediaFileLiteSchema = object({
|
|
29615
|
-
|
|
29675
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29676
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29677
|
+
mediaId: number().int(),
|
|
29616
29678
|
kind: string$2(),
|
|
29617
29679
|
url: string$2(),
|
|
29618
29680
|
sizeBytes: number(),
|
|
@@ -29671,7 +29733,7 @@ method(object({
|
|
|
29671
29733
|
}), method(object({
|
|
29672
29734
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29673
29735
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29674
|
-
* option; `
|
|
29736
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29675
29737
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29676
29738
|
* resolves to `false` and is exactly the intended default. */
|
|
29677
29739
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string$2().min(1) }), VehicleSchema, {
|
|
@@ -31240,7 +31302,14 @@ var SceneReferenceSchema = object({
|
|
|
31240
31302
|
modelId: string$2(),
|
|
31241
31303
|
condition: SceneConditionSchema,
|
|
31242
31304
|
capturedAt: number(),
|
|
31243
|
-
|
|
31305
|
+
/**
|
|
31306
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31307
|
+
*
|
|
31308
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31309
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31310
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31311
|
+
*/
|
|
31312
|
+
thumbnailMediaId: number().int().optional(),
|
|
31244
31313
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31245
31314
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31246
31315
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33224,7 +33293,7 @@ var StationaryObjectSchema = object({
|
|
|
33224
33293
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33225
33294
|
label: string$2().optional(),
|
|
33226
33295
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33227
|
-
|
|
33296
|
+
keyFrameMediaId: number().int().optional()
|
|
33228
33297
|
});
|
|
33229
33298
|
var CameraOccupancySnapshotSchema = object({
|
|
33230
33299
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -35962,6 +36031,12 @@ Object.freeze({
|
|
|
35962
36031
|
addonId: null,
|
|
35963
36032
|
access: "create"
|
|
35964
36033
|
},
|
|
36034
|
+
"dataStoreProvider.upsert": {
|
|
36035
|
+
capName: "data-store-provider",
|
|
36036
|
+
capScope: "system",
|
|
36037
|
+
addonId: null,
|
|
36038
|
+
access: "create"
|
|
36039
|
+
},
|
|
35965
36040
|
"dayNight.getOptions": {
|
|
35966
36041
|
capName: "day-night",
|
|
35967
36042
|
capScope: "device",
|
|
@@ -39826,6 +39901,12 @@ Object.freeze({
|
|
|
39826
39901
|
addonId: null,
|
|
39827
39902
|
access: "create"
|
|
39828
39903
|
},
|
|
39904
|
+
"settingsStore.upsert": {
|
|
39905
|
+
capName: "settings-store",
|
|
39906
|
+
capScope: "system",
|
|
39907
|
+
addonId: null,
|
|
39908
|
+
access: "create"
|
|
39909
|
+
},
|
|
39829
39910
|
"smtpProvider.getStatus": {
|
|
39830
39911
|
capName: "smtp-provider",
|
|
39831
39912
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -11,7 +11,7 @@ import { networkInterfaces, tmpdir, uptime } from "node:os";
|
|
|
11
11
|
import { finished } from "node:stream/promises";
|
|
12
12
|
import { createConnection, createServer as createServer$2 } from "node:net";
|
|
13
13
|
import * as dgram from "node:dgram";
|
|
14
|
-
//#region ../types/dist/event-category-
|
|
14
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
15
15
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
16
16
|
EventCategory["SystemBoot"] = "system.boot";
|
|
17
17
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -572,7 +572,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
572
572
|
* a package zone — a newly-appeared stationary object of a package class
|
|
573
573
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
574
574
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
575
|
-
* entryId, className, zoneIds,
|
|
575
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
576
576
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
577
577
|
* this bus topic drives notifier rules + live UI. See
|
|
578
578
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5358,7 +5358,7 @@ var ZodIssueCode = {
|
|
|
5358
5358
|
var ZodFirstPartyTypeKind;
|
|
5359
5359
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5360
5360
|
//#endregion
|
|
5361
|
-
//#region ../types/dist/sleep-
|
|
5361
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5362
5362
|
/**
|
|
5363
5363
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5364
5364
|
* window to float samples (D455).
|
|
@@ -7325,13 +7325,30 @@ new Set([
|
|
|
7325
7325
|
"scene",
|
|
7326
7326
|
"motion",
|
|
7327
7327
|
"object",
|
|
7328
|
-
"audio"
|
|
7328
|
+
"audio",
|
|
7329
|
+
"mosaic"
|
|
7329
7330
|
]);
|
|
7330
|
-
|
|
7331
|
+
/**
|
|
7332
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7333
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7334
|
+
* does not re-spell the list and drift from it.
|
|
7335
|
+
*/
|
|
7336
|
+
var EVENT_OWNER_TYPES = [
|
|
7331
7337
|
"motion",
|
|
7332
7338
|
"object",
|
|
7333
7339
|
"audio"
|
|
7334
|
-
]
|
|
7340
|
+
];
|
|
7341
|
+
/**
|
|
7342
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7343
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7344
|
+
* `(table, id)`).
|
|
7345
|
+
*
|
|
7346
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7347
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7348
|
+
* nothing failing until a caller asked.
|
|
7349
|
+
*/
|
|
7350
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7351
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7335
7352
|
var EncodeProfileSchema = object({
|
|
7336
7353
|
video: object({
|
|
7337
7354
|
codec: _enum([
|
|
@@ -12579,6 +12596,16 @@ method(object({
|
|
|
12579
12596
|
filter: QueryFilterSchema.optional(),
|
|
12580
12597
|
columns: array(string$2()).readonly().optional()
|
|
12581
12598
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12599
|
+
namespace: string$2().optional(),
|
|
12600
|
+
collection: string$2(),
|
|
12601
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12602
|
+
* index on the collection. Never empty. */
|
|
12603
|
+
conflict: array(string$2()).readonly(),
|
|
12604
|
+
record: BulkRecordSchema
|
|
12605
|
+
}), object({
|
|
12606
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12607
|
+
* row's own id on an update. */
|
|
12608
|
+
id: union([string$2(), number()]) }), { kind: "mutation" }), method(object({
|
|
12582
12609
|
namespace: string$2().optional(),
|
|
12583
12610
|
collection: string$2(),
|
|
12584
12611
|
record: object({
|
|
@@ -12713,6 +12740,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12713
12740
|
id: union([string$2(), number()]) }), {
|
|
12714
12741
|
kind: "mutation",
|
|
12715
12742
|
auth: "admin"
|
|
12743
|
+
}), method(object({
|
|
12744
|
+
namespace: string$2().optional(),
|
|
12745
|
+
collection: string$2(),
|
|
12746
|
+
conflict: array(string$2()).readonly(),
|
|
12747
|
+
record: BulkRecordSchema
|
|
12748
|
+
}), object({ id: union([string$2(), number()]) }), {
|
|
12749
|
+
kind: "mutation",
|
|
12750
|
+
auth: "admin"
|
|
12716
12751
|
}), method(object({
|
|
12717
12752
|
namespace: string$2().optional(),
|
|
12718
12753
|
collection: string$2(),
|
|
@@ -19212,8 +19247,8 @@ var TrackPositionSchema = object({
|
|
|
19212
19247
|
var TrackSnapshotSchema = object({
|
|
19213
19248
|
timestamp: number(),
|
|
19214
19249
|
position: TrackPositionSchema,
|
|
19215
|
-
/**
|
|
19216
|
-
|
|
19250
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19251
|
+
mediaId: number().int()
|
|
19217
19252
|
});
|
|
19218
19253
|
/**
|
|
19219
19254
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19817,14 +19852,14 @@ var ObjectEventSchema = object({
|
|
|
19817
19852
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19818
19853
|
frameWidth: number().optional(),
|
|
19819
19854
|
frameHeight: number().optional(),
|
|
19820
|
-
/**
|
|
19821
|
-
|
|
19822
|
-
/** Design B:
|
|
19855
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19856
|
+
mediaId: number().int().optional(),
|
|
19857
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19823
19858
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19824
|
-
* (`/addon/<addonId>/event-media/<
|
|
19859
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19825
19860
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19826
|
-
* sources — consumers fall back to `
|
|
19827
|
-
|
|
19861
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19862
|
+
keyFrameMediaId: number().int().optional(),
|
|
19828
19863
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19829
19864
|
mediaUrl: string$2().optional(),
|
|
19830
19865
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19874,7 +19909,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19874
19909
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19875
19910
|
*
|
|
19876
19911
|
* `url` points at the `event-media` data plane
|
|
19877
|
-
* (`/addon/<addonId>/event-media/<
|
|
19912
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19878
19913
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19879
19914
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19880
19915
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19882,10 +19917,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19882
19917
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19883
19918
|
* (per-device scoping).
|
|
19884
19919
|
*
|
|
19885
|
-
* The URL is built from the row's
|
|
19886
|
-
*
|
|
19920
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19921
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19922
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19887
19923
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19888
|
-
* `faceCrop`/`plateCrop
|
|
19924
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19925
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19926
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19889
19927
|
*
|
|
19890
19928
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19891
19929
|
*
|
|
@@ -19898,7 +19936,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19898
19936
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19899
19937
|
*/
|
|
19900
19938
|
var MediaFileSchema = object({
|
|
19901
|
-
|
|
19939
|
+
/**
|
|
19940
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19941
|
+
*
|
|
19942
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19943
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19944
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19945
|
+
* different rows that spell the same number, and a track whose
|
|
19946
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19947
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19948
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19949
|
+
* at all.
|
|
19950
|
+
*/
|
|
19951
|
+
mediaId: number().int(),
|
|
19902
19952
|
kind: MediaFileKindEnum,
|
|
19903
19953
|
sizeBytes: number(),
|
|
19904
19954
|
timestamp: number()
|
|
@@ -20006,7 +20056,7 @@ var RetrainTrackSchema = object({
|
|
|
20006
20056
|
});
|
|
20007
20057
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
20008
20058
|
var RetrainFrameCandidateSchema = object({
|
|
20009
|
-
|
|
20059
|
+
mediaId: number().int(),
|
|
20010
20060
|
kind: MediaFileKindEnum,
|
|
20011
20061
|
timestamp: number(),
|
|
20012
20062
|
sizeBytes: number().int(),
|
|
@@ -20020,7 +20070,7 @@ var RetrainFrameSchema = object({
|
|
|
20020
20070
|
deviceId: number(),
|
|
20021
20071
|
trackId: string$2(),
|
|
20022
20072
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
20023
|
-
|
|
20073
|
+
sourceMediaId: number().int(),
|
|
20024
20074
|
sourceKind: MediaFileKindEnum,
|
|
20025
20075
|
sizeBytes: number().int(),
|
|
20026
20076
|
width: number().int(),
|
|
@@ -20036,7 +20086,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
20036
20086
|
var RetrainFrameSelectionSchema = object({
|
|
20037
20087
|
copied: array(RetrainFrameSchema).readonly(),
|
|
20038
20088
|
refused: array(object({
|
|
20039
|
-
|
|
20089
|
+
sourceMediaId: number().int(),
|
|
20040
20090
|
reason: RetrainCopyRefusalSchema
|
|
20041
20091
|
})).readonly()
|
|
20042
20092
|
});
|
|
@@ -20044,7 +20094,7 @@ var RetrainFrameListSchema = object({
|
|
|
20044
20094
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
20045
20095
|
copies: array(RetrainFrameSchema).readonly(),
|
|
20046
20096
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
20047
|
-
|
|
20097
|
+
autoPickMediaId: number().int().optional()
|
|
20048
20098
|
});
|
|
20049
20099
|
/** What the operator asked the assist to look for. */
|
|
20050
20100
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20139,9 +20189,11 @@ var RecentTracksQueryInput = object({
|
|
|
20139
20189
|
});
|
|
20140
20190
|
/**
|
|
20141
20191
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20142
|
-
* `
|
|
20143
|
-
* served by the event-media plane
|
|
20144
|
-
* member visible has been materialised
|
|
20192
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20193
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20194
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20195
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20196
|
+
* row once event ids became per-table rowids).
|
|
20145
20197
|
*/
|
|
20146
20198
|
var SummarySchema = object({
|
|
20147
20199
|
id: string$2(),
|
|
@@ -20150,7 +20202,7 @@ var SummarySchema = object({
|
|
|
20150
20202
|
lastActiveAt: number(),
|
|
20151
20203
|
sealedAt: number().nullable(),
|
|
20152
20204
|
memberCount: number().int().nonnegative(),
|
|
20153
|
-
|
|
20205
|
+
groupShotMediaId: number().int().nullable()
|
|
20154
20206
|
});
|
|
20155
20207
|
var SummariesQueryInput = object({
|
|
20156
20208
|
deviceIds: array(number()).min(1),
|
|
@@ -20704,7 +20756,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20704
20756
|
}), method(object({
|
|
20705
20757
|
deviceId: number(),
|
|
20706
20758
|
trackId: string$2(),
|
|
20707
|
-
|
|
20759
|
+
mediaIds: array(number().int()).min(1)
|
|
20708
20760
|
}), RetrainFrameSelectionSchema, {
|
|
20709
20761
|
kind: "mutation",
|
|
20710
20762
|
auth: "admin"
|
|
@@ -20772,7 +20824,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20772
20824
|
kind: "query",
|
|
20773
20825
|
auth: "admin"
|
|
20774
20826
|
}), method(object({
|
|
20775
|
-
|
|
20827
|
+
/** Which of the three event tables owns the row. */
|
|
20828
|
+
ownerType: EventOwnerTypeSchema,
|
|
20829
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20830
|
+
eventId: number().int(),
|
|
20776
20831
|
kind: MediaFileKindEnum.optional(),
|
|
20777
20832
|
deviceId: number()
|
|
20778
20833
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20783,7 +20838,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20783
20838
|
trackId: string$2(),
|
|
20784
20839
|
deviceId: number()
|
|
20785
20840
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20786
|
-
|
|
20841
|
+
ownerType: EventOwnerTypeSchema,
|
|
20842
|
+
eventId: number().int(),
|
|
20787
20843
|
deviceId: number()
|
|
20788
20844
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20789
20845
|
kind: "mutation",
|
|
@@ -25993,8 +26049,8 @@ var IdentitySchema = object({
|
|
|
25993
26049
|
id: string$2(),
|
|
25994
26050
|
name: string$2(),
|
|
25995
26051
|
sampleCount: number().int().nonnegative(),
|
|
25996
|
-
|
|
25997
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26052
|
+
coverMediaId: number().int().optional(),
|
|
26053
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
25998
26054
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
25999
26055
|
coverBase64: string$2().optional()
|
|
26000
26056
|
});
|
|
@@ -26020,8 +26076,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26020
26076
|
enrolledAt: number().int(),
|
|
26021
26077
|
deviceId: number().int().optional(),
|
|
26022
26078
|
source: _enum(["detected", "photo"]),
|
|
26023
|
-
/** The enrolled crop's media
|
|
26024
|
-
|
|
26079
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26080
|
+
mediaId: number().int().optional(),
|
|
26025
26081
|
/**
|
|
26026
26082
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26027
26083
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26090,15 +26146,15 @@ var FaceInfoSchema = object({
|
|
|
26090
26146
|
*/
|
|
26091
26147
|
cropUrl: string$2().optional(),
|
|
26092
26148
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26093
|
-
* view draw the box over the native `
|
|
26149
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26094
26150
|
* legacy rows written before design B. */
|
|
26095
26151
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26096
26152
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26097
26153
|
* Fetch the native JPEG via the event-media data-plane
|
|
26098
|
-
* (`/addon/<addonId>/event-media/<
|
|
26154
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26099
26155
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26100
26156
|
* back to the inline `base64` face crop. */
|
|
26101
|
-
|
|
26157
|
+
keyFrameMediaId: number().int().optional(),
|
|
26102
26158
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26103
26159
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26104
26160
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26167,11 +26223,14 @@ var FaceClusterSchema = object({
|
|
|
26167
26223
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26168
26224
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26169
26225
|
*
|
|
26170
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26171
|
-
* media
|
|
26226
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26227
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26228
|
+
* access decision.
|
|
26172
26229
|
*/
|
|
26173
26230
|
var MediaFileLiteSchema$1 = object({
|
|
26174
|
-
|
|
26231
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26232
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26233
|
+
mediaId: number().int(),
|
|
26175
26234
|
kind: string$2(),
|
|
26176
26235
|
url: string$2(),
|
|
26177
26236
|
sizeBytes: number(),
|
|
@@ -26188,7 +26247,7 @@ method(object({
|
|
|
26188
26247
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26189
26248
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26190
26249
|
*
|
|
26191
|
-
* Nothing loses its avatar: `
|
|
26250
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26192
26251
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26193
26252
|
*
|
|
26194
26253
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29551,8 +29610,8 @@ var VehicleSchema = object({
|
|
|
29551
29610
|
id: string$2(),
|
|
29552
29611
|
name: string$2(),
|
|
29553
29612
|
sampleCount: number().int().nonnegative(),
|
|
29554
|
-
|
|
29555
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29613
|
+
coverMediaId: number().int().optional(),
|
|
29614
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29556
29615
|
coverBase64: string$2().optional()
|
|
29557
29616
|
});
|
|
29558
29617
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29585,7 +29644,7 @@ var PlateInfoSchema = object({
|
|
|
29585
29644
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29586
29645
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29587
29646
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29588
|
-
|
|
29647
|
+
keyFrameMediaId: number().int().optional(),
|
|
29589
29648
|
base64: string$2().optional(),
|
|
29590
29649
|
/**
|
|
29591
29650
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29606,11 +29665,14 @@ var PlateInfoSchema = object({
|
|
|
29606
29665
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29607
29666
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29608
29667
|
*
|
|
29609
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29610
|
-
* media
|
|
29668
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29669
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29670
|
+
* access decision.
|
|
29611
29671
|
*/
|
|
29612
29672
|
var MediaFileLiteSchema = object({
|
|
29613
|
-
|
|
29673
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29674
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29675
|
+
mediaId: number().int(),
|
|
29614
29676
|
kind: string$2(),
|
|
29615
29677
|
url: string$2(),
|
|
29616
29678
|
sizeBytes: number(),
|
|
@@ -29669,7 +29731,7 @@ method(object({
|
|
|
29669
29731
|
}), method(object({
|
|
29670
29732
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29671
29733
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29672
|
-
* option; `
|
|
29734
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29673
29735
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29674
29736
|
* resolves to `false` and is exactly the intended default. */
|
|
29675
29737
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string$2().min(1) }), VehicleSchema, {
|
|
@@ -31238,7 +31300,14 @@ var SceneReferenceSchema = object({
|
|
|
31238
31300
|
modelId: string$2(),
|
|
31239
31301
|
condition: SceneConditionSchema,
|
|
31240
31302
|
capturedAt: number(),
|
|
31241
|
-
|
|
31303
|
+
/**
|
|
31304
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31305
|
+
*
|
|
31306
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31307
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31308
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31309
|
+
*/
|
|
31310
|
+
thumbnailMediaId: number().int().optional(),
|
|
31242
31311
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31243
31312
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31244
31313
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33222,7 +33291,7 @@ var StationaryObjectSchema = object({
|
|
|
33222
33291
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33223
33292
|
label: string$2().optional(),
|
|
33224
33293
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33225
|
-
|
|
33294
|
+
keyFrameMediaId: number().int().optional()
|
|
33226
33295
|
});
|
|
33227
33296
|
var CameraOccupancySnapshotSchema = object({
|
|
33228
33297
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -35960,6 +36029,12 @@ Object.freeze({
|
|
|
35960
36029
|
addonId: null,
|
|
35961
36030
|
access: "create"
|
|
35962
36031
|
},
|
|
36032
|
+
"dataStoreProvider.upsert": {
|
|
36033
|
+
capName: "data-store-provider",
|
|
36034
|
+
capScope: "system",
|
|
36035
|
+
addonId: null,
|
|
36036
|
+
access: "create"
|
|
36037
|
+
},
|
|
35963
36038
|
"dayNight.getOptions": {
|
|
35964
36039
|
capName: "day-night",
|
|
35965
36040
|
capScope: "device",
|
|
@@ -39824,6 +39899,12 @@ Object.freeze({
|
|
|
39824
39899
|
addonId: null,
|
|
39825
39900
|
access: "create"
|
|
39826
39901
|
},
|
|
39902
|
+
"settingsStore.upsert": {
|
|
39903
|
+
capName: "settings-store",
|
|
39904
|
+
capScope: "system",
|
|
39905
|
+
addonId: null,
|
|
39906
|
+
access: "create"
|
|
39907
|
+
},
|
|
39827
39908
|
"smtpProvider.getStatus": {
|
|
39828
39909
|
capName: "smtp-provider",
|
|
39829
39910
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-matter-broker",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.99",
|
|
4
4
|
"description": "Matter broker addon for CamStack — owns a Matter fabric (commissioning + the long-lived controller) via the matter.js controller and brokers commissioned Matter nodes into CamStack",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|