camstack 1.1.27 → 1.1.29
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.
|
@@ -14522,7 +14522,7 @@ function date4(params) {
|
|
|
14522
14522
|
// ../../node_modules/zod/v4/classic/external.js
|
|
14523
14523
|
config(en_default());
|
|
14524
14524
|
|
|
14525
|
-
// ../types/dist/sleep-
|
|
14525
|
+
// ../types/dist/sleep-DOq2moJx.mjs
|
|
14526
14526
|
var WELL_KNOWN_TABS = [
|
|
14527
14527
|
{
|
|
14528
14528
|
id: "overview",
|
|
@@ -15540,6 +15540,13 @@ var RecordingRetentionSchema = external_exports.object({
|
|
|
15540
15540
|
maxAgeDays: external_exports.number().min(0).optional(),
|
|
15541
15541
|
maxSizeGb: external_exports.number().min(0).optional()
|
|
15542
15542
|
});
|
|
15543
|
+
var ScrubThumbnailPresetSchema = external_exports.enum([
|
|
15544
|
+
"minimal",
|
|
15545
|
+
"low",
|
|
15546
|
+
"standard",
|
|
15547
|
+
"high",
|
|
15548
|
+
"max"
|
|
15549
|
+
]);
|
|
15543
15550
|
var RecordingConfigSchema = external_exports.object({
|
|
15544
15551
|
enabled: external_exports.boolean(),
|
|
15545
15552
|
/** Authoritative storage mode. Absent on legacy targets → derived once via
|
|
@@ -15569,7 +15576,14 @@ var RecordingConfigSchema = external_exports.object({
|
|
|
15569
15576
|
* derived into bands once via `migrateConfigToBands`.
|
|
15570
15577
|
*/
|
|
15571
15578
|
bands: external_exports.array(RecordingBandSchema).optional(),
|
|
15572
|
-
retention: RecordingRetentionSchema.optional()
|
|
15579
|
+
retention: RecordingRetentionSchema.optional(),
|
|
15580
|
+
/**
|
|
15581
|
+
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
15582
|
+
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
15583
|
+
* windows only — existing sheets are immutable, and each window's index
|
|
15584
|
+
* carries its own tile dims so mixed-preset history renders correctly.
|
|
15585
|
+
*/
|
|
15586
|
+
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
15573
15587
|
});
|
|
15574
15588
|
var StorageLocationTypeSchema = external_exports.string().regex(/^[a-z][a-zA-Z0-9-]*$/);
|
|
15575
15589
|
var StorageLocationSchema = external_exports.object({
|
|
@@ -21792,7 +21806,11 @@ var ZoneRuleSchema = external_exports.object({
|
|
|
21792
21806
|
enabled: external_exports.boolean().default(true)
|
|
21793
21807
|
});
|
|
21794
21808
|
var ZoneRulesArraySchema = external_exports.array(ZoneRuleSchema).readonly();
|
|
21795
|
-
var ZoneRuleStageEnum = external_exports.enum([
|
|
21809
|
+
var ZoneRuleStageEnum = external_exports.enum([
|
|
21810
|
+
"motion",
|
|
21811
|
+
"detection",
|
|
21812
|
+
"package"
|
|
21813
|
+
]);
|
|
21796
21814
|
var zoneRulesCapability = {
|
|
21797
21815
|
name: "zone-rules",
|
|
21798
21816
|
scope: "device",
|
|
@@ -21819,16 +21837,24 @@ var zoneRulesCapability = {
|
|
|
21819
21837
|
})
|
|
21820
21838
|
},
|
|
21821
21839
|
/**
|
|
21822
|
-
* Runtime-state slice —
|
|
21840
|
+
* Runtime-state slice — every stage mirrored together so consumers
|
|
21823
21841
|
* see one reactive handle (`device.state.zoneRules.value`) instead
|
|
21824
|
-
* of
|
|
21825
|
-
* `{motion, detection}` shape, so subscribers always get the
|
|
21842
|
+
* of one per stage. Bulk-replace mutations on any stage write the full
|
|
21843
|
+
* `{motion, detection, package}` shape, so subscribers always get the
|
|
21826
21844
|
* complete current set. Consumers that only care about one stage
|
|
21827
21845
|
* just read the matching property.
|
|
21846
|
+
*
|
|
21847
|
+
* `package` backs the package-drop detector — a package zone is a
|
|
21848
|
+
* `ZoneRule` on the `'package'` stage referencing drawn polygons
|
|
21849
|
+
* (see docs/superpowers/specs/2026-07-17-package-zones-design.md §3.1).
|
|
21850
|
+
* The orchestrator provider that writes this stage lands in a later
|
|
21851
|
+
* slice; until then the mirror carries only `{motion, detection}` and
|
|
21852
|
+
* consumers read `package` as absent (treat as `[]`).
|
|
21828
21853
|
*/
|
|
21829
21854
|
runtimeState: external_exports.object({
|
|
21830
21855
|
motion: external_exports.array(ZoneRuleSchema).readonly(),
|
|
21831
|
-
detection: external_exports.array(ZoneRuleSchema).readonly()
|
|
21856
|
+
detection: external_exports.array(ZoneRuleSchema).readonly(),
|
|
21857
|
+
package: external_exports.array(ZoneRuleSchema).readonly()
|
|
21832
21858
|
})
|
|
21833
21859
|
};
|
|
21834
21860
|
var UNIT_TABLE = {
|
|
@@ -25580,6 +25606,7 @@ var EventKindIconSchema = external_exports.enum([
|
|
|
25580
25606
|
"smoke",
|
|
25581
25607
|
"water",
|
|
25582
25608
|
"button",
|
|
25609
|
+
"package",
|
|
25583
25610
|
"generic"
|
|
25584
25611
|
]);
|
|
25585
25612
|
var EventKindCategorySchema = external_exports.enum([
|
|
@@ -25587,7 +25614,8 @@ var EventKindCategorySchema = external_exports.enum([
|
|
|
25587
25614
|
"audio",
|
|
25588
25615
|
"detection",
|
|
25589
25616
|
"sensor",
|
|
25590
|
-
"custom"
|
|
25617
|
+
"custom",
|
|
25618
|
+
"package"
|
|
25591
25619
|
]);
|
|
25592
25620
|
var EventKindDescriptorSchema = external_exports.object({
|
|
25593
25621
|
/** Stable kind id (e.g. 'motion', 'person', 'contact'). */
|
|
@@ -30000,6 +30028,101 @@ var recordingCapability = {
|
|
|
30000
30028
|
})
|
|
30001
30029
|
}
|
|
30002
30030
|
};
|
|
30031
|
+
var ExportSpeedSchema = external_exports.number().min(0.25).max(32);
|
|
30032
|
+
var ExportTimelapseSchema = external_exports.object({
|
|
30033
|
+
everyMs: external_exports.number().int().positive(),
|
|
30034
|
+
outputFps: external_exports.number().int().min(1).max(60).optional()
|
|
30035
|
+
});
|
|
30036
|
+
var ExportOptionsSchema = external_exports.object({
|
|
30037
|
+
speed: ExportSpeedSchema.optional(),
|
|
30038
|
+
timelapse: ExportTimelapseSchema.optional(),
|
|
30039
|
+
includeAudio: external_exports.boolean(),
|
|
30040
|
+
maxLifeMs: external_exports.number().int().positive(),
|
|
30041
|
+
deleteAfterDownload: external_exports.boolean(),
|
|
30042
|
+
title: external_exports.string().max(200).optional()
|
|
30043
|
+
}).superRefine((v, ctx) => {
|
|
30044
|
+
if (v.speed !== void 0 && v.timelapse !== void 0) ctx.addIssue({
|
|
30045
|
+
code: external_exports.ZodIssueCode.custom,
|
|
30046
|
+
message: "speed and timelapse are mutually exclusive",
|
|
30047
|
+
path: ["timelapse"]
|
|
30048
|
+
});
|
|
30049
|
+
});
|
|
30050
|
+
var ExportStateSchema = external_exports.enum([
|
|
30051
|
+
"queued",
|
|
30052
|
+
"rendering",
|
|
30053
|
+
"ready",
|
|
30054
|
+
"failed",
|
|
30055
|
+
"expired",
|
|
30056
|
+
"deleted"
|
|
30057
|
+
]);
|
|
30058
|
+
var ExportRecordSchema = external_exports.object({
|
|
30059
|
+
id: external_exports.string(),
|
|
30060
|
+
deviceId: external_exports.number(),
|
|
30061
|
+
profile: external_exports.string(),
|
|
30062
|
+
fromMs: external_exports.number(),
|
|
30063
|
+
toMs: external_exports.number(),
|
|
30064
|
+
options: ExportOptionsSchema,
|
|
30065
|
+
state: ExportStateSchema,
|
|
30066
|
+
/** 0–100 while rendering; null otherwise. */
|
|
30067
|
+
progressPct: external_exports.number().nullable(),
|
|
30068
|
+
/** File size once ready; null before. */
|
|
30069
|
+
fileBytes: external_exports.number().nullable(),
|
|
30070
|
+
expiresAt: external_exports.number(),
|
|
30071
|
+
deleteAfterDownload: external_exports.boolean(),
|
|
30072
|
+
/** Epoch of the first complete download; null until then. */
|
|
30073
|
+
downloadedAt: external_exports.number().nullable(),
|
|
30074
|
+
createdAt: external_exports.number(),
|
|
30075
|
+
/** User id/name that requested the export. */
|
|
30076
|
+
createdBy: external_exports.string(),
|
|
30077
|
+
/** Failure reason when state is 'failed'; null otherwise. */
|
|
30078
|
+
error: external_exports.string().nullable()
|
|
30079
|
+
});
|
|
30080
|
+
var ExportDownloadSchema = external_exports.object({
|
|
30081
|
+
url: external_exports.string(),
|
|
30082
|
+
endpoints: external_exports.array(external_exports.string())
|
|
30083
|
+
});
|
|
30084
|
+
var recordingExportCapability = {
|
|
30085
|
+
name: "recordingExport",
|
|
30086
|
+
scope: "system",
|
|
30087
|
+
mode: "singleton",
|
|
30088
|
+
methods: {
|
|
30089
|
+
/** Queue a render of `[fromMs,toMs)` for `deviceId`/`profile`. Fails fast
|
|
30090
|
+
* when no footage covers the range. Returns the queued record. */
|
|
30091
|
+
createExport: method(external_exports.object({
|
|
30092
|
+
deviceId: external_exports.number(),
|
|
30093
|
+
profile: external_exports.string(),
|
|
30094
|
+
fromMs: external_exports.number(),
|
|
30095
|
+
toMs: external_exports.number(),
|
|
30096
|
+
options: ExportOptionsSchema
|
|
30097
|
+
}), ExportRecordSchema, {
|
|
30098
|
+
kind: "mutation",
|
|
30099
|
+
auth: "protected"
|
|
30100
|
+
}),
|
|
30101
|
+
/** All export rows (history included), optionally scoped to one device. */
|
|
30102
|
+
listExports: method(external_exports.object({ deviceId: external_exports.number().optional() }), external_exports.array(ExportRecordSchema), {
|
|
30103
|
+
kind: "query",
|
|
30104
|
+
auth: "protected"
|
|
30105
|
+
}),
|
|
30106
|
+
getExport: method(external_exports.object({ exportId: external_exports.string() }), ExportRecordSchema, {
|
|
30107
|
+
kind: "query",
|
|
30108
|
+
auth: "protected"
|
|
30109
|
+
}),
|
|
30110
|
+
/** Abort a queued/rendering export; the partial file is removed. */
|
|
30111
|
+
cancelExport: method(external_exports.object({ exportId: external_exports.string() }), ExportRecordSchema, {
|
|
30112
|
+
kind: "mutation",
|
|
30113
|
+
auth: "protected"
|
|
30114
|
+
}),
|
|
30115
|
+
/** Remove the file but keep the history row (state → 'deleted'). */
|
|
30116
|
+
deleteExport: method(external_exports.object({ exportId: external_exports.string() }), ExportRecordSchema, {
|
|
30117
|
+
kind: "mutation",
|
|
30118
|
+
auth: "protected"
|
|
30119
|
+
}),
|
|
30120
|
+
getDownloadUrl: method(external_exports.object({ exportId: external_exports.string() }), ExportDownloadSchema, {
|
|
30121
|
+
kind: "query",
|
|
30122
|
+
auth: "protected"
|
|
30123
|
+
})
|
|
30124
|
+
}
|
|
30125
|
+
};
|
|
30003
30126
|
var CamStreamDescriptorSchema = external_exports.object({
|
|
30004
30127
|
camStreamId: external_exports.string().min(1),
|
|
30005
30128
|
kind: CamStreamKindSchema,
|
|
@@ -33946,6 +34069,42 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
33946
34069
|
addonId: null,
|
|
33947
34070
|
access: "create"
|
|
33948
34071
|
},
|
|
34072
|
+
"recordingExport.cancelExport": {
|
|
34073
|
+
capName: "recordingExport",
|
|
34074
|
+
capScope: "system",
|
|
34075
|
+
addonId: null,
|
|
34076
|
+
access: "create"
|
|
34077
|
+
},
|
|
34078
|
+
"recordingExport.createExport": {
|
|
34079
|
+
capName: "recordingExport",
|
|
34080
|
+
capScope: "system",
|
|
34081
|
+
addonId: null,
|
|
34082
|
+
access: "create"
|
|
34083
|
+
},
|
|
34084
|
+
"recordingExport.deleteExport": {
|
|
34085
|
+
capName: "recordingExport",
|
|
34086
|
+
capScope: "system",
|
|
34087
|
+
addonId: null,
|
|
34088
|
+
access: "delete"
|
|
34089
|
+
},
|
|
34090
|
+
"recordingExport.getDownloadUrl": {
|
|
34091
|
+
capName: "recordingExport",
|
|
34092
|
+
capScope: "system",
|
|
34093
|
+
addonId: null,
|
|
34094
|
+
access: "view"
|
|
34095
|
+
},
|
|
34096
|
+
"recordingExport.getExport": {
|
|
34097
|
+
capName: "recordingExport",
|
|
34098
|
+
capScope: "system",
|
|
34099
|
+
addonId: null,
|
|
34100
|
+
access: "view"
|
|
34101
|
+
},
|
|
34102
|
+
"recordingExport.listExports": {
|
|
34103
|
+
capName: "recordingExport",
|
|
34104
|
+
capScope: "system",
|
|
34105
|
+
addonId: null,
|
|
34106
|
+
access: "view"
|
|
34107
|
+
},
|
|
33949
34108
|
"sceneMonitor.captureReference": {
|
|
33950
34109
|
capName: "scene-monitor",
|
|
33951
34110
|
capScope: "device",
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runDiscover
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-XGNAIFKZ.js";
|
|
5
5
|
import "./chunk-K3NQKI34.js";
|
|
6
6
|
|
|
7
7
|
// src/cli.ts
|
|
@@ -1079,7 +1079,7 @@ function isUnknown(_value) {
|
|
|
1079
1079
|
return true;
|
|
1080
1080
|
}
|
|
1081
1081
|
async function resolveServerInteractive(presetNamespace) {
|
|
1082
|
-
const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-
|
|
1082
|
+
const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-EB7LI523.js");
|
|
1083
1083
|
if (presetNamespace) {
|
|
1084
1084
|
const spinner4 = clack.spinner();
|
|
1085
1085
|
spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
|