@camstack/addon-pipeline 1.1.60 → 1.1.62
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/audio-analyzer/index.js +2 -2
- package/dist/audio-analyzer/index.mjs +2 -2
- package/dist/detection-pipeline/index.js +3 -3
- package/dist/detection-pipeline/index.mjs +3 -3
- package/dist/{dist-DynD1EC-.js → dist-DlMmkOsE.js} +389 -7
- package/dist/{dist-CcqqznPf.mjs → dist-LkwlodgP.mjs} +372 -8
- package/dist/{model-download-service-Cp9f4dk6-0wh7OK3s.mjs → model-download-service-Cp9f4dk6-CwUb5v3Y.mjs} +1 -1
- package/dist/{model-download-service-Cp9f4dk6-Cp_GTKTw.js → model-download-service-Cp9f4dk6-Dv-oFwjN.js} +12 -0
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/pipeline-runner/index.js +2 -2
- package/dist/pipeline-runner/index.mjs +2 -2
- package/dist/recorder/index.js +798 -30
- package/dist/recorder/index.mjs +799 -31
- package/dist/{step-definitions-DhhwklAL.js → step-definitions-CxwB0fEq.js} +85 -2
- package/dist/{step-definitions-CvwB_Otk.mjs → step-definitions-DxN9tmQP.mjs} +85 -2
- package/dist/stream-broker/_stub.js +2 -2
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-B07QYb7Q.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-3gAFmxjh.mjs} +3 -3
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DHJB3xUN.mjs +26 -0
- package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DSXctoaw.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-C4pcysOQ.mjs} +1 -1
- package/dist/stream-broker/{hostInit-C02YjaoP.mjs → hostInit-B1aDV0u0.mjs} +3 -3
- package/dist/stream-broker/index.js +29 -9
- package/dist/stream-broker/index.mjs +29 -9
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-ColkZGA1.js → MaskShapeCanvas-DI4BY7W2-C7IhxQQ_.js} +1 -1
- package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-BIzNJmu0.js → MotionZonesSettings-NcxxQN8r-DZXzBUU8.js} +1 -1
- package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-BHuYOg7Q.js → PrivacyMaskSettings-APgPLF7p-Dz9ttl4A.js} +1 -1
- package/embed-dist/assets/index-DRsQUyLF.js +81 -0
- package/embed-dist/index.html +1 -1
- package/package.json +5 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DYQ6RHcb.mjs +0 -26
- package/embed-dist/assets/index-n1_ZSmy0.js +0 -81
|
@@ -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",
|
|
@@ -7537,6 +7580,62 @@ function migrateConfigToBands(config) {
|
|
|
7537
7580
|
return schedules.map((schedule) => bandFromSchedule(schedule, bandMode, config));
|
|
7538
7581
|
}
|
|
7539
7582
|
/**
|
|
7583
|
+
* Ops-log — the durable, append-only operations audit shared by the
|
|
7584
|
+
* recordings and events management surfaces.
|
|
7585
|
+
*
|
|
7586
|
+
* ONE row shape is reused for both domains so a single "Activity" view can
|
|
7587
|
+
* merge the recorder's DurableState ring (recordings ops-log) and the
|
|
7588
|
+
* pipeline-analytics SQLite collection (events ops-log). Each row records a
|
|
7589
|
+
* management operation, WHY it ran (reason), and its measurable effect
|
|
7590
|
+
* (itemsAffected + bytesReclaimed). Writes are best-effort — a failed log must
|
|
7591
|
+
* never fail the operation it records.
|
|
7592
|
+
*/
|
|
7593
|
+
/** Which management domain the operation belongs to. */
|
|
7594
|
+
var OpsLogDomainSchema = _enum(["recording", "events"]);
|
|
7595
|
+
/** The kind of management operation performed. */
|
|
7596
|
+
var OpsLogOpSchema = _enum([
|
|
7597
|
+
"prune",
|
|
7598
|
+
"manual-delete",
|
|
7599
|
+
"rescan",
|
|
7600
|
+
"retention-run"
|
|
7601
|
+
]);
|
|
7602
|
+
/** Why the operation ran. */
|
|
7603
|
+
var OpsLogReasonSchema = _enum([
|
|
7604
|
+
"retention",
|
|
7605
|
+
"quota",
|
|
7606
|
+
"manual",
|
|
7607
|
+
"operator"
|
|
7608
|
+
]);
|
|
7609
|
+
/** One audit row, shared verbatim by both domains. */
|
|
7610
|
+
var OpsLogEntrySchema = object({
|
|
7611
|
+
/** Unique row id. */
|
|
7612
|
+
id: string(),
|
|
7613
|
+
/** Epoch ms the operation completed. */
|
|
7614
|
+
at: number(),
|
|
7615
|
+
domain: OpsLogDomainSchema,
|
|
7616
|
+
op: OpsLogOpSchema,
|
|
7617
|
+
reason: OpsLogReasonSchema,
|
|
7618
|
+
/** The camera the op targeted; null for a cluster/global op. */
|
|
7619
|
+
deviceId: number().nullable(),
|
|
7620
|
+
/** Node that performed the op (the log carries nodeId — no cross-node aggregation). */
|
|
7621
|
+
nodeId: string(),
|
|
7622
|
+
/** Buckets / rows deleted (op-specific unit). */
|
|
7623
|
+
itemsAffected: number(),
|
|
7624
|
+
/** Bytes reclaimed by the op (0 when not measurable). */
|
|
7625
|
+
bytesReclaimed: number(),
|
|
7626
|
+
/** Free-text detail (e.g. "floor moved to <ts>"); null when none. */
|
|
7627
|
+
detail: string().nullable(),
|
|
7628
|
+
/** Who/what triggered the op. */
|
|
7629
|
+
actor: string()
|
|
7630
|
+
});
|
|
7631
|
+
/** Shared query input for the per-domain `listOpsLog` cap methods. */
|
|
7632
|
+
var OpsLogQueryInputSchema = object({
|
|
7633
|
+
/** Restrict to a single camera; omit for every row. */
|
|
7634
|
+
deviceId: number().optional(),
|
|
7635
|
+
/** Max rows returned, newest-first. */
|
|
7636
|
+
limit: number().int().min(1).max(1e3).optional()
|
|
7637
|
+
});
|
|
7638
|
+
/**
|
|
7540
7639
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
7541
7640
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
7542
7641
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -8156,7 +8255,10 @@ var COCO_TO_MACRO = {
|
|
|
8156
8255
|
elephant: "animal",
|
|
8157
8256
|
bear: "animal",
|
|
8158
8257
|
zebra: "animal",
|
|
8159
|
-
giraffe: "animal"
|
|
8258
|
+
giraffe: "animal",
|
|
8259
|
+
suitcase: "package",
|
|
8260
|
+
backpack: "package",
|
|
8261
|
+
handbag: "package"
|
|
8160
8262
|
},
|
|
8161
8263
|
preserveOriginal: false
|
|
8162
8264
|
};
|
|
@@ -13751,7 +13853,11 @@ array(ZoneRuleSchema).readonly();
|
|
|
13751
13853
|
* Extend the enum here when a new gating consumer comes online (audio
|
|
13752
13854
|
* gating, alert filtering, …) — no other surface needs to change.
|
|
13753
13855
|
*/
|
|
13754
|
-
var ZoneRuleStageEnum = _enum([
|
|
13856
|
+
var ZoneRuleStageEnum = _enum([
|
|
13857
|
+
"motion",
|
|
13858
|
+
"detection",
|
|
13859
|
+
"package"
|
|
13860
|
+
]);
|
|
13755
13861
|
DeviceType.Camera, method(object({
|
|
13756
13862
|
deviceId: number(),
|
|
13757
13863
|
stage: ZoneRuleStageEnum
|
|
@@ -13764,7 +13870,8 @@ DeviceType.Camera, method(object({
|
|
|
13764
13870
|
auth: "admin"
|
|
13765
13871
|
}), object({
|
|
13766
13872
|
motion: array(ZoneRuleSchema).readonly(),
|
|
13767
|
-
detection: array(ZoneRuleSchema).readonly()
|
|
13873
|
+
detection: array(ZoneRuleSchema).readonly(),
|
|
13874
|
+
package: array(ZoneRuleSchema).readonly()
|
|
13768
13875
|
});
|
|
13769
13876
|
var ProviderStatusSchema = object({
|
|
13770
13877
|
connected: boolean(),
|
|
@@ -17157,6 +17264,7 @@ var EventKindIconSchema = _enum([
|
|
|
17157
17264
|
"smoke",
|
|
17158
17265
|
"water",
|
|
17159
17266
|
"button",
|
|
17267
|
+
"package",
|
|
17160
17268
|
"generic"
|
|
17161
17269
|
]);
|
|
17162
17270
|
var EventKindCategorySchema = _enum([
|
|
@@ -17164,7 +17272,8 @@ var EventKindCategorySchema = _enum([
|
|
|
17164
17272
|
"audio",
|
|
17165
17273
|
"detection",
|
|
17166
17274
|
"sensor",
|
|
17167
|
-
"custom"
|
|
17275
|
+
"custom",
|
|
17276
|
+
"package"
|
|
17168
17277
|
]);
|
|
17169
17278
|
var EventKindDescriptorSchema = object({
|
|
17170
17279
|
/** Stable kind id (e.g. 'motion', 'person', 'contact'). */
|
|
@@ -17505,6 +17614,26 @@ var TrackCascadeCountsSchema = object({
|
|
|
17505
17614
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
17506
17615
|
embeddings: number().int()
|
|
17507
17616
|
});
|
|
17617
|
+
/** Event-store footprint for one camera. */
|
|
17618
|
+
var EventStoreDeviceFootprintSchema = object({
|
|
17619
|
+
deviceId: number(),
|
|
17620
|
+
/** Persisted event rows (motion + object + audio) for the camera. */
|
|
17621
|
+
rows: number().int(),
|
|
17622
|
+
/** Event-owned media bytes on disk for the camera. */
|
|
17623
|
+
bytes: number().int()
|
|
17624
|
+
});
|
|
17625
|
+
/** Aggregate event-store footprint: global totals + per-camera breakdown. */
|
|
17626
|
+
var EventStoreFootprintSchema = object({
|
|
17627
|
+
totalRows: number().int(),
|
|
17628
|
+
totalBytes: number().int(),
|
|
17629
|
+
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
17630
|
+
});
|
|
17631
|
+
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
17632
|
+
var EventPruneCountsSchema = object({
|
|
17633
|
+
motion: number().int(),
|
|
17634
|
+
object: number().int(),
|
|
17635
|
+
audio: number().int()
|
|
17636
|
+
});
|
|
17508
17637
|
DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).readonly()), method(object({
|
|
17509
17638
|
deviceId: number(),
|
|
17510
17639
|
trackId: string()
|
|
@@ -17568,6 +17697,21 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
17568
17697
|
}), {
|
|
17569
17698
|
kind: "mutation",
|
|
17570
17699
|
auth: "admin"
|
|
17700
|
+
}), method(object({}), EventStoreFootprintSchema, {
|
|
17701
|
+
kind: "query",
|
|
17702
|
+
auth: "admin"
|
|
17703
|
+
}), method(object({
|
|
17704
|
+
olderThanMs: number(),
|
|
17705
|
+
reason: OpsLogReasonSchema.optional()
|
|
17706
|
+
}), EventPruneCountsSchema, {
|
|
17707
|
+
kind: "mutation",
|
|
17708
|
+
auth: "admin"
|
|
17709
|
+
}), method(object({ deviceId: number() }), EventPruneCountsSchema, {
|
|
17710
|
+
kind: "mutation",
|
|
17711
|
+
auth: "admin"
|
|
17712
|
+
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
17713
|
+
kind: "query",
|
|
17714
|
+
auth: "admin"
|
|
17571
17715
|
}), method(object({
|
|
17572
17716
|
eventId: string(),
|
|
17573
17717
|
kind: MediaFileKindEnum.optional()
|
|
@@ -20926,14 +21070,162 @@ var recordingCapability = {
|
|
|
20926
21070
|
auth: "admin"
|
|
20927
21071
|
}),
|
|
20928
21072
|
/** Apply this device's retention policy to footage now; returns the oldest
|
|
20929
|
-
* surviving footage start (the retention floor) or null if no footage.
|
|
20930
|
-
|
|
21073
|
+
* surviving footage start (the retention floor) or null if no footage. The
|
|
21074
|
+
* prune is logged to the recordings ops-log with `reason` (default
|
|
21075
|
+
* `'retention'` — the policy-driven prune; `'quota'` when disk-pressure
|
|
21076
|
+
* triggered). */
|
|
21077
|
+
pruneFootage: method(object({
|
|
21078
|
+
deviceId: number(),
|
|
21079
|
+
reason: OpsLogReasonSchema.optional()
|
|
21080
|
+
}), object({
|
|
20931
21081
|
floorMs: number().nullable(),
|
|
20932
21082
|
deletedBuckets: number().int(),
|
|
20933
21083
|
reclaimedBytes: number().int()
|
|
20934
21084
|
}), {
|
|
20935
21085
|
kind: "mutation",
|
|
20936
21086
|
auth: "admin"
|
|
21087
|
+
}),
|
|
21088
|
+
/**
|
|
21089
|
+
* Manually delete a camera's footage — the whole footprint, or a
|
|
21090
|
+
* `[fromMs, toMs)` window when either bound is given. Logged to the
|
|
21091
|
+
* recordings ops-log as `op:'manual-delete', reason:'manual'`. Destructive:
|
|
21092
|
+
* the admin UI guards it behind a confirm.
|
|
21093
|
+
*/
|
|
21094
|
+
deleteFootprint: method(object({
|
|
21095
|
+
deviceId: number(),
|
|
21096
|
+
fromMs: number().optional(),
|
|
21097
|
+
toMs: number().optional()
|
|
21098
|
+
}), object({
|
|
21099
|
+
deletedBuckets: number().int(),
|
|
21100
|
+
reclaimedBytes: number().int()
|
|
21101
|
+
}), {
|
|
21102
|
+
kind: "mutation",
|
|
21103
|
+
auth: "admin"
|
|
21104
|
+
}),
|
|
21105
|
+
/** The recordings ops-log rows (newest-first), optionally scoped to one
|
|
21106
|
+
* camera. Backed by the recorder's bounded DurableState ring. */
|
|
21107
|
+
listOpsLog: method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
21108
|
+
kind: "query",
|
|
21109
|
+
auth: "admin"
|
|
21110
|
+
})
|
|
21111
|
+
}
|
|
21112
|
+
};
|
|
21113
|
+
/**
|
|
21114
|
+
* `recordingExport` cap — render a footage time range into a single downloadable
|
|
21115
|
+
* MP4 (regular / accelerated / decelerated / timelapse, ± audio), kept for a
|
|
21116
|
+
* bounded lifetime with a durable history, auto-expiry, and optional
|
|
21117
|
+
* delete-after-download.
|
|
21118
|
+
*
|
|
21119
|
+
* Like `recording` this is a `scope:'system', mode:'singleton'` cap: the
|
|
21120
|
+
* recorder self-gates so exactly ONE node (the designated `recordingNodeId`,
|
|
21121
|
+
* default `hub`) registers it. Device-scoped methods carry `deviceId` in their
|
|
21122
|
+
* input and dispatch to that single provider; the render runs on the node that
|
|
21123
|
+
* owns the footage (no cross-node segment transfer). Download rides the
|
|
21124
|
+
* framework addon data-plane. State persists in a DurableState blob (NOT
|
|
21125
|
+
* SQLite); history rows survive file deletion for audit.
|
|
21126
|
+
*/
|
|
21127
|
+
/** Playback-speed multiplier for the render (1 = realtime). */
|
|
21128
|
+
var ExportSpeedSchema = number().min(.25).max(32);
|
|
21129
|
+
/** Timelapse cadence — sample one source frame per `everyMs`, output at `outputFps`. */
|
|
21130
|
+
var ExportTimelapseSchema = object({
|
|
21131
|
+
everyMs: number().int().positive(),
|
|
21132
|
+
outputFps: number().int().min(1).max(60).optional()
|
|
21133
|
+
});
|
|
21134
|
+
/**
|
|
21135
|
+
* Render options. `speed` and `timelapse` are mutually exclusive. `includeAudio`
|
|
21136
|
+
* is honoured only for a realtime-ish speed (0.5–2×); timelapse is always
|
|
21137
|
+
* silent. `maxLifeMs` bounds how long the finished file is kept;
|
|
21138
|
+
* `deleteAfterDownload` removes it shortly after the first complete download.
|
|
21139
|
+
*/
|
|
21140
|
+
var ExportOptionsSchema = object({
|
|
21141
|
+
speed: ExportSpeedSchema.optional(),
|
|
21142
|
+
timelapse: ExportTimelapseSchema.optional(),
|
|
21143
|
+
includeAudio: boolean(),
|
|
21144
|
+
maxLifeMs: number().int().positive(),
|
|
21145
|
+
deleteAfterDownload: boolean(),
|
|
21146
|
+
title: string().max(200).optional()
|
|
21147
|
+
}).superRefine((v, ctx) => {
|
|
21148
|
+
if (v.speed !== void 0 && v.timelapse !== void 0) ctx.addIssue({
|
|
21149
|
+
code: ZodIssueCode.custom,
|
|
21150
|
+
message: "speed and timelapse are mutually exclusive",
|
|
21151
|
+
path: ["timelapse"]
|
|
21152
|
+
});
|
|
21153
|
+
});
|
|
21154
|
+
var ExportStateSchema = _enum([
|
|
21155
|
+
"queued",
|
|
21156
|
+
"rendering",
|
|
21157
|
+
"ready",
|
|
21158
|
+
"failed",
|
|
21159
|
+
"expired",
|
|
21160
|
+
"deleted"
|
|
21161
|
+
]);
|
|
21162
|
+
/** One export job / history row. */
|
|
21163
|
+
var ExportRecordSchema = object({
|
|
21164
|
+
id: string(),
|
|
21165
|
+
deviceId: number(),
|
|
21166
|
+
profile: string(),
|
|
21167
|
+
fromMs: number(),
|
|
21168
|
+
toMs: number(),
|
|
21169
|
+
options: ExportOptionsSchema,
|
|
21170
|
+
state: ExportStateSchema,
|
|
21171
|
+
/** 0–100 while rendering; null otherwise. */
|
|
21172
|
+
progressPct: number().nullable(),
|
|
21173
|
+
/** File size once ready; null before. */
|
|
21174
|
+
fileBytes: number().nullable(),
|
|
21175
|
+
expiresAt: number(),
|
|
21176
|
+
deleteAfterDownload: boolean(),
|
|
21177
|
+
/** Epoch of the first complete download; null until then. */
|
|
21178
|
+
downloadedAt: number().nullable(),
|
|
21179
|
+
createdAt: number(),
|
|
21180
|
+
/** User id/name that requested the export. */
|
|
21181
|
+
createdBy: string(),
|
|
21182
|
+
/** Failure reason when state is 'failed'; null otherwise. */
|
|
21183
|
+
error: string().nullable()
|
|
21184
|
+
});
|
|
21185
|
+
/** Candidate download URLs (LAN first, then operator extra hosts). */
|
|
21186
|
+
var ExportDownloadSchema = object({
|
|
21187
|
+
url: string(),
|
|
21188
|
+
endpoints: array(string())
|
|
21189
|
+
});
|
|
21190
|
+
var recordingExportCapability = {
|
|
21191
|
+
name: "recordingExport",
|
|
21192
|
+
scope: "system",
|
|
21193
|
+
mode: "singleton",
|
|
21194
|
+
methods: {
|
|
21195
|
+
/** Queue a render of `[fromMs,toMs)` for `deviceId`/`profile`. Fails fast
|
|
21196
|
+
* when no footage covers the range. Returns the queued record. */
|
|
21197
|
+
createExport: method(object({
|
|
21198
|
+
deviceId: number(),
|
|
21199
|
+
profile: string(),
|
|
21200
|
+
fromMs: number(),
|
|
21201
|
+
toMs: number(),
|
|
21202
|
+
options: ExportOptionsSchema
|
|
21203
|
+
}), ExportRecordSchema, {
|
|
21204
|
+
kind: "mutation",
|
|
21205
|
+
auth: "protected"
|
|
21206
|
+
}),
|
|
21207
|
+
/** All export rows (history included), optionally scoped to one device. */
|
|
21208
|
+
listExports: method(object({ deviceId: number().optional() }), array(ExportRecordSchema), {
|
|
21209
|
+
kind: "query",
|
|
21210
|
+
auth: "protected"
|
|
21211
|
+
}),
|
|
21212
|
+
getExport: method(object({ exportId: string() }), ExportRecordSchema, {
|
|
21213
|
+
kind: "query",
|
|
21214
|
+
auth: "protected"
|
|
21215
|
+
}),
|
|
21216
|
+
/** Abort a queued/rendering export; the partial file is removed. */
|
|
21217
|
+
cancelExport: method(object({ exportId: string() }), ExportRecordSchema, {
|
|
21218
|
+
kind: "mutation",
|
|
21219
|
+
auth: "protected"
|
|
21220
|
+
}),
|
|
21221
|
+
/** Remove the file but keep the history row (state → 'deleted'). */
|
|
21222
|
+
deleteExport: method(object({ exportId: string() }), ExportRecordSchema, {
|
|
21223
|
+
kind: "mutation",
|
|
21224
|
+
auth: "protected"
|
|
21225
|
+
}),
|
|
21226
|
+
getDownloadUrl: method(object({ exportId: string() }), ExportDownloadSchema, {
|
|
21227
|
+
kind: "query",
|
|
21228
|
+
auth: "protected"
|
|
20937
21229
|
})
|
|
20938
21230
|
}
|
|
20939
21231
|
};
|
|
@@ -23955,6 +24247,12 @@ Object.freeze({
|
|
|
23955
24247
|
addonId: null,
|
|
23956
24248
|
access: "delete"
|
|
23957
24249
|
},
|
|
24250
|
+
"pipelineAnalytics.deleteDeviceEvents": {
|
|
24251
|
+
capName: "pipeline-analytics",
|
|
24252
|
+
capScope: "device",
|
|
24253
|
+
addonId: null,
|
|
24254
|
+
access: "delete"
|
|
24255
|
+
},
|
|
23958
24256
|
"pipelineAnalytics.deleteTracks": {
|
|
23959
24257
|
capName: "pipeline-analytics",
|
|
23960
24258
|
capScope: "device",
|
|
@@ -23985,6 +24283,12 @@ Object.freeze({
|
|
|
23985
24283
|
addonId: null,
|
|
23986
24284
|
access: "view"
|
|
23987
24285
|
},
|
|
24286
|
+
"pipelineAnalytics.getEventStoreFootprint": {
|
|
24287
|
+
capName: "pipeline-analytics",
|
|
24288
|
+
capScope: "device",
|
|
24289
|
+
addonId: null,
|
|
24290
|
+
access: "view"
|
|
24291
|
+
},
|
|
23988
24292
|
"pipelineAnalytics.getKeyEvents": {
|
|
23989
24293
|
capName: "pipeline-analytics",
|
|
23990
24294
|
capScope: "device",
|
|
@@ -24027,6 +24331,12 @@ Object.freeze({
|
|
|
24027
24331
|
addonId: null,
|
|
24028
24332
|
access: "view"
|
|
24029
24333
|
},
|
|
24334
|
+
"pipelineAnalytics.listOpsLog": {
|
|
24335
|
+
capName: "pipeline-analytics",
|
|
24336
|
+
capScope: "device",
|
|
24337
|
+
addonId: null,
|
|
24338
|
+
access: "view"
|
|
24339
|
+
},
|
|
24030
24340
|
"pipelineAnalytics.listRecentTracks": {
|
|
24031
24341
|
capName: "pipeline-analytics",
|
|
24032
24342
|
capScope: "device",
|
|
@@ -24039,6 +24349,12 @@ Object.freeze({
|
|
|
24039
24349
|
addonId: null,
|
|
24040
24350
|
access: "view"
|
|
24041
24351
|
},
|
|
24352
|
+
"pipelineAnalytics.pruneEvents": {
|
|
24353
|
+
capName: "pipeline-analytics",
|
|
24354
|
+
capScope: "device",
|
|
24355
|
+
addonId: null,
|
|
24356
|
+
access: "create"
|
|
24357
|
+
},
|
|
24042
24358
|
"pipelineAnalytics.pruneEventsBefore": {
|
|
24043
24359
|
capName: "pipeline-analytics",
|
|
24044
24360
|
capScope: "device",
|
|
@@ -24801,6 +25117,12 @@ Object.freeze({
|
|
|
24801
25117
|
addonId: null,
|
|
24802
25118
|
access: "create"
|
|
24803
25119
|
},
|
|
25120
|
+
"recording.deleteFootprint": {
|
|
25121
|
+
capName: "recording",
|
|
25122
|
+
capScope: "system",
|
|
25123
|
+
addonId: null,
|
|
25124
|
+
access: "delete"
|
|
25125
|
+
},
|
|
24804
25126
|
"recording.getAvailability": {
|
|
24805
25127
|
capName: "recording",
|
|
24806
25128
|
capScope: "system",
|
|
@@ -24831,6 +25153,12 @@ Object.freeze({
|
|
|
24831
25153
|
addonId: null,
|
|
24832
25154
|
access: "view"
|
|
24833
25155
|
},
|
|
25156
|
+
"recording.listOpsLog": {
|
|
25157
|
+
capName: "recording",
|
|
25158
|
+
capScope: "system",
|
|
25159
|
+
addonId: null,
|
|
25160
|
+
access: "view"
|
|
25161
|
+
},
|
|
24834
25162
|
"recording.locateSegment": {
|
|
24835
25163
|
capName: "recording",
|
|
24836
25164
|
capScope: "system",
|
|
@@ -24861,6 +25189,42 @@ Object.freeze({
|
|
|
24861
25189
|
addonId: null,
|
|
24862
25190
|
access: "create"
|
|
24863
25191
|
},
|
|
25192
|
+
"recordingExport.cancelExport": {
|
|
25193
|
+
capName: "recordingExport",
|
|
25194
|
+
capScope: "system",
|
|
25195
|
+
addonId: null,
|
|
25196
|
+
access: "create"
|
|
25197
|
+
},
|
|
25198
|
+
"recordingExport.createExport": {
|
|
25199
|
+
capName: "recordingExport",
|
|
25200
|
+
capScope: "system",
|
|
25201
|
+
addonId: null,
|
|
25202
|
+
access: "create"
|
|
25203
|
+
},
|
|
25204
|
+
"recordingExport.deleteExport": {
|
|
25205
|
+
capName: "recordingExport",
|
|
25206
|
+
capScope: "system",
|
|
25207
|
+
addonId: null,
|
|
25208
|
+
access: "delete"
|
|
25209
|
+
},
|
|
25210
|
+
"recordingExport.getDownloadUrl": {
|
|
25211
|
+
capName: "recordingExport",
|
|
25212
|
+
capScope: "system",
|
|
25213
|
+
addonId: null,
|
|
25214
|
+
access: "view"
|
|
25215
|
+
},
|
|
25216
|
+
"recordingExport.getExport": {
|
|
25217
|
+
capName: "recordingExport",
|
|
25218
|
+
capScope: "system",
|
|
25219
|
+
addonId: null,
|
|
25220
|
+
access: "view"
|
|
25221
|
+
},
|
|
25222
|
+
"recordingExport.listExports": {
|
|
25223
|
+
capName: "recordingExport",
|
|
25224
|
+
capScope: "system",
|
|
25225
|
+
addonId: null,
|
|
25226
|
+
access: "view"
|
|
25227
|
+
},
|
|
24864
25228
|
"sceneMonitor.captureReference": {
|
|
24865
25229
|
capName: "scene-monitor",
|
|
24866
25230
|
capScope: "device",
|
|
@@ -26222,4 +26586,4 @@ function defaultDeviceFor(id) {
|
|
|
26222
26586
|
return def(id).defaultDevice;
|
|
26223
26587
|
}
|
|
26224
26588
|
//#endregion
|
|
26225
|
-
export {
|
|
26589
|
+
export { sleep as $, pipelineExecutorCapability as A, errMsg as B, evaluateZoneRules as C, migrateConfigToBands as D, maskUrlCredentials as E, runtimeDevices as F, createEvent as G, CAM_PROFILE_ORDER as H, storageEvictableCapability as I, makeProfileBrokerId as J, hydrateSchema as K, streamBrokerCapability as L, recordingCapability as M, recordingExportCapability as N, motionDetectionCapability as O, resolveScrubThumbnailGeometry as P, selectAssignedProfileSlots as Q, supportedRuntimes as R, detectionPipelineCapability as S, mapAudioLabelToMacro as T, DeviceFeature as U, BaseAddon as V, DeviceType as W, parseJsonUnknown as X, makeSourceBrokerId as Y, parseProfileBrokerId as Z, audioAnalyzerCapability as _, COCO_TO_MACRO as a, literal as at, defaultDeviceFor as b, EncodeProfileSchema as c, record as ct, OpsLogEntrySchema as d, EventCategory as dt, _enum as et, RecordingConfigSchema as f, audioAnalysisCapability as g, addonWidgetsSourceCapability as h, COCO_80_LABELS as i, lazy as it, pipelineRunnerCapability as j, nodePin as k, ExportRecordSchema as l, string as lt, YAMNET_TO_MACRO as m, AUDIO_BACKEND_CHOICES as n, boolean as nt, DEFAULT_AUDIO_ANALYZER_CONFIG as o, number as ot, RingBuffer as p, isEvent as q, AUDIO_MACRO_LABELS as r, discriminatedUnion as rt, EVENT_PAD_MS as s, object as st, APPLE_SA_TO_MACRO as t, array as tt, HF_BASE_URL as u, union as ut, cameraStreamsCapability as v, hfModelUrl as w, defineCustomActions as x, customAction as y, webrtcSessionCapability as z };
|
|
@@ -328,4 +328,4 @@ function deleteModelFromDisk(modelsDir, entry, format) {
|
|
|
328
328
|
return true;
|
|
329
329
|
}
|
|
330
330
|
//#endregion
|
|
331
|
-
export {
|
|
331
|
+
export { ensureModel as a, downloadFile as i, createFileDataPlaneHandler as n, isModelDownloaded as o, deleteModelFromDisk as r, parseRangeHeader as s, contentTypeFor as t };
|
|
@@ -329,6 +329,12 @@ function deleteModelFromDisk(modelsDir, entry, format) {
|
|
|
329
329
|
return true;
|
|
330
330
|
}
|
|
331
331
|
//#endregion
|
|
332
|
+
Object.defineProperty(exports, "contentTypeFor", {
|
|
333
|
+
enumerable: true,
|
|
334
|
+
get: function() {
|
|
335
|
+
return contentTypeFor;
|
|
336
|
+
}
|
|
337
|
+
});
|
|
332
338
|
Object.defineProperty(exports, "createFileDataPlaneHandler", {
|
|
333
339
|
enumerable: true,
|
|
334
340
|
get: function() {
|
|
@@ -359,3 +365,9 @@ Object.defineProperty(exports, "isModelDownloaded", {
|
|
|
359
365
|
return isModelDownloaded;
|
|
360
366
|
}
|
|
361
367
|
});
|
|
368
|
+
Object.defineProperty(exports, "parseRangeHeader", {
|
|
369
|
+
enumerable: true,
|
|
370
|
+
get: function() {
|
|
371
|
+
return parseRangeHeader;
|
|
372
|
+
}
|
|
373
|
+
});
|
|
@@ -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-DlMmkOsE.js");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
let node_path = require("node:path");
|
|
8
8
|
//#region src/motion-wasm/wasm-motion-detector.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { C as evaluateZoneRules, K as hydrateSchema, O as motionDetectionCapability, V as BaseAddon, W as DeviceType } from "../dist-LkwlodgP.mjs";
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
//#region src/motion-wasm/wasm-motion-detector.ts
|
|
@@ -3,11 +3,11 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-D6vf50IK.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
6
|
+
const require_dist = require("../dist-DlMmkOsE.js");
|
|
7
7
|
const require_remote_restream = require("../remote-restream-CO36Sr30.js");
|
|
8
8
|
const require_sheet_geometry = require("../sheet-geometry-BR-ip0CP.js");
|
|
9
9
|
const require_worker_protocol = require("../worker-protocol-PP4jKHHJ.js");
|
|
10
|
-
const require_step_definitions = require("../step-definitions-
|
|
10
|
+
const require_step_definitions = require("../step-definitions-CxwB0fEq.js");
|
|
11
11
|
let node_child_process = require("node:child_process");
|
|
12
12
|
let node_url = require("node:url");
|
|
13
13
|
let sharp = require("sharp");
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { B as errMsg, G as createEvent, V as BaseAddon, dt as EventCategory, et as _enum, it as lazy, j as pipelineRunnerCapability, k as nodePin, lt as string, nt as boolean, ot as number, st as object, tt as array, x as defineCustomActions, y as customAction } from "../dist-LkwlodgP.mjs";
|
|
2
2
|
import { n as profileForStreamId, t as isRemoteRestream } from "../remote-restream-BeHi78PZ.mjs";
|
|
3
3
|
import { r as resolveHubHostname } from "../sheet-geometry-DcpuGTCm.mjs";
|
|
4
4
|
import { t as isWorkerReply } from "../worker-protocol-CyVJTZEO.mjs";
|
|
5
|
-
import { a as getStepDefinition } from "../step-definitions-
|
|
5
|
+
import { a as getStepDefinition } from "../step-definitions-DxN9tmQP.mjs";
|
|
6
6
|
import { fork } from "node:child_process";
|
|
7
7
|
import { fileURLToPath } from "node:url";
|
|
8
8
|
import sharp from "sharp";
|