@camstack/addon-pipeline 1.1.60 → 1.1.61
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-CcqqznPf.mjs → dist-D16_dBsr.mjs} +214 -6
- package/dist/{dist-DynD1EC-.js → dist-p_JqOxtk.js} +225 -5
- 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 +638 -11
- package/dist/recorder/index.mjs +639 -12
- package/dist/{step-definitions-DhhwklAL.js → step-definitions-CoxF5G31.js} +18 -2
- package/dist/{step-definitions-CvwB_Otk.mjs → step-definitions-DxAcpUV-.mjs} +18 -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-Wu4TlSuq.mjs} +3 -3
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BPujpbZ0.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-DGxcX3Wf.mjs} +1 -1
- package/dist/stream-broker/{hostInit-C02YjaoP.mjs → hostInit-D_dSciqF.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-BldL9_Ee.js} +1 -1
- package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-BIzNJmu0.js → MotionZonesSettings-NcxxQN8r-BgWqMe4f.js} +1 -1
- package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-BHuYOg7Q.js → PrivacyMaskSettings-APgPLF7p-YBgaXffP.js} +1 -1
- package/embed-dist/assets/index-e0bQ8yep.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
|
@@ -3,9 +3,9 @@ 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-p_JqOxtk.js");
|
|
7
7
|
const require_node_topology_platform = require("../node-topology-platform-CFZ7F4xW.js");
|
|
8
|
-
const require_model_download_service_Cp9f4dk6 = require("../model-download-service-Cp9f4dk6-
|
|
8
|
+
const require_model_download_service_Cp9f4dk6 = require("../model-download-service-Cp9f4dk6-Dv-oFwjN.js");
|
|
9
9
|
let node_fs = require("node:fs");
|
|
10
10
|
node_fs = require_chunk.__toESM(node_fs);
|
|
11
11
|
let node_path = require("node:path");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as __require } from "../chunk-BdkLduGY.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { B as BaseAddon, G as hydrateSchema, g as audioAnalyzerCapability, h as audioAnalysisCapability, n as AUDIO_BACKEND_CHOICES, o as DEFAULT_AUDIO_ANALYZER_CONFIG, u as HF_BASE_URL, w as mapAudioLabelToMacro, z as errMsg } from "../dist-D16_dBsr.mjs";
|
|
3
3
|
import { t as pickNodePlatformArch } from "../node-topology-platform-BkR_k6WT.mjs";
|
|
4
|
-
import {
|
|
4
|
+
import { i as downloadFile } from "../model-download-service-Cp9f4dk6-CwUb5v3Y.mjs";
|
|
5
5
|
import * as fs from "node:fs";
|
|
6
6
|
import * as path$1 from "node:path";
|
|
7
7
|
//#region src/audio-analyzer/audio-pipeline.ts
|
|
@@ -3,10 +3,10 @@ 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-
|
|
7
|
-
const require_step_definitions = require("../step-definitions-
|
|
6
|
+
const require_dist = require("../dist-p_JqOxtk.js");
|
|
7
|
+
const require_step_definitions = require("../step-definitions-CoxF5G31.js");
|
|
8
8
|
const require_node_topology_platform = require("../node-topology-platform-CFZ7F4xW.js");
|
|
9
|
-
const require_model_download_service_Cp9f4dk6 = require("../model-download-service-Cp9f4dk6-
|
|
9
|
+
const require_model_download_service_Cp9f4dk6 = require("../model-download-service-Cp9f4dk6-Dv-oFwjN.js");
|
|
10
10
|
let node_child_process = require("node:child_process");
|
|
11
11
|
let sharp = require("sharp");
|
|
12
12
|
sharp = require_chunk.__toESM(sharp);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as __require } from "../chunk-BdkLduGY.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { a as getStepDefinition, i as getStep, n as ALL_STEPS, o as resolveModelForFormat, r as getDefaultModelForFormat, t as ALL_PIPELINE_STEPS } from "../step-definitions-
|
|
2
|
+
import { B as BaseAddon, G as hydrateSchema, L as supportedRuntimes$1, O as nodePin, P as runtimeDevices$1, Q as sleep, S as evaluateZoneRules, W as createEvent, Y as parseJsonUnknown, k as pipelineExecutorCapability, p as YAMNET_TO_MACRO, t as APPLE_SA_TO_MACRO, ut as EventCategory, x as detectionPipelineCapability, y as defaultDeviceFor$1, z as errMsg } from "../dist-D16_dBsr.mjs";
|
|
3
|
+
import { a as getStepDefinition, i as getStep, n as ALL_STEPS, o as resolveModelForFormat, r as getDefaultModelForFormat, t as ALL_PIPELINE_STEPS } from "../step-definitions-DxAcpUV-.mjs";
|
|
4
4
|
import { t as pickNodePlatformArch } from "../node-topology-platform-BkR_k6WT.mjs";
|
|
5
|
-
import { a as
|
|
5
|
+
import { a as ensureModel, o as isModelDownloaded, r as deleteModelFromDisk } from "../model-download-service-Cp9f4dk6-CwUb5v3Y.mjs";
|
|
6
6
|
import { spawn } from "node:child_process";
|
|
7
7
|
import sharp from "sharp";
|
|
8
8
|
import * as fs from "node:fs";
|
|
@@ -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",
|
|
@@ -8156,7 +8199,10 @@ var COCO_TO_MACRO = {
|
|
|
8156
8199
|
elephant: "animal",
|
|
8157
8200
|
bear: "animal",
|
|
8158
8201
|
zebra: "animal",
|
|
8159
|
-
giraffe: "animal"
|
|
8202
|
+
giraffe: "animal",
|
|
8203
|
+
suitcase: "package",
|
|
8204
|
+
backpack: "package",
|
|
8205
|
+
handbag: "package"
|
|
8160
8206
|
},
|
|
8161
8207
|
preserveOriginal: false
|
|
8162
8208
|
};
|
|
@@ -13751,7 +13797,11 @@ array(ZoneRuleSchema).readonly();
|
|
|
13751
13797
|
* Extend the enum here when a new gating consumer comes online (audio
|
|
13752
13798
|
* gating, alert filtering, …) — no other surface needs to change.
|
|
13753
13799
|
*/
|
|
13754
|
-
var ZoneRuleStageEnum = _enum([
|
|
13800
|
+
var ZoneRuleStageEnum = _enum([
|
|
13801
|
+
"motion",
|
|
13802
|
+
"detection",
|
|
13803
|
+
"package"
|
|
13804
|
+
]);
|
|
13755
13805
|
DeviceType.Camera, method(object({
|
|
13756
13806
|
deviceId: number(),
|
|
13757
13807
|
stage: ZoneRuleStageEnum
|
|
@@ -13764,7 +13814,8 @@ DeviceType.Camera, method(object({
|
|
|
13764
13814
|
auth: "admin"
|
|
13765
13815
|
}), object({
|
|
13766
13816
|
motion: array(ZoneRuleSchema).readonly(),
|
|
13767
|
-
detection: array(ZoneRuleSchema).readonly()
|
|
13817
|
+
detection: array(ZoneRuleSchema).readonly(),
|
|
13818
|
+
package: array(ZoneRuleSchema).readonly()
|
|
13768
13819
|
});
|
|
13769
13820
|
var ProviderStatusSchema = object({
|
|
13770
13821
|
connected: boolean(),
|
|
@@ -17157,6 +17208,7 @@ var EventKindIconSchema = _enum([
|
|
|
17157
17208
|
"smoke",
|
|
17158
17209
|
"water",
|
|
17159
17210
|
"button",
|
|
17211
|
+
"package",
|
|
17160
17212
|
"generic"
|
|
17161
17213
|
]);
|
|
17162
17214
|
var EventKindCategorySchema = _enum([
|
|
@@ -17164,7 +17216,8 @@ var EventKindCategorySchema = _enum([
|
|
|
17164
17216
|
"audio",
|
|
17165
17217
|
"detection",
|
|
17166
17218
|
"sensor",
|
|
17167
|
-
"custom"
|
|
17219
|
+
"custom",
|
|
17220
|
+
"package"
|
|
17168
17221
|
]);
|
|
17169
17222
|
var EventKindDescriptorSchema = object({
|
|
17170
17223
|
/** Stable kind id (e.g. 'motion', 'person', 'contact'). */
|
|
@@ -20938,6 +20991,125 @@ var recordingCapability = {
|
|
|
20938
20991
|
}
|
|
20939
20992
|
};
|
|
20940
20993
|
/**
|
|
20994
|
+
* `recordingExport` cap — render a footage time range into a single downloadable
|
|
20995
|
+
* MP4 (regular / accelerated / decelerated / timelapse, ± audio), kept for a
|
|
20996
|
+
* bounded lifetime with a durable history, auto-expiry, and optional
|
|
20997
|
+
* delete-after-download.
|
|
20998
|
+
*
|
|
20999
|
+
* Like `recording` this is a `scope:'system', mode:'singleton'` cap: the
|
|
21000
|
+
* recorder self-gates so exactly ONE node (the designated `recordingNodeId`,
|
|
21001
|
+
* default `hub`) registers it. Device-scoped methods carry `deviceId` in their
|
|
21002
|
+
* input and dispatch to that single provider; the render runs on the node that
|
|
21003
|
+
* owns the footage (no cross-node segment transfer). Download rides the
|
|
21004
|
+
* framework addon data-plane. State persists in a DurableState blob (NOT
|
|
21005
|
+
* SQLite); history rows survive file deletion for audit.
|
|
21006
|
+
*/
|
|
21007
|
+
/** Playback-speed multiplier for the render (1 = realtime). */
|
|
21008
|
+
var ExportSpeedSchema = number().min(.25).max(32);
|
|
21009
|
+
/** Timelapse cadence — sample one source frame per `everyMs`, output at `outputFps`. */
|
|
21010
|
+
var ExportTimelapseSchema = object({
|
|
21011
|
+
everyMs: number().int().positive(),
|
|
21012
|
+
outputFps: number().int().min(1).max(60).optional()
|
|
21013
|
+
});
|
|
21014
|
+
/**
|
|
21015
|
+
* Render options. `speed` and `timelapse` are mutually exclusive. `includeAudio`
|
|
21016
|
+
* is honoured only for a realtime-ish speed (0.5–2×); timelapse is always
|
|
21017
|
+
* silent. `maxLifeMs` bounds how long the finished file is kept;
|
|
21018
|
+
* `deleteAfterDownload` removes it shortly after the first complete download.
|
|
21019
|
+
*/
|
|
21020
|
+
var ExportOptionsSchema = object({
|
|
21021
|
+
speed: ExportSpeedSchema.optional(),
|
|
21022
|
+
timelapse: ExportTimelapseSchema.optional(),
|
|
21023
|
+
includeAudio: boolean(),
|
|
21024
|
+
maxLifeMs: number().int().positive(),
|
|
21025
|
+
deleteAfterDownload: boolean(),
|
|
21026
|
+
title: string().max(200).optional()
|
|
21027
|
+
}).superRefine((v, ctx) => {
|
|
21028
|
+
if (v.speed !== void 0 && v.timelapse !== void 0) ctx.addIssue({
|
|
21029
|
+
code: ZodIssueCode.custom,
|
|
21030
|
+
message: "speed and timelapse are mutually exclusive",
|
|
21031
|
+
path: ["timelapse"]
|
|
21032
|
+
});
|
|
21033
|
+
});
|
|
21034
|
+
var ExportStateSchema = _enum([
|
|
21035
|
+
"queued",
|
|
21036
|
+
"rendering",
|
|
21037
|
+
"ready",
|
|
21038
|
+
"failed",
|
|
21039
|
+
"expired",
|
|
21040
|
+
"deleted"
|
|
21041
|
+
]);
|
|
21042
|
+
/** One export job / history row. */
|
|
21043
|
+
var ExportRecordSchema = object({
|
|
21044
|
+
id: string(),
|
|
21045
|
+
deviceId: number(),
|
|
21046
|
+
profile: string(),
|
|
21047
|
+
fromMs: number(),
|
|
21048
|
+
toMs: number(),
|
|
21049
|
+
options: ExportOptionsSchema,
|
|
21050
|
+
state: ExportStateSchema,
|
|
21051
|
+
/** 0–100 while rendering; null otherwise. */
|
|
21052
|
+
progressPct: number().nullable(),
|
|
21053
|
+
/** File size once ready; null before. */
|
|
21054
|
+
fileBytes: number().nullable(),
|
|
21055
|
+
expiresAt: number(),
|
|
21056
|
+
deleteAfterDownload: boolean(),
|
|
21057
|
+
/** Epoch of the first complete download; null until then. */
|
|
21058
|
+
downloadedAt: number().nullable(),
|
|
21059
|
+
createdAt: number(),
|
|
21060
|
+
/** User id/name that requested the export. */
|
|
21061
|
+
createdBy: string(),
|
|
21062
|
+
/** Failure reason when state is 'failed'; null otherwise. */
|
|
21063
|
+
error: string().nullable()
|
|
21064
|
+
});
|
|
21065
|
+
/** Candidate download URLs (LAN first, then operator extra hosts). */
|
|
21066
|
+
var ExportDownloadSchema = object({
|
|
21067
|
+
url: string(),
|
|
21068
|
+
endpoints: array(string())
|
|
21069
|
+
});
|
|
21070
|
+
var recordingExportCapability = {
|
|
21071
|
+
name: "recordingExport",
|
|
21072
|
+
scope: "system",
|
|
21073
|
+
mode: "singleton",
|
|
21074
|
+
methods: {
|
|
21075
|
+
/** Queue a render of `[fromMs,toMs)` for `deviceId`/`profile`. Fails fast
|
|
21076
|
+
* when no footage covers the range. Returns the queued record. */
|
|
21077
|
+
createExport: method(object({
|
|
21078
|
+
deviceId: number(),
|
|
21079
|
+
profile: string(),
|
|
21080
|
+
fromMs: number(),
|
|
21081
|
+
toMs: number(),
|
|
21082
|
+
options: ExportOptionsSchema
|
|
21083
|
+
}), ExportRecordSchema, {
|
|
21084
|
+
kind: "mutation",
|
|
21085
|
+
auth: "protected"
|
|
21086
|
+
}),
|
|
21087
|
+
/** All export rows (history included), optionally scoped to one device. */
|
|
21088
|
+
listExports: method(object({ deviceId: number().optional() }), array(ExportRecordSchema), {
|
|
21089
|
+
kind: "query",
|
|
21090
|
+
auth: "protected"
|
|
21091
|
+
}),
|
|
21092
|
+
getExport: method(object({ exportId: string() }), ExportRecordSchema, {
|
|
21093
|
+
kind: "query",
|
|
21094
|
+
auth: "protected"
|
|
21095
|
+
}),
|
|
21096
|
+
/** Abort a queued/rendering export; the partial file is removed. */
|
|
21097
|
+
cancelExport: method(object({ exportId: string() }), ExportRecordSchema, {
|
|
21098
|
+
kind: "mutation",
|
|
21099
|
+
auth: "protected"
|
|
21100
|
+
}),
|
|
21101
|
+
/** Remove the file but keep the history row (state → 'deleted'). */
|
|
21102
|
+
deleteExport: method(object({ exportId: string() }), ExportRecordSchema, {
|
|
21103
|
+
kind: "mutation",
|
|
21104
|
+
auth: "protected"
|
|
21105
|
+
}),
|
|
21106
|
+
getDownloadUrl: method(object({ exportId: string() }), ExportDownloadSchema, {
|
|
21107
|
+
kind: "query",
|
|
21108
|
+
auth: "protected"
|
|
21109
|
+
})
|
|
21110
|
+
}
|
|
21111
|
+
};
|
|
21112
|
+
/**
|
|
20941
21113
|
* One publishable camera stream as its OWNING PROVIDER describes it — the same
|
|
20942
21114
|
* payload the (legacy) push `streamBroker.publishCameraStream` carried, minus
|
|
20943
21115
|
* `deviceId`.
|
|
@@ -24861,6 +25033,42 @@ Object.freeze({
|
|
|
24861
25033
|
addonId: null,
|
|
24862
25034
|
access: "create"
|
|
24863
25035
|
},
|
|
25036
|
+
"recordingExport.cancelExport": {
|
|
25037
|
+
capName: "recordingExport",
|
|
25038
|
+
capScope: "system",
|
|
25039
|
+
addonId: null,
|
|
25040
|
+
access: "create"
|
|
25041
|
+
},
|
|
25042
|
+
"recordingExport.createExport": {
|
|
25043
|
+
capName: "recordingExport",
|
|
25044
|
+
capScope: "system",
|
|
25045
|
+
addonId: null,
|
|
25046
|
+
access: "create"
|
|
25047
|
+
},
|
|
25048
|
+
"recordingExport.deleteExport": {
|
|
25049
|
+
capName: "recordingExport",
|
|
25050
|
+
capScope: "system",
|
|
25051
|
+
addonId: null,
|
|
25052
|
+
access: "delete"
|
|
25053
|
+
},
|
|
25054
|
+
"recordingExport.getDownloadUrl": {
|
|
25055
|
+
capName: "recordingExport",
|
|
25056
|
+
capScope: "system",
|
|
25057
|
+
addonId: null,
|
|
25058
|
+
access: "view"
|
|
25059
|
+
},
|
|
25060
|
+
"recordingExport.getExport": {
|
|
25061
|
+
capName: "recordingExport",
|
|
25062
|
+
capScope: "system",
|
|
25063
|
+
addonId: null,
|
|
25064
|
+
access: "view"
|
|
25065
|
+
},
|
|
25066
|
+
"recordingExport.listExports": {
|
|
25067
|
+
capName: "recordingExport",
|
|
25068
|
+
capScope: "system",
|
|
25069
|
+
addonId: null,
|
|
25070
|
+
access: "view"
|
|
25071
|
+
},
|
|
24864
25072
|
"sceneMonitor.captureReference": {
|
|
24865
25073
|
capName: "scene-monitor",
|
|
24866
25074
|
capScope: "device",
|
|
@@ -26222,4 +26430,4 @@ function defaultDeviceFor(id) {
|
|
|
26222
26430
|
return def(id).defaultDevice;
|
|
26223
26431
|
}
|
|
26224
26432
|
//#endregion
|
|
26225
|
-
export {
|
|
26433
|
+
export { _enum as $, pipelineRunnerCapability as A, BaseAddon as B, hfModelUrl as C, motionDetectionCapability as D, migrateConfigToBands as E, storageEvictableCapability as F, hydrateSchema as G, DeviceFeature as H, streamBrokerCapability as I, makeSourceBrokerId as J, isEvent as K, supportedRuntimes as L, recordingExportCapability as M, resolveScrubThumbnailGeometry as N, nodePin as O, runtimeDevices as P, sleep as Q, webrtcSessionCapability as R, evaluateZoneRules as S, maskUrlCredentials as T, DeviceType as U, CAM_PROFILE_ORDER as V, createEvent as W, parseProfileBrokerId as X, parseJsonUnknown as Y, selectAssignedProfileSlots as Z, cameraStreamsCapability as _, COCO_TO_MACRO as a, number as at, defineCustomActions as b, EncodeProfileSchema as c, string as ct, RecordingConfigSchema as d, array as et, RingBuffer as f, audioAnalyzerCapability as g, audioAnalysisCapability as h, COCO_80_LABELS as i, literal as it, recordingCapability as j, pipelineExecutorCapability as k, ExportRecordSchema as l, union as lt, addonWidgetsSourceCapability as m, AUDIO_BACKEND_CHOICES as n, discriminatedUnion as nt, DEFAULT_AUDIO_ANALYZER_CONFIG as o, object as ot, YAMNET_TO_MACRO as p, makeProfileBrokerId as q, AUDIO_MACRO_LABELS as r, lazy as rt, EVENT_PAD_MS as s, record as st, APPLE_SA_TO_MACRO as t, boolean as tt, HF_BASE_URL as u, EventCategory as ut, customAction as v, mapAudioLabelToMacro as w, detectionPipelineCapability as x, defaultDeviceFor as y, errMsg as z };
|
|
@@ -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",
|
|
@@ -8156,7 +8199,10 @@ var COCO_TO_MACRO = {
|
|
|
8156
8199
|
elephant: "animal",
|
|
8157
8200
|
bear: "animal",
|
|
8158
8201
|
zebra: "animal",
|
|
8159
|
-
giraffe: "animal"
|
|
8202
|
+
giraffe: "animal",
|
|
8203
|
+
suitcase: "package",
|
|
8204
|
+
backpack: "package",
|
|
8205
|
+
handbag: "package"
|
|
8160
8206
|
},
|
|
8161
8207
|
preserveOriginal: false
|
|
8162
8208
|
};
|
|
@@ -13751,7 +13797,11 @@ array(ZoneRuleSchema).readonly();
|
|
|
13751
13797
|
* Extend the enum here when a new gating consumer comes online (audio
|
|
13752
13798
|
* gating, alert filtering, …) — no other surface needs to change.
|
|
13753
13799
|
*/
|
|
13754
|
-
var ZoneRuleStageEnum = _enum([
|
|
13800
|
+
var ZoneRuleStageEnum = _enum([
|
|
13801
|
+
"motion",
|
|
13802
|
+
"detection",
|
|
13803
|
+
"package"
|
|
13804
|
+
]);
|
|
13755
13805
|
DeviceType.Camera, method(object({
|
|
13756
13806
|
deviceId: number(),
|
|
13757
13807
|
stage: ZoneRuleStageEnum
|
|
@@ -13764,7 +13814,8 @@ DeviceType.Camera, method(object({
|
|
|
13764
13814
|
auth: "admin"
|
|
13765
13815
|
}), object({
|
|
13766
13816
|
motion: array(ZoneRuleSchema).readonly(),
|
|
13767
|
-
detection: array(ZoneRuleSchema).readonly()
|
|
13817
|
+
detection: array(ZoneRuleSchema).readonly(),
|
|
13818
|
+
package: array(ZoneRuleSchema).readonly()
|
|
13768
13819
|
});
|
|
13769
13820
|
var ProviderStatusSchema = object({
|
|
13770
13821
|
connected: boolean(),
|
|
@@ -17157,6 +17208,7 @@ var EventKindIconSchema = _enum([
|
|
|
17157
17208
|
"smoke",
|
|
17158
17209
|
"water",
|
|
17159
17210
|
"button",
|
|
17211
|
+
"package",
|
|
17160
17212
|
"generic"
|
|
17161
17213
|
]);
|
|
17162
17214
|
var EventKindCategorySchema = _enum([
|
|
@@ -17164,7 +17216,8 @@ var EventKindCategorySchema = _enum([
|
|
|
17164
17216
|
"audio",
|
|
17165
17217
|
"detection",
|
|
17166
17218
|
"sensor",
|
|
17167
|
-
"custom"
|
|
17219
|
+
"custom",
|
|
17220
|
+
"package"
|
|
17168
17221
|
]);
|
|
17169
17222
|
var EventKindDescriptorSchema = object({
|
|
17170
17223
|
/** Stable kind id (e.g. 'motion', 'person', 'contact'). */
|
|
@@ -20938,6 +20991,125 @@ var recordingCapability = {
|
|
|
20938
20991
|
}
|
|
20939
20992
|
};
|
|
20940
20993
|
/**
|
|
20994
|
+
* `recordingExport` cap — render a footage time range into a single downloadable
|
|
20995
|
+
* MP4 (regular / accelerated / decelerated / timelapse, ± audio), kept for a
|
|
20996
|
+
* bounded lifetime with a durable history, auto-expiry, and optional
|
|
20997
|
+
* delete-after-download.
|
|
20998
|
+
*
|
|
20999
|
+
* Like `recording` this is a `scope:'system', mode:'singleton'` cap: the
|
|
21000
|
+
* recorder self-gates so exactly ONE node (the designated `recordingNodeId`,
|
|
21001
|
+
* default `hub`) registers it. Device-scoped methods carry `deviceId` in their
|
|
21002
|
+
* input and dispatch to that single provider; the render runs on the node that
|
|
21003
|
+
* owns the footage (no cross-node segment transfer). Download rides the
|
|
21004
|
+
* framework addon data-plane. State persists in a DurableState blob (NOT
|
|
21005
|
+
* SQLite); history rows survive file deletion for audit.
|
|
21006
|
+
*/
|
|
21007
|
+
/** Playback-speed multiplier for the render (1 = realtime). */
|
|
21008
|
+
var ExportSpeedSchema = number().min(.25).max(32);
|
|
21009
|
+
/** Timelapse cadence — sample one source frame per `everyMs`, output at `outputFps`. */
|
|
21010
|
+
var ExportTimelapseSchema = object({
|
|
21011
|
+
everyMs: number().int().positive(),
|
|
21012
|
+
outputFps: number().int().min(1).max(60).optional()
|
|
21013
|
+
});
|
|
21014
|
+
/**
|
|
21015
|
+
* Render options. `speed` and `timelapse` are mutually exclusive. `includeAudio`
|
|
21016
|
+
* is honoured only for a realtime-ish speed (0.5–2×); timelapse is always
|
|
21017
|
+
* silent. `maxLifeMs` bounds how long the finished file is kept;
|
|
21018
|
+
* `deleteAfterDownload` removes it shortly after the first complete download.
|
|
21019
|
+
*/
|
|
21020
|
+
var ExportOptionsSchema = object({
|
|
21021
|
+
speed: ExportSpeedSchema.optional(),
|
|
21022
|
+
timelapse: ExportTimelapseSchema.optional(),
|
|
21023
|
+
includeAudio: boolean(),
|
|
21024
|
+
maxLifeMs: number().int().positive(),
|
|
21025
|
+
deleteAfterDownload: boolean(),
|
|
21026
|
+
title: string().max(200).optional()
|
|
21027
|
+
}).superRefine((v, ctx) => {
|
|
21028
|
+
if (v.speed !== void 0 && v.timelapse !== void 0) ctx.addIssue({
|
|
21029
|
+
code: ZodIssueCode.custom,
|
|
21030
|
+
message: "speed and timelapse are mutually exclusive",
|
|
21031
|
+
path: ["timelapse"]
|
|
21032
|
+
});
|
|
21033
|
+
});
|
|
21034
|
+
var ExportStateSchema = _enum([
|
|
21035
|
+
"queued",
|
|
21036
|
+
"rendering",
|
|
21037
|
+
"ready",
|
|
21038
|
+
"failed",
|
|
21039
|
+
"expired",
|
|
21040
|
+
"deleted"
|
|
21041
|
+
]);
|
|
21042
|
+
/** One export job / history row. */
|
|
21043
|
+
var ExportRecordSchema = object({
|
|
21044
|
+
id: string(),
|
|
21045
|
+
deviceId: number(),
|
|
21046
|
+
profile: string(),
|
|
21047
|
+
fromMs: number(),
|
|
21048
|
+
toMs: number(),
|
|
21049
|
+
options: ExportOptionsSchema,
|
|
21050
|
+
state: ExportStateSchema,
|
|
21051
|
+
/** 0–100 while rendering; null otherwise. */
|
|
21052
|
+
progressPct: number().nullable(),
|
|
21053
|
+
/** File size once ready; null before. */
|
|
21054
|
+
fileBytes: number().nullable(),
|
|
21055
|
+
expiresAt: number(),
|
|
21056
|
+
deleteAfterDownload: boolean(),
|
|
21057
|
+
/** Epoch of the first complete download; null until then. */
|
|
21058
|
+
downloadedAt: number().nullable(),
|
|
21059
|
+
createdAt: number(),
|
|
21060
|
+
/** User id/name that requested the export. */
|
|
21061
|
+
createdBy: string(),
|
|
21062
|
+
/** Failure reason when state is 'failed'; null otherwise. */
|
|
21063
|
+
error: string().nullable()
|
|
21064
|
+
});
|
|
21065
|
+
/** Candidate download URLs (LAN first, then operator extra hosts). */
|
|
21066
|
+
var ExportDownloadSchema = object({
|
|
21067
|
+
url: string(),
|
|
21068
|
+
endpoints: array(string())
|
|
21069
|
+
});
|
|
21070
|
+
var recordingExportCapability = {
|
|
21071
|
+
name: "recordingExport",
|
|
21072
|
+
scope: "system",
|
|
21073
|
+
mode: "singleton",
|
|
21074
|
+
methods: {
|
|
21075
|
+
/** Queue a render of `[fromMs,toMs)` for `deviceId`/`profile`. Fails fast
|
|
21076
|
+
* when no footage covers the range. Returns the queued record. */
|
|
21077
|
+
createExport: method(object({
|
|
21078
|
+
deviceId: number(),
|
|
21079
|
+
profile: string(),
|
|
21080
|
+
fromMs: number(),
|
|
21081
|
+
toMs: number(),
|
|
21082
|
+
options: ExportOptionsSchema
|
|
21083
|
+
}), ExportRecordSchema, {
|
|
21084
|
+
kind: "mutation",
|
|
21085
|
+
auth: "protected"
|
|
21086
|
+
}),
|
|
21087
|
+
/** All export rows (history included), optionally scoped to one device. */
|
|
21088
|
+
listExports: method(object({ deviceId: number().optional() }), array(ExportRecordSchema), {
|
|
21089
|
+
kind: "query",
|
|
21090
|
+
auth: "protected"
|
|
21091
|
+
}),
|
|
21092
|
+
getExport: method(object({ exportId: string() }), ExportRecordSchema, {
|
|
21093
|
+
kind: "query",
|
|
21094
|
+
auth: "protected"
|
|
21095
|
+
}),
|
|
21096
|
+
/** Abort a queued/rendering export; the partial file is removed. */
|
|
21097
|
+
cancelExport: method(object({ exportId: string() }), ExportRecordSchema, {
|
|
21098
|
+
kind: "mutation",
|
|
21099
|
+
auth: "protected"
|
|
21100
|
+
}),
|
|
21101
|
+
/** Remove the file but keep the history row (state → 'deleted'). */
|
|
21102
|
+
deleteExport: method(object({ exportId: string() }), ExportRecordSchema, {
|
|
21103
|
+
kind: "mutation",
|
|
21104
|
+
auth: "protected"
|
|
21105
|
+
}),
|
|
21106
|
+
getDownloadUrl: method(object({ exportId: string() }), ExportDownloadSchema, {
|
|
21107
|
+
kind: "query",
|
|
21108
|
+
auth: "protected"
|
|
21109
|
+
})
|
|
21110
|
+
}
|
|
21111
|
+
};
|
|
21112
|
+
/**
|
|
20941
21113
|
* One publishable camera stream as its OWNING PROVIDER describes it — the same
|
|
20942
21114
|
* payload the (legacy) push `streamBroker.publishCameraStream` carried, minus
|
|
20943
21115
|
* `deviceId`.
|
|
@@ -24861,6 +25033,42 @@ Object.freeze({
|
|
|
24861
25033
|
addonId: null,
|
|
24862
25034
|
access: "create"
|
|
24863
25035
|
},
|
|
25036
|
+
"recordingExport.cancelExport": {
|
|
25037
|
+
capName: "recordingExport",
|
|
25038
|
+
capScope: "system",
|
|
25039
|
+
addonId: null,
|
|
25040
|
+
access: "create"
|
|
25041
|
+
},
|
|
25042
|
+
"recordingExport.createExport": {
|
|
25043
|
+
capName: "recordingExport",
|
|
25044
|
+
capScope: "system",
|
|
25045
|
+
addonId: null,
|
|
25046
|
+
access: "create"
|
|
25047
|
+
},
|
|
25048
|
+
"recordingExport.deleteExport": {
|
|
25049
|
+
capName: "recordingExport",
|
|
25050
|
+
capScope: "system",
|
|
25051
|
+
addonId: null,
|
|
25052
|
+
access: "delete"
|
|
25053
|
+
},
|
|
25054
|
+
"recordingExport.getDownloadUrl": {
|
|
25055
|
+
capName: "recordingExport",
|
|
25056
|
+
capScope: "system",
|
|
25057
|
+
addonId: null,
|
|
25058
|
+
access: "view"
|
|
25059
|
+
},
|
|
25060
|
+
"recordingExport.getExport": {
|
|
25061
|
+
capName: "recordingExport",
|
|
25062
|
+
capScope: "system",
|
|
25063
|
+
addonId: null,
|
|
25064
|
+
access: "view"
|
|
25065
|
+
},
|
|
25066
|
+
"recordingExport.listExports": {
|
|
25067
|
+
capName: "recordingExport",
|
|
25068
|
+
capScope: "system",
|
|
25069
|
+
addonId: null,
|
|
25070
|
+
access: "view"
|
|
25071
|
+
},
|
|
24864
25072
|
"sceneMonitor.captureReference": {
|
|
24865
25073
|
capName: "scene-monitor",
|
|
24866
25074
|
capScope: "device",
|
|
@@ -26300,6 +26508,12 @@ Object.defineProperty(exports, "EventCategory", {
|
|
|
26300
26508
|
return EventCategory;
|
|
26301
26509
|
}
|
|
26302
26510
|
});
|
|
26511
|
+
Object.defineProperty(exports, "ExportRecordSchema", {
|
|
26512
|
+
enumerable: true,
|
|
26513
|
+
get: function() {
|
|
26514
|
+
return ExportRecordSchema;
|
|
26515
|
+
}
|
|
26516
|
+
});
|
|
26303
26517
|
Object.defineProperty(exports, "HF_BASE_URL", {
|
|
26304
26518
|
enumerable: true,
|
|
26305
26519
|
get: function() {
|
|
@@ -26534,6 +26748,12 @@ Object.defineProperty(exports, "recordingCapability", {
|
|
|
26534
26748
|
return recordingCapability;
|
|
26535
26749
|
}
|
|
26536
26750
|
});
|
|
26751
|
+
Object.defineProperty(exports, "recordingExportCapability", {
|
|
26752
|
+
enumerable: true,
|
|
26753
|
+
get: function() {
|
|
26754
|
+
return recordingExportCapability;
|
|
26755
|
+
}
|
|
26756
|
+
});
|
|
26537
26757
|
Object.defineProperty(exports, "resolveScrubThumbnailGeometry", {
|
|
26538
26758
|
enumerable: true,
|
|
26539
26759
|
get: function() {
|
|
@@ -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 };
|