@camstack/addon-post-analysis 1.1.31 → 1.1.33
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/{dist-D1cY_vlY.mjs → dist-CA0GikiM.mjs} +219 -6
- package/dist/{dist-Cy4Tp-yp.js → dist-V8XOHDoj.js} +224 -5
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/{node-qtD7WAqr.js → node-E-m2CYYM.js} +1 -1
- package/dist/pipeline-analytics/_stub.js +1 -1
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-jTZY8fyP.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-BbAKLasA.mjs} +3 -3
- package/dist/pipeline-analytics/{_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-D6C5R_2c.mjs → _virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-ai-NpPOn.mjs} +1 -1
- package/dist/pipeline-analytics/{hostInit-TIRXUvf0.mjs → hostInit-lUENPwl7.mjs} +3 -3
- package/dist/pipeline-analytics/index.js +602 -61
- package/dist/pipeline-analytics/index.mjs +601 -60
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region ../types/dist/event-category-
|
|
1
|
+
//#region ../types/dist/event-category-D4HJq7Mw.mjs
|
|
2
2
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
3
3
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4
4
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -151,6 +151,11 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
151
151
|
/** Runner-sampled scrub thumbnail (~1/5 s/camera). Telemetry (D8): a lost
|
|
152
152
|
* thumb is a scrub gap the recorder's keyframe backfill covers. */
|
|
153
153
|
EventCategory["RecordingThumbSampled"] = "recording.thumb-sampled";
|
|
154
|
+
/** Export render progress (0–100). Telemetry (D8): a lost tick is a stale
|
|
155
|
+
* progress bar the client reconciles via `recordingExport.getExport`. */
|
|
156
|
+
EventCategory["RecordingExportProgress"] = "recording.export.progress";
|
|
157
|
+
EventCategory["RecordingExportCompleted"] = "recording.export.completed";
|
|
158
|
+
EventCategory["RecordingExportFailed"] = "recording.export.failed";
|
|
154
159
|
EventCategory["DetectionEvent"] = "detection.event";
|
|
155
160
|
EventCategory["SessionTrackNew"] = "session.track.new";
|
|
156
161
|
EventCategory["SessionTrackExpired"] = "session.track.expired";
|
|
@@ -440,6 +445,25 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
440
445
|
*/
|
|
441
446
|
EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
|
|
442
447
|
/**
|
|
448
|
+
* Fired by `addon-post-analysis` when a package-drop is confirmed inside
|
|
449
|
+
* a package zone — a newly-appeared stationary object of a package class
|
|
450
|
+
* that cleared the class / zone / dwell / size gates. Payload:
|
|
451
|
+
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
452
|
+
* entryId, className, zoneIds, keyFrameMediaKey?, bbox, timestamp }`.
|
|
453
|
+
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
454
|
+
* this bus topic drives notifier rules + live UI. See
|
|
455
|
+
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
456
|
+
*/
|
|
457
|
+
EventCategory["PipelineAnalyticsPackageDelivered"] = "pipeline-analytics.package-delivered";
|
|
458
|
+
/**
|
|
459
|
+
* Fired by `addon-post-analysis` when a previously-delivered package
|
|
460
|
+
* leaves its zone (the stationary entry departed — moved or swept).
|
|
461
|
+
* Payload: `PipelineAnalyticsPackagePickedUpPayload` carrying
|
|
462
|
+
* `{ deviceId, entryId, deliveredEventId, className, timestamp }`.
|
|
463
|
+
* Telemetry (D8). See package-zones-design §5.2.
|
|
464
|
+
*/
|
|
465
|
+
EventCategory["PipelineAnalyticsPackagePickedUp"] = "pipeline-analytics.package-picked-up";
|
|
466
|
+
/**
|
|
443
467
|
* Fired by `addon-post-analysis` whenever a gallery face row changes:
|
|
444
468
|
* `kind:'buffered'` a new detected face was persisted, `'assigned'` /
|
|
445
469
|
* `'unassigned'` its identity link changed, `'deleted'` the row was
|
|
@@ -5178,6 +5202,25 @@ function _instanceof(cls, params = {}) {
|
|
|
5178
5202
|
};
|
|
5179
5203
|
return inst;
|
|
5180
5204
|
}
|
|
5205
|
+
//#endregion
|
|
5206
|
+
//#region ../../node_modules/zod/v4/classic/compat.js
|
|
5207
|
+
/** @deprecated Use the raw string literal codes instead, e.g. "invalid_type". */
|
|
5208
|
+
var ZodIssueCode = {
|
|
5209
|
+
invalid_type: "invalid_type",
|
|
5210
|
+
too_big: "too_big",
|
|
5211
|
+
too_small: "too_small",
|
|
5212
|
+
invalid_format: "invalid_format",
|
|
5213
|
+
not_multiple_of: "not_multiple_of",
|
|
5214
|
+
unrecognized_keys: "unrecognized_keys",
|
|
5215
|
+
invalid_union: "invalid_union",
|
|
5216
|
+
invalid_key: "invalid_key",
|
|
5217
|
+
invalid_element: "invalid_element",
|
|
5218
|
+
invalid_value: "invalid_value",
|
|
5219
|
+
custom: "custom"
|
|
5220
|
+
};
|
|
5221
|
+
/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */
|
|
5222
|
+
var ZodFirstPartyTypeKind;
|
|
5223
|
+
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5181
5224
|
Object.fromEntries([
|
|
5182
5225
|
{
|
|
5183
5226
|
id: "overview",
|
|
@@ -7251,6 +7294,24 @@ var RecordingRetentionSchema = object({
|
|
|
7251
7294
|
maxSizeGb: number().min(0).optional()
|
|
7252
7295
|
});
|
|
7253
7296
|
/**
|
|
7297
|
+
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7298
|
+
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7299
|
+
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7300
|
+
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7301
|
+
*
|
|
7302
|
+
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7303
|
+
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7304
|
+
* preset changed over time renders every historical window at the dims it was
|
|
7305
|
+
* written with.
|
|
7306
|
+
*/
|
|
7307
|
+
var ScrubThumbnailPresetSchema = _enum([
|
|
7308
|
+
"minimal",
|
|
7309
|
+
"low",
|
|
7310
|
+
"standard",
|
|
7311
|
+
"high",
|
|
7312
|
+
"max"
|
|
7313
|
+
]);
|
|
7314
|
+
/**
|
|
7254
7315
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7255
7316
|
*
|
|
7256
7317
|
* `mode` is the authoritative storage choice; `schedule`/`triggers`/`pre`/`post`
|
|
@@ -7287,7 +7348,14 @@ var RecordingConfigSchema = object({
|
|
|
7287
7348
|
* derived into bands once via `migrateConfigToBands`.
|
|
7288
7349
|
*/
|
|
7289
7350
|
bands: array(RecordingBandSchema).optional(),
|
|
7290
|
-
retention: RecordingRetentionSchema.optional()
|
|
7351
|
+
retention: RecordingRetentionSchema.optional(),
|
|
7352
|
+
/**
|
|
7353
|
+
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7354
|
+
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7355
|
+
* windows only — existing sheets are immutable, and each window's index
|
|
7356
|
+
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7357
|
+
*/
|
|
7358
|
+
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7291
7359
|
});
|
|
7292
7360
|
/**
|
|
7293
7361
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
@@ -12664,7 +12732,11 @@ array(ZoneRuleSchema).readonly();
|
|
|
12664
12732
|
* Extend the enum here when a new gating consumer comes online (audio
|
|
12665
12733
|
* gating, alert filtering, …) — no other surface needs to change.
|
|
12666
12734
|
*/
|
|
12667
|
-
var ZoneRuleStageEnum = _enum([
|
|
12735
|
+
var ZoneRuleStageEnum = _enum([
|
|
12736
|
+
"motion",
|
|
12737
|
+
"detection",
|
|
12738
|
+
"package"
|
|
12739
|
+
]);
|
|
12668
12740
|
DeviceType.Camera, method(object({
|
|
12669
12741
|
deviceId: number(),
|
|
12670
12742
|
stage: ZoneRuleStageEnum
|
|
@@ -12677,7 +12749,8 @@ DeviceType.Camera, method(object({
|
|
|
12677
12749
|
auth: "admin"
|
|
12678
12750
|
}), object({
|
|
12679
12751
|
motion: array(ZoneRuleSchema).readonly(),
|
|
12680
|
-
detection: array(ZoneRuleSchema).readonly()
|
|
12752
|
+
detection: array(ZoneRuleSchema).readonly(),
|
|
12753
|
+
package: array(ZoneRuleSchema).readonly()
|
|
12681
12754
|
});
|
|
12682
12755
|
var ProviderStatusSchema = object({
|
|
12683
12756
|
connected: boolean(),
|
|
@@ -15876,6 +15949,7 @@ var EventKindIconSchema = _enum([
|
|
|
15876
15949
|
"smoke",
|
|
15877
15950
|
"water",
|
|
15878
15951
|
"button",
|
|
15952
|
+
"package",
|
|
15879
15953
|
"generic"
|
|
15880
15954
|
]);
|
|
15881
15955
|
var EventKindCategorySchema = _enum([
|
|
@@ -15883,7 +15957,8 @@ var EventKindCategorySchema = _enum([
|
|
|
15883
15957
|
"audio",
|
|
15884
15958
|
"detection",
|
|
15885
15959
|
"sensor",
|
|
15886
|
-
"custom"
|
|
15960
|
+
"custom",
|
|
15961
|
+
"package"
|
|
15887
15962
|
]);
|
|
15888
15963
|
var EventKindDescriptorSchema = object({
|
|
15889
15964
|
/** Stable kind id (e.g. 'motion', 'person', 'contact'). */
|
|
@@ -19774,6 +19849,108 @@ method(object({
|
|
|
19774
19849
|
auth: "admin"
|
|
19775
19850
|
});
|
|
19776
19851
|
/**
|
|
19852
|
+
* `recordingExport` cap — render a footage time range into a single downloadable
|
|
19853
|
+
* MP4 (regular / accelerated / decelerated / timelapse, ± audio), kept for a
|
|
19854
|
+
* bounded lifetime with a durable history, auto-expiry, and optional
|
|
19855
|
+
* delete-after-download.
|
|
19856
|
+
*
|
|
19857
|
+
* Like `recording` this is a `scope:'system', mode:'singleton'` cap: the
|
|
19858
|
+
* recorder self-gates so exactly ONE node (the designated `recordingNodeId`,
|
|
19859
|
+
* default `hub`) registers it. Device-scoped methods carry `deviceId` in their
|
|
19860
|
+
* input and dispatch to that single provider; the render runs on the node that
|
|
19861
|
+
* owns the footage (no cross-node segment transfer). Download rides the
|
|
19862
|
+
* framework addon data-plane. State persists in a DurableState blob (NOT
|
|
19863
|
+
* SQLite); history rows survive file deletion for audit.
|
|
19864
|
+
*/
|
|
19865
|
+
/** Playback-speed multiplier for the render (1 = realtime). */
|
|
19866
|
+
var ExportSpeedSchema = number().min(.25).max(32);
|
|
19867
|
+
/** Timelapse cadence — sample one source frame per `everyMs`, output at `outputFps`. */
|
|
19868
|
+
var ExportTimelapseSchema = object({
|
|
19869
|
+
everyMs: number().int().positive(),
|
|
19870
|
+
outputFps: number().int().min(1).max(60).optional()
|
|
19871
|
+
});
|
|
19872
|
+
/**
|
|
19873
|
+
* Render options. `speed` and `timelapse` are mutually exclusive. `includeAudio`
|
|
19874
|
+
* is honoured only for a realtime-ish speed (0.5–2×); timelapse is always
|
|
19875
|
+
* silent. `maxLifeMs` bounds how long the finished file is kept;
|
|
19876
|
+
* `deleteAfterDownload` removes it shortly after the first complete download.
|
|
19877
|
+
*/
|
|
19878
|
+
var ExportOptionsSchema = object({
|
|
19879
|
+
speed: ExportSpeedSchema.optional(),
|
|
19880
|
+
timelapse: ExportTimelapseSchema.optional(),
|
|
19881
|
+
includeAudio: boolean(),
|
|
19882
|
+
maxLifeMs: number().int().positive(),
|
|
19883
|
+
deleteAfterDownload: boolean(),
|
|
19884
|
+
title: string().max(200).optional()
|
|
19885
|
+
}).superRefine((v, ctx) => {
|
|
19886
|
+
if (v.speed !== void 0 && v.timelapse !== void 0) ctx.addIssue({
|
|
19887
|
+
code: ZodIssueCode.custom,
|
|
19888
|
+
message: "speed and timelapse are mutually exclusive",
|
|
19889
|
+
path: ["timelapse"]
|
|
19890
|
+
});
|
|
19891
|
+
});
|
|
19892
|
+
var ExportStateSchema = _enum([
|
|
19893
|
+
"queued",
|
|
19894
|
+
"rendering",
|
|
19895
|
+
"ready",
|
|
19896
|
+
"failed",
|
|
19897
|
+
"expired",
|
|
19898
|
+
"deleted"
|
|
19899
|
+
]);
|
|
19900
|
+
/** One export job / history row. */
|
|
19901
|
+
var ExportRecordSchema = object({
|
|
19902
|
+
id: string(),
|
|
19903
|
+
deviceId: number(),
|
|
19904
|
+
profile: string(),
|
|
19905
|
+
fromMs: number(),
|
|
19906
|
+
toMs: number(),
|
|
19907
|
+
options: ExportOptionsSchema,
|
|
19908
|
+
state: ExportStateSchema,
|
|
19909
|
+
/** 0–100 while rendering; null otherwise. */
|
|
19910
|
+
progressPct: number().nullable(),
|
|
19911
|
+
/** File size once ready; null before. */
|
|
19912
|
+
fileBytes: number().nullable(),
|
|
19913
|
+
expiresAt: number(),
|
|
19914
|
+
deleteAfterDownload: boolean(),
|
|
19915
|
+
/** Epoch of the first complete download; null until then. */
|
|
19916
|
+
downloadedAt: number().nullable(),
|
|
19917
|
+
createdAt: number(),
|
|
19918
|
+
/** User id/name that requested the export. */
|
|
19919
|
+
createdBy: string(),
|
|
19920
|
+
/** Failure reason when state is 'failed'; null otherwise. */
|
|
19921
|
+
error: string().nullable()
|
|
19922
|
+
});
|
|
19923
|
+
/** Candidate download URLs (LAN first, then operator extra hosts). */
|
|
19924
|
+
var ExportDownloadSchema = object({
|
|
19925
|
+
url: string(),
|
|
19926
|
+
endpoints: array(string())
|
|
19927
|
+
});
|
|
19928
|
+
method(object({
|
|
19929
|
+
deviceId: number(),
|
|
19930
|
+
profile: string(),
|
|
19931
|
+
fromMs: number(),
|
|
19932
|
+
toMs: number(),
|
|
19933
|
+
options: ExportOptionsSchema
|
|
19934
|
+
}), ExportRecordSchema, {
|
|
19935
|
+
kind: "mutation",
|
|
19936
|
+
auth: "protected"
|
|
19937
|
+
}), method(object({ deviceId: number().optional() }), array(ExportRecordSchema), {
|
|
19938
|
+
kind: "query",
|
|
19939
|
+
auth: "protected"
|
|
19940
|
+
}), method(object({ exportId: string() }), ExportRecordSchema, {
|
|
19941
|
+
kind: "query",
|
|
19942
|
+
auth: "protected"
|
|
19943
|
+
}), method(object({ exportId: string() }), ExportRecordSchema, {
|
|
19944
|
+
kind: "mutation",
|
|
19945
|
+
auth: "protected"
|
|
19946
|
+
}), method(object({ exportId: string() }), ExportRecordSchema, {
|
|
19947
|
+
kind: "mutation",
|
|
19948
|
+
auth: "protected"
|
|
19949
|
+
}), method(object({ exportId: string() }), ExportDownloadSchema, {
|
|
19950
|
+
kind: "query",
|
|
19951
|
+
auth: "protected"
|
|
19952
|
+
});
|
|
19953
|
+
/**
|
|
19777
19954
|
* One publishable camera stream as its OWNING PROVIDER describes it — the same
|
|
19778
19955
|
* payload the (legacy) push `streamBroker.publishCameraStream` carried, minus
|
|
19779
19956
|
* `deviceId`.
|
|
@@ -23697,6 +23874,42 @@ Object.freeze({
|
|
|
23697
23874
|
addonId: null,
|
|
23698
23875
|
access: "create"
|
|
23699
23876
|
},
|
|
23877
|
+
"recordingExport.cancelExport": {
|
|
23878
|
+
capName: "recordingExport",
|
|
23879
|
+
capScope: "system",
|
|
23880
|
+
addonId: null,
|
|
23881
|
+
access: "create"
|
|
23882
|
+
},
|
|
23883
|
+
"recordingExport.createExport": {
|
|
23884
|
+
capName: "recordingExport",
|
|
23885
|
+
capScope: "system",
|
|
23886
|
+
addonId: null,
|
|
23887
|
+
access: "create"
|
|
23888
|
+
},
|
|
23889
|
+
"recordingExport.deleteExport": {
|
|
23890
|
+
capName: "recordingExport",
|
|
23891
|
+
capScope: "system",
|
|
23892
|
+
addonId: null,
|
|
23893
|
+
access: "delete"
|
|
23894
|
+
},
|
|
23895
|
+
"recordingExport.getDownloadUrl": {
|
|
23896
|
+
capName: "recordingExport",
|
|
23897
|
+
capScope: "system",
|
|
23898
|
+
addonId: null,
|
|
23899
|
+
access: "view"
|
|
23900
|
+
},
|
|
23901
|
+
"recordingExport.getExport": {
|
|
23902
|
+
capName: "recordingExport",
|
|
23903
|
+
capScope: "system",
|
|
23904
|
+
addonId: null,
|
|
23905
|
+
access: "view"
|
|
23906
|
+
},
|
|
23907
|
+
"recordingExport.listExports": {
|
|
23908
|
+
capName: "recordingExport",
|
|
23909
|
+
capScope: "system",
|
|
23910
|
+
addonId: null,
|
|
23911
|
+
access: "view"
|
|
23912
|
+
},
|
|
23700
23913
|
"sceneMonitor.captureReference": {
|
|
23701
23914
|
capName: "scene-monitor",
|
|
23702
23915
|
capScope: "device",
|
|
@@ -24856,4 +25069,4 @@ object({
|
|
|
24856
25069
|
schemaVersion: literal(1)
|
|
24857
25070
|
});
|
|
24858
25071
|
//#endregion
|
|
24859
|
-
export {
|
|
25072
|
+
export { string as C, object as S, createEvent as _, cosineSimilarity as a, boolean as b, hfModelUrl as c, plateGalleryCapability as d, videoclipsCapability as f, DeviceType as g, BaseAddon as h, audioMetricsCapability as i, nodePin as l, errMsg as m, EVENT_PAD_MS as n, embeddingEncoderCapability as o, zoneAnalyticsCapability as p, addonWidgetsSourceCapability as r, faceGalleryCapability as s, EVENT_KIND_BY_CAP as t, pipelineAnalyticsCapability as u, hydrateSchema as v, EventCategory as w, number as x, array as y };
|
|
@@ -20,7 +20,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
20
20
|
enumerable: true
|
|
21
21
|
}) : target, mod));
|
|
22
22
|
//#endregion
|
|
23
|
-
//#region ../types/dist/event-category-
|
|
23
|
+
//#region ../types/dist/event-category-D4HJq7Mw.mjs
|
|
24
24
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
25
25
|
EventCategory["SystemBoot"] = "system.boot";
|
|
26
26
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -173,6 +173,11 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
173
173
|
/** Runner-sampled scrub thumbnail (~1/5 s/camera). Telemetry (D8): a lost
|
|
174
174
|
* thumb is a scrub gap the recorder's keyframe backfill covers. */
|
|
175
175
|
EventCategory["RecordingThumbSampled"] = "recording.thumb-sampled";
|
|
176
|
+
/** Export render progress (0–100). Telemetry (D8): a lost tick is a stale
|
|
177
|
+
* progress bar the client reconciles via `recordingExport.getExport`. */
|
|
178
|
+
EventCategory["RecordingExportProgress"] = "recording.export.progress";
|
|
179
|
+
EventCategory["RecordingExportCompleted"] = "recording.export.completed";
|
|
180
|
+
EventCategory["RecordingExportFailed"] = "recording.export.failed";
|
|
176
181
|
EventCategory["DetectionEvent"] = "detection.event";
|
|
177
182
|
EventCategory["SessionTrackNew"] = "session.track.new";
|
|
178
183
|
EventCategory["SessionTrackExpired"] = "session.track.expired";
|
|
@@ -462,6 +467,25 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
462
467
|
*/
|
|
463
468
|
EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
|
|
464
469
|
/**
|
|
470
|
+
* Fired by `addon-post-analysis` when a package-drop is confirmed inside
|
|
471
|
+
* a package zone — a newly-appeared stationary object of a package class
|
|
472
|
+
* that cleared the class / zone / dwell / size gates. Payload:
|
|
473
|
+
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
474
|
+
* entryId, className, zoneIds, keyFrameMediaKey?, bbox, timestamp }`.
|
|
475
|
+
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
476
|
+
* this bus topic drives notifier rules + live UI. See
|
|
477
|
+
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
478
|
+
*/
|
|
479
|
+
EventCategory["PipelineAnalyticsPackageDelivered"] = "pipeline-analytics.package-delivered";
|
|
480
|
+
/**
|
|
481
|
+
* Fired by `addon-post-analysis` when a previously-delivered package
|
|
482
|
+
* leaves its zone (the stationary entry departed — moved or swept).
|
|
483
|
+
* Payload: `PipelineAnalyticsPackagePickedUpPayload` carrying
|
|
484
|
+
* `{ deviceId, entryId, deliveredEventId, className, timestamp }`.
|
|
485
|
+
* Telemetry (D8). See package-zones-design §5.2.
|
|
486
|
+
*/
|
|
487
|
+
EventCategory["PipelineAnalyticsPackagePickedUp"] = "pipeline-analytics.package-picked-up";
|
|
488
|
+
/**
|
|
465
489
|
* Fired by `addon-post-analysis` whenever a gallery face row changes:
|
|
466
490
|
* `kind:'buffered'` a new detected face was persisted, `'assigned'` /
|
|
467
491
|
* `'unassigned'` its identity link changed, `'deleted'` the row was
|
|
@@ -5200,6 +5224,25 @@ function _instanceof(cls, params = {}) {
|
|
|
5200
5224
|
};
|
|
5201
5225
|
return inst;
|
|
5202
5226
|
}
|
|
5227
|
+
//#endregion
|
|
5228
|
+
//#region ../../node_modules/zod/v4/classic/compat.js
|
|
5229
|
+
/** @deprecated Use the raw string literal codes instead, e.g. "invalid_type". */
|
|
5230
|
+
var ZodIssueCode = {
|
|
5231
|
+
invalid_type: "invalid_type",
|
|
5232
|
+
too_big: "too_big",
|
|
5233
|
+
too_small: "too_small",
|
|
5234
|
+
invalid_format: "invalid_format",
|
|
5235
|
+
not_multiple_of: "not_multiple_of",
|
|
5236
|
+
unrecognized_keys: "unrecognized_keys",
|
|
5237
|
+
invalid_union: "invalid_union",
|
|
5238
|
+
invalid_key: "invalid_key",
|
|
5239
|
+
invalid_element: "invalid_element",
|
|
5240
|
+
invalid_value: "invalid_value",
|
|
5241
|
+
custom: "custom"
|
|
5242
|
+
};
|
|
5243
|
+
/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */
|
|
5244
|
+
var ZodFirstPartyTypeKind;
|
|
5245
|
+
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5203
5246
|
Object.fromEntries([
|
|
5204
5247
|
{
|
|
5205
5248
|
id: "overview",
|
|
@@ -7273,6 +7316,24 @@ var RecordingRetentionSchema = object({
|
|
|
7273
7316
|
maxSizeGb: number().min(0).optional()
|
|
7274
7317
|
});
|
|
7275
7318
|
/**
|
|
7319
|
+
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7320
|
+
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7321
|
+
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7322
|
+
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7323
|
+
*
|
|
7324
|
+
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7325
|
+
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7326
|
+
* preset changed over time renders every historical window at the dims it was
|
|
7327
|
+
* written with.
|
|
7328
|
+
*/
|
|
7329
|
+
var ScrubThumbnailPresetSchema = _enum([
|
|
7330
|
+
"minimal",
|
|
7331
|
+
"low",
|
|
7332
|
+
"standard",
|
|
7333
|
+
"high",
|
|
7334
|
+
"max"
|
|
7335
|
+
]);
|
|
7336
|
+
/**
|
|
7276
7337
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7277
7338
|
*
|
|
7278
7339
|
* `mode` is the authoritative storage choice; `schedule`/`triggers`/`pre`/`post`
|
|
@@ -7309,7 +7370,14 @@ var RecordingConfigSchema = object({
|
|
|
7309
7370
|
* derived into bands once via `migrateConfigToBands`.
|
|
7310
7371
|
*/
|
|
7311
7372
|
bands: array(RecordingBandSchema).optional(),
|
|
7312
|
-
retention: RecordingRetentionSchema.optional()
|
|
7373
|
+
retention: RecordingRetentionSchema.optional(),
|
|
7374
|
+
/**
|
|
7375
|
+
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7376
|
+
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7377
|
+
* windows only — existing sheets are immutable, and each window's index
|
|
7378
|
+
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7379
|
+
*/
|
|
7380
|
+
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7313
7381
|
});
|
|
7314
7382
|
/**
|
|
7315
7383
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
@@ -12686,7 +12754,11 @@ array(ZoneRuleSchema).readonly();
|
|
|
12686
12754
|
* Extend the enum here when a new gating consumer comes online (audio
|
|
12687
12755
|
* gating, alert filtering, …) — no other surface needs to change.
|
|
12688
12756
|
*/
|
|
12689
|
-
var ZoneRuleStageEnum = _enum([
|
|
12757
|
+
var ZoneRuleStageEnum = _enum([
|
|
12758
|
+
"motion",
|
|
12759
|
+
"detection",
|
|
12760
|
+
"package"
|
|
12761
|
+
]);
|
|
12690
12762
|
DeviceType.Camera, method(object({
|
|
12691
12763
|
deviceId: number(),
|
|
12692
12764
|
stage: ZoneRuleStageEnum
|
|
@@ -12699,7 +12771,8 @@ DeviceType.Camera, method(object({
|
|
|
12699
12771
|
auth: "admin"
|
|
12700
12772
|
}), object({
|
|
12701
12773
|
motion: array(ZoneRuleSchema).readonly(),
|
|
12702
|
-
detection: array(ZoneRuleSchema).readonly()
|
|
12774
|
+
detection: array(ZoneRuleSchema).readonly(),
|
|
12775
|
+
package: array(ZoneRuleSchema).readonly()
|
|
12703
12776
|
});
|
|
12704
12777
|
var ProviderStatusSchema = object({
|
|
12705
12778
|
connected: boolean(),
|
|
@@ -15898,6 +15971,7 @@ var EventKindIconSchema = _enum([
|
|
|
15898
15971
|
"smoke",
|
|
15899
15972
|
"water",
|
|
15900
15973
|
"button",
|
|
15974
|
+
"package",
|
|
15901
15975
|
"generic"
|
|
15902
15976
|
]);
|
|
15903
15977
|
var EventKindCategorySchema = _enum([
|
|
@@ -15905,7 +15979,8 @@ var EventKindCategorySchema = _enum([
|
|
|
15905
15979
|
"audio",
|
|
15906
15980
|
"detection",
|
|
15907
15981
|
"sensor",
|
|
15908
|
-
"custom"
|
|
15982
|
+
"custom",
|
|
15983
|
+
"package"
|
|
15909
15984
|
]);
|
|
15910
15985
|
var EventKindDescriptorSchema = object({
|
|
15911
15986
|
/** Stable kind id (e.g. 'motion', 'person', 'contact'). */
|
|
@@ -19796,6 +19871,108 @@ method(object({
|
|
|
19796
19871
|
auth: "admin"
|
|
19797
19872
|
});
|
|
19798
19873
|
/**
|
|
19874
|
+
* `recordingExport` cap — render a footage time range into a single downloadable
|
|
19875
|
+
* MP4 (regular / accelerated / decelerated / timelapse, ± audio), kept for a
|
|
19876
|
+
* bounded lifetime with a durable history, auto-expiry, and optional
|
|
19877
|
+
* delete-after-download.
|
|
19878
|
+
*
|
|
19879
|
+
* Like `recording` this is a `scope:'system', mode:'singleton'` cap: the
|
|
19880
|
+
* recorder self-gates so exactly ONE node (the designated `recordingNodeId`,
|
|
19881
|
+
* default `hub`) registers it. Device-scoped methods carry `deviceId` in their
|
|
19882
|
+
* input and dispatch to that single provider; the render runs on the node that
|
|
19883
|
+
* owns the footage (no cross-node segment transfer). Download rides the
|
|
19884
|
+
* framework addon data-plane. State persists in a DurableState blob (NOT
|
|
19885
|
+
* SQLite); history rows survive file deletion for audit.
|
|
19886
|
+
*/
|
|
19887
|
+
/** Playback-speed multiplier for the render (1 = realtime). */
|
|
19888
|
+
var ExportSpeedSchema = number().min(.25).max(32);
|
|
19889
|
+
/** Timelapse cadence — sample one source frame per `everyMs`, output at `outputFps`. */
|
|
19890
|
+
var ExportTimelapseSchema = object({
|
|
19891
|
+
everyMs: number().int().positive(),
|
|
19892
|
+
outputFps: number().int().min(1).max(60).optional()
|
|
19893
|
+
});
|
|
19894
|
+
/**
|
|
19895
|
+
* Render options. `speed` and `timelapse` are mutually exclusive. `includeAudio`
|
|
19896
|
+
* is honoured only for a realtime-ish speed (0.5–2×); timelapse is always
|
|
19897
|
+
* silent. `maxLifeMs` bounds how long the finished file is kept;
|
|
19898
|
+
* `deleteAfterDownload` removes it shortly after the first complete download.
|
|
19899
|
+
*/
|
|
19900
|
+
var ExportOptionsSchema = object({
|
|
19901
|
+
speed: ExportSpeedSchema.optional(),
|
|
19902
|
+
timelapse: ExportTimelapseSchema.optional(),
|
|
19903
|
+
includeAudio: boolean(),
|
|
19904
|
+
maxLifeMs: number().int().positive(),
|
|
19905
|
+
deleteAfterDownload: boolean(),
|
|
19906
|
+
title: string().max(200).optional()
|
|
19907
|
+
}).superRefine((v, ctx) => {
|
|
19908
|
+
if (v.speed !== void 0 && v.timelapse !== void 0) ctx.addIssue({
|
|
19909
|
+
code: ZodIssueCode.custom,
|
|
19910
|
+
message: "speed and timelapse are mutually exclusive",
|
|
19911
|
+
path: ["timelapse"]
|
|
19912
|
+
});
|
|
19913
|
+
});
|
|
19914
|
+
var ExportStateSchema = _enum([
|
|
19915
|
+
"queued",
|
|
19916
|
+
"rendering",
|
|
19917
|
+
"ready",
|
|
19918
|
+
"failed",
|
|
19919
|
+
"expired",
|
|
19920
|
+
"deleted"
|
|
19921
|
+
]);
|
|
19922
|
+
/** One export job / history row. */
|
|
19923
|
+
var ExportRecordSchema = object({
|
|
19924
|
+
id: string(),
|
|
19925
|
+
deviceId: number(),
|
|
19926
|
+
profile: string(),
|
|
19927
|
+
fromMs: number(),
|
|
19928
|
+
toMs: number(),
|
|
19929
|
+
options: ExportOptionsSchema,
|
|
19930
|
+
state: ExportStateSchema,
|
|
19931
|
+
/** 0–100 while rendering; null otherwise. */
|
|
19932
|
+
progressPct: number().nullable(),
|
|
19933
|
+
/** File size once ready; null before. */
|
|
19934
|
+
fileBytes: number().nullable(),
|
|
19935
|
+
expiresAt: number(),
|
|
19936
|
+
deleteAfterDownload: boolean(),
|
|
19937
|
+
/** Epoch of the first complete download; null until then. */
|
|
19938
|
+
downloadedAt: number().nullable(),
|
|
19939
|
+
createdAt: number(),
|
|
19940
|
+
/** User id/name that requested the export. */
|
|
19941
|
+
createdBy: string(),
|
|
19942
|
+
/** Failure reason when state is 'failed'; null otherwise. */
|
|
19943
|
+
error: string().nullable()
|
|
19944
|
+
});
|
|
19945
|
+
/** Candidate download URLs (LAN first, then operator extra hosts). */
|
|
19946
|
+
var ExportDownloadSchema = object({
|
|
19947
|
+
url: string(),
|
|
19948
|
+
endpoints: array(string())
|
|
19949
|
+
});
|
|
19950
|
+
method(object({
|
|
19951
|
+
deviceId: number(),
|
|
19952
|
+
profile: string(),
|
|
19953
|
+
fromMs: number(),
|
|
19954
|
+
toMs: number(),
|
|
19955
|
+
options: ExportOptionsSchema
|
|
19956
|
+
}), ExportRecordSchema, {
|
|
19957
|
+
kind: "mutation",
|
|
19958
|
+
auth: "protected"
|
|
19959
|
+
}), method(object({ deviceId: number().optional() }), array(ExportRecordSchema), {
|
|
19960
|
+
kind: "query",
|
|
19961
|
+
auth: "protected"
|
|
19962
|
+
}), method(object({ exportId: string() }), ExportRecordSchema, {
|
|
19963
|
+
kind: "query",
|
|
19964
|
+
auth: "protected"
|
|
19965
|
+
}), method(object({ exportId: string() }), ExportRecordSchema, {
|
|
19966
|
+
kind: "mutation",
|
|
19967
|
+
auth: "protected"
|
|
19968
|
+
}), method(object({ exportId: string() }), ExportRecordSchema, {
|
|
19969
|
+
kind: "mutation",
|
|
19970
|
+
auth: "protected"
|
|
19971
|
+
}), method(object({ exportId: string() }), ExportDownloadSchema, {
|
|
19972
|
+
kind: "query",
|
|
19973
|
+
auth: "protected"
|
|
19974
|
+
});
|
|
19975
|
+
/**
|
|
19799
19976
|
* One publishable camera stream as its OWNING PROVIDER describes it — the same
|
|
19800
19977
|
* payload the (legacy) push `streamBroker.publishCameraStream` carried, minus
|
|
19801
19978
|
* `deviceId`.
|
|
@@ -23719,6 +23896,42 @@ Object.freeze({
|
|
|
23719
23896
|
addonId: null,
|
|
23720
23897
|
access: "create"
|
|
23721
23898
|
},
|
|
23899
|
+
"recordingExport.cancelExport": {
|
|
23900
|
+
capName: "recordingExport",
|
|
23901
|
+
capScope: "system",
|
|
23902
|
+
addonId: null,
|
|
23903
|
+
access: "create"
|
|
23904
|
+
},
|
|
23905
|
+
"recordingExport.createExport": {
|
|
23906
|
+
capName: "recordingExport",
|
|
23907
|
+
capScope: "system",
|
|
23908
|
+
addonId: null,
|
|
23909
|
+
access: "create"
|
|
23910
|
+
},
|
|
23911
|
+
"recordingExport.deleteExport": {
|
|
23912
|
+
capName: "recordingExport",
|
|
23913
|
+
capScope: "system",
|
|
23914
|
+
addonId: null,
|
|
23915
|
+
access: "delete"
|
|
23916
|
+
},
|
|
23917
|
+
"recordingExport.getDownloadUrl": {
|
|
23918
|
+
capName: "recordingExport",
|
|
23919
|
+
capScope: "system",
|
|
23920
|
+
addonId: null,
|
|
23921
|
+
access: "view"
|
|
23922
|
+
},
|
|
23923
|
+
"recordingExport.getExport": {
|
|
23924
|
+
capName: "recordingExport",
|
|
23925
|
+
capScope: "system",
|
|
23926
|
+
addonId: null,
|
|
23927
|
+
access: "view"
|
|
23928
|
+
},
|
|
23929
|
+
"recordingExport.listExports": {
|
|
23930
|
+
capName: "recordingExport",
|
|
23931
|
+
capScope: "system",
|
|
23932
|
+
addonId: null,
|
|
23933
|
+
access: "view"
|
|
23934
|
+
},
|
|
23722
23935
|
"sceneMonitor.captureReference": {
|
|
23723
23936
|
capName: "scene-monitor",
|
|
23724
23937
|
capScope: "device",
|
|
@@ -24920,6 +25133,12 @@ Object.defineProperty(exports, "addonWidgetsSourceCapability", {
|
|
|
24920
25133
|
return addonWidgetsSourceCapability;
|
|
24921
25134
|
}
|
|
24922
25135
|
});
|
|
25136
|
+
Object.defineProperty(exports, "array", {
|
|
25137
|
+
enumerable: true,
|
|
25138
|
+
get: function() {
|
|
25139
|
+
return array;
|
|
25140
|
+
}
|
|
25141
|
+
});
|
|
24923
25142
|
Object.defineProperty(exports, "audioMetricsCapability", {
|
|
24924
25143
|
enumerable: true,
|
|
24925
25144
|
get: function() {
|
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_dist = require("../dist-
|
|
5
|
+
const require_dist = require("../dist-V8XOHDoj.js");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
let node_fs$1 = require_dist.__toESM(node_fs, 1);
|
|
8
8
|
node_fs = require_dist.__toESM(node_fs);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as hfModelUrl, h as BaseAddon, o as embeddingEncoderCapability } from "../dist-
|
|
1
|
+
import { c as hfModelUrl, h as BaseAddon, o as embeddingEncoderCapability } from "../dist-CA0GikiM.mjs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import * as path$1 from "node:path";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as e, i as t, n, o as r, r as i, t as a } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react__loadShare__.js-C0AuF9av.mjs";
|
|
2
2
|
import { t as o } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-B3Wx5J80.mjs";
|
|
3
|
-
import { a as s, i as c, n as l, o as u, r as d, s as f, t as p } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-
|
|
3
|
+
import { a as s, i as c, n as l, o as u, r as d, s as f, t as p } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-ai-NpPOn.mjs";
|
|
4
4
|
import { n as m, r as h, t as g } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-Bm-iyjmq.mjs";
|
|
5
5
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils.js
|
|
6
6
|
var _ = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), v = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), y = (e) => {
|
|
@@ -3,7 +3,7 @@ import "./dist-CYZr2fwk.mjs";
|
|
|
3
3
|
var e = {
|
|
4
4
|
"@camstack/sdk": {
|
|
5
5
|
name: "@camstack/sdk",
|
|
6
|
-
version: "1.1.
|
|
6
|
+
version: "1.1.28",
|
|
7
7
|
scope: ["default"],
|
|
8
8
|
loaded: !1,
|
|
9
9
|
from: "addon_pipeline_analytics_widgets",
|
|
@@ -18,7 +18,7 @@ var e = {
|
|
|
18
18
|
},
|
|
19
19
|
"@camstack/types": {
|
|
20
20
|
name: "@camstack/types",
|
|
21
|
-
version: "1.1.
|
|
21
|
+
version: "1.1.49",
|
|
22
22
|
scope: ["default"],
|
|
23
23
|
loaded: !1,
|
|
24
24
|
from: "addon_pipeline_analytics_widgets",
|
|
@@ -33,7 +33,7 @@ var e = {
|
|
|
33
33
|
},
|
|
34
34
|
"@camstack/ui-library": {
|
|
35
35
|
name: "@camstack/ui-library",
|
|
36
|
-
version: "1.1.
|
|
36
|
+
version: "1.1.40",
|
|
37
37
|
scope: ["default"],
|
|
38
38
|
loaded: !1,
|
|
39
39
|
from: "addon_pipeline_analytics_widgets",
|