@camstack/addon-provider-rademacher 0.2.97 → 0.2.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.js +131 -50
- package/dist/addon.mjs +131 -50
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -984,7 +984,7 @@ var Rademacher = class {
|
|
|
984
984
|
}
|
|
985
985
|
};
|
|
986
986
|
//#endregion
|
|
987
|
-
//#region ../types/dist/event-category-
|
|
987
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
988
988
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
989
989
|
EventCategory["SystemBoot"] = "system.boot";
|
|
990
990
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -1545,7 +1545,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
1545
1545
|
* a package zone — a newly-appeared stationary object of a package class
|
|
1546
1546
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
1547
1547
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
1548
|
-
* entryId, className, zoneIds,
|
|
1548
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
1549
1549
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
1550
1550
|
* this bus topic drives notifier rules + live UI. See
|
|
1551
1551
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -6331,7 +6331,7 @@ var ZodIssueCode = {
|
|
|
6331
6331
|
var ZodFirstPartyTypeKind;
|
|
6332
6332
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6333
6333
|
//#endregion
|
|
6334
|
-
//#region ../types/dist/sleep-
|
|
6334
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
6335
6335
|
/**
|
|
6336
6336
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6337
6337
|
* window to float samples (D455).
|
|
@@ -8298,13 +8298,30 @@ new Set([
|
|
|
8298
8298
|
"scene",
|
|
8299
8299
|
"motion",
|
|
8300
8300
|
"object",
|
|
8301
|
-
"audio"
|
|
8301
|
+
"audio",
|
|
8302
|
+
"mosaic"
|
|
8302
8303
|
]);
|
|
8303
|
-
|
|
8304
|
+
/**
|
|
8305
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
8306
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
8307
|
+
* does not re-spell the list and drift from it.
|
|
8308
|
+
*/
|
|
8309
|
+
var EVENT_OWNER_TYPES = [
|
|
8304
8310
|
"motion",
|
|
8305
8311
|
"object",
|
|
8306
8312
|
"audio"
|
|
8307
|
-
]
|
|
8313
|
+
];
|
|
8314
|
+
/**
|
|
8315
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
8316
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
8317
|
+
* `(table, id)`).
|
|
8318
|
+
*
|
|
8319
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
8320
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
8321
|
+
* nothing failing until a caller asked.
|
|
8322
|
+
*/
|
|
8323
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
8324
|
+
new Set(EVENT_OWNER_TYPES);
|
|
8308
8325
|
var EncodeProfileSchema = object({
|
|
8309
8326
|
video: object({
|
|
8310
8327
|
codec: _enum([
|
|
@@ -13503,6 +13520,16 @@ method(object({
|
|
|
13503
13520
|
filter: QueryFilterSchema.optional(),
|
|
13504
13521
|
columns: array(string()).readonly().optional()
|
|
13505
13522
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
13523
|
+
namespace: string().optional(),
|
|
13524
|
+
collection: string(),
|
|
13525
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
13526
|
+
* index on the collection. Never empty. */
|
|
13527
|
+
conflict: array(string()).readonly(),
|
|
13528
|
+
record: BulkRecordSchema
|
|
13529
|
+
}), object({
|
|
13530
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
13531
|
+
* row's own id on an update. */
|
|
13532
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
13506
13533
|
namespace: string().optional(),
|
|
13507
13534
|
collection: string(),
|
|
13508
13535
|
record: object({
|
|
@@ -13637,6 +13664,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
13637
13664
|
id: union([string(), number()]) }), {
|
|
13638
13665
|
kind: "mutation",
|
|
13639
13666
|
auth: "admin"
|
|
13667
|
+
}), method(object({
|
|
13668
|
+
namespace: string().optional(),
|
|
13669
|
+
collection: string(),
|
|
13670
|
+
conflict: array(string()).readonly(),
|
|
13671
|
+
record: BulkRecordSchema
|
|
13672
|
+
}), object({ id: union([string(), number()]) }), {
|
|
13673
|
+
kind: "mutation",
|
|
13674
|
+
auth: "admin"
|
|
13640
13675
|
}), method(object({
|
|
13641
13676
|
namespace: string().optional(),
|
|
13642
13677
|
collection: string(),
|
|
@@ -20119,8 +20154,8 @@ var TrackPositionSchema = object({
|
|
|
20119
20154
|
var TrackSnapshotSchema = object({
|
|
20120
20155
|
timestamp: number(),
|
|
20121
20156
|
position: TrackPositionSchema,
|
|
20122
|
-
/**
|
|
20123
|
-
|
|
20157
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
20158
|
+
mediaId: number().int()
|
|
20124
20159
|
});
|
|
20125
20160
|
/**
|
|
20126
20161
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -20724,14 +20759,14 @@ var ObjectEventSchema = object({
|
|
|
20724
20759
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
20725
20760
|
frameWidth: number().optional(),
|
|
20726
20761
|
frameHeight: number().optional(),
|
|
20727
|
-
/**
|
|
20728
|
-
|
|
20729
|
-
/** Design B:
|
|
20762
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
20763
|
+
mediaId: number().int().optional(),
|
|
20764
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
20730
20765
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
20731
|
-
* (`/addon/<addonId>/event-media/<
|
|
20766
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
20732
20767
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
20733
|
-
* sources — consumers fall back to `
|
|
20734
|
-
|
|
20768
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
20769
|
+
keyFrameMediaId: number().int().optional(),
|
|
20735
20770
|
/** Populated by B5 (recording playback URL for this event). */
|
|
20736
20771
|
mediaUrl: string().optional(),
|
|
20737
20772
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -20781,7 +20816,7 @@ var MediaFileKindEnum = _enum([
|
|
|
20781
20816
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
20782
20817
|
*
|
|
20783
20818
|
* `url` points at the `event-media` data plane
|
|
20784
|
-
* (`/addon/<addonId>/event-media/<
|
|
20819
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
20785
20820
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
20786
20821
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
20787
20822
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -20789,10 +20824,13 @@ var MediaFileKindEnum = _enum([
|
|
|
20789
20824
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
20790
20825
|
* (per-device scoping).
|
|
20791
20826
|
*
|
|
20792
|
-
* The URL is built from the row's
|
|
20793
|
-
*
|
|
20827
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
20828
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
20829
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
20794
20830
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
20795
|
-
* `faceCrop`/`plateCrop
|
|
20831
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
20832
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
20833
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
20796
20834
|
*
|
|
20797
20835
|
* ## `base64` is TRANSITIONAL and is going away
|
|
20798
20836
|
*
|
|
@@ -20805,7 +20843,19 @@ var MediaFileKindEnum = _enum([
|
|
|
20805
20843
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
20806
20844
|
*/
|
|
20807
20845
|
var MediaFileSchema = object({
|
|
20808
|
-
|
|
20846
|
+
/**
|
|
20847
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
20848
|
+
*
|
|
20849
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
20850
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
20851
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
20852
|
+
* different rows that spell the same number, and a track whose
|
|
20853
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
20854
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
20855
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
20856
|
+
* at all.
|
|
20857
|
+
*/
|
|
20858
|
+
mediaId: number().int(),
|
|
20809
20859
|
kind: MediaFileKindEnum,
|
|
20810
20860
|
sizeBytes: number(),
|
|
20811
20861
|
timestamp: number()
|
|
@@ -20913,7 +20963,7 @@ var RetrainTrackSchema = object({
|
|
|
20913
20963
|
});
|
|
20914
20964
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
20915
20965
|
var RetrainFrameCandidateSchema = object({
|
|
20916
|
-
|
|
20966
|
+
mediaId: number().int(),
|
|
20917
20967
|
kind: MediaFileKindEnum,
|
|
20918
20968
|
timestamp: number(),
|
|
20919
20969
|
sizeBytes: number().int(),
|
|
@@ -20927,7 +20977,7 @@ var RetrainFrameSchema = object({
|
|
|
20927
20977
|
deviceId: number(),
|
|
20928
20978
|
trackId: string(),
|
|
20929
20979
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
20930
|
-
|
|
20980
|
+
sourceMediaId: number().int(),
|
|
20931
20981
|
sourceKind: MediaFileKindEnum,
|
|
20932
20982
|
sizeBytes: number().int(),
|
|
20933
20983
|
width: number().int(),
|
|
@@ -20943,7 +20993,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
20943
20993
|
var RetrainFrameSelectionSchema = object({
|
|
20944
20994
|
copied: array(RetrainFrameSchema).readonly(),
|
|
20945
20995
|
refused: array(object({
|
|
20946
|
-
|
|
20996
|
+
sourceMediaId: number().int(),
|
|
20947
20997
|
reason: RetrainCopyRefusalSchema
|
|
20948
20998
|
})).readonly()
|
|
20949
20999
|
});
|
|
@@ -20951,7 +21001,7 @@ var RetrainFrameListSchema = object({
|
|
|
20951
21001
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
20952
21002
|
copies: array(RetrainFrameSchema).readonly(),
|
|
20953
21003
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
20954
|
-
|
|
21004
|
+
autoPickMediaId: number().int().optional()
|
|
20955
21005
|
});
|
|
20956
21006
|
/** What the operator asked the assist to look for. */
|
|
20957
21007
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -21046,9 +21096,11 @@ var RecentTracksQueryInput = object({
|
|
|
21046
21096
|
});
|
|
21047
21097
|
/**
|
|
21048
21098
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
21049
|
-
* `
|
|
21050
|
-
* served by the event-media plane
|
|
21051
|
-
* member visible has been materialised
|
|
21099
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
21100
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
21101
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
21102
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
21103
|
+
* row once event ids became per-table rowids).
|
|
21052
21104
|
*/
|
|
21053
21105
|
var SummarySchema = object({
|
|
21054
21106
|
id: string(),
|
|
@@ -21057,7 +21109,7 @@ var SummarySchema = object({
|
|
|
21057
21109
|
lastActiveAt: number(),
|
|
21058
21110
|
sealedAt: number().nullable(),
|
|
21059
21111
|
memberCount: number().int().nonnegative(),
|
|
21060
|
-
|
|
21112
|
+
groupShotMediaId: number().int().nullable()
|
|
21061
21113
|
});
|
|
21062
21114
|
var SummariesQueryInput = object({
|
|
21063
21115
|
deviceIds: array(number()).min(1),
|
|
@@ -21611,7 +21663,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21611
21663
|
}), method(object({
|
|
21612
21664
|
deviceId: number(),
|
|
21613
21665
|
trackId: string(),
|
|
21614
|
-
|
|
21666
|
+
mediaIds: array(number().int()).min(1)
|
|
21615
21667
|
}), RetrainFrameSelectionSchema, {
|
|
21616
21668
|
kind: "mutation",
|
|
21617
21669
|
auth: "admin"
|
|
@@ -21679,7 +21731,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21679
21731
|
kind: "query",
|
|
21680
21732
|
auth: "admin"
|
|
21681
21733
|
}), method(object({
|
|
21682
|
-
|
|
21734
|
+
/** Which of the three event tables owns the row. */
|
|
21735
|
+
ownerType: EventOwnerTypeSchema,
|
|
21736
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
21737
|
+
eventId: number().int(),
|
|
21683
21738
|
kind: MediaFileKindEnum.optional(),
|
|
21684
21739
|
deviceId: number()
|
|
21685
21740
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -21690,7 +21745,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21690
21745
|
trackId: string(),
|
|
21691
21746
|
deviceId: number()
|
|
21692
21747
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
21693
|
-
|
|
21748
|
+
ownerType: EventOwnerTypeSchema,
|
|
21749
|
+
eventId: number().int(),
|
|
21694
21750
|
deviceId: number()
|
|
21695
21751
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
21696
21752
|
kind: "mutation",
|
|
@@ -26883,8 +26939,8 @@ var IdentitySchema = object({
|
|
|
26883
26939
|
id: string(),
|
|
26884
26940
|
name: string(),
|
|
26885
26941
|
sampleCount: number().int().nonnegative(),
|
|
26886
|
-
|
|
26887
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26942
|
+
coverMediaId: number().int().optional(),
|
|
26943
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26888
26944
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26889
26945
|
coverBase64: string().optional()
|
|
26890
26946
|
});
|
|
@@ -26910,8 +26966,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26910
26966
|
enrolledAt: number().int(),
|
|
26911
26967
|
deviceId: number().int().optional(),
|
|
26912
26968
|
source: _enum(["detected", "photo"]),
|
|
26913
|
-
/** The enrolled crop's media
|
|
26914
|
-
|
|
26969
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26970
|
+
mediaId: number().int().optional(),
|
|
26915
26971
|
/**
|
|
26916
26972
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26917
26973
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26980,15 +27036,15 @@ var FaceInfoSchema = object({
|
|
|
26980
27036
|
*/
|
|
26981
27037
|
cropUrl: string().optional(),
|
|
26982
27038
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26983
|
-
* view draw the box over the native `
|
|
27039
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26984
27040
|
* legacy rows written before design B. */
|
|
26985
27041
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26986
27042
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26987
27043
|
* Fetch the native JPEG via the event-media data-plane
|
|
26988
|
-
* (`/addon/<addonId>/event-media/<
|
|
27044
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26989
27045
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26990
27046
|
* back to the inline `base64` face crop. */
|
|
26991
|
-
|
|
27047
|
+
keyFrameMediaId: number().int().optional(),
|
|
26992
27048
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26993
27049
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26994
27050
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -27057,11 +27113,14 @@ var FaceClusterSchema = object({
|
|
|
27057
27113
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27058
27114
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27059
27115
|
*
|
|
27060
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27061
|
-
* media
|
|
27116
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27117
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27118
|
+
* access decision.
|
|
27062
27119
|
*/
|
|
27063
27120
|
var MediaFileLiteSchema$1 = object({
|
|
27064
|
-
|
|
27121
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27122
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27123
|
+
mediaId: number().int(),
|
|
27065
27124
|
kind: string(),
|
|
27066
27125
|
url: string(),
|
|
27067
27126
|
sizeBytes: number(),
|
|
@@ -27078,7 +27137,7 @@ method(object({
|
|
|
27078
27137
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
27079
27138
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
27080
27139
|
*
|
|
27081
|
-
* Nothing loses its avatar: `
|
|
27140
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
27082
27141
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
27083
27142
|
*
|
|
27084
27143
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -30441,8 +30500,8 @@ var VehicleSchema = object({
|
|
|
30441
30500
|
id: string(),
|
|
30442
30501
|
name: string(),
|
|
30443
30502
|
sampleCount: number().int().nonnegative(),
|
|
30444
|
-
|
|
30445
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
30503
|
+
coverMediaId: number().int().optional(),
|
|
30504
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
30446
30505
|
coverBase64: string().optional()
|
|
30447
30506
|
});
|
|
30448
30507
|
var VehicleSampleInfoSchema = object({
|
|
@@ -30475,7 +30534,7 @@ var PlateInfoSchema = object({
|
|
|
30475
30534
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
30476
30535
|
plateBbox: BoundingBoxSchema.optional(),
|
|
30477
30536
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
30478
|
-
|
|
30537
|
+
keyFrameMediaId: number().int().optional(),
|
|
30479
30538
|
base64: string().optional(),
|
|
30480
30539
|
/**
|
|
30481
30540
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -30496,11 +30555,14 @@ var PlateInfoSchema = object({
|
|
|
30496
30555
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
30497
30556
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
30498
30557
|
*
|
|
30499
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
30500
|
-
* media
|
|
30558
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
30559
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
30560
|
+
* access decision.
|
|
30501
30561
|
*/
|
|
30502
30562
|
var MediaFileLiteSchema = object({
|
|
30503
|
-
|
|
30563
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
30564
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
30565
|
+
mediaId: number().int(),
|
|
30504
30566
|
kind: string(),
|
|
30505
30567
|
url: string(),
|
|
30506
30568
|
sizeBytes: number(),
|
|
@@ -30559,7 +30621,7 @@ method(object({
|
|
|
30559
30621
|
}), method(object({
|
|
30560
30622
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
30561
30623
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
30562
|
-
* option; `
|
|
30624
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
30563
30625
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
30564
30626
|
* resolves to `false` and is exactly the intended default. */
|
|
30565
30627
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -32128,7 +32190,14 @@ var SceneReferenceSchema = object({
|
|
|
32128
32190
|
modelId: string(),
|
|
32129
32191
|
condition: SceneConditionSchema,
|
|
32130
32192
|
capturedAt: number(),
|
|
32131
|
-
|
|
32193
|
+
/**
|
|
32194
|
+
* The reference thumbnail's media ROW id (D482).
|
|
32195
|
+
*
|
|
32196
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
32197
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
32198
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
32199
|
+
*/
|
|
32200
|
+
thumbnailMediaId: number().int().optional(),
|
|
32132
32201
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
32133
32202
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
32134
32203
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -34112,7 +34181,7 @@ var StationaryObjectSchema = object({
|
|
|
34112
34181
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
34113
34182
|
label: string().optional(),
|
|
34114
34183
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
34115
|
-
|
|
34184
|
+
keyFrameMediaId: number().int().optional()
|
|
34116
34185
|
});
|
|
34117
34186
|
var CameraOccupancySnapshotSchema = object({
|
|
34118
34187
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -36850,6 +36919,12 @@ Object.freeze({
|
|
|
36850
36919
|
addonId: null,
|
|
36851
36920
|
access: "create"
|
|
36852
36921
|
},
|
|
36922
|
+
"dataStoreProvider.upsert": {
|
|
36923
|
+
capName: "data-store-provider",
|
|
36924
|
+
capScope: "system",
|
|
36925
|
+
addonId: null,
|
|
36926
|
+
access: "create"
|
|
36927
|
+
},
|
|
36853
36928
|
"dayNight.getOptions": {
|
|
36854
36929
|
capName: "day-night",
|
|
36855
36930
|
capScope: "device",
|
|
@@ -40714,6 +40789,12 @@ Object.freeze({
|
|
|
40714
40789
|
addonId: null,
|
|
40715
40790
|
access: "create"
|
|
40716
40791
|
},
|
|
40792
|
+
"settingsStore.upsert": {
|
|
40793
|
+
capName: "settings-store",
|
|
40794
|
+
capScope: "system",
|
|
40795
|
+
addonId: null,
|
|
40796
|
+
access: "create"
|
|
40797
|
+
},
|
|
40717
40798
|
"smtpProvider.getStatus": {
|
|
40718
40799
|
capName: "smtp-provider",
|
|
40719
40800
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -983,7 +983,7 @@ var Rademacher = class {
|
|
|
983
983
|
}
|
|
984
984
|
};
|
|
985
985
|
//#endregion
|
|
986
|
-
//#region ../types/dist/event-category-
|
|
986
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
987
987
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
988
988
|
EventCategory["SystemBoot"] = "system.boot";
|
|
989
989
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -1544,7 +1544,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
1544
1544
|
* a package zone — a newly-appeared stationary object of a package class
|
|
1545
1545
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
1546
1546
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
1547
|
-
* entryId, className, zoneIds,
|
|
1547
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
1548
1548
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
1549
1549
|
* this bus topic drives notifier rules + live UI. See
|
|
1550
1550
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -6330,7 +6330,7 @@ var ZodIssueCode = {
|
|
|
6330
6330
|
var ZodFirstPartyTypeKind;
|
|
6331
6331
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6332
6332
|
//#endregion
|
|
6333
|
-
//#region ../types/dist/sleep-
|
|
6333
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
6334
6334
|
/**
|
|
6335
6335
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6336
6336
|
* window to float samples (D455).
|
|
@@ -8297,13 +8297,30 @@ new Set([
|
|
|
8297
8297
|
"scene",
|
|
8298
8298
|
"motion",
|
|
8299
8299
|
"object",
|
|
8300
|
-
"audio"
|
|
8300
|
+
"audio",
|
|
8301
|
+
"mosaic"
|
|
8301
8302
|
]);
|
|
8302
|
-
|
|
8303
|
+
/**
|
|
8304
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
8305
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
8306
|
+
* does not re-spell the list and drift from it.
|
|
8307
|
+
*/
|
|
8308
|
+
var EVENT_OWNER_TYPES = [
|
|
8303
8309
|
"motion",
|
|
8304
8310
|
"object",
|
|
8305
8311
|
"audio"
|
|
8306
|
-
]
|
|
8312
|
+
];
|
|
8313
|
+
/**
|
|
8314
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
8315
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
8316
|
+
* `(table, id)`).
|
|
8317
|
+
*
|
|
8318
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
8319
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
8320
|
+
* nothing failing until a caller asked.
|
|
8321
|
+
*/
|
|
8322
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
8323
|
+
new Set(EVENT_OWNER_TYPES);
|
|
8307
8324
|
var EncodeProfileSchema = object({
|
|
8308
8325
|
video: object({
|
|
8309
8326
|
codec: _enum([
|
|
@@ -13502,6 +13519,16 @@ method(object({
|
|
|
13502
13519
|
filter: QueryFilterSchema.optional(),
|
|
13503
13520
|
columns: array(string()).readonly().optional()
|
|
13504
13521
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
13522
|
+
namespace: string().optional(),
|
|
13523
|
+
collection: string(),
|
|
13524
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
13525
|
+
* index on the collection. Never empty. */
|
|
13526
|
+
conflict: array(string()).readonly(),
|
|
13527
|
+
record: BulkRecordSchema
|
|
13528
|
+
}), object({
|
|
13529
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
13530
|
+
* row's own id on an update. */
|
|
13531
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
13505
13532
|
namespace: string().optional(),
|
|
13506
13533
|
collection: string(),
|
|
13507
13534
|
record: object({
|
|
@@ -13636,6 +13663,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
13636
13663
|
id: union([string(), number()]) }), {
|
|
13637
13664
|
kind: "mutation",
|
|
13638
13665
|
auth: "admin"
|
|
13666
|
+
}), method(object({
|
|
13667
|
+
namespace: string().optional(),
|
|
13668
|
+
collection: string(),
|
|
13669
|
+
conflict: array(string()).readonly(),
|
|
13670
|
+
record: BulkRecordSchema
|
|
13671
|
+
}), object({ id: union([string(), number()]) }), {
|
|
13672
|
+
kind: "mutation",
|
|
13673
|
+
auth: "admin"
|
|
13639
13674
|
}), method(object({
|
|
13640
13675
|
namespace: string().optional(),
|
|
13641
13676
|
collection: string(),
|
|
@@ -20118,8 +20153,8 @@ var TrackPositionSchema = object({
|
|
|
20118
20153
|
var TrackSnapshotSchema = object({
|
|
20119
20154
|
timestamp: number(),
|
|
20120
20155
|
position: TrackPositionSchema,
|
|
20121
|
-
/**
|
|
20122
|
-
|
|
20156
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
20157
|
+
mediaId: number().int()
|
|
20123
20158
|
});
|
|
20124
20159
|
/**
|
|
20125
20160
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -20723,14 +20758,14 @@ var ObjectEventSchema = object({
|
|
|
20723
20758
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
20724
20759
|
frameWidth: number().optional(),
|
|
20725
20760
|
frameHeight: number().optional(),
|
|
20726
|
-
/**
|
|
20727
|
-
|
|
20728
|
-
/** Design B:
|
|
20761
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
20762
|
+
mediaId: number().int().optional(),
|
|
20763
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
20729
20764
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
20730
|
-
* (`/addon/<addonId>/event-media/<
|
|
20765
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
20731
20766
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
20732
|
-
* sources — consumers fall back to `
|
|
20733
|
-
|
|
20767
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
20768
|
+
keyFrameMediaId: number().int().optional(),
|
|
20734
20769
|
/** Populated by B5 (recording playback URL for this event). */
|
|
20735
20770
|
mediaUrl: string().optional(),
|
|
20736
20771
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -20780,7 +20815,7 @@ var MediaFileKindEnum = _enum([
|
|
|
20780
20815
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
20781
20816
|
*
|
|
20782
20817
|
* `url` points at the `event-media` data plane
|
|
20783
|
-
* (`/addon/<addonId>/event-media/<
|
|
20818
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
20784
20819
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
20785
20820
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
20786
20821
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -20788,10 +20823,13 @@ var MediaFileKindEnum = _enum([
|
|
|
20788
20823
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
20789
20824
|
* (per-device scoping).
|
|
20790
20825
|
*
|
|
20791
|
-
* The URL is built from the row's
|
|
20792
|
-
*
|
|
20826
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
20827
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
20828
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
20793
20829
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
20794
|
-
* `faceCrop`/`plateCrop
|
|
20830
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
20831
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
20832
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
20795
20833
|
*
|
|
20796
20834
|
* ## `base64` is TRANSITIONAL and is going away
|
|
20797
20835
|
*
|
|
@@ -20804,7 +20842,19 @@ var MediaFileKindEnum = _enum([
|
|
|
20804
20842
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
20805
20843
|
*/
|
|
20806
20844
|
var MediaFileSchema = object({
|
|
20807
|
-
|
|
20845
|
+
/**
|
|
20846
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
20847
|
+
*
|
|
20848
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
20849
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
20850
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
20851
|
+
* different rows that spell the same number, and a track whose
|
|
20852
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
20853
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
20854
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
20855
|
+
* at all.
|
|
20856
|
+
*/
|
|
20857
|
+
mediaId: number().int(),
|
|
20808
20858
|
kind: MediaFileKindEnum,
|
|
20809
20859
|
sizeBytes: number(),
|
|
20810
20860
|
timestamp: number()
|
|
@@ -20912,7 +20962,7 @@ var RetrainTrackSchema = object({
|
|
|
20912
20962
|
});
|
|
20913
20963
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
20914
20964
|
var RetrainFrameCandidateSchema = object({
|
|
20915
|
-
|
|
20965
|
+
mediaId: number().int(),
|
|
20916
20966
|
kind: MediaFileKindEnum,
|
|
20917
20967
|
timestamp: number(),
|
|
20918
20968
|
sizeBytes: number().int(),
|
|
@@ -20926,7 +20976,7 @@ var RetrainFrameSchema = object({
|
|
|
20926
20976
|
deviceId: number(),
|
|
20927
20977
|
trackId: string(),
|
|
20928
20978
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
20929
|
-
|
|
20979
|
+
sourceMediaId: number().int(),
|
|
20930
20980
|
sourceKind: MediaFileKindEnum,
|
|
20931
20981
|
sizeBytes: number().int(),
|
|
20932
20982
|
width: number().int(),
|
|
@@ -20942,7 +20992,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
20942
20992
|
var RetrainFrameSelectionSchema = object({
|
|
20943
20993
|
copied: array(RetrainFrameSchema).readonly(),
|
|
20944
20994
|
refused: array(object({
|
|
20945
|
-
|
|
20995
|
+
sourceMediaId: number().int(),
|
|
20946
20996
|
reason: RetrainCopyRefusalSchema
|
|
20947
20997
|
})).readonly()
|
|
20948
20998
|
});
|
|
@@ -20950,7 +21000,7 @@ var RetrainFrameListSchema = object({
|
|
|
20950
21000
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
20951
21001
|
copies: array(RetrainFrameSchema).readonly(),
|
|
20952
21002
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
20953
|
-
|
|
21003
|
+
autoPickMediaId: number().int().optional()
|
|
20954
21004
|
});
|
|
20955
21005
|
/** What the operator asked the assist to look for. */
|
|
20956
21006
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -21045,9 +21095,11 @@ var RecentTracksQueryInput = object({
|
|
|
21045
21095
|
});
|
|
21046
21096
|
/**
|
|
21047
21097
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
21048
|
-
* `
|
|
21049
|
-
* served by the event-media plane
|
|
21050
|
-
* member visible has been materialised
|
|
21098
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
21099
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
21100
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
21101
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
21102
|
+
* row once event ids became per-table rowids).
|
|
21051
21103
|
*/
|
|
21052
21104
|
var SummarySchema = object({
|
|
21053
21105
|
id: string(),
|
|
@@ -21056,7 +21108,7 @@ var SummarySchema = object({
|
|
|
21056
21108
|
lastActiveAt: number(),
|
|
21057
21109
|
sealedAt: number().nullable(),
|
|
21058
21110
|
memberCount: number().int().nonnegative(),
|
|
21059
|
-
|
|
21111
|
+
groupShotMediaId: number().int().nullable()
|
|
21060
21112
|
});
|
|
21061
21113
|
var SummariesQueryInput = object({
|
|
21062
21114
|
deviceIds: array(number()).min(1),
|
|
@@ -21610,7 +21662,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21610
21662
|
}), method(object({
|
|
21611
21663
|
deviceId: number(),
|
|
21612
21664
|
trackId: string(),
|
|
21613
|
-
|
|
21665
|
+
mediaIds: array(number().int()).min(1)
|
|
21614
21666
|
}), RetrainFrameSelectionSchema, {
|
|
21615
21667
|
kind: "mutation",
|
|
21616
21668
|
auth: "admin"
|
|
@@ -21678,7 +21730,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21678
21730
|
kind: "query",
|
|
21679
21731
|
auth: "admin"
|
|
21680
21732
|
}), method(object({
|
|
21681
|
-
|
|
21733
|
+
/** Which of the three event tables owns the row. */
|
|
21734
|
+
ownerType: EventOwnerTypeSchema,
|
|
21735
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
21736
|
+
eventId: number().int(),
|
|
21682
21737
|
kind: MediaFileKindEnum.optional(),
|
|
21683
21738
|
deviceId: number()
|
|
21684
21739
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -21689,7 +21744,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21689
21744
|
trackId: string(),
|
|
21690
21745
|
deviceId: number()
|
|
21691
21746
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
21692
|
-
|
|
21747
|
+
ownerType: EventOwnerTypeSchema,
|
|
21748
|
+
eventId: number().int(),
|
|
21693
21749
|
deviceId: number()
|
|
21694
21750
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
21695
21751
|
kind: "mutation",
|
|
@@ -26882,8 +26938,8 @@ var IdentitySchema = object({
|
|
|
26882
26938
|
id: string(),
|
|
26883
26939
|
name: string(),
|
|
26884
26940
|
sampleCount: number().int().nonnegative(),
|
|
26885
|
-
|
|
26886
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26941
|
+
coverMediaId: number().int().optional(),
|
|
26942
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26887
26943
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26888
26944
|
coverBase64: string().optional()
|
|
26889
26945
|
});
|
|
@@ -26909,8 +26965,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26909
26965
|
enrolledAt: number().int(),
|
|
26910
26966
|
deviceId: number().int().optional(),
|
|
26911
26967
|
source: _enum(["detected", "photo"]),
|
|
26912
|
-
/** The enrolled crop's media
|
|
26913
|
-
|
|
26968
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26969
|
+
mediaId: number().int().optional(),
|
|
26914
26970
|
/**
|
|
26915
26971
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26916
26972
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26979,15 +27035,15 @@ var FaceInfoSchema = object({
|
|
|
26979
27035
|
*/
|
|
26980
27036
|
cropUrl: string().optional(),
|
|
26981
27037
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26982
|
-
* view draw the box over the native `
|
|
27038
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26983
27039
|
* legacy rows written before design B. */
|
|
26984
27040
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26985
27041
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26986
27042
|
* Fetch the native JPEG via the event-media data-plane
|
|
26987
|
-
* (`/addon/<addonId>/event-media/<
|
|
27043
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26988
27044
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26989
27045
|
* back to the inline `base64` face crop. */
|
|
26990
|
-
|
|
27046
|
+
keyFrameMediaId: number().int().optional(),
|
|
26991
27047
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26992
27048
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26993
27049
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -27056,11 +27112,14 @@ var FaceClusterSchema = object({
|
|
|
27056
27112
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
27057
27113
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
27058
27114
|
*
|
|
27059
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
27060
|
-
* media
|
|
27115
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
27116
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
27117
|
+
* access decision.
|
|
27061
27118
|
*/
|
|
27062
27119
|
var MediaFileLiteSchema$1 = object({
|
|
27063
|
-
|
|
27120
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
27121
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
27122
|
+
mediaId: number().int(),
|
|
27064
27123
|
kind: string(),
|
|
27065
27124
|
url: string(),
|
|
27066
27125
|
sizeBytes: number(),
|
|
@@ -27077,7 +27136,7 @@ method(object({
|
|
|
27077
27136
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
27078
27137
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
27079
27138
|
*
|
|
27080
|
-
* Nothing loses its avatar: `
|
|
27139
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
27081
27140
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
27082
27141
|
*
|
|
27083
27142
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -30440,8 +30499,8 @@ var VehicleSchema = object({
|
|
|
30440
30499
|
id: string(),
|
|
30441
30500
|
name: string(),
|
|
30442
30501
|
sampleCount: number().int().nonnegative(),
|
|
30443
|
-
|
|
30444
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
30502
|
+
coverMediaId: number().int().optional(),
|
|
30503
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
30445
30504
|
coverBase64: string().optional()
|
|
30446
30505
|
});
|
|
30447
30506
|
var VehicleSampleInfoSchema = object({
|
|
@@ -30474,7 +30533,7 @@ var PlateInfoSchema = object({
|
|
|
30474
30533
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
30475
30534
|
plateBbox: BoundingBoxSchema.optional(),
|
|
30476
30535
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
30477
|
-
|
|
30536
|
+
keyFrameMediaId: number().int().optional(),
|
|
30478
30537
|
base64: string().optional(),
|
|
30479
30538
|
/**
|
|
30480
30539
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -30495,11 +30554,14 @@ var PlateInfoSchema = object({
|
|
|
30495
30554
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
30496
30555
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
30497
30556
|
*
|
|
30498
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
30499
|
-
* media
|
|
30557
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
30558
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
30559
|
+
* access decision.
|
|
30500
30560
|
*/
|
|
30501
30561
|
var MediaFileLiteSchema = object({
|
|
30502
|
-
|
|
30562
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
30563
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
30564
|
+
mediaId: number().int(),
|
|
30503
30565
|
kind: string(),
|
|
30504
30566
|
url: string(),
|
|
30505
30567
|
sizeBytes: number(),
|
|
@@ -30558,7 +30620,7 @@ method(object({
|
|
|
30558
30620
|
}), method(object({
|
|
30559
30621
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
30560
30622
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
30561
|
-
* option; `
|
|
30623
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
30562
30624
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
30563
30625
|
* resolves to `false` and is exactly the intended default. */
|
|
30564
30626
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -32127,7 +32189,14 @@ var SceneReferenceSchema = object({
|
|
|
32127
32189
|
modelId: string(),
|
|
32128
32190
|
condition: SceneConditionSchema,
|
|
32129
32191
|
capturedAt: number(),
|
|
32130
|
-
|
|
32192
|
+
/**
|
|
32193
|
+
* The reference thumbnail's media ROW id (D482).
|
|
32194
|
+
*
|
|
32195
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
32196
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
32197
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
32198
|
+
*/
|
|
32199
|
+
thumbnailMediaId: number().int().optional(),
|
|
32131
32200
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
32132
32201
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
32133
32202
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -34111,7 +34180,7 @@ var StationaryObjectSchema = object({
|
|
|
34111
34180
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
34112
34181
|
label: string().optional(),
|
|
34113
34182
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
34114
|
-
|
|
34183
|
+
keyFrameMediaId: number().int().optional()
|
|
34115
34184
|
});
|
|
34116
34185
|
var CameraOccupancySnapshotSchema = object({
|
|
34117
34186
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -36849,6 +36918,12 @@ Object.freeze({
|
|
|
36849
36918
|
addonId: null,
|
|
36850
36919
|
access: "create"
|
|
36851
36920
|
},
|
|
36921
|
+
"dataStoreProvider.upsert": {
|
|
36922
|
+
capName: "data-store-provider",
|
|
36923
|
+
capScope: "system",
|
|
36924
|
+
addonId: null,
|
|
36925
|
+
access: "create"
|
|
36926
|
+
},
|
|
36852
36927
|
"dayNight.getOptions": {
|
|
36853
36928
|
capName: "day-night",
|
|
36854
36929
|
capScope: "device",
|
|
@@ -40713,6 +40788,12 @@ Object.freeze({
|
|
|
40713
40788
|
addonId: null,
|
|
40714
40789
|
access: "create"
|
|
40715
40790
|
},
|
|
40791
|
+
"settingsStore.upsert": {
|
|
40792
|
+
capName: "settings-store",
|
|
40793
|
+
capScope: "system",
|
|
40794
|
+
addonId: null,
|
|
40795
|
+
access: "create"
|
|
40796
|
+
},
|
|
40716
40797
|
"smtpProvider.getStatus": {
|
|
40717
40798
|
capName: "smtp-provider",
|
|
40718
40799
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-rademacher",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.99",
|
|
4
4
|
"description": "Rademacher HomePilot device-provider addon for CamStack — wraps the @apocaliss92/noderademacher local-hub client (roller shutters over the cover cap)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|