@camstack/addon-provider-reolink 1.2.121 → 1.2.123
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 +2 -2
package/dist/addon.js
CHANGED
|
@@ -25,7 +25,7 @@ let fs_promises = require("fs/promises");
|
|
|
25
25
|
fs_promises = require_chunk.__toESM(fs_promises, 1);
|
|
26
26
|
let node_os = require("node:os");
|
|
27
27
|
node_os = require_chunk.__toESM(node_os);
|
|
28
|
-
//#region ../types/dist/event-category-
|
|
28
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
29
29
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
30
30
|
EventCategory["SystemBoot"] = "system.boot";
|
|
31
31
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -586,7 +586,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
586
586
|
* a package zone — a newly-appeared stationary object of a package class
|
|
587
587
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
588
588
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
589
|
-
* entryId, className, zoneIds,
|
|
589
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
590
590
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
591
591
|
* this bus topic drives notifier rules + live UI. See
|
|
592
592
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5372,7 +5372,7 @@ var ZodIssueCode = {
|
|
|
5372
5372
|
var ZodFirstPartyTypeKind;
|
|
5373
5373
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5374
5374
|
//#endregion
|
|
5375
|
-
//#region ../types/dist/sleep-
|
|
5375
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5376
5376
|
/**
|
|
5377
5377
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5378
5378
|
* window to float samples (D455).
|
|
@@ -7351,13 +7351,30 @@ new Set([
|
|
|
7351
7351
|
"scene",
|
|
7352
7352
|
"motion",
|
|
7353
7353
|
"object",
|
|
7354
|
-
"audio"
|
|
7354
|
+
"audio",
|
|
7355
|
+
"mosaic"
|
|
7355
7356
|
]);
|
|
7356
|
-
|
|
7357
|
+
/**
|
|
7358
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7359
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7360
|
+
* does not re-spell the list and drift from it.
|
|
7361
|
+
*/
|
|
7362
|
+
var EVENT_OWNER_TYPES = [
|
|
7357
7363
|
"motion",
|
|
7358
7364
|
"object",
|
|
7359
7365
|
"audio"
|
|
7360
|
-
]
|
|
7366
|
+
];
|
|
7367
|
+
/**
|
|
7368
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7369
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7370
|
+
* `(table, id)`).
|
|
7371
|
+
*
|
|
7372
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7373
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7374
|
+
* nothing failing until a caller asked.
|
|
7375
|
+
*/
|
|
7376
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7377
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7361
7378
|
var EncodeProfileSchema = object({
|
|
7362
7379
|
video: object({
|
|
7363
7380
|
codec: _enum([
|
|
@@ -13122,6 +13139,16 @@ method(object({
|
|
|
13122
13139
|
filter: QueryFilterSchema.optional(),
|
|
13123
13140
|
columns: array(string()).readonly().optional()
|
|
13124
13141
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
13142
|
+
namespace: string().optional(),
|
|
13143
|
+
collection: string(),
|
|
13144
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
13145
|
+
* index on the collection. Never empty. */
|
|
13146
|
+
conflict: array(string()).readonly(),
|
|
13147
|
+
record: BulkRecordSchema
|
|
13148
|
+
}), object({
|
|
13149
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
13150
|
+
* row's own id on an update. */
|
|
13151
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
13125
13152
|
namespace: string().optional(),
|
|
13126
13153
|
collection: string(),
|
|
13127
13154
|
record: object({
|
|
@@ -13256,6 +13283,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
13256
13283
|
id: union([string(), number()]) }), {
|
|
13257
13284
|
kind: "mutation",
|
|
13258
13285
|
auth: "admin"
|
|
13286
|
+
}), method(object({
|
|
13287
|
+
namespace: string().optional(),
|
|
13288
|
+
collection: string(),
|
|
13289
|
+
conflict: array(string()).readonly(),
|
|
13290
|
+
record: BulkRecordSchema
|
|
13291
|
+
}), object({ id: union([string(), number()]) }), {
|
|
13292
|
+
kind: "mutation",
|
|
13293
|
+
auth: "admin"
|
|
13259
13294
|
}), method(object({
|
|
13260
13295
|
namespace: string().optional(),
|
|
13261
13296
|
collection: string(),
|
|
@@ -19778,8 +19813,8 @@ var TrackPositionSchema = object({
|
|
|
19778
19813
|
var TrackSnapshotSchema = object({
|
|
19779
19814
|
timestamp: number(),
|
|
19780
19815
|
position: TrackPositionSchema,
|
|
19781
|
-
/**
|
|
19782
|
-
|
|
19816
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19817
|
+
mediaId: number().int()
|
|
19783
19818
|
});
|
|
19784
19819
|
/**
|
|
19785
19820
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -20383,14 +20418,14 @@ var ObjectEventSchema = object({
|
|
|
20383
20418
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
20384
20419
|
frameWidth: number().optional(),
|
|
20385
20420
|
frameHeight: number().optional(),
|
|
20386
|
-
/**
|
|
20387
|
-
|
|
20388
|
-
/** Design B:
|
|
20421
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
20422
|
+
mediaId: number().int().optional(),
|
|
20423
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
20389
20424
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
20390
|
-
* (`/addon/<addonId>/event-media/<
|
|
20425
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
20391
20426
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
20392
|
-
* sources — consumers fall back to `
|
|
20393
|
-
|
|
20427
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
20428
|
+
keyFrameMediaId: number().int().optional(),
|
|
20394
20429
|
/** Populated by B5 (recording playback URL for this event). */
|
|
20395
20430
|
mediaUrl: string().optional(),
|
|
20396
20431
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -20440,7 +20475,7 @@ var MediaFileKindEnum = _enum([
|
|
|
20440
20475
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
20441
20476
|
*
|
|
20442
20477
|
* `url` points at the `event-media` data plane
|
|
20443
|
-
* (`/addon/<addonId>/event-media/<
|
|
20478
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
20444
20479
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
20445
20480
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
20446
20481
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -20448,10 +20483,13 @@ var MediaFileKindEnum = _enum([
|
|
|
20448
20483
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
20449
20484
|
* (per-device scoping).
|
|
20450
20485
|
*
|
|
20451
|
-
* The URL is built from the row's
|
|
20452
|
-
*
|
|
20486
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
20487
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
20488
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
20453
20489
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
20454
|
-
* `faceCrop`/`plateCrop
|
|
20490
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
20491
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
20492
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
20455
20493
|
*
|
|
20456
20494
|
* ## `base64` is TRANSITIONAL and is going away
|
|
20457
20495
|
*
|
|
@@ -20464,7 +20502,19 @@ var MediaFileKindEnum = _enum([
|
|
|
20464
20502
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
20465
20503
|
*/
|
|
20466
20504
|
var MediaFileSchema = object({
|
|
20467
|
-
|
|
20505
|
+
/**
|
|
20506
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
20507
|
+
*
|
|
20508
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
20509
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
20510
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
20511
|
+
* different rows that spell the same number, and a track whose
|
|
20512
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
20513
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
20514
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
20515
|
+
* at all.
|
|
20516
|
+
*/
|
|
20517
|
+
mediaId: number().int(),
|
|
20468
20518
|
kind: MediaFileKindEnum,
|
|
20469
20519
|
sizeBytes: number(),
|
|
20470
20520
|
timestamp: number()
|
|
@@ -20572,7 +20622,7 @@ var RetrainTrackSchema = object({
|
|
|
20572
20622
|
});
|
|
20573
20623
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
20574
20624
|
var RetrainFrameCandidateSchema = object({
|
|
20575
|
-
|
|
20625
|
+
mediaId: number().int(),
|
|
20576
20626
|
kind: MediaFileKindEnum,
|
|
20577
20627
|
timestamp: number(),
|
|
20578
20628
|
sizeBytes: number().int(),
|
|
@@ -20586,7 +20636,7 @@ var RetrainFrameSchema = object({
|
|
|
20586
20636
|
deviceId: number(),
|
|
20587
20637
|
trackId: string(),
|
|
20588
20638
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
20589
|
-
|
|
20639
|
+
sourceMediaId: number().int(),
|
|
20590
20640
|
sourceKind: MediaFileKindEnum,
|
|
20591
20641
|
sizeBytes: number().int(),
|
|
20592
20642
|
width: number().int(),
|
|
@@ -20602,7 +20652,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
20602
20652
|
var RetrainFrameSelectionSchema = object({
|
|
20603
20653
|
copied: array(RetrainFrameSchema).readonly(),
|
|
20604
20654
|
refused: array(object({
|
|
20605
|
-
|
|
20655
|
+
sourceMediaId: number().int(),
|
|
20606
20656
|
reason: RetrainCopyRefusalSchema
|
|
20607
20657
|
})).readonly()
|
|
20608
20658
|
});
|
|
@@ -20610,7 +20660,7 @@ var RetrainFrameListSchema = object({
|
|
|
20610
20660
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
20611
20661
|
copies: array(RetrainFrameSchema).readonly(),
|
|
20612
20662
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
20613
|
-
|
|
20663
|
+
autoPickMediaId: number().int().optional()
|
|
20614
20664
|
});
|
|
20615
20665
|
/** What the operator asked the assist to look for. */
|
|
20616
20666
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20705,9 +20755,11 @@ var RecentTracksQueryInput = object({
|
|
|
20705
20755
|
});
|
|
20706
20756
|
/**
|
|
20707
20757
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20708
|
-
* `
|
|
20709
|
-
* served by the event-media plane
|
|
20710
|
-
* member visible has been materialised
|
|
20758
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20759
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20760
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20761
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20762
|
+
* row once event ids became per-table rowids).
|
|
20711
20763
|
*/
|
|
20712
20764
|
var SummarySchema = object({
|
|
20713
20765
|
id: string(),
|
|
@@ -20716,7 +20768,7 @@ var SummarySchema = object({
|
|
|
20716
20768
|
lastActiveAt: number(),
|
|
20717
20769
|
sealedAt: number().nullable(),
|
|
20718
20770
|
memberCount: number().int().nonnegative(),
|
|
20719
|
-
|
|
20771
|
+
groupShotMediaId: number().int().nullable()
|
|
20720
20772
|
});
|
|
20721
20773
|
var SummariesQueryInput = object({
|
|
20722
20774
|
deviceIds: array(number()).min(1),
|
|
@@ -21270,7 +21322,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21270
21322
|
}), method(object({
|
|
21271
21323
|
deviceId: number(),
|
|
21272
21324
|
trackId: string(),
|
|
21273
|
-
|
|
21325
|
+
mediaIds: array(number().int()).min(1)
|
|
21274
21326
|
}), RetrainFrameSelectionSchema, {
|
|
21275
21327
|
kind: "mutation",
|
|
21276
21328
|
auth: "admin"
|
|
@@ -21338,7 +21390,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21338
21390
|
kind: "query",
|
|
21339
21391
|
auth: "admin"
|
|
21340
21392
|
}), method(object({
|
|
21341
|
-
|
|
21393
|
+
/** Which of the three event tables owns the row. */
|
|
21394
|
+
ownerType: EventOwnerTypeSchema,
|
|
21395
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
21396
|
+
eventId: number().int(),
|
|
21342
21397
|
kind: MediaFileKindEnum.optional(),
|
|
21343
21398
|
deviceId: number()
|
|
21344
21399
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -21349,7 +21404,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21349
21404
|
trackId: string(),
|
|
21350
21405
|
deviceId: number()
|
|
21351
21406
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
21352
|
-
|
|
21407
|
+
ownerType: EventOwnerTypeSchema,
|
|
21408
|
+
eventId: number().int(),
|
|
21353
21409
|
deviceId: number()
|
|
21354
21410
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
21355
21411
|
kind: "mutation",
|
|
@@ -26646,8 +26702,8 @@ var IdentitySchema = object({
|
|
|
26646
26702
|
id: string(),
|
|
26647
26703
|
name: string(),
|
|
26648
26704
|
sampleCount: number().int().nonnegative(),
|
|
26649
|
-
|
|
26650
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26705
|
+
coverMediaId: number().int().optional(),
|
|
26706
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26651
26707
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26652
26708
|
coverBase64: string().optional()
|
|
26653
26709
|
});
|
|
@@ -26673,8 +26729,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26673
26729
|
enrolledAt: number().int(),
|
|
26674
26730
|
deviceId: number().int().optional(),
|
|
26675
26731
|
source: _enum(["detected", "photo"]),
|
|
26676
|
-
/** The enrolled crop's media
|
|
26677
|
-
|
|
26732
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26733
|
+
mediaId: number().int().optional(),
|
|
26678
26734
|
/**
|
|
26679
26735
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26680
26736
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26743,15 +26799,15 @@ var FaceInfoSchema = object({
|
|
|
26743
26799
|
*/
|
|
26744
26800
|
cropUrl: string().optional(),
|
|
26745
26801
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26746
|
-
* view draw the box over the native `
|
|
26802
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26747
26803
|
* legacy rows written before design B. */
|
|
26748
26804
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26749
26805
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26750
26806
|
* Fetch the native JPEG via the event-media data-plane
|
|
26751
|
-
* (`/addon/<addonId>/event-media/<
|
|
26807
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26752
26808
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26753
26809
|
* back to the inline `base64` face crop. */
|
|
26754
|
-
|
|
26810
|
+
keyFrameMediaId: number().int().optional(),
|
|
26755
26811
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26756
26812
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26757
26813
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26820,11 +26876,14 @@ var FaceClusterSchema = object({
|
|
|
26820
26876
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26821
26877
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26822
26878
|
*
|
|
26823
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26824
|
-
* media
|
|
26879
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26880
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26881
|
+
* access decision.
|
|
26825
26882
|
*/
|
|
26826
26883
|
var MediaFileLiteSchema$1 = object({
|
|
26827
|
-
|
|
26884
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26885
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26886
|
+
mediaId: number().int(),
|
|
26828
26887
|
kind: string(),
|
|
26829
26888
|
url: string(),
|
|
26830
26889
|
sizeBytes: number(),
|
|
@@ -26841,7 +26900,7 @@ method(object({
|
|
|
26841
26900
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26842
26901
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26843
26902
|
*
|
|
26844
|
-
* Nothing loses its avatar: `
|
|
26903
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26845
26904
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26846
26905
|
*
|
|
26847
26906
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -30224,8 +30283,8 @@ var VehicleSchema = object({
|
|
|
30224
30283
|
id: string(),
|
|
30225
30284
|
name: string(),
|
|
30226
30285
|
sampleCount: number().int().nonnegative(),
|
|
30227
|
-
|
|
30228
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
30286
|
+
coverMediaId: number().int().optional(),
|
|
30287
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
30229
30288
|
coverBase64: string().optional()
|
|
30230
30289
|
});
|
|
30231
30290
|
var VehicleSampleInfoSchema = object({
|
|
@@ -30258,7 +30317,7 @@ var PlateInfoSchema = object({
|
|
|
30258
30317
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
30259
30318
|
plateBbox: BoundingBoxSchema.optional(),
|
|
30260
30319
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
30261
|
-
|
|
30320
|
+
keyFrameMediaId: number().int().optional(),
|
|
30262
30321
|
base64: string().optional(),
|
|
30263
30322
|
/**
|
|
30264
30323
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -30279,11 +30338,14 @@ var PlateInfoSchema = object({
|
|
|
30279
30338
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
30280
30339
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
30281
30340
|
*
|
|
30282
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
30283
|
-
* media
|
|
30341
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
30342
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
30343
|
+
* access decision.
|
|
30284
30344
|
*/
|
|
30285
30345
|
var MediaFileLiteSchema = object({
|
|
30286
|
-
|
|
30346
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
30347
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
30348
|
+
mediaId: number().int(),
|
|
30287
30349
|
kind: string(),
|
|
30288
30350
|
url: string(),
|
|
30289
30351
|
sizeBytes: number(),
|
|
@@ -30342,7 +30404,7 @@ method(object({
|
|
|
30342
30404
|
}), method(object({
|
|
30343
30405
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
30344
30406
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
30345
|
-
* option; `
|
|
30407
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
30346
30408
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
30347
30409
|
* resolves to `false` and is exactly the intended default. */
|
|
30348
30410
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31998,7 +32060,14 @@ var SceneReferenceSchema = object({
|
|
|
31998
32060
|
modelId: string(),
|
|
31999
32061
|
condition: SceneConditionSchema,
|
|
32000
32062
|
capturedAt: number(),
|
|
32001
|
-
|
|
32063
|
+
/**
|
|
32064
|
+
* The reference thumbnail's media ROW id (D482).
|
|
32065
|
+
*
|
|
32066
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
32067
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
32068
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
32069
|
+
*/
|
|
32070
|
+
thumbnailMediaId: number().int().optional(),
|
|
32002
32071
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
32003
32072
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
32004
32073
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -34180,7 +34249,7 @@ var StationaryObjectSchema = object({
|
|
|
34180
34249
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
34181
34250
|
label: string().optional(),
|
|
34182
34251
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
34183
|
-
|
|
34252
|
+
keyFrameMediaId: number().int().optional()
|
|
34184
34253
|
});
|
|
34185
34254
|
var CameraOccupancySnapshotSchema = object({
|
|
34186
34255
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -37096,6 +37165,12 @@ Object.freeze({
|
|
|
37096
37165
|
addonId: null,
|
|
37097
37166
|
access: "create"
|
|
37098
37167
|
},
|
|
37168
|
+
"dataStoreProvider.upsert": {
|
|
37169
|
+
capName: "data-store-provider",
|
|
37170
|
+
capScope: "system",
|
|
37171
|
+
addonId: null,
|
|
37172
|
+
access: "create"
|
|
37173
|
+
},
|
|
37099
37174
|
"dayNight.getOptions": {
|
|
37100
37175
|
capName: "day-night",
|
|
37101
37176
|
capScope: "device",
|
|
@@ -40960,6 +41035,12 @@ Object.freeze({
|
|
|
40960
41035
|
addonId: null,
|
|
40961
41036
|
access: "create"
|
|
40962
41037
|
},
|
|
41038
|
+
"settingsStore.upsert": {
|
|
41039
|
+
capName: "settings-store",
|
|
41040
|
+
capScope: "system",
|
|
41041
|
+
addonId: null,
|
|
41042
|
+
access: "create"
|
|
41043
|
+
},
|
|
40963
41044
|
"smtpProvider.getStatus": {
|
|
40964
41045
|
capName: "smtp-provider",
|
|
40965
41046
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -20,7 +20,7 @@ import * as net2 from "net";
|
|
|
20
20
|
import netImpl from "net";
|
|
21
21
|
import { mkdir } from "fs/promises";
|
|
22
22
|
import os from "node:os";
|
|
23
|
-
//#region ../types/dist/event-category-
|
|
23
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
24
24
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
25
25
|
EventCategory["SystemBoot"] = "system.boot";
|
|
26
26
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -581,7 +581,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
581
581
|
* a package zone — a newly-appeared stationary object of a package class
|
|
582
582
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
583
583
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
584
|
-
* entryId, className, zoneIds,
|
|
584
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
585
585
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
586
586
|
* this bus topic drives notifier rules + live UI. See
|
|
587
587
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5367,7 +5367,7 @@ var ZodIssueCode = {
|
|
|
5367
5367
|
var ZodFirstPartyTypeKind;
|
|
5368
5368
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5369
5369
|
//#endregion
|
|
5370
|
-
//#region ../types/dist/sleep-
|
|
5370
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5371
5371
|
/**
|
|
5372
5372
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5373
5373
|
* window to float samples (D455).
|
|
@@ -7346,13 +7346,30 @@ new Set([
|
|
|
7346
7346
|
"scene",
|
|
7347
7347
|
"motion",
|
|
7348
7348
|
"object",
|
|
7349
|
-
"audio"
|
|
7349
|
+
"audio",
|
|
7350
|
+
"mosaic"
|
|
7350
7351
|
]);
|
|
7351
|
-
|
|
7352
|
+
/**
|
|
7353
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7354
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7355
|
+
* does not re-spell the list and drift from it.
|
|
7356
|
+
*/
|
|
7357
|
+
var EVENT_OWNER_TYPES = [
|
|
7352
7358
|
"motion",
|
|
7353
7359
|
"object",
|
|
7354
7360
|
"audio"
|
|
7355
|
-
]
|
|
7361
|
+
];
|
|
7362
|
+
/**
|
|
7363
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7364
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7365
|
+
* `(table, id)`).
|
|
7366
|
+
*
|
|
7367
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7368
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7369
|
+
* nothing failing until a caller asked.
|
|
7370
|
+
*/
|
|
7371
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7372
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7356
7373
|
var EncodeProfileSchema = object({
|
|
7357
7374
|
video: object({
|
|
7358
7375
|
codec: _enum([
|
|
@@ -13117,6 +13134,16 @@ method(object({
|
|
|
13117
13134
|
filter: QueryFilterSchema.optional(),
|
|
13118
13135
|
columns: array(string()).readonly().optional()
|
|
13119
13136
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
13137
|
+
namespace: string().optional(),
|
|
13138
|
+
collection: string(),
|
|
13139
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
13140
|
+
* index on the collection. Never empty. */
|
|
13141
|
+
conflict: array(string()).readonly(),
|
|
13142
|
+
record: BulkRecordSchema
|
|
13143
|
+
}), object({
|
|
13144
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
13145
|
+
* row's own id on an update. */
|
|
13146
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
13120
13147
|
namespace: string().optional(),
|
|
13121
13148
|
collection: string(),
|
|
13122
13149
|
record: object({
|
|
@@ -13251,6 +13278,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
13251
13278
|
id: union([string(), number()]) }), {
|
|
13252
13279
|
kind: "mutation",
|
|
13253
13280
|
auth: "admin"
|
|
13281
|
+
}), method(object({
|
|
13282
|
+
namespace: string().optional(),
|
|
13283
|
+
collection: string(),
|
|
13284
|
+
conflict: array(string()).readonly(),
|
|
13285
|
+
record: BulkRecordSchema
|
|
13286
|
+
}), object({ id: union([string(), number()]) }), {
|
|
13287
|
+
kind: "mutation",
|
|
13288
|
+
auth: "admin"
|
|
13254
13289
|
}), method(object({
|
|
13255
13290
|
namespace: string().optional(),
|
|
13256
13291
|
collection: string(),
|
|
@@ -19773,8 +19808,8 @@ var TrackPositionSchema = object({
|
|
|
19773
19808
|
var TrackSnapshotSchema = object({
|
|
19774
19809
|
timestamp: number(),
|
|
19775
19810
|
position: TrackPositionSchema,
|
|
19776
|
-
/**
|
|
19777
|
-
|
|
19811
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19812
|
+
mediaId: number().int()
|
|
19778
19813
|
});
|
|
19779
19814
|
/**
|
|
19780
19815
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -20378,14 +20413,14 @@ var ObjectEventSchema = object({
|
|
|
20378
20413
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
20379
20414
|
frameWidth: number().optional(),
|
|
20380
20415
|
frameHeight: number().optional(),
|
|
20381
|
-
/**
|
|
20382
|
-
|
|
20383
|
-
/** Design B:
|
|
20416
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
20417
|
+
mediaId: number().int().optional(),
|
|
20418
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
20384
20419
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
20385
|
-
* (`/addon/<addonId>/event-media/<
|
|
20420
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
20386
20421
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
20387
|
-
* sources — consumers fall back to `
|
|
20388
|
-
|
|
20422
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
20423
|
+
keyFrameMediaId: number().int().optional(),
|
|
20389
20424
|
/** Populated by B5 (recording playback URL for this event). */
|
|
20390
20425
|
mediaUrl: string().optional(),
|
|
20391
20426
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -20435,7 +20470,7 @@ var MediaFileKindEnum = _enum([
|
|
|
20435
20470
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
20436
20471
|
*
|
|
20437
20472
|
* `url` points at the `event-media` data plane
|
|
20438
|
-
* (`/addon/<addonId>/event-media/<
|
|
20473
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
20439
20474
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
20440
20475
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
20441
20476
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -20443,10 +20478,13 @@ var MediaFileKindEnum = _enum([
|
|
|
20443
20478
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
20444
20479
|
* (per-device scoping).
|
|
20445
20480
|
*
|
|
20446
|
-
* The URL is built from the row's
|
|
20447
|
-
*
|
|
20481
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
20482
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
20483
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
20448
20484
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
20449
|
-
* `faceCrop`/`plateCrop
|
|
20485
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
20486
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
20487
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
20450
20488
|
*
|
|
20451
20489
|
* ## `base64` is TRANSITIONAL and is going away
|
|
20452
20490
|
*
|
|
@@ -20459,7 +20497,19 @@ var MediaFileKindEnum = _enum([
|
|
|
20459
20497
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
20460
20498
|
*/
|
|
20461
20499
|
var MediaFileSchema = object({
|
|
20462
|
-
|
|
20500
|
+
/**
|
|
20501
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
20502
|
+
*
|
|
20503
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
20504
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
20505
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
20506
|
+
* different rows that spell the same number, and a track whose
|
|
20507
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
20508
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
20509
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
20510
|
+
* at all.
|
|
20511
|
+
*/
|
|
20512
|
+
mediaId: number().int(),
|
|
20463
20513
|
kind: MediaFileKindEnum,
|
|
20464
20514
|
sizeBytes: number(),
|
|
20465
20515
|
timestamp: number()
|
|
@@ -20567,7 +20617,7 @@ var RetrainTrackSchema = object({
|
|
|
20567
20617
|
});
|
|
20568
20618
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
20569
20619
|
var RetrainFrameCandidateSchema = object({
|
|
20570
|
-
|
|
20620
|
+
mediaId: number().int(),
|
|
20571
20621
|
kind: MediaFileKindEnum,
|
|
20572
20622
|
timestamp: number(),
|
|
20573
20623
|
sizeBytes: number().int(),
|
|
@@ -20581,7 +20631,7 @@ var RetrainFrameSchema = object({
|
|
|
20581
20631
|
deviceId: number(),
|
|
20582
20632
|
trackId: string(),
|
|
20583
20633
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
20584
|
-
|
|
20634
|
+
sourceMediaId: number().int(),
|
|
20585
20635
|
sourceKind: MediaFileKindEnum,
|
|
20586
20636
|
sizeBytes: number().int(),
|
|
20587
20637
|
width: number().int(),
|
|
@@ -20597,7 +20647,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
20597
20647
|
var RetrainFrameSelectionSchema = object({
|
|
20598
20648
|
copied: array(RetrainFrameSchema).readonly(),
|
|
20599
20649
|
refused: array(object({
|
|
20600
|
-
|
|
20650
|
+
sourceMediaId: number().int(),
|
|
20601
20651
|
reason: RetrainCopyRefusalSchema
|
|
20602
20652
|
})).readonly()
|
|
20603
20653
|
});
|
|
@@ -20605,7 +20655,7 @@ var RetrainFrameListSchema = object({
|
|
|
20605
20655
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
20606
20656
|
copies: array(RetrainFrameSchema).readonly(),
|
|
20607
20657
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
20608
|
-
|
|
20658
|
+
autoPickMediaId: number().int().optional()
|
|
20609
20659
|
});
|
|
20610
20660
|
/** What the operator asked the assist to look for. */
|
|
20611
20661
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20700,9 +20750,11 @@ var RecentTracksQueryInput = object({
|
|
|
20700
20750
|
});
|
|
20701
20751
|
/**
|
|
20702
20752
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20703
|
-
* `
|
|
20704
|
-
* served by the event-media plane
|
|
20705
|
-
* member visible has been materialised
|
|
20753
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20754
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20755
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20756
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20757
|
+
* row once event ids became per-table rowids).
|
|
20706
20758
|
*/
|
|
20707
20759
|
var SummarySchema = object({
|
|
20708
20760
|
id: string(),
|
|
@@ -20711,7 +20763,7 @@ var SummarySchema = object({
|
|
|
20711
20763
|
lastActiveAt: number(),
|
|
20712
20764
|
sealedAt: number().nullable(),
|
|
20713
20765
|
memberCount: number().int().nonnegative(),
|
|
20714
|
-
|
|
20766
|
+
groupShotMediaId: number().int().nullable()
|
|
20715
20767
|
});
|
|
20716
20768
|
var SummariesQueryInput = object({
|
|
20717
20769
|
deviceIds: array(number()).min(1),
|
|
@@ -21265,7 +21317,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21265
21317
|
}), method(object({
|
|
21266
21318
|
deviceId: number(),
|
|
21267
21319
|
trackId: string(),
|
|
21268
|
-
|
|
21320
|
+
mediaIds: array(number().int()).min(1)
|
|
21269
21321
|
}), RetrainFrameSelectionSchema, {
|
|
21270
21322
|
kind: "mutation",
|
|
21271
21323
|
auth: "admin"
|
|
@@ -21333,7 +21385,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21333
21385
|
kind: "query",
|
|
21334
21386
|
auth: "admin"
|
|
21335
21387
|
}), method(object({
|
|
21336
|
-
|
|
21388
|
+
/** Which of the three event tables owns the row. */
|
|
21389
|
+
ownerType: EventOwnerTypeSchema,
|
|
21390
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
21391
|
+
eventId: number().int(),
|
|
21337
21392
|
kind: MediaFileKindEnum.optional(),
|
|
21338
21393
|
deviceId: number()
|
|
21339
21394
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -21344,7 +21399,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21344
21399
|
trackId: string(),
|
|
21345
21400
|
deviceId: number()
|
|
21346
21401
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
21347
|
-
|
|
21402
|
+
ownerType: EventOwnerTypeSchema,
|
|
21403
|
+
eventId: number().int(),
|
|
21348
21404
|
deviceId: number()
|
|
21349
21405
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
21350
21406
|
kind: "mutation",
|
|
@@ -26641,8 +26697,8 @@ var IdentitySchema = object({
|
|
|
26641
26697
|
id: string(),
|
|
26642
26698
|
name: string(),
|
|
26643
26699
|
sampleCount: number().int().nonnegative(),
|
|
26644
|
-
|
|
26645
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26700
|
+
coverMediaId: number().int().optional(),
|
|
26701
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26646
26702
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26647
26703
|
coverBase64: string().optional()
|
|
26648
26704
|
});
|
|
@@ -26668,8 +26724,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26668
26724
|
enrolledAt: number().int(),
|
|
26669
26725
|
deviceId: number().int().optional(),
|
|
26670
26726
|
source: _enum(["detected", "photo"]),
|
|
26671
|
-
/** The enrolled crop's media
|
|
26672
|
-
|
|
26727
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26728
|
+
mediaId: number().int().optional(),
|
|
26673
26729
|
/**
|
|
26674
26730
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26675
26731
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26738,15 +26794,15 @@ var FaceInfoSchema = object({
|
|
|
26738
26794
|
*/
|
|
26739
26795
|
cropUrl: string().optional(),
|
|
26740
26796
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26741
|
-
* view draw the box over the native `
|
|
26797
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26742
26798
|
* legacy rows written before design B. */
|
|
26743
26799
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26744
26800
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26745
26801
|
* Fetch the native JPEG via the event-media data-plane
|
|
26746
|
-
* (`/addon/<addonId>/event-media/<
|
|
26802
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26747
26803
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26748
26804
|
* back to the inline `base64` face crop. */
|
|
26749
|
-
|
|
26805
|
+
keyFrameMediaId: number().int().optional(),
|
|
26750
26806
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26751
26807
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26752
26808
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26815,11 +26871,14 @@ var FaceClusterSchema = object({
|
|
|
26815
26871
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26816
26872
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26817
26873
|
*
|
|
26818
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26819
|
-
* media
|
|
26874
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26875
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26876
|
+
* access decision.
|
|
26820
26877
|
*/
|
|
26821
26878
|
var MediaFileLiteSchema$1 = object({
|
|
26822
|
-
|
|
26879
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26880
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26881
|
+
mediaId: number().int(),
|
|
26823
26882
|
kind: string(),
|
|
26824
26883
|
url: string(),
|
|
26825
26884
|
sizeBytes: number(),
|
|
@@ -26836,7 +26895,7 @@ method(object({
|
|
|
26836
26895
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26837
26896
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26838
26897
|
*
|
|
26839
|
-
* Nothing loses its avatar: `
|
|
26898
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26840
26899
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26841
26900
|
*
|
|
26842
26901
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -30219,8 +30278,8 @@ var VehicleSchema = object({
|
|
|
30219
30278
|
id: string(),
|
|
30220
30279
|
name: string(),
|
|
30221
30280
|
sampleCount: number().int().nonnegative(),
|
|
30222
|
-
|
|
30223
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
30281
|
+
coverMediaId: number().int().optional(),
|
|
30282
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
30224
30283
|
coverBase64: string().optional()
|
|
30225
30284
|
});
|
|
30226
30285
|
var VehicleSampleInfoSchema = object({
|
|
@@ -30253,7 +30312,7 @@ var PlateInfoSchema = object({
|
|
|
30253
30312
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
30254
30313
|
plateBbox: BoundingBoxSchema.optional(),
|
|
30255
30314
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
30256
|
-
|
|
30315
|
+
keyFrameMediaId: number().int().optional(),
|
|
30257
30316
|
base64: string().optional(),
|
|
30258
30317
|
/**
|
|
30259
30318
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -30274,11 +30333,14 @@ var PlateInfoSchema = object({
|
|
|
30274
30333
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
30275
30334
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
30276
30335
|
*
|
|
30277
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
30278
|
-
* media
|
|
30336
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
30337
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
30338
|
+
* access decision.
|
|
30279
30339
|
*/
|
|
30280
30340
|
var MediaFileLiteSchema = object({
|
|
30281
|
-
|
|
30341
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
30342
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
30343
|
+
mediaId: number().int(),
|
|
30282
30344
|
kind: string(),
|
|
30283
30345
|
url: string(),
|
|
30284
30346
|
sizeBytes: number(),
|
|
@@ -30337,7 +30399,7 @@ method(object({
|
|
|
30337
30399
|
}), method(object({
|
|
30338
30400
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
30339
30401
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
30340
|
-
* option; `
|
|
30402
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
30341
30403
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
30342
30404
|
* resolves to `false` and is exactly the intended default. */
|
|
30343
30405
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31993,7 +32055,14 @@ var SceneReferenceSchema = object({
|
|
|
31993
32055
|
modelId: string(),
|
|
31994
32056
|
condition: SceneConditionSchema,
|
|
31995
32057
|
capturedAt: number(),
|
|
31996
|
-
|
|
32058
|
+
/**
|
|
32059
|
+
* The reference thumbnail's media ROW id (D482).
|
|
32060
|
+
*
|
|
32061
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
32062
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
32063
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
32064
|
+
*/
|
|
32065
|
+
thumbnailMediaId: number().int().optional(),
|
|
31997
32066
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31998
32067
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31999
32068
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -34175,7 +34244,7 @@ var StationaryObjectSchema = object({
|
|
|
34175
34244
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
34176
34245
|
label: string().optional(),
|
|
34177
34246
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
34178
|
-
|
|
34247
|
+
keyFrameMediaId: number().int().optional()
|
|
34179
34248
|
});
|
|
34180
34249
|
var CameraOccupancySnapshotSchema = object({
|
|
34181
34250
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -37091,6 +37160,12 @@ Object.freeze({
|
|
|
37091
37160
|
addonId: null,
|
|
37092
37161
|
access: "create"
|
|
37093
37162
|
},
|
|
37163
|
+
"dataStoreProvider.upsert": {
|
|
37164
|
+
capName: "data-store-provider",
|
|
37165
|
+
capScope: "system",
|
|
37166
|
+
addonId: null,
|
|
37167
|
+
access: "create"
|
|
37168
|
+
},
|
|
37094
37169
|
"dayNight.getOptions": {
|
|
37095
37170
|
capName: "day-night",
|
|
37096
37171
|
capScope: "device",
|
|
@@ -40955,6 +41030,12 @@ Object.freeze({
|
|
|
40955
41030
|
addonId: null,
|
|
40956
41031
|
access: "create"
|
|
40957
41032
|
},
|
|
41033
|
+
"settingsStore.upsert": {
|
|
41034
|
+
capName: "settings-store",
|
|
41035
|
+
capScope: "system",
|
|
41036
|
+
addonId: null,
|
|
41037
|
+
access: "create"
|
|
41038
|
+
},
|
|
40958
41039
|
"smtpProvider.getStatus": {
|
|
40959
41040
|
capName: "smtp-provider",
|
|
40960
41041
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-reolink",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.123",
|
|
4
4
|
"description": "Reolink camera device provider addon for CamStack — native Baichuan protocol",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
},
|
|
90
90
|
"peerDependencies": {
|
|
91
91
|
"@camstack/types": "*",
|
|
92
|
-
"werift": "
|
|
92
|
+
"werift": "0.22.9",
|
|
93
93
|
"zod": "^4.3.6"
|
|
94
94
|
},
|
|
95
95
|
"peerDependenciesMeta": {
|