@camstack/addon-provider-wyze 0.2.103 → 0.2.104
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
|
@@ -31,7 +31,7 @@ let net = require("net");
|
|
|
31
31
|
net = __toESM(net, 1);
|
|
32
32
|
let node_child_process = require("node:child_process");
|
|
33
33
|
let node_tls = require("node:tls");
|
|
34
|
-
//#region ../types/dist/event-category-
|
|
34
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
35
35
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
36
36
|
EventCategory["SystemBoot"] = "system.boot";
|
|
37
37
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -592,7 +592,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
592
592
|
* a package zone — a newly-appeared stationary object of a package class
|
|
593
593
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
594
594
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
595
|
-
* entryId, className, zoneIds,
|
|
595
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
596
596
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
597
597
|
* this bus topic drives notifier rules + live UI. See
|
|
598
598
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5378,7 +5378,7 @@ var ZodIssueCode = {
|
|
|
5378
5378
|
var ZodFirstPartyTypeKind;
|
|
5379
5379
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5380
5380
|
//#endregion
|
|
5381
|
-
//#region ../types/dist/sleep-
|
|
5381
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5382
5382
|
/**
|
|
5383
5383
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5384
5384
|
* window to float samples (D455).
|
|
@@ -7345,13 +7345,30 @@ new Set([
|
|
|
7345
7345
|
"scene",
|
|
7346
7346
|
"motion",
|
|
7347
7347
|
"object",
|
|
7348
|
-
"audio"
|
|
7348
|
+
"audio",
|
|
7349
|
+
"mosaic"
|
|
7349
7350
|
]);
|
|
7350
|
-
|
|
7351
|
+
/**
|
|
7352
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7353
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7354
|
+
* does not re-spell the list and drift from it.
|
|
7355
|
+
*/
|
|
7356
|
+
var EVENT_OWNER_TYPES = [
|
|
7351
7357
|
"motion",
|
|
7352
7358
|
"object",
|
|
7353
7359
|
"audio"
|
|
7354
|
-
]
|
|
7360
|
+
];
|
|
7361
|
+
/**
|
|
7362
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7363
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7364
|
+
* `(table, id)`).
|
|
7365
|
+
*
|
|
7366
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7367
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7368
|
+
* nothing failing until a caller asked.
|
|
7369
|
+
*/
|
|
7370
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7371
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7355
7372
|
var EncodeProfileSchema = object({
|
|
7356
7373
|
video: object({
|
|
7357
7374
|
codec: _enum([
|
|
@@ -12550,6 +12567,16 @@ method(object({
|
|
|
12550
12567
|
filter: QueryFilterSchema.optional(),
|
|
12551
12568
|
columns: array(string()).readonly().optional()
|
|
12552
12569
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12570
|
+
namespace: string().optional(),
|
|
12571
|
+
collection: string(),
|
|
12572
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12573
|
+
* index on the collection. Never empty. */
|
|
12574
|
+
conflict: array(string()).readonly(),
|
|
12575
|
+
record: BulkRecordSchema
|
|
12576
|
+
}), object({
|
|
12577
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12578
|
+
* row's own id on an update. */
|
|
12579
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12553
12580
|
namespace: string().optional(),
|
|
12554
12581
|
collection: string(),
|
|
12555
12582
|
record: object({
|
|
@@ -12684,6 +12711,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12684
12711
|
id: union([string(), number()]) }), {
|
|
12685
12712
|
kind: "mutation",
|
|
12686
12713
|
auth: "admin"
|
|
12714
|
+
}), method(object({
|
|
12715
|
+
namespace: string().optional(),
|
|
12716
|
+
collection: string(),
|
|
12717
|
+
conflict: array(string()).readonly(),
|
|
12718
|
+
record: BulkRecordSchema
|
|
12719
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12720
|
+
kind: "mutation",
|
|
12721
|
+
auth: "admin"
|
|
12687
12722
|
}), method(object({
|
|
12688
12723
|
namespace: string().optional(),
|
|
12689
12724
|
collection: string(),
|
|
@@ -19183,8 +19218,8 @@ var TrackPositionSchema = object({
|
|
|
19183
19218
|
var TrackSnapshotSchema = object({
|
|
19184
19219
|
timestamp: number(),
|
|
19185
19220
|
position: TrackPositionSchema,
|
|
19186
|
-
/**
|
|
19187
|
-
|
|
19221
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19222
|
+
mediaId: number().int()
|
|
19188
19223
|
});
|
|
19189
19224
|
/**
|
|
19190
19225
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19788,14 +19823,14 @@ var ObjectEventSchema = object({
|
|
|
19788
19823
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19789
19824
|
frameWidth: number().optional(),
|
|
19790
19825
|
frameHeight: number().optional(),
|
|
19791
|
-
/**
|
|
19792
|
-
|
|
19793
|
-
/** Design B:
|
|
19826
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19827
|
+
mediaId: number().int().optional(),
|
|
19828
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19794
19829
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19795
|
-
* (`/addon/<addonId>/event-media/<
|
|
19830
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19796
19831
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19797
|
-
* sources — consumers fall back to `
|
|
19798
|
-
|
|
19832
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19833
|
+
keyFrameMediaId: number().int().optional(),
|
|
19799
19834
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19800
19835
|
mediaUrl: string().optional(),
|
|
19801
19836
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19845,7 +19880,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19845
19880
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19846
19881
|
*
|
|
19847
19882
|
* `url` points at the `event-media` data plane
|
|
19848
|
-
* (`/addon/<addonId>/event-media/<
|
|
19883
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19849
19884
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19850
19885
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19851
19886
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19853,10 +19888,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19853
19888
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19854
19889
|
* (per-device scoping).
|
|
19855
19890
|
*
|
|
19856
|
-
* The URL is built from the row's
|
|
19857
|
-
*
|
|
19891
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19892
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19893
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19858
19894
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19859
|
-
* `faceCrop`/`plateCrop
|
|
19895
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19896
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19897
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19860
19898
|
*
|
|
19861
19899
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19862
19900
|
*
|
|
@@ -19869,7 +19907,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19869
19907
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19870
19908
|
*/
|
|
19871
19909
|
var MediaFileSchema = object({
|
|
19872
|
-
|
|
19910
|
+
/**
|
|
19911
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19912
|
+
*
|
|
19913
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19914
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19915
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19916
|
+
* different rows that spell the same number, and a track whose
|
|
19917
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19918
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19919
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19920
|
+
* at all.
|
|
19921
|
+
*/
|
|
19922
|
+
mediaId: number().int(),
|
|
19873
19923
|
kind: MediaFileKindEnum,
|
|
19874
19924
|
sizeBytes: number(),
|
|
19875
19925
|
timestamp: number()
|
|
@@ -19977,7 +20027,7 @@ var RetrainTrackSchema = object({
|
|
|
19977
20027
|
});
|
|
19978
20028
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19979
20029
|
var RetrainFrameCandidateSchema = object({
|
|
19980
|
-
|
|
20030
|
+
mediaId: number().int(),
|
|
19981
20031
|
kind: MediaFileKindEnum,
|
|
19982
20032
|
timestamp: number(),
|
|
19983
20033
|
sizeBytes: number().int(),
|
|
@@ -19991,7 +20041,7 @@ var RetrainFrameSchema = object({
|
|
|
19991
20041
|
deviceId: number(),
|
|
19992
20042
|
trackId: string(),
|
|
19993
20043
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19994
|
-
|
|
20044
|
+
sourceMediaId: number().int(),
|
|
19995
20045
|
sourceKind: MediaFileKindEnum,
|
|
19996
20046
|
sizeBytes: number().int(),
|
|
19997
20047
|
width: number().int(),
|
|
@@ -20007,7 +20057,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
20007
20057
|
var RetrainFrameSelectionSchema = object({
|
|
20008
20058
|
copied: array(RetrainFrameSchema).readonly(),
|
|
20009
20059
|
refused: array(object({
|
|
20010
|
-
|
|
20060
|
+
sourceMediaId: number().int(),
|
|
20011
20061
|
reason: RetrainCopyRefusalSchema
|
|
20012
20062
|
})).readonly()
|
|
20013
20063
|
});
|
|
@@ -20015,7 +20065,7 @@ var RetrainFrameListSchema = object({
|
|
|
20015
20065
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
20016
20066
|
copies: array(RetrainFrameSchema).readonly(),
|
|
20017
20067
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
20018
|
-
|
|
20068
|
+
autoPickMediaId: number().int().optional()
|
|
20019
20069
|
});
|
|
20020
20070
|
/** What the operator asked the assist to look for. */
|
|
20021
20071
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20110,9 +20160,11 @@ var RecentTracksQueryInput = object({
|
|
|
20110
20160
|
});
|
|
20111
20161
|
/**
|
|
20112
20162
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20113
|
-
* `
|
|
20114
|
-
* served by the event-media plane
|
|
20115
|
-
* member visible has been materialised
|
|
20163
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20164
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20165
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20166
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20167
|
+
* row once event ids became per-table rowids).
|
|
20116
20168
|
*/
|
|
20117
20169
|
var SummarySchema = object({
|
|
20118
20170
|
id: string(),
|
|
@@ -20121,7 +20173,7 @@ var SummarySchema = object({
|
|
|
20121
20173
|
lastActiveAt: number(),
|
|
20122
20174
|
sealedAt: number().nullable(),
|
|
20123
20175
|
memberCount: number().int().nonnegative(),
|
|
20124
|
-
|
|
20176
|
+
groupShotMediaId: number().int().nullable()
|
|
20125
20177
|
});
|
|
20126
20178
|
var SummariesQueryInput = object({
|
|
20127
20179
|
deviceIds: array(number()).min(1),
|
|
@@ -20675,7 +20727,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20675
20727
|
}), method(object({
|
|
20676
20728
|
deviceId: number(),
|
|
20677
20729
|
trackId: string(),
|
|
20678
|
-
|
|
20730
|
+
mediaIds: array(number().int()).min(1)
|
|
20679
20731
|
}), RetrainFrameSelectionSchema, {
|
|
20680
20732
|
kind: "mutation",
|
|
20681
20733
|
auth: "admin"
|
|
@@ -20743,7 +20795,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20743
20795
|
kind: "query",
|
|
20744
20796
|
auth: "admin"
|
|
20745
20797
|
}), method(object({
|
|
20746
|
-
|
|
20798
|
+
/** Which of the three event tables owns the row. */
|
|
20799
|
+
ownerType: EventOwnerTypeSchema,
|
|
20800
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20801
|
+
eventId: number().int(),
|
|
20747
20802
|
kind: MediaFileKindEnum.optional(),
|
|
20748
20803
|
deviceId: number()
|
|
20749
20804
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20754,7 +20809,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20754
20809
|
trackId: string(),
|
|
20755
20810
|
deviceId: number()
|
|
20756
20811
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20757
|
-
|
|
20812
|
+
ownerType: EventOwnerTypeSchema,
|
|
20813
|
+
eventId: number().int(),
|
|
20758
20814
|
deviceId: number()
|
|
20759
20815
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20760
20816
|
kind: "mutation",
|
|
@@ -26059,8 +26115,8 @@ var IdentitySchema = object({
|
|
|
26059
26115
|
id: string(),
|
|
26060
26116
|
name: string(),
|
|
26061
26117
|
sampleCount: number().int().nonnegative(),
|
|
26062
|
-
|
|
26063
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26118
|
+
coverMediaId: number().int().optional(),
|
|
26119
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26064
26120
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26065
26121
|
coverBase64: string().optional()
|
|
26066
26122
|
});
|
|
@@ -26086,8 +26142,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26086
26142
|
enrolledAt: number().int(),
|
|
26087
26143
|
deviceId: number().int().optional(),
|
|
26088
26144
|
source: _enum(["detected", "photo"]),
|
|
26089
|
-
/** The enrolled crop's media
|
|
26090
|
-
|
|
26145
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26146
|
+
mediaId: number().int().optional(),
|
|
26091
26147
|
/**
|
|
26092
26148
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26093
26149
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26156,15 +26212,15 @@ var FaceInfoSchema = object({
|
|
|
26156
26212
|
*/
|
|
26157
26213
|
cropUrl: string().optional(),
|
|
26158
26214
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26159
|
-
* view draw the box over the native `
|
|
26215
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26160
26216
|
* legacy rows written before design B. */
|
|
26161
26217
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26162
26218
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26163
26219
|
* Fetch the native JPEG via the event-media data-plane
|
|
26164
|
-
* (`/addon/<addonId>/event-media/<
|
|
26220
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26165
26221
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26166
26222
|
* back to the inline `base64` face crop. */
|
|
26167
|
-
|
|
26223
|
+
keyFrameMediaId: number().int().optional(),
|
|
26168
26224
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26169
26225
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26170
26226
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26233,11 +26289,14 @@ var FaceClusterSchema = object({
|
|
|
26233
26289
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26234
26290
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26235
26291
|
*
|
|
26236
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26237
|
-
* media
|
|
26292
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26293
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26294
|
+
* access decision.
|
|
26238
26295
|
*/
|
|
26239
26296
|
var MediaFileLiteSchema$1 = object({
|
|
26240
|
-
|
|
26297
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26298
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26299
|
+
mediaId: number().int(),
|
|
26241
26300
|
kind: string(),
|
|
26242
26301
|
url: string(),
|
|
26243
26302
|
sizeBytes: number(),
|
|
@@ -26254,7 +26313,7 @@ method(object({
|
|
|
26254
26313
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26255
26314
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26256
26315
|
*
|
|
26257
|
-
* Nothing loses its avatar: `
|
|
26316
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26258
26317
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26259
26318
|
*
|
|
26260
26319
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29617,8 +29676,8 @@ var VehicleSchema = object({
|
|
|
29617
29676
|
id: string(),
|
|
29618
29677
|
name: string(),
|
|
29619
29678
|
sampleCount: number().int().nonnegative(),
|
|
29620
|
-
|
|
29621
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29679
|
+
coverMediaId: number().int().optional(),
|
|
29680
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29622
29681
|
coverBase64: string().optional()
|
|
29623
29682
|
});
|
|
29624
29683
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29651,7 +29710,7 @@ var PlateInfoSchema = object({
|
|
|
29651
29710
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29652
29711
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29653
29712
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29654
|
-
|
|
29713
|
+
keyFrameMediaId: number().int().optional(),
|
|
29655
29714
|
base64: string().optional(),
|
|
29656
29715
|
/**
|
|
29657
29716
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29672,11 +29731,14 @@ var PlateInfoSchema = object({
|
|
|
29672
29731
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29673
29732
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29674
29733
|
*
|
|
29675
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29676
|
-
* media
|
|
29734
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29735
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29736
|
+
* access decision.
|
|
29677
29737
|
*/
|
|
29678
29738
|
var MediaFileLiteSchema = object({
|
|
29679
|
-
|
|
29739
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29740
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29741
|
+
mediaId: number().int(),
|
|
29680
29742
|
kind: string(),
|
|
29681
29743
|
url: string(),
|
|
29682
29744
|
sizeBytes: number(),
|
|
@@ -29735,7 +29797,7 @@ method(object({
|
|
|
29735
29797
|
}), method(object({
|
|
29736
29798
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29737
29799
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29738
|
-
* option; `
|
|
29800
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29739
29801
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29740
29802
|
* resolves to `false` and is exactly the intended default. */
|
|
29741
29803
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31304,7 +31366,14 @@ var SceneReferenceSchema = object({
|
|
|
31304
31366
|
modelId: string(),
|
|
31305
31367
|
condition: SceneConditionSchema,
|
|
31306
31368
|
capturedAt: number(),
|
|
31307
|
-
|
|
31369
|
+
/**
|
|
31370
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31371
|
+
*
|
|
31372
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31373
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31374
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31375
|
+
*/
|
|
31376
|
+
thumbnailMediaId: number().int().optional(),
|
|
31308
31377
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31309
31378
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31310
31379
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33288,7 +33357,7 @@ var StationaryObjectSchema = object({
|
|
|
33288
33357
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33289
33358
|
label: string().optional(),
|
|
33290
33359
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33291
|
-
|
|
33360
|
+
keyFrameMediaId: number().int().optional()
|
|
33292
33361
|
});
|
|
33293
33362
|
var CameraOccupancySnapshotSchema = object({
|
|
33294
33363
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -36026,6 +36095,12 @@ Object.freeze({
|
|
|
36026
36095
|
addonId: null,
|
|
36027
36096
|
access: "create"
|
|
36028
36097
|
},
|
|
36098
|
+
"dataStoreProvider.upsert": {
|
|
36099
|
+
capName: "data-store-provider",
|
|
36100
|
+
capScope: "system",
|
|
36101
|
+
addonId: null,
|
|
36102
|
+
access: "create"
|
|
36103
|
+
},
|
|
36029
36104
|
"dayNight.getOptions": {
|
|
36030
36105
|
capName: "day-night",
|
|
36031
36106
|
capScope: "device",
|
|
@@ -39890,6 +39965,12 @@ Object.freeze({
|
|
|
39890
39965
|
addonId: null,
|
|
39891
39966
|
access: "create"
|
|
39892
39967
|
},
|
|
39968
|
+
"settingsStore.upsert": {
|
|
39969
|
+
capName: "settings-store",
|
|
39970
|
+
capScope: "system",
|
|
39971
|
+
addonId: null,
|
|
39972
|
+
access: "create"
|
|
39973
|
+
},
|
|
39893
39974
|
"smtpProvider.getStatus": {
|
|
39894
39975
|
capName: "smtp-provider",
|
|
39895
39976
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -10,7 +10,7 @@ import { getCACertificates, setDefaultCACertificates } from "node:tls";
|
|
|
10
10
|
//#region \0rolldown/runtime.js
|
|
11
11
|
var __require$1 = /* @__PURE__ */ createRequire(import.meta.url);
|
|
12
12
|
//#endregion
|
|
13
|
-
//#region ../types/dist/event-category-
|
|
13
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
14
14
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
15
15
|
EventCategory["SystemBoot"] = "system.boot";
|
|
16
16
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -571,7 +571,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
571
571
|
* a package zone — a newly-appeared stationary object of a package class
|
|
572
572
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
573
573
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
574
|
-
* entryId, className, zoneIds,
|
|
574
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
575
575
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
576
576
|
* this bus topic drives notifier rules + live UI. See
|
|
577
577
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5357,7 +5357,7 @@ var ZodIssueCode = {
|
|
|
5357
5357
|
var ZodFirstPartyTypeKind;
|
|
5358
5358
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5359
5359
|
//#endregion
|
|
5360
|
-
//#region ../types/dist/sleep-
|
|
5360
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5361
5361
|
/**
|
|
5362
5362
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5363
5363
|
* window to float samples (D455).
|
|
@@ -7324,13 +7324,30 @@ new Set([
|
|
|
7324
7324
|
"scene",
|
|
7325
7325
|
"motion",
|
|
7326
7326
|
"object",
|
|
7327
|
-
"audio"
|
|
7327
|
+
"audio",
|
|
7328
|
+
"mosaic"
|
|
7328
7329
|
]);
|
|
7329
|
-
|
|
7330
|
+
/**
|
|
7331
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7332
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7333
|
+
* does not re-spell the list and drift from it.
|
|
7334
|
+
*/
|
|
7335
|
+
var EVENT_OWNER_TYPES = [
|
|
7330
7336
|
"motion",
|
|
7331
7337
|
"object",
|
|
7332
7338
|
"audio"
|
|
7333
|
-
]
|
|
7339
|
+
];
|
|
7340
|
+
/**
|
|
7341
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7342
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7343
|
+
* `(table, id)`).
|
|
7344
|
+
*
|
|
7345
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7346
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7347
|
+
* nothing failing until a caller asked.
|
|
7348
|
+
*/
|
|
7349
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7350
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7334
7351
|
var EncodeProfileSchema = object({
|
|
7335
7352
|
video: object({
|
|
7336
7353
|
codec: _enum([
|
|
@@ -12529,6 +12546,16 @@ method(object({
|
|
|
12529
12546
|
filter: QueryFilterSchema.optional(),
|
|
12530
12547
|
columns: array(string()).readonly().optional()
|
|
12531
12548
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12549
|
+
namespace: string().optional(),
|
|
12550
|
+
collection: string(),
|
|
12551
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12552
|
+
* index on the collection. Never empty. */
|
|
12553
|
+
conflict: array(string()).readonly(),
|
|
12554
|
+
record: BulkRecordSchema
|
|
12555
|
+
}), object({
|
|
12556
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12557
|
+
* row's own id on an update. */
|
|
12558
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12532
12559
|
namespace: string().optional(),
|
|
12533
12560
|
collection: string(),
|
|
12534
12561
|
record: object({
|
|
@@ -12663,6 +12690,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12663
12690
|
id: union([string(), number()]) }), {
|
|
12664
12691
|
kind: "mutation",
|
|
12665
12692
|
auth: "admin"
|
|
12693
|
+
}), method(object({
|
|
12694
|
+
namespace: string().optional(),
|
|
12695
|
+
collection: string(),
|
|
12696
|
+
conflict: array(string()).readonly(),
|
|
12697
|
+
record: BulkRecordSchema
|
|
12698
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12699
|
+
kind: "mutation",
|
|
12700
|
+
auth: "admin"
|
|
12666
12701
|
}), method(object({
|
|
12667
12702
|
namespace: string().optional(),
|
|
12668
12703
|
collection: string(),
|
|
@@ -19162,8 +19197,8 @@ var TrackPositionSchema = object({
|
|
|
19162
19197
|
var TrackSnapshotSchema = object({
|
|
19163
19198
|
timestamp: number(),
|
|
19164
19199
|
position: TrackPositionSchema,
|
|
19165
|
-
/**
|
|
19166
|
-
|
|
19200
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19201
|
+
mediaId: number().int()
|
|
19167
19202
|
});
|
|
19168
19203
|
/**
|
|
19169
19204
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19767,14 +19802,14 @@ var ObjectEventSchema = object({
|
|
|
19767
19802
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19768
19803
|
frameWidth: number().optional(),
|
|
19769
19804
|
frameHeight: number().optional(),
|
|
19770
|
-
/**
|
|
19771
|
-
|
|
19772
|
-
/** Design B:
|
|
19805
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19806
|
+
mediaId: number().int().optional(),
|
|
19807
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19773
19808
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19774
|
-
* (`/addon/<addonId>/event-media/<
|
|
19809
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19775
19810
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19776
|
-
* sources — consumers fall back to `
|
|
19777
|
-
|
|
19811
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19812
|
+
keyFrameMediaId: number().int().optional(),
|
|
19778
19813
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19779
19814
|
mediaUrl: string().optional(),
|
|
19780
19815
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19824,7 +19859,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19824
19859
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19825
19860
|
*
|
|
19826
19861
|
* `url` points at the `event-media` data plane
|
|
19827
|
-
* (`/addon/<addonId>/event-media/<
|
|
19862
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19828
19863
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19829
19864
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19830
19865
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19832,10 +19867,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19832
19867
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19833
19868
|
* (per-device scoping).
|
|
19834
19869
|
*
|
|
19835
|
-
* The URL is built from the row's
|
|
19836
|
-
*
|
|
19870
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19871
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19872
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19837
19873
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19838
|
-
* `faceCrop`/`plateCrop
|
|
19874
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19875
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19876
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19839
19877
|
*
|
|
19840
19878
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19841
19879
|
*
|
|
@@ -19848,7 +19886,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19848
19886
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19849
19887
|
*/
|
|
19850
19888
|
var MediaFileSchema = object({
|
|
19851
|
-
|
|
19889
|
+
/**
|
|
19890
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19891
|
+
*
|
|
19892
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19893
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19894
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19895
|
+
* different rows that spell the same number, and a track whose
|
|
19896
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19897
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19898
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19899
|
+
* at all.
|
|
19900
|
+
*/
|
|
19901
|
+
mediaId: number().int(),
|
|
19852
19902
|
kind: MediaFileKindEnum,
|
|
19853
19903
|
sizeBytes: number(),
|
|
19854
19904
|
timestamp: number()
|
|
@@ -19956,7 +20006,7 @@ var RetrainTrackSchema = object({
|
|
|
19956
20006
|
});
|
|
19957
20007
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19958
20008
|
var RetrainFrameCandidateSchema = object({
|
|
19959
|
-
|
|
20009
|
+
mediaId: number().int(),
|
|
19960
20010
|
kind: MediaFileKindEnum,
|
|
19961
20011
|
timestamp: number(),
|
|
19962
20012
|
sizeBytes: number().int(),
|
|
@@ -19970,7 +20020,7 @@ var RetrainFrameSchema = object({
|
|
|
19970
20020
|
deviceId: number(),
|
|
19971
20021
|
trackId: string(),
|
|
19972
20022
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19973
|
-
|
|
20023
|
+
sourceMediaId: number().int(),
|
|
19974
20024
|
sourceKind: MediaFileKindEnum,
|
|
19975
20025
|
sizeBytes: number().int(),
|
|
19976
20026
|
width: number().int(),
|
|
@@ -19986,7 +20036,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19986
20036
|
var RetrainFrameSelectionSchema = object({
|
|
19987
20037
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19988
20038
|
refused: array(object({
|
|
19989
|
-
|
|
20039
|
+
sourceMediaId: number().int(),
|
|
19990
20040
|
reason: RetrainCopyRefusalSchema
|
|
19991
20041
|
})).readonly()
|
|
19992
20042
|
});
|
|
@@ -19994,7 +20044,7 @@ var RetrainFrameListSchema = object({
|
|
|
19994
20044
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19995
20045
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19996
20046
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19997
|
-
|
|
20047
|
+
autoPickMediaId: number().int().optional()
|
|
19998
20048
|
});
|
|
19999
20049
|
/** What the operator asked the assist to look for. */
|
|
20000
20050
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20089,9 +20139,11 @@ var RecentTracksQueryInput = object({
|
|
|
20089
20139
|
});
|
|
20090
20140
|
/**
|
|
20091
20141
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20092
|
-
* `
|
|
20093
|
-
* served by the event-media plane
|
|
20094
|
-
* member visible has been materialised
|
|
20142
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20143
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20144
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20145
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20146
|
+
* row once event ids became per-table rowids).
|
|
20095
20147
|
*/
|
|
20096
20148
|
var SummarySchema = object({
|
|
20097
20149
|
id: string(),
|
|
@@ -20100,7 +20152,7 @@ var SummarySchema = object({
|
|
|
20100
20152
|
lastActiveAt: number(),
|
|
20101
20153
|
sealedAt: number().nullable(),
|
|
20102
20154
|
memberCount: number().int().nonnegative(),
|
|
20103
|
-
|
|
20155
|
+
groupShotMediaId: number().int().nullable()
|
|
20104
20156
|
});
|
|
20105
20157
|
var SummariesQueryInput = object({
|
|
20106
20158
|
deviceIds: array(number()).min(1),
|
|
@@ -20654,7 +20706,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20654
20706
|
}), method(object({
|
|
20655
20707
|
deviceId: number(),
|
|
20656
20708
|
trackId: string(),
|
|
20657
|
-
|
|
20709
|
+
mediaIds: array(number().int()).min(1)
|
|
20658
20710
|
}), RetrainFrameSelectionSchema, {
|
|
20659
20711
|
kind: "mutation",
|
|
20660
20712
|
auth: "admin"
|
|
@@ -20722,7 +20774,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20722
20774
|
kind: "query",
|
|
20723
20775
|
auth: "admin"
|
|
20724
20776
|
}), method(object({
|
|
20725
|
-
|
|
20777
|
+
/** Which of the three event tables owns the row. */
|
|
20778
|
+
ownerType: EventOwnerTypeSchema,
|
|
20779
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20780
|
+
eventId: number().int(),
|
|
20726
20781
|
kind: MediaFileKindEnum.optional(),
|
|
20727
20782
|
deviceId: number()
|
|
20728
20783
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20733,7 +20788,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20733
20788
|
trackId: string(),
|
|
20734
20789
|
deviceId: number()
|
|
20735
20790
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20736
|
-
|
|
20791
|
+
ownerType: EventOwnerTypeSchema,
|
|
20792
|
+
eventId: number().int(),
|
|
20737
20793
|
deviceId: number()
|
|
20738
20794
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20739
20795
|
kind: "mutation",
|
|
@@ -26038,8 +26094,8 @@ var IdentitySchema = object({
|
|
|
26038
26094
|
id: string(),
|
|
26039
26095
|
name: string(),
|
|
26040
26096
|
sampleCount: number().int().nonnegative(),
|
|
26041
|
-
|
|
26042
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26097
|
+
coverMediaId: number().int().optional(),
|
|
26098
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26043
26099
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26044
26100
|
coverBase64: string().optional()
|
|
26045
26101
|
});
|
|
@@ -26065,8 +26121,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26065
26121
|
enrolledAt: number().int(),
|
|
26066
26122
|
deviceId: number().int().optional(),
|
|
26067
26123
|
source: _enum(["detected", "photo"]),
|
|
26068
|
-
/** The enrolled crop's media
|
|
26069
|
-
|
|
26124
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26125
|
+
mediaId: number().int().optional(),
|
|
26070
26126
|
/**
|
|
26071
26127
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26072
26128
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26135,15 +26191,15 @@ var FaceInfoSchema = object({
|
|
|
26135
26191
|
*/
|
|
26136
26192
|
cropUrl: string().optional(),
|
|
26137
26193
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26138
|
-
* view draw the box over the native `
|
|
26194
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26139
26195
|
* legacy rows written before design B. */
|
|
26140
26196
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26141
26197
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26142
26198
|
* Fetch the native JPEG via the event-media data-plane
|
|
26143
|
-
* (`/addon/<addonId>/event-media/<
|
|
26199
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26144
26200
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26145
26201
|
* back to the inline `base64` face crop. */
|
|
26146
|
-
|
|
26202
|
+
keyFrameMediaId: number().int().optional(),
|
|
26147
26203
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26148
26204
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26149
26205
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26212,11 +26268,14 @@ var FaceClusterSchema = object({
|
|
|
26212
26268
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26213
26269
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26214
26270
|
*
|
|
26215
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26216
|
-
* media
|
|
26271
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26272
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26273
|
+
* access decision.
|
|
26217
26274
|
*/
|
|
26218
26275
|
var MediaFileLiteSchema$1 = object({
|
|
26219
|
-
|
|
26276
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26277
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26278
|
+
mediaId: number().int(),
|
|
26220
26279
|
kind: string(),
|
|
26221
26280
|
url: string(),
|
|
26222
26281
|
sizeBytes: number(),
|
|
@@ -26233,7 +26292,7 @@ method(object({
|
|
|
26233
26292
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26234
26293
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26235
26294
|
*
|
|
26236
|
-
* Nothing loses its avatar: `
|
|
26295
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26237
26296
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26238
26297
|
*
|
|
26239
26298
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29596,8 +29655,8 @@ var VehicleSchema = object({
|
|
|
29596
29655
|
id: string(),
|
|
29597
29656
|
name: string(),
|
|
29598
29657
|
sampleCount: number().int().nonnegative(),
|
|
29599
|
-
|
|
29600
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29658
|
+
coverMediaId: number().int().optional(),
|
|
29659
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29601
29660
|
coverBase64: string().optional()
|
|
29602
29661
|
});
|
|
29603
29662
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29630,7 +29689,7 @@ var PlateInfoSchema = object({
|
|
|
29630
29689
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29631
29690
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29632
29691
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29633
|
-
|
|
29692
|
+
keyFrameMediaId: number().int().optional(),
|
|
29634
29693
|
base64: string().optional(),
|
|
29635
29694
|
/**
|
|
29636
29695
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29651,11 +29710,14 @@ var PlateInfoSchema = object({
|
|
|
29651
29710
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29652
29711
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29653
29712
|
*
|
|
29654
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29655
|
-
* media
|
|
29713
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29714
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29715
|
+
* access decision.
|
|
29656
29716
|
*/
|
|
29657
29717
|
var MediaFileLiteSchema = object({
|
|
29658
|
-
|
|
29718
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29719
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29720
|
+
mediaId: number().int(),
|
|
29659
29721
|
kind: string(),
|
|
29660
29722
|
url: string(),
|
|
29661
29723
|
sizeBytes: number(),
|
|
@@ -29714,7 +29776,7 @@ method(object({
|
|
|
29714
29776
|
}), method(object({
|
|
29715
29777
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29716
29778
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29717
|
-
* option; `
|
|
29779
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29718
29780
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29719
29781
|
* resolves to `false` and is exactly the intended default. */
|
|
29720
29782
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31283,7 +31345,14 @@ var SceneReferenceSchema = object({
|
|
|
31283
31345
|
modelId: string(),
|
|
31284
31346
|
condition: SceneConditionSchema,
|
|
31285
31347
|
capturedAt: number(),
|
|
31286
|
-
|
|
31348
|
+
/**
|
|
31349
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31350
|
+
*
|
|
31351
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31352
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31353
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31354
|
+
*/
|
|
31355
|
+
thumbnailMediaId: number().int().optional(),
|
|
31287
31356
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31288
31357
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31289
31358
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33267,7 +33336,7 @@ var StationaryObjectSchema = object({
|
|
|
33267
33336
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33268
33337
|
label: string().optional(),
|
|
33269
33338
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33270
|
-
|
|
33339
|
+
keyFrameMediaId: number().int().optional()
|
|
33271
33340
|
});
|
|
33272
33341
|
var CameraOccupancySnapshotSchema = object({
|
|
33273
33342
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -36005,6 +36074,12 @@ Object.freeze({
|
|
|
36005
36074
|
addonId: null,
|
|
36006
36075
|
access: "create"
|
|
36007
36076
|
},
|
|
36077
|
+
"dataStoreProvider.upsert": {
|
|
36078
|
+
capName: "data-store-provider",
|
|
36079
|
+
capScope: "system",
|
|
36080
|
+
addonId: null,
|
|
36081
|
+
access: "create"
|
|
36082
|
+
},
|
|
36008
36083
|
"dayNight.getOptions": {
|
|
36009
36084
|
capName: "day-night",
|
|
36010
36085
|
capScope: "device",
|
|
@@ -39869,6 +39944,12 @@ Object.freeze({
|
|
|
39869
39944
|
addonId: null,
|
|
39870
39945
|
access: "create"
|
|
39871
39946
|
},
|
|
39947
|
+
"settingsStore.upsert": {
|
|
39948
|
+
capName: "settings-store",
|
|
39949
|
+
capScope: "system",
|
|
39950
|
+
addonId: null,
|
|
39951
|
+
access: "create"
|
|
39952
|
+
},
|
|
39872
39953
|
"smtpProvider.getStatus": {
|
|
39873
39954
|
capName: "smtp-provider",
|
|
39874
39955
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-wyze",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.104",
|
|
4
4
|
"description": "Wyze camera device-provider addon for CamStack — wraps the @apocaliss92/wyze-bridge-js P2P/DTLS client, feeding the stream-broker via the pull-rfc4571 lazy-publish path (a structural twin of addon-provider-reolink)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|