@camstack/addon-mqtt-broker 1.2.98 → 1.2.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mqtt-broker.addon.js +131 -50
- package/dist/mqtt-broker.addon.mjs +131 -50
- package/package.json +1 -1
|
@@ -44,7 +44,7 @@ let crypto$10 = __toESM(crypto$1, 1);
|
|
|
44
44
|
crypto$1 = __toESM(crypto$1);
|
|
45
45
|
let node_fs = require("node:fs");
|
|
46
46
|
let node_path = require("node:path");
|
|
47
|
-
//#region ../types/dist/event-category-
|
|
47
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
48
48
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
49
49
|
EventCategory["SystemBoot"] = "system.boot";
|
|
50
50
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -605,7 +605,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
605
605
|
* a package zone — a newly-appeared stationary object of a package class
|
|
606
606
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
607
607
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
608
|
-
* entryId, className, zoneIds,
|
|
608
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
609
609
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
610
610
|
* this bus topic drives notifier rules + live UI. See
|
|
611
611
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5391,7 +5391,7 @@ var ZodIssueCode = {
|
|
|
5391
5391
|
var ZodFirstPartyTypeKind;
|
|
5392
5392
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5393
5393
|
//#endregion
|
|
5394
|
-
//#region ../types/dist/sleep-
|
|
5394
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5395
5395
|
/**
|
|
5396
5396
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5397
5397
|
* window to float samples (D455).
|
|
@@ -7342,13 +7342,30 @@ new Set([
|
|
|
7342
7342
|
"scene",
|
|
7343
7343
|
"motion",
|
|
7344
7344
|
"object",
|
|
7345
|
-
"audio"
|
|
7345
|
+
"audio",
|
|
7346
|
+
"mosaic"
|
|
7346
7347
|
]);
|
|
7347
|
-
|
|
7348
|
+
/**
|
|
7349
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7350
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7351
|
+
* does not re-spell the list and drift from it.
|
|
7352
|
+
*/
|
|
7353
|
+
var EVENT_OWNER_TYPES = [
|
|
7348
7354
|
"motion",
|
|
7349
7355
|
"object",
|
|
7350
7356
|
"audio"
|
|
7351
|
-
]
|
|
7357
|
+
];
|
|
7358
|
+
/**
|
|
7359
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7360
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7361
|
+
* `(table, id)`).
|
|
7362
|
+
*
|
|
7363
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7364
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7365
|
+
* nothing failing until a caller asked.
|
|
7366
|
+
*/
|
|
7367
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7368
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7352
7369
|
var EncodeProfileSchema = object({
|
|
7353
7370
|
video: object({
|
|
7354
7371
|
codec: _enum([
|
|
@@ -12494,6 +12511,16 @@ method(object({
|
|
|
12494
12511
|
filter: QueryFilterSchema.optional(),
|
|
12495
12512
|
columns: array(string()).readonly().optional()
|
|
12496
12513
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12514
|
+
namespace: string().optional(),
|
|
12515
|
+
collection: string(),
|
|
12516
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12517
|
+
* index on the collection. Never empty. */
|
|
12518
|
+
conflict: array(string()).readonly(),
|
|
12519
|
+
record: BulkRecordSchema
|
|
12520
|
+
}), object({
|
|
12521
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12522
|
+
* row's own id on an update. */
|
|
12523
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12497
12524
|
namespace: string().optional(),
|
|
12498
12525
|
collection: string(),
|
|
12499
12526
|
record: object({
|
|
@@ -12628,6 +12655,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12628
12655
|
id: union([string(), number()]) }), {
|
|
12629
12656
|
kind: "mutation",
|
|
12630
12657
|
auth: "admin"
|
|
12658
|
+
}), method(object({
|
|
12659
|
+
namespace: string().optional(),
|
|
12660
|
+
collection: string(),
|
|
12661
|
+
conflict: array(string()).readonly(),
|
|
12662
|
+
record: BulkRecordSchema
|
|
12663
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12664
|
+
kind: "mutation",
|
|
12665
|
+
auth: "admin"
|
|
12631
12666
|
}), method(object({
|
|
12632
12667
|
namespace: string().optional(),
|
|
12633
12668
|
collection: string(),
|
|
@@ -18863,8 +18898,8 @@ var TrackPositionSchema = object({
|
|
|
18863
18898
|
var TrackSnapshotSchema = object({
|
|
18864
18899
|
timestamp: number(),
|
|
18865
18900
|
position: TrackPositionSchema,
|
|
18866
|
-
/**
|
|
18867
|
-
|
|
18901
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
18902
|
+
mediaId: number().int()
|
|
18868
18903
|
});
|
|
18869
18904
|
/**
|
|
18870
18905
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19468,14 +19503,14 @@ var ObjectEventSchema = object({
|
|
|
19468
19503
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19469
19504
|
frameWidth: number().optional(),
|
|
19470
19505
|
frameHeight: number().optional(),
|
|
19471
|
-
/**
|
|
19472
|
-
|
|
19473
|
-
/** Design B:
|
|
19506
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19507
|
+
mediaId: number().int().optional(),
|
|
19508
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19474
19509
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19475
|
-
* (`/addon/<addonId>/event-media/<
|
|
19510
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19476
19511
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19477
|
-
* sources — consumers fall back to `
|
|
19478
|
-
|
|
19512
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19513
|
+
keyFrameMediaId: number().int().optional(),
|
|
19479
19514
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19480
19515
|
mediaUrl: string().optional(),
|
|
19481
19516
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19525,7 +19560,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19525
19560
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19526
19561
|
*
|
|
19527
19562
|
* `url` points at the `event-media` data plane
|
|
19528
|
-
* (`/addon/<addonId>/event-media/<
|
|
19563
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19529
19564
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19530
19565
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19531
19566
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19533,10 +19568,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19533
19568
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19534
19569
|
* (per-device scoping).
|
|
19535
19570
|
*
|
|
19536
|
-
* The URL is built from the row's
|
|
19537
|
-
*
|
|
19571
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19572
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19573
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19538
19574
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19539
|
-
* `faceCrop`/`plateCrop
|
|
19575
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19576
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19577
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19540
19578
|
*
|
|
19541
19579
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19542
19580
|
*
|
|
@@ -19549,7 +19587,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19549
19587
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19550
19588
|
*/
|
|
19551
19589
|
var MediaFileSchema = object({
|
|
19552
|
-
|
|
19590
|
+
/**
|
|
19591
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19592
|
+
*
|
|
19593
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19594
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19595
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19596
|
+
* different rows that spell the same number, and a track whose
|
|
19597
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19598
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19599
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19600
|
+
* at all.
|
|
19601
|
+
*/
|
|
19602
|
+
mediaId: number().int(),
|
|
19553
19603
|
kind: MediaFileKindEnum,
|
|
19554
19604
|
sizeBytes: number(),
|
|
19555
19605
|
timestamp: number()
|
|
@@ -19657,7 +19707,7 @@ var RetrainTrackSchema = object({
|
|
|
19657
19707
|
});
|
|
19658
19708
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19659
19709
|
var RetrainFrameCandidateSchema = object({
|
|
19660
|
-
|
|
19710
|
+
mediaId: number().int(),
|
|
19661
19711
|
kind: MediaFileKindEnum,
|
|
19662
19712
|
timestamp: number(),
|
|
19663
19713
|
sizeBytes: number().int(),
|
|
@@ -19671,7 +19721,7 @@ var RetrainFrameSchema = object({
|
|
|
19671
19721
|
deviceId: number(),
|
|
19672
19722
|
trackId: string(),
|
|
19673
19723
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19674
|
-
|
|
19724
|
+
sourceMediaId: number().int(),
|
|
19675
19725
|
sourceKind: MediaFileKindEnum,
|
|
19676
19726
|
sizeBytes: number().int(),
|
|
19677
19727
|
width: number().int(),
|
|
@@ -19687,7 +19737,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19687
19737
|
var RetrainFrameSelectionSchema = object({
|
|
19688
19738
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19689
19739
|
refused: array(object({
|
|
19690
|
-
|
|
19740
|
+
sourceMediaId: number().int(),
|
|
19691
19741
|
reason: RetrainCopyRefusalSchema
|
|
19692
19742
|
})).readonly()
|
|
19693
19743
|
});
|
|
@@ -19695,7 +19745,7 @@ var RetrainFrameListSchema = object({
|
|
|
19695
19745
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19696
19746
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19697
19747
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19698
|
-
|
|
19748
|
+
autoPickMediaId: number().int().optional()
|
|
19699
19749
|
});
|
|
19700
19750
|
/** What the operator asked the assist to look for. */
|
|
19701
19751
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -19790,9 +19840,11 @@ var RecentTracksQueryInput = object({
|
|
|
19790
19840
|
});
|
|
19791
19841
|
/**
|
|
19792
19842
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
19793
|
-
* `
|
|
19794
|
-
* served by the event-media plane
|
|
19795
|
-
* member visible has been materialised
|
|
19843
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
19844
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
19845
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
19846
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
19847
|
+
* row once event ids became per-table rowids).
|
|
19796
19848
|
*/
|
|
19797
19849
|
var SummarySchema = object({
|
|
19798
19850
|
id: string(),
|
|
@@ -19801,7 +19853,7 @@ var SummarySchema = object({
|
|
|
19801
19853
|
lastActiveAt: number(),
|
|
19802
19854
|
sealedAt: number().nullable(),
|
|
19803
19855
|
memberCount: number().int().nonnegative(),
|
|
19804
|
-
|
|
19856
|
+
groupShotMediaId: number().int().nullable()
|
|
19805
19857
|
});
|
|
19806
19858
|
var SummariesQueryInput = object({
|
|
19807
19859
|
deviceIds: array(number()).min(1),
|
|
@@ -20355,7 +20407,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20355
20407
|
}), method(object({
|
|
20356
20408
|
deviceId: number(),
|
|
20357
20409
|
trackId: string(),
|
|
20358
|
-
|
|
20410
|
+
mediaIds: array(number().int()).min(1)
|
|
20359
20411
|
}), RetrainFrameSelectionSchema, {
|
|
20360
20412
|
kind: "mutation",
|
|
20361
20413
|
auth: "admin"
|
|
@@ -20423,7 +20475,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20423
20475
|
kind: "query",
|
|
20424
20476
|
auth: "admin"
|
|
20425
20477
|
}), method(object({
|
|
20426
|
-
|
|
20478
|
+
/** Which of the three event tables owns the row. */
|
|
20479
|
+
ownerType: EventOwnerTypeSchema,
|
|
20480
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20481
|
+
eventId: number().int(),
|
|
20427
20482
|
kind: MediaFileKindEnum.optional(),
|
|
20428
20483
|
deviceId: number()
|
|
20429
20484
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20434,7 +20489,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20434
20489
|
trackId: string(),
|
|
20435
20490
|
deviceId: number()
|
|
20436
20491
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20437
|
-
|
|
20492
|
+
ownerType: EventOwnerTypeSchema,
|
|
20493
|
+
eventId: number().int(),
|
|
20438
20494
|
deviceId: number()
|
|
20439
20495
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20440
20496
|
kind: "mutation",
|
|
@@ -24897,8 +24953,8 @@ var IdentitySchema = object({
|
|
|
24897
24953
|
id: string(),
|
|
24898
24954
|
name: string(),
|
|
24899
24955
|
sampleCount: number().int().nonnegative(),
|
|
24900
|
-
|
|
24901
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
24956
|
+
coverMediaId: number().int().optional(),
|
|
24957
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
24902
24958
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
24903
24959
|
coverBase64: string().optional()
|
|
24904
24960
|
});
|
|
@@ -24924,8 +24980,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
24924
24980
|
enrolledAt: number().int(),
|
|
24925
24981
|
deviceId: number().int().optional(),
|
|
24926
24982
|
source: _enum(["detected", "photo"]),
|
|
24927
|
-
/** The enrolled crop's media
|
|
24928
|
-
|
|
24983
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
24984
|
+
mediaId: number().int().optional(),
|
|
24929
24985
|
/**
|
|
24930
24986
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
24931
24987
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -24994,15 +25050,15 @@ var FaceInfoSchema = object({
|
|
|
24994
25050
|
*/
|
|
24995
25051
|
cropUrl: string().optional(),
|
|
24996
25052
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
24997
|
-
* view draw the box over the native `
|
|
25053
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
24998
25054
|
* legacy rows written before design B. */
|
|
24999
25055
|
faceBbox: BoundingBoxSchema.optional(),
|
|
25000
25056
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
25001
25057
|
* Fetch the native JPEG via the event-media data-plane
|
|
25002
|
-
* (`/addon/<addonId>/event-media/<
|
|
25058
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
25003
25059
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
25004
25060
|
* back to the inline `base64` face crop. */
|
|
25005
|
-
|
|
25061
|
+
keyFrameMediaId: number().int().optional(),
|
|
25006
25062
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
25007
25063
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
25008
25064
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -25071,11 +25127,14 @@ var FaceClusterSchema = object({
|
|
|
25071
25127
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
25072
25128
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
25073
25129
|
*
|
|
25074
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
25075
|
-
* media
|
|
25130
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
25131
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
25132
|
+
* access decision.
|
|
25076
25133
|
*/
|
|
25077
25134
|
var MediaFileLiteSchema$1 = object({
|
|
25078
|
-
|
|
25135
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
25136
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
25137
|
+
mediaId: number().int(),
|
|
25079
25138
|
kind: string(),
|
|
25080
25139
|
url: string(),
|
|
25081
25140
|
sizeBytes: number(),
|
|
@@ -25092,7 +25151,7 @@ method(object({
|
|
|
25092
25151
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
25093
25152
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
25094
25153
|
*
|
|
25095
|
-
* Nothing loses its avatar: `
|
|
25154
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
25096
25155
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
25097
25156
|
*
|
|
25098
25157
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -27560,8 +27619,8 @@ var VehicleSchema = object({
|
|
|
27560
27619
|
id: string(),
|
|
27561
27620
|
name: string(),
|
|
27562
27621
|
sampleCount: number().int().nonnegative(),
|
|
27563
|
-
|
|
27564
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
27622
|
+
coverMediaId: number().int().optional(),
|
|
27623
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
27565
27624
|
coverBase64: string().optional()
|
|
27566
27625
|
});
|
|
27567
27626
|
var VehicleSampleInfoSchema = object({
|
|
@@ -27594,7 +27653,7 @@ var PlateInfoSchema = object({
|
|
|
27594
27653
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
27595
27654
|
plateBbox: BoundingBoxSchema.optional(),
|
|
27596
27655
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
27597
|
-
|
|
27656
|
+
keyFrameMediaId: number().int().optional(),
|
|
27598
27657
|
base64: string().optional(),
|
|
27599
27658
|
/**
|
|
27600
27659
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -27615,11 +27674,14 @@ var PlateInfoSchema = object({
|
|
|
27615
27674
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27616
27675
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27617
27676
|
*
|
|
27618
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27619
|
-
* media
|
|
27677
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27678
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27679
|
+
* access decision.
|
|
27620
27680
|
*/
|
|
27621
27681
|
var MediaFileLiteSchema = object({
|
|
27622
|
-
|
|
27682
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27683
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27684
|
+
mediaId: number().int(),
|
|
27623
27685
|
kind: string(),
|
|
27624
27686
|
url: string(),
|
|
27625
27687
|
sizeBytes: number(),
|
|
@@ -27678,7 +27740,7 @@ method(object({
|
|
|
27678
27740
|
}), method(object({
|
|
27679
27741
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
27680
27742
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
27681
|
-
* option; `
|
|
27743
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
27682
27744
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
27683
27745
|
* resolves to `false` and is exactly the intended default. */
|
|
27684
27746
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -29002,7 +29064,14 @@ var SceneReferenceSchema = object({
|
|
|
29002
29064
|
modelId: string(),
|
|
29003
29065
|
condition: SceneConditionSchema,
|
|
29004
29066
|
capturedAt: number(),
|
|
29005
|
-
|
|
29067
|
+
/**
|
|
29068
|
+
* The reference thumbnail's media ROW id (D482).
|
|
29069
|
+
*
|
|
29070
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
29071
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
29072
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
29073
|
+
*/
|
|
29074
|
+
thumbnailMediaId: number().int().optional(),
|
|
29006
29075
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
29007
29076
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
29008
29077
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -30450,7 +30519,7 @@ var StationaryObjectSchema = object({
|
|
|
30450
30519
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
30451
30520
|
label: string().optional(),
|
|
30452
30521
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
30453
|
-
|
|
30522
|
+
keyFrameMediaId: number().int().optional()
|
|
30454
30523
|
});
|
|
30455
30524
|
var CameraOccupancySnapshotSchema = object({
|
|
30456
30525
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -31606,6 +31675,12 @@ Object.freeze({
|
|
|
31606
31675
|
addonId: null,
|
|
31607
31676
|
access: "create"
|
|
31608
31677
|
},
|
|
31678
|
+
"dataStoreProvider.upsert": {
|
|
31679
|
+
capName: "data-store-provider",
|
|
31680
|
+
capScope: "system",
|
|
31681
|
+
addonId: null,
|
|
31682
|
+
access: "create"
|
|
31683
|
+
},
|
|
31609
31684
|
"dayNight.getOptions": {
|
|
31610
31685
|
capName: "day-night",
|
|
31611
31686
|
capScope: "device",
|
|
@@ -35470,6 +35545,12 @@ Object.freeze({
|
|
|
35470
35545
|
addonId: null,
|
|
35471
35546
|
access: "create"
|
|
35472
35547
|
},
|
|
35548
|
+
"settingsStore.upsert": {
|
|
35549
|
+
capName: "settings-store",
|
|
35550
|
+
capScope: "system",
|
|
35551
|
+
addonId: null,
|
|
35552
|
+
access: "create"
|
|
35553
|
+
},
|
|
35473
35554
|
"smtpProvider.getStatus": {
|
|
35474
35555
|
capName: "smtp-provider",
|
|
35475
35556
|
capScope: "system",
|
|
@@ -39,7 +39,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
39
39
|
var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
40
40
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
41
41
|
//#endregion
|
|
42
|
-
//#region ../types/dist/event-category-
|
|
42
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
43
43
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
44
44
|
EventCategory["SystemBoot"] = "system.boot";
|
|
45
45
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -600,7 +600,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
600
600
|
* a package zone — a newly-appeared stationary object of a package class
|
|
601
601
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
602
602
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
603
|
-
* entryId, className, zoneIds,
|
|
603
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
604
604
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
605
605
|
* this bus topic drives notifier rules + live UI. See
|
|
606
606
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5386,7 +5386,7 @@ var ZodIssueCode = {
|
|
|
5386
5386
|
var ZodFirstPartyTypeKind;
|
|
5387
5387
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5388
5388
|
//#endregion
|
|
5389
|
-
//#region ../types/dist/sleep-
|
|
5389
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5390
5390
|
/**
|
|
5391
5391
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5392
5392
|
* window to float samples (D455).
|
|
@@ -7337,13 +7337,30 @@ new Set([
|
|
|
7337
7337
|
"scene",
|
|
7338
7338
|
"motion",
|
|
7339
7339
|
"object",
|
|
7340
|
-
"audio"
|
|
7340
|
+
"audio",
|
|
7341
|
+
"mosaic"
|
|
7341
7342
|
]);
|
|
7342
|
-
|
|
7343
|
+
/**
|
|
7344
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7345
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7346
|
+
* does not re-spell the list and drift from it.
|
|
7347
|
+
*/
|
|
7348
|
+
var EVENT_OWNER_TYPES = [
|
|
7343
7349
|
"motion",
|
|
7344
7350
|
"object",
|
|
7345
7351
|
"audio"
|
|
7346
|
-
]
|
|
7352
|
+
];
|
|
7353
|
+
/**
|
|
7354
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7355
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7356
|
+
* `(table, id)`).
|
|
7357
|
+
*
|
|
7358
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7359
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7360
|
+
* nothing failing until a caller asked.
|
|
7361
|
+
*/
|
|
7362
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7363
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7347
7364
|
var EncodeProfileSchema = object({
|
|
7348
7365
|
video: object({
|
|
7349
7366
|
codec: _enum([
|
|
@@ -12489,6 +12506,16 @@ method(object({
|
|
|
12489
12506
|
filter: QueryFilterSchema.optional(),
|
|
12490
12507
|
columns: array(string()).readonly().optional()
|
|
12491
12508
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12509
|
+
namespace: string().optional(),
|
|
12510
|
+
collection: string(),
|
|
12511
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12512
|
+
* index on the collection. Never empty. */
|
|
12513
|
+
conflict: array(string()).readonly(),
|
|
12514
|
+
record: BulkRecordSchema
|
|
12515
|
+
}), object({
|
|
12516
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12517
|
+
* row's own id on an update. */
|
|
12518
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12492
12519
|
namespace: string().optional(),
|
|
12493
12520
|
collection: string(),
|
|
12494
12521
|
record: object({
|
|
@@ -12623,6 +12650,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12623
12650
|
id: union([string(), number()]) }), {
|
|
12624
12651
|
kind: "mutation",
|
|
12625
12652
|
auth: "admin"
|
|
12653
|
+
}), method(object({
|
|
12654
|
+
namespace: string().optional(),
|
|
12655
|
+
collection: string(),
|
|
12656
|
+
conflict: array(string()).readonly(),
|
|
12657
|
+
record: BulkRecordSchema
|
|
12658
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12659
|
+
kind: "mutation",
|
|
12660
|
+
auth: "admin"
|
|
12626
12661
|
}), method(object({
|
|
12627
12662
|
namespace: string().optional(),
|
|
12628
12663
|
collection: string(),
|
|
@@ -18858,8 +18893,8 @@ var TrackPositionSchema = object({
|
|
|
18858
18893
|
var TrackSnapshotSchema = object({
|
|
18859
18894
|
timestamp: number(),
|
|
18860
18895
|
position: TrackPositionSchema,
|
|
18861
|
-
/**
|
|
18862
|
-
|
|
18896
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
18897
|
+
mediaId: number().int()
|
|
18863
18898
|
});
|
|
18864
18899
|
/**
|
|
18865
18900
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19463,14 +19498,14 @@ var ObjectEventSchema = object({
|
|
|
19463
19498
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19464
19499
|
frameWidth: number().optional(),
|
|
19465
19500
|
frameHeight: number().optional(),
|
|
19466
|
-
/**
|
|
19467
|
-
|
|
19468
|
-
/** Design B:
|
|
19501
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19502
|
+
mediaId: number().int().optional(),
|
|
19503
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19469
19504
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19470
|
-
* (`/addon/<addonId>/event-media/<
|
|
19505
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19471
19506
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19472
|
-
* sources — consumers fall back to `
|
|
19473
|
-
|
|
19507
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19508
|
+
keyFrameMediaId: number().int().optional(),
|
|
19474
19509
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19475
19510
|
mediaUrl: string().optional(),
|
|
19476
19511
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19520,7 +19555,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19520
19555
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19521
19556
|
*
|
|
19522
19557
|
* `url` points at the `event-media` data plane
|
|
19523
|
-
* (`/addon/<addonId>/event-media/<
|
|
19558
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19524
19559
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19525
19560
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19526
19561
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19528,10 +19563,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19528
19563
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19529
19564
|
* (per-device scoping).
|
|
19530
19565
|
*
|
|
19531
|
-
* The URL is built from the row's
|
|
19532
|
-
*
|
|
19566
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19567
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19568
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19533
19569
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19534
|
-
* `faceCrop`/`plateCrop
|
|
19570
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19571
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19572
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19535
19573
|
*
|
|
19536
19574
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19537
19575
|
*
|
|
@@ -19544,7 +19582,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19544
19582
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19545
19583
|
*/
|
|
19546
19584
|
var MediaFileSchema = object({
|
|
19547
|
-
|
|
19585
|
+
/**
|
|
19586
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19587
|
+
*
|
|
19588
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19589
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19590
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19591
|
+
* different rows that spell the same number, and a track whose
|
|
19592
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19593
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19594
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19595
|
+
* at all.
|
|
19596
|
+
*/
|
|
19597
|
+
mediaId: number().int(),
|
|
19548
19598
|
kind: MediaFileKindEnum,
|
|
19549
19599
|
sizeBytes: number(),
|
|
19550
19600
|
timestamp: number()
|
|
@@ -19652,7 +19702,7 @@ var RetrainTrackSchema = object({
|
|
|
19652
19702
|
});
|
|
19653
19703
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19654
19704
|
var RetrainFrameCandidateSchema = object({
|
|
19655
|
-
|
|
19705
|
+
mediaId: number().int(),
|
|
19656
19706
|
kind: MediaFileKindEnum,
|
|
19657
19707
|
timestamp: number(),
|
|
19658
19708
|
sizeBytes: number().int(),
|
|
@@ -19666,7 +19716,7 @@ var RetrainFrameSchema = object({
|
|
|
19666
19716
|
deviceId: number(),
|
|
19667
19717
|
trackId: string(),
|
|
19668
19718
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19669
|
-
|
|
19719
|
+
sourceMediaId: number().int(),
|
|
19670
19720
|
sourceKind: MediaFileKindEnum,
|
|
19671
19721
|
sizeBytes: number().int(),
|
|
19672
19722
|
width: number().int(),
|
|
@@ -19682,7 +19732,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19682
19732
|
var RetrainFrameSelectionSchema = object({
|
|
19683
19733
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19684
19734
|
refused: array(object({
|
|
19685
|
-
|
|
19735
|
+
sourceMediaId: number().int(),
|
|
19686
19736
|
reason: RetrainCopyRefusalSchema
|
|
19687
19737
|
})).readonly()
|
|
19688
19738
|
});
|
|
@@ -19690,7 +19740,7 @@ var RetrainFrameListSchema = object({
|
|
|
19690
19740
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19691
19741
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19692
19742
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19693
|
-
|
|
19743
|
+
autoPickMediaId: number().int().optional()
|
|
19694
19744
|
});
|
|
19695
19745
|
/** What the operator asked the assist to look for. */
|
|
19696
19746
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -19785,9 +19835,11 @@ var RecentTracksQueryInput = object({
|
|
|
19785
19835
|
});
|
|
19786
19836
|
/**
|
|
19787
19837
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
19788
|
-
* `
|
|
19789
|
-
* served by the event-media plane
|
|
19790
|
-
* member visible has been materialised
|
|
19838
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
19839
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
19840
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
19841
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
19842
|
+
* row once event ids became per-table rowids).
|
|
19791
19843
|
*/
|
|
19792
19844
|
var SummarySchema = object({
|
|
19793
19845
|
id: string(),
|
|
@@ -19796,7 +19848,7 @@ var SummarySchema = object({
|
|
|
19796
19848
|
lastActiveAt: number(),
|
|
19797
19849
|
sealedAt: number().nullable(),
|
|
19798
19850
|
memberCount: number().int().nonnegative(),
|
|
19799
|
-
|
|
19851
|
+
groupShotMediaId: number().int().nullable()
|
|
19800
19852
|
});
|
|
19801
19853
|
var SummariesQueryInput = object({
|
|
19802
19854
|
deviceIds: array(number()).min(1),
|
|
@@ -20350,7 +20402,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20350
20402
|
}), method(object({
|
|
20351
20403
|
deviceId: number(),
|
|
20352
20404
|
trackId: string(),
|
|
20353
|
-
|
|
20405
|
+
mediaIds: array(number().int()).min(1)
|
|
20354
20406
|
}), RetrainFrameSelectionSchema, {
|
|
20355
20407
|
kind: "mutation",
|
|
20356
20408
|
auth: "admin"
|
|
@@ -20418,7 +20470,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20418
20470
|
kind: "query",
|
|
20419
20471
|
auth: "admin"
|
|
20420
20472
|
}), method(object({
|
|
20421
|
-
|
|
20473
|
+
/** Which of the three event tables owns the row. */
|
|
20474
|
+
ownerType: EventOwnerTypeSchema,
|
|
20475
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20476
|
+
eventId: number().int(),
|
|
20422
20477
|
kind: MediaFileKindEnum.optional(),
|
|
20423
20478
|
deviceId: number()
|
|
20424
20479
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20429,7 +20484,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20429
20484
|
trackId: string(),
|
|
20430
20485
|
deviceId: number()
|
|
20431
20486
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20432
|
-
|
|
20487
|
+
ownerType: EventOwnerTypeSchema,
|
|
20488
|
+
eventId: number().int(),
|
|
20433
20489
|
deviceId: number()
|
|
20434
20490
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20435
20491
|
kind: "mutation",
|
|
@@ -24892,8 +24948,8 @@ var IdentitySchema = object({
|
|
|
24892
24948
|
id: string(),
|
|
24893
24949
|
name: string(),
|
|
24894
24950
|
sampleCount: number().int().nonnegative(),
|
|
24895
|
-
|
|
24896
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
24951
|
+
coverMediaId: number().int().optional(),
|
|
24952
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
24897
24953
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
24898
24954
|
coverBase64: string().optional()
|
|
24899
24955
|
});
|
|
@@ -24919,8 +24975,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
24919
24975
|
enrolledAt: number().int(),
|
|
24920
24976
|
deviceId: number().int().optional(),
|
|
24921
24977
|
source: _enum(["detected", "photo"]),
|
|
24922
|
-
/** The enrolled crop's media
|
|
24923
|
-
|
|
24978
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
24979
|
+
mediaId: number().int().optional(),
|
|
24924
24980
|
/**
|
|
24925
24981
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
24926
24982
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -24989,15 +25045,15 @@ var FaceInfoSchema = object({
|
|
|
24989
25045
|
*/
|
|
24990
25046
|
cropUrl: string().optional(),
|
|
24991
25047
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
24992
|
-
* view draw the box over the native `
|
|
25048
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
24993
25049
|
* legacy rows written before design B. */
|
|
24994
25050
|
faceBbox: BoundingBoxSchema.optional(),
|
|
24995
25051
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
24996
25052
|
* Fetch the native JPEG via the event-media data-plane
|
|
24997
|
-
* (`/addon/<addonId>/event-media/<
|
|
25053
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
24998
25054
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
24999
25055
|
* back to the inline `base64` face crop. */
|
|
25000
|
-
|
|
25056
|
+
keyFrameMediaId: number().int().optional(),
|
|
25001
25057
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
25002
25058
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
25003
25059
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -25066,11 +25122,14 @@ var FaceClusterSchema = object({
|
|
|
25066
25122
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
25067
25123
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
25068
25124
|
*
|
|
25069
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
25070
|
-
* media
|
|
25125
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
25126
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
25127
|
+
* access decision.
|
|
25071
25128
|
*/
|
|
25072
25129
|
var MediaFileLiteSchema$1 = object({
|
|
25073
|
-
|
|
25130
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
25131
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
25132
|
+
mediaId: number().int(),
|
|
25074
25133
|
kind: string(),
|
|
25075
25134
|
url: string(),
|
|
25076
25135
|
sizeBytes: number(),
|
|
@@ -25087,7 +25146,7 @@ method(object({
|
|
|
25087
25146
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
25088
25147
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
25089
25148
|
*
|
|
25090
|
-
* Nothing loses its avatar: `
|
|
25149
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
25091
25150
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
25092
25151
|
*
|
|
25093
25152
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -27555,8 +27614,8 @@ var VehicleSchema = object({
|
|
|
27555
27614
|
id: string(),
|
|
27556
27615
|
name: string(),
|
|
27557
27616
|
sampleCount: number().int().nonnegative(),
|
|
27558
|
-
|
|
27559
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
27617
|
+
coverMediaId: number().int().optional(),
|
|
27618
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
27560
27619
|
coverBase64: string().optional()
|
|
27561
27620
|
});
|
|
27562
27621
|
var VehicleSampleInfoSchema = object({
|
|
@@ -27589,7 +27648,7 @@ var PlateInfoSchema = object({
|
|
|
27589
27648
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
27590
27649
|
plateBbox: BoundingBoxSchema.optional(),
|
|
27591
27650
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
27592
|
-
|
|
27651
|
+
keyFrameMediaId: number().int().optional(),
|
|
27593
27652
|
base64: string().optional(),
|
|
27594
27653
|
/**
|
|
27595
27654
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -27610,11 +27669,14 @@ var PlateInfoSchema = object({
|
|
|
27610
27669
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27611
27670
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27612
27671
|
*
|
|
27613
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27614
|
-
* media
|
|
27672
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27673
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27674
|
+
* access decision.
|
|
27615
27675
|
*/
|
|
27616
27676
|
var MediaFileLiteSchema = object({
|
|
27617
|
-
|
|
27677
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27678
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27679
|
+
mediaId: number().int(),
|
|
27618
27680
|
kind: string(),
|
|
27619
27681
|
url: string(),
|
|
27620
27682
|
sizeBytes: number(),
|
|
@@ -27673,7 +27735,7 @@ method(object({
|
|
|
27673
27735
|
}), method(object({
|
|
27674
27736
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
27675
27737
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
27676
|
-
* option; `
|
|
27738
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
27677
27739
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
27678
27740
|
* resolves to `false` and is exactly the intended default. */
|
|
27679
27741
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -28997,7 +29059,14 @@ var SceneReferenceSchema = object({
|
|
|
28997
29059
|
modelId: string(),
|
|
28998
29060
|
condition: SceneConditionSchema,
|
|
28999
29061
|
capturedAt: number(),
|
|
29000
|
-
|
|
29062
|
+
/**
|
|
29063
|
+
* The reference thumbnail's media ROW id (D482).
|
|
29064
|
+
*
|
|
29065
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
29066
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
29067
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
29068
|
+
*/
|
|
29069
|
+
thumbnailMediaId: number().int().optional(),
|
|
29001
29070
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
29002
29071
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
29003
29072
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -30445,7 +30514,7 @@ var StationaryObjectSchema = object({
|
|
|
30445
30514
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
30446
30515
|
label: string().optional(),
|
|
30447
30516
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
30448
|
-
|
|
30517
|
+
keyFrameMediaId: number().int().optional()
|
|
30449
30518
|
});
|
|
30450
30519
|
var CameraOccupancySnapshotSchema = object({
|
|
30451
30520
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -31601,6 +31670,12 @@ Object.freeze({
|
|
|
31601
31670
|
addonId: null,
|
|
31602
31671
|
access: "create"
|
|
31603
31672
|
},
|
|
31673
|
+
"dataStoreProvider.upsert": {
|
|
31674
|
+
capName: "data-store-provider",
|
|
31675
|
+
capScope: "system",
|
|
31676
|
+
addonId: null,
|
|
31677
|
+
access: "create"
|
|
31678
|
+
},
|
|
31604
31679
|
"dayNight.getOptions": {
|
|
31605
31680
|
capName: "day-night",
|
|
31606
31681
|
capScope: "device",
|
|
@@ -35465,6 +35540,12 @@ Object.freeze({
|
|
|
35465
35540
|
addonId: null,
|
|
35466
35541
|
access: "create"
|
|
35467
35542
|
},
|
|
35543
|
+
"settingsStore.upsert": {
|
|
35544
|
+
capName: "settings-store",
|
|
35545
|
+
capScope: "system",
|
|
35546
|
+
addonId: null,
|
|
35547
|
+
access: "create"
|
|
35548
|
+
},
|
|
35468
35549
|
"smtpProvider.getStatus": {
|
|
35469
35550
|
capName: "smtp-provider",
|
|
35470
35551
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-mqtt-broker",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.100",
|
|
4
4
|
"description": "MQTT broker registry addon for CamStack — manages external broker entries + an optional embedded aedes broker. Consumers spin up their own `mqtt.js` clients via the `mqtt-broker` cap.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|