@camstack/addon-provider-amcrest 0.2.101 → 0.2.102
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
|
@@ -6,7 +6,7 @@ let node_crypto = require("node:crypto");
|
|
|
6
6
|
let node_http = require("node:http");
|
|
7
7
|
let node_https = require("node:https");
|
|
8
8
|
let node_os = require("node:os");
|
|
9
|
-
//#region ../types/dist/event-category-
|
|
9
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
10
10
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
11
11
|
EventCategory["SystemBoot"] = "system.boot";
|
|
12
12
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -567,7 +567,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
567
567
|
* a package zone — a newly-appeared stationary object of a package class
|
|
568
568
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
569
569
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
570
|
-
* entryId, className, zoneIds,
|
|
570
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
571
571
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
572
572
|
* this bus topic drives notifier rules + live UI. See
|
|
573
573
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5353,7 +5353,7 @@ var ZodIssueCode = {
|
|
|
5353
5353
|
var ZodFirstPartyTypeKind;
|
|
5354
5354
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5355
5355
|
//#endregion
|
|
5356
|
-
//#region ../types/dist/sleep-
|
|
5356
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5357
5357
|
/**
|
|
5358
5358
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5359
5359
|
* window to float samples (D455).
|
|
@@ -7308,13 +7308,30 @@ new Set([
|
|
|
7308
7308
|
"scene",
|
|
7309
7309
|
"motion",
|
|
7310
7310
|
"object",
|
|
7311
|
-
"audio"
|
|
7311
|
+
"audio",
|
|
7312
|
+
"mosaic"
|
|
7312
7313
|
]);
|
|
7313
|
-
|
|
7314
|
+
/**
|
|
7315
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7316
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7317
|
+
* does not re-spell the list and drift from it.
|
|
7318
|
+
*/
|
|
7319
|
+
var EVENT_OWNER_TYPES = [
|
|
7314
7320
|
"motion",
|
|
7315
7321
|
"object",
|
|
7316
7322
|
"audio"
|
|
7317
|
-
]
|
|
7323
|
+
];
|
|
7324
|
+
/**
|
|
7325
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7326
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7327
|
+
* `(table, id)`).
|
|
7328
|
+
*
|
|
7329
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7330
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7331
|
+
* nothing failing until a caller asked.
|
|
7332
|
+
*/
|
|
7333
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7334
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7318
7335
|
var EncodeProfileSchema = object({
|
|
7319
7336
|
video: object({
|
|
7320
7337
|
codec: _enum([
|
|
@@ -12513,6 +12530,16 @@ method(object({
|
|
|
12513
12530
|
filter: QueryFilterSchema.optional(),
|
|
12514
12531
|
columns: array(string()).readonly().optional()
|
|
12515
12532
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12533
|
+
namespace: string().optional(),
|
|
12534
|
+
collection: string(),
|
|
12535
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12536
|
+
* index on the collection. Never empty. */
|
|
12537
|
+
conflict: array(string()).readonly(),
|
|
12538
|
+
record: BulkRecordSchema
|
|
12539
|
+
}), object({
|
|
12540
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12541
|
+
* row's own id on an update. */
|
|
12542
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12516
12543
|
namespace: string().optional(),
|
|
12517
12544
|
collection: string(),
|
|
12518
12545
|
record: object({
|
|
@@ -12647,6 +12674,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12647
12674
|
id: union([string(), number()]) }), {
|
|
12648
12675
|
kind: "mutation",
|
|
12649
12676
|
auth: "admin"
|
|
12677
|
+
}), method(object({
|
|
12678
|
+
namespace: string().optional(),
|
|
12679
|
+
collection: string(),
|
|
12680
|
+
conflict: array(string()).readonly(),
|
|
12681
|
+
record: BulkRecordSchema
|
|
12682
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12683
|
+
kind: "mutation",
|
|
12684
|
+
auth: "admin"
|
|
12650
12685
|
}), method(object({
|
|
12651
12686
|
namespace: string().optional(),
|
|
12652
12687
|
collection: string(),
|
|
@@ -19129,8 +19164,8 @@ var TrackPositionSchema = object({
|
|
|
19129
19164
|
var TrackSnapshotSchema = object({
|
|
19130
19165
|
timestamp: number(),
|
|
19131
19166
|
position: TrackPositionSchema,
|
|
19132
|
-
/**
|
|
19133
|
-
|
|
19167
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19168
|
+
mediaId: number().int()
|
|
19134
19169
|
});
|
|
19135
19170
|
/**
|
|
19136
19171
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19734,14 +19769,14 @@ var ObjectEventSchema = object({
|
|
|
19734
19769
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19735
19770
|
frameWidth: number().optional(),
|
|
19736
19771
|
frameHeight: number().optional(),
|
|
19737
|
-
/**
|
|
19738
|
-
|
|
19739
|
-
/** Design B:
|
|
19772
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19773
|
+
mediaId: number().int().optional(),
|
|
19774
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19740
19775
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19741
|
-
* (`/addon/<addonId>/event-media/<
|
|
19776
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19742
19777
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19743
|
-
* sources — consumers fall back to `
|
|
19744
|
-
|
|
19778
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19779
|
+
keyFrameMediaId: number().int().optional(),
|
|
19745
19780
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19746
19781
|
mediaUrl: string().optional(),
|
|
19747
19782
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19791,7 +19826,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19791
19826
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19792
19827
|
*
|
|
19793
19828
|
* `url` points at the `event-media` data plane
|
|
19794
|
-
* (`/addon/<addonId>/event-media/<
|
|
19829
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19795
19830
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19796
19831
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19797
19832
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19799,10 +19834,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19799
19834
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19800
19835
|
* (per-device scoping).
|
|
19801
19836
|
*
|
|
19802
|
-
* The URL is built from the row's
|
|
19803
|
-
*
|
|
19837
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19838
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19839
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19804
19840
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19805
|
-
* `faceCrop`/`plateCrop
|
|
19841
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19842
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19843
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19806
19844
|
*
|
|
19807
19845
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19808
19846
|
*
|
|
@@ -19815,7 +19853,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19815
19853
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19816
19854
|
*/
|
|
19817
19855
|
var MediaFileSchema = object({
|
|
19818
|
-
|
|
19856
|
+
/**
|
|
19857
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19858
|
+
*
|
|
19859
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19860
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19861
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19862
|
+
* different rows that spell the same number, and a track whose
|
|
19863
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19864
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19865
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19866
|
+
* at all.
|
|
19867
|
+
*/
|
|
19868
|
+
mediaId: number().int(),
|
|
19819
19869
|
kind: MediaFileKindEnum,
|
|
19820
19870
|
sizeBytes: number(),
|
|
19821
19871
|
timestamp: number()
|
|
@@ -19923,7 +19973,7 @@ var RetrainTrackSchema = object({
|
|
|
19923
19973
|
});
|
|
19924
19974
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19925
19975
|
var RetrainFrameCandidateSchema = object({
|
|
19926
|
-
|
|
19976
|
+
mediaId: number().int(),
|
|
19927
19977
|
kind: MediaFileKindEnum,
|
|
19928
19978
|
timestamp: number(),
|
|
19929
19979
|
sizeBytes: number().int(),
|
|
@@ -19937,7 +19987,7 @@ var RetrainFrameSchema = object({
|
|
|
19937
19987
|
deviceId: number(),
|
|
19938
19988
|
trackId: string(),
|
|
19939
19989
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19940
|
-
|
|
19990
|
+
sourceMediaId: number().int(),
|
|
19941
19991
|
sourceKind: MediaFileKindEnum,
|
|
19942
19992
|
sizeBytes: number().int(),
|
|
19943
19993
|
width: number().int(),
|
|
@@ -19953,7 +20003,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19953
20003
|
var RetrainFrameSelectionSchema = object({
|
|
19954
20004
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19955
20005
|
refused: array(object({
|
|
19956
|
-
|
|
20006
|
+
sourceMediaId: number().int(),
|
|
19957
20007
|
reason: RetrainCopyRefusalSchema
|
|
19958
20008
|
})).readonly()
|
|
19959
20009
|
});
|
|
@@ -19961,7 +20011,7 @@ var RetrainFrameListSchema = object({
|
|
|
19961
20011
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19962
20012
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19963
20013
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19964
|
-
|
|
20014
|
+
autoPickMediaId: number().int().optional()
|
|
19965
20015
|
});
|
|
19966
20016
|
/** What the operator asked the assist to look for. */
|
|
19967
20017
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20056,9 +20106,11 @@ var RecentTracksQueryInput = object({
|
|
|
20056
20106
|
});
|
|
20057
20107
|
/**
|
|
20058
20108
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20059
|
-
* `
|
|
20060
|
-
* served by the event-media plane
|
|
20061
|
-
* member visible has been materialised
|
|
20109
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20110
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20111
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20112
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20113
|
+
* row once event ids became per-table rowids).
|
|
20062
20114
|
*/
|
|
20063
20115
|
var SummarySchema = object({
|
|
20064
20116
|
id: string(),
|
|
@@ -20067,7 +20119,7 @@ var SummarySchema = object({
|
|
|
20067
20119
|
lastActiveAt: number(),
|
|
20068
20120
|
sealedAt: number().nullable(),
|
|
20069
20121
|
memberCount: number().int().nonnegative(),
|
|
20070
|
-
|
|
20122
|
+
groupShotMediaId: number().int().nullable()
|
|
20071
20123
|
});
|
|
20072
20124
|
var SummariesQueryInput = object({
|
|
20073
20125
|
deviceIds: array(number()).min(1),
|
|
@@ -20621,7 +20673,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20621
20673
|
}), method(object({
|
|
20622
20674
|
deviceId: number(),
|
|
20623
20675
|
trackId: string(),
|
|
20624
|
-
|
|
20676
|
+
mediaIds: array(number().int()).min(1)
|
|
20625
20677
|
}), RetrainFrameSelectionSchema, {
|
|
20626
20678
|
kind: "mutation",
|
|
20627
20679
|
auth: "admin"
|
|
@@ -20689,7 +20741,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20689
20741
|
kind: "query",
|
|
20690
20742
|
auth: "admin"
|
|
20691
20743
|
}), method(object({
|
|
20692
|
-
|
|
20744
|
+
/** Which of the three event tables owns the row. */
|
|
20745
|
+
ownerType: EventOwnerTypeSchema,
|
|
20746
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20747
|
+
eventId: number().int(),
|
|
20693
20748
|
kind: MediaFileKindEnum.optional(),
|
|
20694
20749
|
deviceId: number()
|
|
20695
20750
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20700,7 +20755,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20700
20755
|
trackId: string(),
|
|
20701
20756
|
deviceId: number()
|
|
20702
20757
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20703
|
-
|
|
20758
|
+
ownerType: EventOwnerTypeSchema,
|
|
20759
|
+
eventId: number().int(),
|
|
20704
20760
|
deviceId: number()
|
|
20705
20761
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20706
20762
|
kind: "mutation",
|
|
@@ -25997,8 +26053,8 @@ var IdentitySchema = object({
|
|
|
25997
26053
|
id: string(),
|
|
25998
26054
|
name: string(),
|
|
25999
26055
|
sampleCount: number().int().nonnegative(),
|
|
26000
|
-
|
|
26001
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26056
|
+
coverMediaId: number().int().optional(),
|
|
26057
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26002
26058
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26003
26059
|
coverBase64: string().optional()
|
|
26004
26060
|
});
|
|
@@ -26024,8 +26080,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26024
26080
|
enrolledAt: number().int(),
|
|
26025
26081
|
deviceId: number().int().optional(),
|
|
26026
26082
|
source: _enum(["detected", "photo"]),
|
|
26027
|
-
/** The enrolled crop's media
|
|
26028
|
-
|
|
26083
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26084
|
+
mediaId: number().int().optional(),
|
|
26029
26085
|
/**
|
|
26030
26086
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26031
26087
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26094,15 +26150,15 @@ var FaceInfoSchema = object({
|
|
|
26094
26150
|
*/
|
|
26095
26151
|
cropUrl: string().optional(),
|
|
26096
26152
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26097
|
-
* view draw the box over the native `
|
|
26153
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26098
26154
|
* legacy rows written before design B. */
|
|
26099
26155
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26100
26156
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26101
26157
|
* Fetch the native JPEG via the event-media data-plane
|
|
26102
|
-
* (`/addon/<addonId>/event-media/<
|
|
26158
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26103
26159
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26104
26160
|
* back to the inline `base64` face crop. */
|
|
26105
|
-
|
|
26161
|
+
keyFrameMediaId: number().int().optional(),
|
|
26106
26162
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26107
26163
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26108
26164
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26171,11 +26227,14 @@ var FaceClusterSchema = object({
|
|
|
26171
26227
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26172
26228
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26173
26229
|
*
|
|
26174
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26175
|
-
* media
|
|
26230
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26231
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26232
|
+
* access decision.
|
|
26176
26233
|
*/
|
|
26177
26234
|
var MediaFileLiteSchema$1 = object({
|
|
26178
|
-
|
|
26235
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26236
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26237
|
+
mediaId: number().int(),
|
|
26179
26238
|
kind: string(),
|
|
26180
26239
|
url: string(),
|
|
26181
26240
|
sizeBytes: number(),
|
|
@@ -26192,7 +26251,7 @@ method(object({
|
|
|
26192
26251
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26193
26252
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26194
26253
|
*
|
|
26195
|
-
* Nothing loses its avatar: `
|
|
26254
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26196
26255
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26197
26256
|
*
|
|
26198
26257
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29626,8 +29685,8 @@ var VehicleSchema = object({
|
|
|
29626
29685
|
id: string(),
|
|
29627
29686
|
name: string(),
|
|
29628
29687
|
sampleCount: number().int().nonnegative(),
|
|
29629
|
-
|
|
29630
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29688
|
+
coverMediaId: number().int().optional(),
|
|
29689
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29631
29690
|
coverBase64: string().optional()
|
|
29632
29691
|
});
|
|
29633
29692
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29660,7 +29719,7 @@ var PlateInfoSchema = object({
|
|
|
29660
29719
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29661
29720
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29662
29721
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29663
|
-
|
|
29722
|
+
keyFrameMediaId: number().int().optional(),
|
|
29664
29723
|
base64: string().optional(),
|
|
29665
29724
|
/**
|
|
29666
29725
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29681,11 +29740,14 @@ var PlateInfoSchema = object({
|
|
|
29681
29740
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29682
29741
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29683
29742
|
*
|
|
29684
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29685
|
-
* media
|
|
29743
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29744
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29745
|
+
* access decision.
|
|
29686
29746
|
*/
|
|
29687
29747
|
var MediaFileLiteSchema = object({
|
|
29688
|
-
|
|
29748
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29749
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29750
|
+
mediaId: number().int(),
|
|
29689
29751
|
kind: string(),
|
|
29690
29752
|
url: string(),
|
|
29691
29753
|
sizeBytes: number(),
|
|
@@ -29744,7 +29806,7 @@ method(object({
|
|
|
29744
29806
|
}), method(object({
|
|
29745
29807
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29746
29808
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29747
|
-
* option; `
|
|
29809
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29748
29810
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29749
29811
|
* resolves to `false` and is exactly the intended default. */
|
|
29750
29812
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31375,7 +31437,14 @@ var SceneReferenceSchema = object({
|
|
|
31375
31437
|
modelId: string(),
|
|
31376
31438
|
condition: SceneConditionSchema,
|
|
31377
31439
|
capturedAt: number(),
|
|
31378
|
-
|
|
31440
|
+
/**
|
|
31441
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31442
|
+
*
|
|
31443
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31444
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31445
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31446
|
+
*/
|
|
31447
|
+
thumbnailMediaId: number().int().optional(),
|
|
31379
31448
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31380
31449
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31381
31450
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33557,7 +33626,7 @@ var StationaryObjectSchema = object({
|
|
|
33557
33626
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33558
33627
|
label: string().optional(),
|
|
33559
33628
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33560
|
-
|
|
33629
|
+
keyFrameMediaId: number().int().optional()
|
|
33561
33630
|
});
|
|
33562
33631
|
var CameraOccupancySnapshotSchema = object({
|
|
33563
33632
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -36501,6 +36570,12 @@ Object.freeze({
|
|
|
36501
36570
|
addonId: null,
|
|
36502
36571
|
access: "create"
|
|
36503
36572
|
},
|
|
36573
|
+
"dataStoreProvider.upsert": {
|
|
36574
|
+
capName: "data-store-provider",
|
|
36575
|
+
capScope: "system",
|
|
36576
|
+
addonId: null,
|
|
36577
|
+
access: "create"
|
|
36578
|
+
},
|
|
36504
36579
|
"dayNight.getOptions": {
|
|
36505
36580
|
capName: "day-night",
|
|
36506
36581
|
capScope: "device",
|
|
@@ -40365,6 +40440,12 @@ Object.freeze({
|
|
|
40365
40440
|
addonId: null,
|
|
40366
40441
|
access: "create"
|
|
40367
40442
|
},
|
|
40443
|
+
"settingsStore.upsert": {
|
|
40444
|
+
capName: "settings-store",
|
|
40445
|
+
capScope: "system",
|
|
40446
|
+
addonId: null,
|
|
40447
|
+
access: "create"
|
|
40448
|
+
},
|
|
40368
40449
|
"smtpProvider.getStatus": {
|
|
40369
40450
|
capName: "smtp-provider",
|
|
40370
40451
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -7,7 +7,7 @@ import { networkInterfaces } from "node:os";
|
|
|
7
7
|
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
8
8
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
9
9
|
//#endregion
|
|
10
|
-
//#region ../types/dist/event-category-
|
|
10
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
11
11
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
12
12
|
EventCategory["SystemBoot"] = "system.boot";
|
|
13
13
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -568,7 +568,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
568
568
|
* a package zone — a newly-appeared stationary object of a package class
|
|
569
569
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
570
570
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
571
|
-
* entryId, className, zoneIds,
|
|
571
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
572
572
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
573
573
|
* this bus topic drives notifier rules + live UI. See
|
|
574
574
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5354,7 +5354,7 @@ var ZodIssueCode = {
|
|
|
5354
5354
|
var ZodFirstPartyTypeKind;
|
|
5355
5355
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5356
5356
|
//#endregion
|
|
5357
|
-
//#region ../types/dist/sleep-
|
|
5357
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5358
5358
|
/**
|
|
5359
5359
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5360
5360
|
* window to float samples (D455).
|
|
@@ -7309,13 +7309,30 @@ new Set([
|
|
|
7309
7309
|
"scene",
|
|
7310
7310
|
"motion",
|
|
7311
7311
|
"object",
|
|
7312
|
-
"audio"
|
|
7312
|
+
"audio",
|
|
7313
|
+
"mosaic"
|
|
7313
7314
|
]);
|
|
7314
|
-
|
|
7315
|
+
/**
|
|
7316
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7317
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7318
|
+
* does not re-spell the list and drift from it.
|
|
7319
|
+
*/
|
|
7320
|
+
var EVENT_OWNER_TYPES = [
|
|
7315
7321
|
"motion",
|
|
7316
7322
|
"object",
|
|
7317
7323
|
"audio"
|
|
7318
|
-
]
|
|
7324
|
+
];
|
|
7325
|
+
/**
|
|
7326
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7327
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7328
|
+
* `(table, id)`).
|
|
7329
|
+
*
|
|
7330
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7331
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7332
|
+
* nothing failing until a caller asked.
|
|
7333
|
+
*/
|
|
7334
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7335
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7319
7336
|
var EncodeProfileSchema = object({
|
|
7320
7337
|
video: object({
|
|
7321
7338
|
codec: _enum([
|
|
@@ -12514,6 +12531,16 @@ method(object({
|
|
|
12514
12531
|
filter: QueryFilterSchema.optional(),
|
|
12515
12532
|
columns: array(string()).readonly().optional()
|
|
12516
12533
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12534
|
+
namespace: string().optional(),
|
|
12535
|
+
collection: string(),
|
|
12536
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12537
|
+
* index on the collection. Never empty. */
|
|
12538
|
+
conflict: array(string()).readonly(),
|
|
12539
|
+
record: BulkRecordSchema
|
|
12540
|
+
}), object({
|
|
12541
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12542
|
+
* row's own id on an update. */
|
|
12543
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12517
12544
|
namespace: string().optional(),
|
|
12518
12545
|
collection: string(),
|
|
12519
12546
|
record: object({
|
|
@@ -12648,6 +12675,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12648
12675
|
id: union([string(), number()]) }), {
|
|
12649
12676
|
kind: "mutation",
|
|
12650
12677
|
auth: "admin"
|
|
12678
|
+
}), method(object({
|
|
12679
|
+
namespace: string().optional(),
|
|
12680
|
+
collection: string(),
|
|
12681
|
+
conflict: array(string()).readonly(),
|
|
12682
|
+
record: BulkRecordSchema
|
|
12683
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12684
|
+
kind: "mutation",
|
|
12685
|
+
auth: "admin"
|
|
12651
12686
|
}), method(object({
|
|
12652
12687
|
namespace: string().optional(),
|
|
12653
12688
|
collection: string(),
|
|
@@ -19130,8 +19165,8 @@ var TrackPositionSchema = object({
|
|
|
19130
19165
|
var TrackSnapshotSchema = object({
|
|
19131
19166
|
timestamp: number(),
|
|
19132
19167
|
position: TrackPositionSchema,
|
|
19133
|
-
/**
|
|
19134
|
-
|
|
19168
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19169
|
+
mediaId: number().int()
|
|
19135
19170
|
});
|
|
19136
19171
|
/**
|
|
19137
19172
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19735,14 +19770,14 @@ var ObjectEventSchema = object({
|
|
|
19735
19770
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19736
19771
|
frameWidth: number().optional(),
|
|
19737
19772
|
frameHeight: number().optional(),
|
|
19738
|
-
/**
|
|
19739
|
-
|
|
19740
|
-
/** Design B:
|
|
19773
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19774
|
+
mediaId: number().int().optional(),
|
|
19775
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19741
19776
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19742
|
-
* (`/addon/<addonId>/event-media/<
|
|
19777
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19743
19778
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19744
|
-
* sources — consumers fall back to `
|
|
19745
|
-
|
|
19779
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19780
|
+
keyFrameMediaId: number().int().optional(),
|
|
19746
19781
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19747
19782
|
mediaUrl: string().optional(),
|
|
19748
19783
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19792,7 +19827,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19792
19827
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19793
19828
|
*
|
|
19794
19829
|
* `url` points at the `event-media` data plane
|
|
19795
|
-
* (`/addon/<addonId>/event-media/<
|
|
19830
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19796
19831
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19797
19832
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19798
19833
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19800,10 +19835,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19800
19835
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19801
19836
|
* (per-device scoping).
|
|
19802
19837
|
*
|
|
19803
|
-
* The URL is built from the row's
|
|
19804
|
-
*
|
|
19838
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19839
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19840
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19805
19841
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19806
|
-
* `faceCrop`/`plateCrop
|
|
19842
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19843
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19844
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19807
19845
|
*
|
|
19808
19846
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19809
19847
|
*
|
|
@@ -19816,7 +19854,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19816
19854
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19817
19855
|
*/
|
|
19818
19856
|
var MediaFileSchema = object({
|
|
19819
|
-
|
|
19857
|
+
/**
|
|
19858
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19859
|
+
*
|
|
19860
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19861
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19862
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19863
|
+
* different rows that spell the same number, and a track whose
|
|
19864
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19865
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19866
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19867
|
+
* at all.
|
|
19868
|
+
*/
|
|
19869
|
+
mediaId: number().int(),
|
|
19820
19870
|
kind: MediaFileKindEnum,
|
|
19821
19871
|
sizeBytes: number(),
|
|
19822
19872
|
timestamp: number()
|
|
@@ -19924,7 +19974,7 @@ var RetrainTrackSchema = object({
|
|
|
19924
19974
|
});
|
|
19925
19975
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19926
19976
|
var RetrainFrameCandidateSchema = object({
|
|
19927
|
-
|
|
19977
|
+
mediaId: number().int(),
|
|
19928
19978
|
kind: MediaFileKindEnum,
|
|
19929
19979
|
timestamp: number(),
|
|
19930
19980
|
sizeBytes: number().int(),
|
|
@@ -19938,7 +19988,7 @@ var RetrainFrameSchema = object({
|
|
|
19938
19988
|
deviceId: number(),
|
|
19939
19989
|
trackId: string(),
|
|
19940
19990
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19941
|
-
|
|
19991
|
+
sourceMediaId: number().int(),
|
|
19942
19992
|
sourceKind: MediaFileKindEnum,
|
|
19943
19993
|
sizeBytes: number().int(),
|
|
19944
19994
|
width: number().int(),
|
|
@@ -19954,7 +20004,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19954
20004
|
var RetrainFrameSelectionSchema = object({
|
|
19955
20005
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19956
20006
|
refused: array(object({
|
|
19957
|
-
|
|
20007
|
+
sourceMediaId: number().int(),
|
|
19958
20008
|
reason: RetrainCopyRefusalSchema
|
|
19959
20009
|
})).readonly()
|
|
19960
20010
|
});
|
|
@@ -19962,7 +20012,7 @@ var RetrainFrameListSchema = object({
|
|
|
19962
20012
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19963
20013
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19964
20014
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19965
|
-
|
|
20015
|
+
autoPickMediaId: number().int().optional()
|
|
19966
20016
|
});
|
|
19967
20017
|
/** What the operator asked the assist to look for. */
|
|
19968
20018
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20057,9 +20107,11 @@ var RecentTracksQueryInput = object({
|
|
|
20057
20107
|
});
|
|
20058
20108
|
/**
|
|
20059
20109
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20060
|
-
* `
|
|
20061
|
-
* served by the event-media plane
|
|
20062
|
-
* member visible has been materialised
|
|
20110
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20111
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20112
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20113
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20114
|
+
* row once event ids became per-table rowids).
|
|
20063
20115
|
*/
|
|
20064
20116
|
var SummarySchema = object({
|
|
20065
20117
|
id: string(),
|
|
@@ -20068,7 +20120,7 @@ var SummarySchema = object({
|
|
|
20068
20120
|
lastActiveAt: number(),
|
|
20069
20121
|
sealedAt: number().nullable(),
|
|
20070
20122
|
memberCount: number().int().nonnegative(),
|
|
20071
|
-
|
|
20123
|
+
groupShotMediaId: number().int().nullable()
|
|
20072
20124
|
});
|
|
20073
20125
|
var SummariesQueryInput = object({
|
|
20074
20126
|
deviceIds: array(number()).min(1),
|
|
@@ -20622,7 +20674,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20622
20674
|
}), method(object({
|
|
20623
20675
|
deviceId: number(),
|
|
20624
20676
|
trackId: string(),
|
|
20625
|
-
|
|
20677
|
+
mediaIds: array(number().int()).min(1)
|
|
20626
20678
|
}), RetrainFrameSelectionSchema, {
|
|
20627
20679
|
kind: "mutation",
|
|
20628
20680
|
auth: "admin"
|
|
@@ -20690,7 +20742,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20690
20742
|
kind: "query",
|
|
20691
20743
|
auth: "admin"
|
|
20692
20744
|
}), method(object({
|
|
20693
|
-
|
|
20745
|
+
/** Which of the three event tables owns the row. */
|
|
20746
|
+
ownerType: EventOwnerTypeSchema,
|
|
20747
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20748
|
+
eventId: number().int(),
|
|
20694
20749
|
kind: MediaFileKindEnum.optional(),
|
|
20695
20750
|
deviceId: number()
|
|
20696
20751
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20701,7 +20756,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20701
20756
|
trackId: string(),
|
|
20702
20757
|
deviceId: number()
|
|
20703
20758
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20704
|
-
|
|
20759
|
+
ownerType: EventOwnerTypeSchema,
|
|
20760
|
+
eventId: number().int(),
|
|
20705
20761
|
deviceId: number()
|
|
20706
20762
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20707
20763
|
kind: "mutation",
|
|
@@ -25998,8 +26054,8 @@ var IdentitySchema = object({
|
|
|
25998
26054
|
id: string(),
|
|
25999
26055
|
name: string(),
|
|
26000
26056
|
sampleCount: number().int().nonnegative(),
|
|
26001
|
-
|
|
26002
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26057
|
+
coverMediaId: number().int().optional(),
|
|
26058
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26003
26059
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26004
26060
|
coverBase64: string().optional()
|
|
26005
26061
|
});
|
|
@@ -26025,8 +26081,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26025
26081
|
enrolledAt: number().int(),
|
|
26026
26082
|
deviceId: number().int().optional(),
|
|
26027
26083
|
source: _enum(["detected", "photo"]),
|
|
26028
|
-
/** The enrolled crop's media
|
|
26029
|
-
|
|
26084
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26085
|
+
mediaId: number().int().optional(),
|
|
26030
26086
|
/**
|
|
26031
26087
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26032
26088
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26095,15 +26151,15 @@ var FaceInfoSchema = object({
|
|
|
26095
26151
|
*/
|
|
26096
26152
|
cropUrl: string().optional(),
|
|
26097
26153
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26098
|
-
* view draw the box over the native `
|
|
26154
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26099
26155
|
* legacy rows written before design B. */
|
|
26100
26156
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26101
26157
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26102
26158
|
* Fetch the native JPEG via the event-media data-plane
|
|
26103
|
-
* (`/addon/<addonId>/event-media/<
|
|
26159
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26104
26160
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26105
26161
|
* back to the inline `base64` face crop. */
|
|
26106
|
-
|
|
26162
|
+
keyFrameMediaId: number().int().optional(),
|
|
26107
26163
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26108
26164
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26109
26165
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26172,11 +26228,14 @@ var FaceClusterSchema = object({
|
|
|
26172
26228
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26173
26229
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26174
26230
|
*
|
|
26175
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26176
|
-
* media
|
|
26231
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26232
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26233
|
+
* access decision.
|
|
26177
26234
|
*/
|
|
26178
26235
|
var MediaFileLiteSchema$1 = object({
|
|
26179
|
-
|
|
26236
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26237
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26238
|
+
mediaId: number().int(),
|
|
26180
26239
|
kind: string(),
|
|
26181
26240
|
url: string(),
|
|
26182
26241
|
sizeBytes: number(),
|
|
@@ -26193,7 +26252,7 @@ method(object({
|
|
|
26193
26252
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26194
26253
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26195
26254
|
*
|
|
26196
|
-
* Nothing loses its avatar: `
|
|
26255
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26197
26256
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26198
26257
|
*
|
|
26199
26258
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29627,8 +29686,8 @@ var VehicleSchema = object({
|
|
|
29627
29686
|
id: string(),
|
|
29628
29687
|
name: string(),
|
|
29629
29688
|
sampleCount: number().int().nonnegative(),
|
|
29630
|
-
|
|
29631
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29689
|
+
coverMediaId: number().int().optional(),
|
|
29690
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29632
29691
|
coverBase64: string().optional()
|
|
29633
29692
|
});
|
|
29634
29693
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29661,7 +29720,7 @@ var PlateInfoSchema = object({
|
|
|
29661
29720
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29662
29721
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29663
29722
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29664
|
-
|
|
29723
|
+
keyFrameMediaId: number().int().optional(),
|
|
29665
29724
|
base64: string().optional(),
|
|
29666
29725
|
/**
|
|
29667
29726
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29682,11 +29741,14 @@ var PlateInfoSchema = object({
|
|
|
29682
29741
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29683
29742
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29684
29743
|
*
|
|
29685
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29686
|
-
* media
|
|
29744
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29745
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29746
|
+
* access decision.
|
|
29687
29747
|
*/
|
|
29688
29748
|
var MediaFileLiteSchema = object({
|
|
29689
|
-
|
|
29749
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29750
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29751
|
+
mediaId: number().int(),
|
|
29690
29752
|
kind: string(),
|
|
29691
29753
|
url: string(),
|
|
29692
29754
|
sizeBytes: number(),
|
|
@@ -29745,7 +29807,7 @@ method(object({
|
|
|
29745
29807
|
}), method(object({
|
|
29746
29808
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29747
29809
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29748
|
-
* option; `
|
|
29810
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29749
29811
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29750
29812
|
* resolves to `false` and is exactly the intended default. */
|
|
29751
29813
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31376,7 +31438,14 @@ var SceneReferenceSchema = object({
|
|
|
31376
31438
|
modelId: string(),
|
|
31377
31439
|
condition: SceneConditionSchema,
|
|
31378
31440
|
capturedAt: number(),
|
|
31379
|
-
|
|
31441
|
+
/**
|
|
31442
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31443
|
+
*
|
|
31444
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31445
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31446
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31447
|
+
*/
|
|
31448
|
+
thumbnailMediaId: number().int().optional(),
|
|
31380
31449
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31381
31450
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31382
31451
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33558,7 +33627,7 @@ var StationaryObjectSchema = object({
|
|
|
33558
33627
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33559
33628
|
label: string().optional(),
|
|
33560
33629
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33561
|
-
|
|
33630
|
+
keyFrameMediaId: number().int().optional()
|
|
33562
33631
|
});
|
|
33563
33632
|
var CameraOccupancySnapshotSchema = object({
|
|
33564
33633
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -36502,6 +36571,12 @@ Object.freeze({
|
|
|
36502
36571
|
addonId: null,
|
|
36503
36572
|
access: "create"
|
|
36504
36573
|
},
|
|
36574
|
+
"dataStoreProvider.upsert": {
|
|
36575
|
+
capName: "data-store-provider",
|
|
36576
|
+
capScope: "system",
|
|
36577
|
+
addonId: null,
|
|
36578
|
+
access: "create"
|
|
36579
|
+
},
|
|
36505
36580
|
"dayNight.getOptions": {
|
|
36506
36581
|
capName: "day-night",
|
|
36507
36582
|
capScope: "device",
|
|
@@ -40366,6 +40441,12 @@ Object.freeze({
|
|
|
40366
40441
|
addonId: null,
|
|
40367
40442
|
access: "create"
|
|
40368
40443
|
},
|
|
40444
|
+
"settingsStore.upsert": {
|
|
40445
|
+
capName: "settings-store",
|
|
40446
|
+
capScope: "system",
|
|
40447
|
+
addonId: null,
|
|
40448
|
+
access: "create"
|
|
40449
|
+
},
|
|
40369
40450
|
"smtpProvider.getStatus": {
|
|
40370
40451
|
capName: "smtp-provider",
|
|
40371
40452
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-amcrest",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.102",
|
|
4
4
|
"description": "Amcrest/Dahua camera device provider addon for CamStack — Dahua CGI over HTTP(S) with digest auth (snapshot, RTSP catalog, PTZ, image/day-night config)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|