@camstack/types 1.2.128 → 1.2.130
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.js +3 -2
- package/dist/addon.mjs +3 -2
- package/dist/capabilities/index.d.ts +3 -3
- package/dist/capabilities/pipeline-analytics.cap.d.ts +213 -0
- package/dist/capabilities/recording.cap.d.ts +64 -0
- package/dist/capabilities/scene-monitor.cap.d.ts +233 -0
- package/dist/capabilities/storage-migration.cap.d.ts +1 -0
- package/dist/capabilities/storage.cap.d.ts +2 -1
- package/dist/capabilities/zone-analytics.cap.d.ts +122 -2
- package/dist/generated/addon-api.d.ts +35 -0
- package/dist/generated/cap-input-defaults.d.ts +1 -1
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/method-device-selectors.d.ts +2 -2
- package/dist/generated/system-proxy.d.ts +1 -1
- package/dist/index.js +372 -2
- package/dist/index.mjs +364 -3
- package/dist/interfaces/relocate.d.ts +109 -0
- package/dist/{sleep-C3AniWy-.js → sleep-DIg3xuEw.js} +4 -0
- package/dist/{sleep-ot6dTHCA.mjs → sleep-DcA-CgqX.mjs} +4 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_event_category = require("./event-category-BaEgqJNv.js");
|
|
3
|
-
const require_sleep = require("./sleep-
|
|
3
|
+
const require_sleep = require("./sleep-DIg3xuEw.js");
|
|
4
4
|
const require_canonical_hash = require("./canonical-hash-DNV8S5ET.js");
|
|
5
5
|
const require_enums = require("./enums.js");
|
|
6
6
|
const require_err_msg = require("./err-msg-COpsHMw2.js");
|
|
@@ -2267,6 +2267,20 @@ var RelocateJobSchema = zod.z.object({
|
|
|
2267
2267
|
* in its row, not in its name, so `MediaRelocateEngine` never reconciles one.
|
|
2268
2268
|
*/
|
|
2269
2269
|
rowsReconciled: zod.z.number().int().nonnegative().optional(),
|
|
2270
|
+
/**
|
|
2271
|
+
* Rows this run FORGOT because the file they name is not on disk.
|
|
2272
|
+
*
|
|
2273
|
+
* The mover derived the path from the row's own fields and `stat`ed it; an
|
|
2274
|
+
* ENOENT there is a per-path confirmation that the segment is gone (D296),
|
|
2275
|
+
* and the durable row is dropped through the same channel eviction uses. It
|
|
2276
|
+
* is reported for the same reason `rowsReconciled` is: this is a durable
|
|
2277
|
+
* mutation nobody asked for, and a migration that quietly erases hour rows is
|
|
2278
|
+
* the same failure as one that quietly skips them (D295).
|
|
2279
|
+
*
|
|
2280
|
+
* The production drain of 2026-08-30 would have reported 11 074 here — the
|
|
2281
|
+
* ledger claimed 5.65 GB of footage that no longer existed.
|
|
2282
|
+
*/
|
|
2283
|
+
rowsForgotten: zod.z.number().int().nonnegative().optional(),
|
|
2270
2284
|
startedAt: zod.z.number(),
|
|
2271
2285
|
finishedAt: zod.z.number().nullable(),
|
|
2272
2286
|
error: zod.z.string().nullable()
|
|
@@ -2662,6 +2676,92 @@ var RelocateResidueSchema = zod.z.object({
|
|
|
2662
2676
|
segments: zod.z.number().int().nonnegative(),
|
|
2663
2677
|
bytes: zod.z.number().int().nonnegative()
|
|
2664
2678
|
}).nullable();
|
|
2679
|
+
/**
|
|
2680
|
+
* Ask one location whether its durable hour rows describe the disk — the walk
|
|
2681
|
+
* (D319).
|
|
2682
|
+
*
|
|
2683
|
+
* `apply` DEFAULTS TO FALSE and that default is the product: the operator's
|
|
2684
|
+
* missing tool is the question, and the dry run is how they sanity-check the
|
|
2685
|
+
* destructive run before authorising it.
|
|
2686
|
+
*/
|
|
2687
|
+
var LedgerWalkInputSchema = zod.z.object({
|
|
2688
|
+
locationId: zod.z.string().min(1),
|
|
2689
|
+
/** Forget the confirmed-absent rows, rather than only counting them. */
|
|
2690
|
+
apply: zod.z.boolean().optional(),
|
|
2691
|
+
/** Narrow to one camera. */
|
|
2692
|
+
deviceId: zod.z.number().int().positive().optional(),
|
|
2693
|
+
/** Narrow to these recording profiles; empty/absent = every profile. */
|
|
2694
|
+
profiles: zod.z.array(zod.z.string().min(1)).optional()
|
|
2695
|
+
});
|
|
2696
|
+
/** Why a whole walk did nothing. Every one leaves the ledger untouched. */
|
|
2697
|
+
var LedgerWalkRefusalSchema = zod.z.enum([
|
|
2698
|
+
"location-unknown",
|
|
2699
|
+
"source-writable",
|
|
2700
|
+
"no-ledger",
|
|
2701
|
+
"archive-unreadable",
|
|
2702
|
+
"anchor-absent",
|
|
2703
|
+
"anchor-unreadable",
|
|
2704
|
+
"anchor-moved"
|
|
2705
|
+
]);
|
|
2706
|
+
/** Why one hour was left exactly as it was found. */
|
|
2707
|
+
var LedgerWalkSkipReasonSchema = zod.z.enum([
|
|
2708
|
+
"live-tail",
|
|
2709
|
+
"listing-error",
|
|
2710
|
+
"path-mismatch",
|
|
2711
|
+
"durable-refused"
|
|
2712
|
+
]);
|
|
2713
|
+
/** Every skip reason, always present, always a number — so a reason that never
|
|
2714
|
+
* fired reports as zero rather than absent and the report shape is constant
|
|
2715
|
+
* between passes. Spelled out rather than `z.record` for exactly that. */
|
|
2716
|
+
var LedgerWalkSkipCountsSchema = zod.z.object({
|
|
2717
|
+
"live-tail": zod.z.number().int().nonnegative(),
|
|
2718
|
+
"listing-error": zod.z.number().int().nonnegative(),
|
|
2719
|
+
"path-mismatch": zod.z.number().int().nonnegative(),
|
|
2720
|
+
"durable-refused": zod.z.number().int().nonnegative()
|
|
2721
|
+
});
|
|
2722
|
+
/** One camera's share of a walk, so a report names cameras and not rows. */
|
|
2723
|
+
var LedgerWalkDeviceReportSchema = zod.z.object({
|
|
2724
|
+
deviceId: zod.z.number().int(),
|
|
2725
|
+
hoursWalked: zod.z.number().int().nonnegative(),
|
|
2726
|
+
hoursMissing: zod.z.number().int().nonnegative(),
|
|
2727
|
+
ghostSegments: zod.z.number().int().nonnegative(),
|
|
2728
|
+
ghostBytes: zod.z.number().int().nonnegative(),
|
|
2729
|
+
forgottenSegments: zod.z.number().int().nonnegative(),
|
|
2730
|
+
orphanFiles: zod.z.number().int().nonnegative()
|
|
2731
|
+
});
|
|
2732
|
+
/**
|
|
2733
|
+
* What one walk claimed, listed, found and (only when armed) forgot.
|
|
2734
|
+
*
|
|
2735
|
+
* `archiveSegments` is the **M** and `segmentsClaimed` the **N** (D295), so a
|
|
2736
|
+
* walk that saw a fraction of the location is visible in its own report rather
|
|
2737
|
+
* than in the absence of one.
|
|
2738
|
+
*/
|
|
2739
|
+
var LedgerWalkReportSchema = zod.z.object({
|
|
2740
|
+
locationId: zod.z.string(),
|
|
2741
|
+
applied: zod.z.boolean(),
|
|
2742
|
+
refused: LedgerWalkRefusalSchema.nullable(),
|
|
2743
|
+
archiveSegments: zod.z.number().int().nonnegative().nullable(),
|
|
2744
|
+
archiveBytes: zod.z.number().int().nonnegative().nullable(),
|
|
2745
|
+
hoursClaimed: zod.z.number().int().nonnegative(),
|
|
2746
|
+
hoursWalked: zod.z.number().int().nonnegative(),
|
|
2747
|
+
hoursMissing: zod.z.number().int().nonnegative(),
|
|
2748
|
+
/** `readdir` calls issued — the cost, stated in the unit that is paid. */
|
|
2749
|
+
listings: zod.z.number().int().nonnegative(),
|
|
2750
|
+
segmentsClaimed: zod.z.number().int().nonnegative(),
|
|
2751
|
+
ghostSegments: zod.z.number().int().nonnegative(),
|
|
2752
|
+
ghostBytes: zod.z.number().int().nonnegative(),
|
|
2753
|
+
ghostHoursWhole: zod.z.number().int().nonnegative(),
|
|
2754
|
+
forgottenSegments: zod.z.number().int().nonnegative(),
|
|
2755
|
+
forgottenBytes: zod.z.number().int().nonnegative(),
|
|
2756
|
+
/** Files under a claimed hour that no durable row names. Never deleted. */
|
|
2757
|
+
orphanFiles: zod.z.number().int().nonnegative(),
|
|
2758
|
+
orphanSample: zod.z.array(zod.z.string()).readonly(),
|
|
2759
|
+
hoursSkipped: zod.z.number().int().nonnegative(),
|
|
2760
|
+
skippedByReason: LedgerWalkSkipCountsSchema,
|
|
2761
|
+
/** The walk stopped at its per-pass hour bound with claims unwalked. */
|
|
2762
|
+
bounded: zod.z.boolean(),
|
|
2763
|
+
byDevice: zod.z.array(LedgerWalkDeviceReportSchema).readonly()
|
|
2764
|
+
});
|
|
2665
2765
|
/** How many rows a media pass would still act on against a given target — the
|
|
2666
2766
|
* media lane's denominator AND its residue, from ONE derivation so the two can
|
|
2667
2767
|
* never disagree. `null` = the count could not be taken. */
|
|
@@ -18566,13 +18666,15 @@ var ListGroupsPageSchema = zod.z.object({
|
|
|
18566
18666
|
groups: zod.z.array(AnalyticsGroupRecordSchema).readonly(),
|
|
18567
18667
|
nextCursor: zod.z.string().nullable()
|
|
18568
18668
|
});
|
|
18669
|
+
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
18670
|
+
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
18569
18671
|
var KeyEventQueryInput = zod.z.object({
|
|
18570
18672
|
deviceId: zod.z.number(),
|
|
18571
18673
|
/** Window lower bound (track firstSeen ≥ since). */
|
|
18572
18674
|
since: zod.z.number(),
|
|
18573
18675
|
/** Window upper bound (track firstSeen ≤ until). */
|
|
18574
18676
|
until: zod.z.number(),
|
|
18575
|
-
limit: zod.z.number().int().min(1).max(
|
|
18677
|
+
limit: zod.z.number().int().min(1).max(KEY_EVENTS_MAX_LIMIT).default(KEY_EVENTS_DEFAULT_LIMIT),
|
|
18576
18678
|
/** Drop tracks scoring below this importance. */
|
|
18577
18679
|
minImportance: zod.z.number().min(0).max(1).optional(),
|
|
18578
18680
|
/** Restrict to a single class (e.g. 'person'). */
|
|
@@ -18594,6 +18696,32 @@ var KeyEventSchema = zod.z.object({
|
|
|
18594
18696
|
...TrackFlagFields,
|
|
18595
18697
|
...TrackRetrainFields
|
|
18596
18698
|
});
|
|
18699
|
+
/** `getKeyEvents`' window and filters, asked of a SET of cameras at once. */
|
|
18700
|
+
var KeyEventBatchQueryInput = zod.z.object({
|
|
18701
|
+
deviceIds: zod.z.array(zod.z.number()).min(1).max(200),
|
|
18702
|
+
since: zod.z.number(),
|
|
18703
|
+
until: zod.z.number(),
|
|
18704
|
+
/** Applied PER CAMERA, exactly as `getKeyEvents.limit` is — never a total
|
|
18705
|
+
* across the set, which would let a busy camera starve a quiet one of its
|
|
18706
|
+
* rows and change what the merged feed contains. */
|
|
18707
|
+
limit: zod.z.number().int().min(1).max(KEY_EVENTS_MAX_LIMIT).default(KEY_EVENTS_DEFAULT_LIMIT),
|
|
18708
|
+
minImportance: zod.z.number().min(0).max(1).optional(),
|
|
18709
|
+
classFilter: zod.z.string().optional()
|
|
18710
|
+
});
|
|
18711
|
+
/**
|
|
18712
|
+
* One camera's key events in a batch answer.
|
|
18713
|
+
*
|
|
18714
|
+
* The row exists for every requested id. `getKeyEvents` degrades to `[]` on
|
|
18715
|
+
* error rather than throwing, so a camera whose store read failed and one with
|
|
18716
|
+
* no events in the window were ALREADY indistinguishable per camera — the
|
|
18717
|
+
* batch does not make that worse, and the row keeps the deviceId the single
|
|
18718
|
+
* method's output never carried (the caller used to stamp it from the fan-out
|
|
18719
|
+
* key, which only worked because there was one query per camera).
|
|
18720
|
+
*/
|
|
18721
|
+
var KeyEventsForDeviceSchema = zod.z.object({
|
|
18722
|
+
deviceId: zod.z.number(),
|
|
18723
|
+
events: zod.z.array(KeyEventSchema).readonly()
|
|
18724
|
+
});
|
|
18597
18725
|
var TrackedDetectionSchema = zod.z.object({
|
|
18598
18726
|
trackId: zod.z.string(),
|
|
18599
18727
|
className: zod.z.string(),
|
|
@@ -18665,6 +18793,50 @@ var EventStoreFootprintSchema = zod.z.object({
|
|
|
18665
18793
|
totalBytes: zod.z.number().int(),
|
|
18666
18794
|
devices: zod.z.array(EventStoreDeviceFootprintSchema).readonly()
|
|
18667
18795
|
});
|
|
18796
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
18797
|
+
var EventMediaKindFootprintSchema = zod.z.object({
|
|
18798
|
+
kind: MediaFileKindEnum,
|
|
18799
|
+
/** Media rows of this kind. */
|
|
18800
|
+
rows: zod.z.number().int(),
|
|
18801
|
+
/** Bytes on disk held by those rows. */
|
|
18802
|
+
bytes: zod.z.number().int()
|
|
18803
|
+
});
|
|
18804
|
+
/**
|
|
18805
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
18806
|
+
* actually turns on.
|
|
18807
|
+
*
|
|
18808
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
18809
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
18810
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
18811
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
18812
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
18813
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
18814
|
+
*
|
|
18815
|
+
* ## Why `unaccounted*` exists
|
|
18816
|
+
*
|
|
18817
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
18818
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
18819
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
18820
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
18821
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
18822
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
18823
|
+
* against a denominator smaller than the disk.
|
|
18824
|
+
*
|
|
18825
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
18826
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
18827
|
+
*/
|
|
18828
|
+
var EventMediaKindBreakdownSchema = zod.z.object({
|
|
18829
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
18830
|
+
totalRows: zod.z.number().int(),
|
|
18831
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
18832
|
+
totalBytes: zod.z.number().int(),
|
|
18833
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
18834
|
+
kinds: zod.z.array(EventMediaKindFootprintSchema).readonly(),
|
|
18835
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
18836
|
+
unaccountedRows: zod.z.number().int(),
|
|
18837
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
18838
|
+
unaccountedBytes: zod.z.number().int()
|
|
18839
|
+
});
|
|
18668
18840
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
18669
18841
|
var EventPruneCountsSchema = zod.z.object({
|
|
18670
18842
|
motion: zod.z.number().int(),
|
|
@@ -18899,6 +19071,21 @@ var pipelineAnalyticsCapability = {
|
|
|
18899
19071
|
* scored on-read (no write). Degrades to `[]` on error.
|
|
18900
19072
|
*/
|
|
18901
19073
|
getKeyEvents: require_sleep.method(KeyEventQueryInput, zod.z.array(KeyEventSchema).readonly()),
|
|
19074
|
+
/**
|
|
19075
|
+
* The same ranking, for a SET of cameras, in one round trip.
|
|
19076
|
+
*
|
|
19077
|
+
* The Detection Intelligence events feed asks this of every selected
|
|
19078
|
+
* camera and re-asks on a 30s timer. Fanned out client-side that is N
|
|
19079
|
+
* round trips — browser → hub → post-analysis — for N independent,
|
|
19080
|
+
* already-indexed store queries. Batched, the queries are unchanged and
|
|
19081
|
+
* run concurrently INSIDE the owner; only the transport collapses.
|
|
19082
|
+
*
|
|
19083
|
+
* Deliberately per-device rather than pre-merged: `limit` stays per
|
|
19084
|
+
* camera (a total would let a busy camera starve a quiet one), and a
|
|
19085
|
+
* caller that renders one camera's lane needs to know which camera a row
|
|
19086
|
+
* came from. `getKeyEvents` stays for single-device callers.
|
|
19087
|
+
*/
|
|
19088
|
+
getKeyEventsBatch: require_sleep.method(KeyEventBatchQueryInput, zod.z.array(KeyEventsForDeviceSchema).readonly()),
|
|
18902
19089
|
/** Server-side bucketed event counts for the 24-hour timeline.
|
|
18903
19090
|
* Returns one entry per non-empty bucket; empty buckets are omitted. */
|
|
18904
19091
|
getEventDensity: require_sleep.method(zod.z.object({
|
|
@@ -19047,6 +19234,22 @@ var pipelineAnalyticsCapability = {
|
|
|
19047
19234
|
auth: "admin"
|
|
19048
19235
|
}),
|
|
19049
19236
|
/**
|
|
19237
|
+
* The same media footprint, broken down by {@link MediaFileKind} instead of
|
|
19238
|
+
* by camera — fleet-wide, or for one camera with `deviceId`.
|
|
19239
|
+
*
|
|
19240
|
+
* Separate from {@link getEventStoreFootprint} rather than a field on it:
|
|
19241
|
+
* the two answer different questions on different axes, the per-camera one
|
|
19242
|
+
* is what the management table renders on every open, and nothing should
|
|
19243
|
+
* pay for a per-kind pass to draw it. See
|
|
19244
|
+
* {@link EventMediaKindBreakdownSchema} for why `unaccounted*` exists —
|
|
19245
|
+
* `kinds` is enumerated, `totalBytes` is not, and the gap must be visible
|
|
19246
|
+
* to anyone sizing a deletion against it.
|
|
19247
|
+
*/
|
|
19248
|
+
getEventMediaFootprintByKind: require_sleep.method(zod.z.object({ deviceId: zod.z.number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19249
|
+
kind: "query",
|
|
19250
|
+
auth: "admin"
|
|
19251
|
+
}),
|
|
19252
|
+
/**
|
|
19050
19253
|
* Cluster-wide prune of events older than `olderThanMs` (exclusive) across
|
|
19051
19254
|
* every camera, deleting each event's media in lockstep. Logged to the
|
|
19052
19255
|
* events ops-log with `reason` (default `'retention'`). Returns the summed
|
|
@@ -22265,6 +22468,20 @@ var storageCapability = {
|
|
|
22265
22468
|
listProviders: require_sleep.method(zod.z.void(), zod.z.array(ProviderListEntrySchema).readonly()),
|
|
22266
22469
|
testConfig: require_sleep.method(zod.z.object({
|
|
22267
22470
|
providerId: zod.z.string(),
|
|
22471
|
+
/**
|
|
22472
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
22473
|
+
*
|
|
22474
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
22475
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
22476
|
+
* credential the operator did not retype — and posting that here
|
|
22477
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
22478
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
22479
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
22480
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
22481
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
22482
|
+
* every value was typed just now and nothing is stored yet.
|
|
22483
|
+
*/
|
|
22484
|
+
locationId: zod.z.string().optional(),
|
|
22268
22485
|
config: zod.z.record(zod.z.string(), zod.z.unknown())
|
|
22269
22486
|
}), zod.z.object({
|
|
22270
22487
|
ok: zod.z.boolean(),
|
|
@@ -31234,6 +31451,23 @@ var recordingCapability = {
|
|
|
31234
31451
|
kind: "query",
|
|
31235
31452
|
auth: "admin"
|
|
31236
31453
|
}),
|
|
31454
|
+
/**
|
|
31455
|
+
* Does this location's LEDGER tell the truth about its disk? (D319)
|
|
31456
|
+
*
|
|
31457
|
+
* One `readdir` per claimed hour, diffed both ways: durable rows whose file
|
|
31458
|
+
* is not there, and files no durable row names. `apply` defaults to FALSE —
|
|
31459
|
+
* the report is the product, and the dry run is how an operator
|
|
31460
|
+
* sanity-checks the destructive run before authorising it.
|
|
31461
|
+
*
|
|
31462
|
+
* REFUSES a source that is still a write target: a listing of a live
|
|
31463
|
+
* location is a lower bound, which is not the strong evidence that lets
|
|
31464
|
+
* this pass forget without a budget. A live location is reconciled by the
|
|
31465
|
+
* mover, under D318's bound.
|
|
31466
|
+
*/
|
|
31467
|
+
reconcileLedgerAgainstDisk: require_sleep.method(LedgerWalkInputSchema, LedgerWalkReportSchema, {
|
|
31468
|
+
kind: "mutation",
|
|
31469
|
+
auth: "admin"
|
|
31470
|
+
}),
|
|
31237
31471
|
/** Cancel a running or queued relocate job. A queued job never runs. */
|
|
31238
31472
|
cancelRelocateJob: require_sleep.method(zod.z.object({ jobId: zod.z.string() }), zod.z.object({ cancelled: zod.z.boolean() }), {
|
|
31239
31473
|
kind: "mutation",
|
|
@@ -31735,6 +31969,25 @@ var SceneMonitorStatusSchema = zod.z.object({
|
|
|
31735
31969
|
monitors: zod.z.array(SceneMonitorSchema),
|
|
31736
31970
|
lastFetchedAt: zod.z.number()
|
|
31737
31971
|
});
|
|
31972
|
+
/**
|
|
31973
|
+
* One camera's row in a `listScenesBatch` answer.
|
|
31974
|
+
*
|
|
31975
|
+
* `status` is NULLABLE and the nullability is the whole point. `scene-monitor`
|
|
31976
|
+
* is a `defaultActive` wrapper, so every camera is asked; a camera whose
|
|
31977
|
+
* provider is absent (pipeline-analytics not deployed, the post-processing node
|
|
31978
|
+
* down) cannot answer, and that is not the same fact as a camera with no scenes
|
|
31979
|
+
* configured. Fanned out per camera the difference was visible — one query
|
|
31980
|
+
* errored while the others resolved — and a batch that returned only the rows
|
|
31981
|
+
* it managed would have destroyed it, silently, by making an unreachable camera
|
|
31982
|
+
* indistinguishable from one that answered `monitors: []`.
|
|
31983
|
+
*
|
|
31984
|
+
* So: EVERY requested deviceId gets a row. `status: null` means "this camera
|
|
31985
|
+
* could not be read"; `status.monitors: []` means "read, and it has none".
|
|
31986
|
+
*/
|
|
31987
|
+
var SceneMonitorStatusForDeviceSchema = zod.z.object({
|
|
31988
|
+
deviceId: zod.z.number(),
|
|
31989
|
+
status: SceneMonitorStatusSchema.nullable()
|
|
31990
|
+
});
|
|
31738
31991
|
var sceneMonitorCapability = {
|
|
31739
31992
|
name: "scene-monitor",
|
|
31740
31993
|
scope: "device",
|
|
@@ -31744,6 +31997,22 @@ var sceneMonitorCapability = {
|
|
|
31744
31997
|
deviceTypes: [require_sleep.DeviceType.Camera],
|
|
31745
31998
|
methods: {
|
|
31746
31999
|
listScenes: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), SceneMonitorStatusSchema),
|
|
32000
|
+
/**
|
|
32001
|
+
* The same answer, for a SET of cameras, in one round trip.
|
|
32002
|
+
*
|
|
32003
|
+
* `/scenes` renders every camera and re-reads them on a 30s safety-net
|
|
32004
|
+
* poll behind the push slice. Fanned out client-side that was one query
|
|
32005
|
+
* per camera — 29 round trips through the browser, the hub and the
|
|
32006
|
+
* post-analysis runner every 30 seconds to read an in-memory map the
|
|
32007
|
+
* owner had already merged. The work is unchanged (`statusFor` per
|
|
32008
|
+
* device, all in-process at the owner); what collapses is the transport.
|
|
32009
|
+
*
|
|
32010
|
+
* A camera that cannot answer still gets a row, with `status: null` —
|
|
32011
|
+
* see {@link SceneMonitorStatusForDeviceSchema}. Never fewer rows than
|
|
32012
|
+
* ids: a caller that asked for twenty-nine and got twenty-seven cannot
|
|
32013
|
+
* tell which two are missing, or that any are.
|
|
32014
|
+
*/
|
|
32015
|
+
listScenesBatch: require_sleep.method(zod.z.object({ deviceIds: zod.z.array(zod.z.number()).min(1).max(200) }), zod.z.array(SceneMonitorStatusForDeviceSchema).readonly()),
|
|
31747
32016
|
createScene: require_sleep.method(zod.z.object({
|
|
31748
32017
|
deviceId: zod.z.number(),
|
|
31749
32018
|
label: zod.z.string(),
|
|
@@ -34052,6 +34321,27 @@ var CameraOccupancySnapshotSchema = zod.z.object({
|
|
|
34052
34321
|
stationaryObjects: zod.z.array(StationaryObjectSchema).readonly().optional()
|
|
34053
34322
|
});
|
|
34054
34323
|
/**
|
|
34324
|
+
* One camera's row in a `getCurrentSnapshotBatch` answer.
|
|
34325
|
+
*
|
|
34326
|
+
* THREE outcomes, and the single-camera method could only express two of them
|
|
34327
|
+
* because `snapshot: null` was already spoken for:
|
|
34328
|
+
*
|
|
34329
|
+
* - `read: 'read'`, `snapshot` present — the live occupancy reading.
|
|
34330
|
+
* - `read: 'read'`, `snapshot: null` — read, and this camera has no reading
|
|
34331
|
+
* yet: no frame since boot, and no parked-object registry to hydrate from.
|
|
34332
|
+
* - `read: 'unreadable'` — the owner could not answer for this
|
|
34333
|
+
* camera. `snapshot` is null, and it does NOT mean "nothing parked here".
|
|
34334
|
+
*
|
|
34335
|
+
* Collapsing the last two is the failure this field exists to prevent: a
|
|
34336
|
+
* hydration that threw would otherwise render as an empty Stationary section,
|
|
34337
|
+
* which is a definite claim about a camera nobody could read.
|
|
34338
|
+
*/
|
|
34339
|
+
var CameraOccupancySnapshotForDeviceSchema = zod.z.object({
|
|
34340
|
+
deviceId: zod.z.number(),
|
|
34341
|
+
read: zod.z.enum(["read", "unreadable"]),
|
|
34342
|
+
snapshot: CameraOccupancySnapshotSchema.nullable()
|
|
34343
|
+
});
|
|
34344
|
+
/**
|
|
34055
34345
|
* Time-series resolution. The history methods return one bucket per
|
|
34056
34346
|
* step over the requested range. Smaller resolutions cost more
|
|
34057
34347
|
* memory + bandwidth; bound to discrete steps so caller cannot ask
|
|
@@ -34108,6 +34398,20 @@ var zoneAnalyticsCapability = {
|
|
|
34108
34398
|
* (no inference result emitted since boot or since binding was
|
|
34109
34399
|
* activated). */
|
|
34110
34400
|
getCurrentSnapshot: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), CameraOccupancySnapshotSchema.nullable()),
|
|
34401
|
+
/**
|
|
34402
|
+
* The same snapshot, for a SET of cameras, in one round trip.
|
|
34403
|
+
*
|
|
34404
|
+
* The Events page's Stationary section polls this every 15s for every
|
|
34405
|
+
* selected camera. Fanned out client-side that is one query per camera to
|
|
34406
|
+
* read a `Map.get` at the owner — the answer costs nothing, the round trip
|
|
34407
|
+
* costs everything. Batched, N transports become one and the per-device
|
|
34408
|
+
* work is unchanged.
|
|
34409
|
+
*
|
|
34410
|
+
* Every requested deviceId gets a row, tagged `read` — see
|
|
34411
|
+
* {@link CameraOccupancySnapshotForDeviceSchema}. A camera the owner could
|
|
34412
|
+
* not answer for is `'unreadable'`, never an empty reading.
|
|
34413
|
+
*/
|
|
34414
|
+
getCurrentSnapshotBatch: require_sleep.method(zod.z.object({ deviceIds: zod.z.array(zod.z.number()).min(1).max(200) }), zod.z.array(CameraOccupancySnapshotForDeviceSchema).readonly()),
|
|
34111
34415
|
/** Time-series object count inside one zone. `className` optional —
|
|
34112
34416
|
* omit to count every class in the zone. */
|
|
34113
34417
|
getZoneHistory: require_sleep.method(zod.z.object({
|
|
@@ -41521,6 +41825,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
41521
41825
|
addonId: null,
|
|
41522
41826
|
access: "view"
|
|
41523
41827
|
},
|
|
41828
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
41829
|
+
capName: "pipeline-analytics",
|
|
41830
|
+
capScope: "device",
|
|
41831
|
+
addonId: null,
|
|
41832
|
+
access: "view"
|
|
41833
|
+
},
|
|
41524
41834
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
41525
41835
|
capName: "pipeline-analytics",
|
|
41526
41836
|
capScope: "device",
|
|
@@ -41539,6 +41849,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
41539
41849
|
addonId: null,
|
|
41540
41850
|
access: "view"
|
|
41541
41851
|
},
|
|
41852
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
41853
|
+
capName: "pipeline-analytics",
|
|
41854
|
+
capScope: "device",
|
|
41855
|
+
addonId: null,
|
|
41856
|
+
access: "view"
|
|
41857
|
+
},
|
|
41542
41858
|
"pipelineAnalytics.getMotionEvents": {
|
|
41543
41859
|
capName: "pipeline-analytics",
|
|
41544
41860
|
capScope: "device",
|
|
@@ -42715,6 +43031,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
42715
43031
|
addonId: null,
|
|
42716
43032
|
access: "view"
|
|
42717
43033
|
},
|
|
43034
|
+
"recording.reconcileLedgerAgainstDisk": {
|
|
43035
|
+
capName: "recording",
|
|
43036
|
+
capScope: "system",
|
|
43037
|
+
addonId: null,
|
|
43038
|
+
access: "create"
|
|
43039
|
+
},
|
|
42718
43040
|
"recording.refreshStorageLocationsForMigration": {
|
|
42719
43041
|
capName: "recording",
|
|
42720
43042
|
capScope: "system",
|
|
@@ -42841,6 +43163,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
42841
43163
|
addonId: null,
|
|
42842
43164
|
access: "view"
|
|
42843
43165
|
},
|
|
43166
|
+
"sceneMonitor.listScenesBatch": {
|
|
43167
|
+
capName: "scene-monitor",
|
|
43168
|
+
capScope: "device",
|
|
43169
|
+
addonId: null,
|
|
43170
|
+
access: "view"
|
|
43171
|
+
},
|
|
42844
43172
|
"sceneMonitor.recheckNow": {
|
|
42845
43173
|
capName: "scene-monitor",
|
|
42846
43174
|
capScope: "device",
|
|
@@ -44197,6 +44525,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
44197
44525
|
addonId: null,
|
|
44198
44526
|
access: "view"
|
|
44199
44527
|
},
|
|
44528
|
+
"zoneAnalytics.getCurrentSnapshotBatch": {
|
|
44529
|
+
capName: "zone-analytics",
|
|
44530
|
+
capScope: "device",
|
|
44531
|
+
addonId: null,
|
|
44532
|
+
access: "view"
|
|
44533
|
+
},
|
|
44200
44534
|
"zoneAnalytics.getUnzonedHistory": {
|
|
44201
44535
|
capName: "zone-analytics",
|
|
44202
44536
|
capScope: "device",
|
|
@@ -45449,6 +45783,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
45449
45783
|
form: "single",
|
|
45450
45784
|
optional: false
|
|
45451
45785
|
}],
|
|
45786
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
45787
|
+
name: "deviceId",
|
|
45788
|
+
form: "single",
|
|
45789
|
+
optional: true
|
|
45790
|
+
}],
|
|
45452
45791
|
"pipelineAnalytics.getGroup": [{
|
|
45453
45792
|
name: "deviceId",
|
|
45454
45793
|
form: "single",
|
|
@@ -45459,6 +45798,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
45459
45798
|
form: "single",
|
|
45460
45799
|
optional: false
|
|
45461
45800
|
}],
|
|
45801
|
+
"pipelineAnalytics.getKeyEventsBatch": [{
|
|
45802
|
+
name: "deviceIds",
|
|
45803
|
+
form: "array",
|
|
45804
|
+
optional: false
|
|
45805
|
+
}],
|
|
45462
45806
|
"pipelineAnalytics.getMotionEvents": [{
|
|
45463
45807
|
name: "deviceId",
|
|
45464
45808
|
form: "single",
|
|
@@ -45899,6 +46243,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
45899
46243
|
form: "single",
|
|
45900
46244
|
optional: false
|
|
45901
46245
|
}],
|
|
46246
|
+
"recording.reconcileLedgerAgainstDisk": [{
|
|
46247
|
+
name: "deviceId",
|
|
46248
|
+
form: "single",
|
|
46249
|
+
optional: true
|
|
46250
|
+
}],
|
|
45902
46251
|
"recording.relocateFootage": [{
|
|
45903
46252
|
name: "deviceId",
|
|
45904
46253
|
form: "single",
|
|
@@ -45964,6 +46313,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
45964
46313
|
form: "single",
|
|
45965
46314
|
optional: false
|
|
45966
46315
|
}],
|
|
46316
|
+
"sceneMonitor.listScenesBatch": [{
|
|
46317
|
+
name: "deviceIds",
|
|
46318
|
+
form: "array",
|
|
46319
|
+
optional: false
|
|
46320
|
+
}],
|
|
45967
46321
|
"sceneMonitor.recheckNow": [{
|
|
45968
46322
|
name: "deviceId",
|
|
45969
46323
|
form: "single",
|
|
@@ -46225,6 +46579,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
46225
46579
|
form: "single",
|
|
46226
46580
|
optional: false
|
|
46227
46581
|
}],
|
|
46582
|
+
"zoneAnalytics.getCurrentSnapshotBatch": [{
|
|
46583
|
+
name: "deviceIds",
|
|
46584
|
+
form: "array",
|
|
46585
|
+
optional: false
|
|
46586
|
+
}],
|
|
46228
46587
|
"zoneAnalytics.getUnzonedHistory": [{
|
|
46229
46588
|
name: "deviceId",
|
|
46230
46589
|
form: "single",
|
|
@@ -46379,6 +46738,7 @@ var SYSTEM_SCOPE_DEVICE_METHODS = [
|
|
|
46379
46738
|
"recording.readGopBytes",
|
|
46380
46739
|
"recording.readSegmentBytes",
|
|
46381
46740
|
"recording.readWindowBytes",
|
|
46741
|
+
"recording.reconcileLedgerAgainstDisk",
|
|
46382
46742
|
"recording.relocateFootage",
|
|
46383
46743
|
"recording.renderClip",
|
|
46384
46744
|
"recording.renderGif",
|
|
@@ -47309,6 +47669,7 @@ function createSystemProxy(api) {
|
|
|
47309
47669
|
relocateFootage: (input) => dispatch("recording", "relocateFootage", "mutation", input),
|
|
47310
47670
|
listRelocateJobs: (input) => dispatch("recording", "listRelocateJobs", "query", input),
|
|
47311
47671
|
getRelocateResidue: (input) => dispatch("recording", "getRelocateResidue", "query", input),
|
|
47672
|
+
reconcileLedgerAgainstDisk: (input) => dispatch("recording", "reconcileLedgerAgainstDisk", "mutation", input),
|
|
47312
47673
|
cancelRelocateJob: (input) => dispatch("recording", "cancelRelocateJob", "mutation", input),
|
|
47313
47674
|
planStorageRebalance: (input) => dispatch("recording", "planStorageRebalance", "query", input),
|
|
47314
47675
|
startStorageRebalance: (input) => dispatch("recording", "startStorageRebalance", "mutation", input)
|
|
@@ -51559,6 +51920,7 @@ exports.CameraDetectionStatusSchema = CameraDetectionStatusSchema;
|
|
|
51559
51920
|
exports.CameraMetricsSchema = CameraMetricsSchema;
|
|
51560
51921
|
exports.CameraMetricsWithDeviceIdSchema = CameraMetricsWithDeviceIdSchema;
|
|
51561
51922
|
exports.CameraMotionStatusSchema = CameraMotionStatusSchema;
|
|
51923
|
+
exports.CameraOccupancySnapshotForDeviceSchema = CameraOccupancySnapshotForDeviceSchema;
|
|
51562
51924
|
exports.CameraRecordingModeSchema = CameraRecordingModeSchema;
|
|
51563
51925
|
exports.CameraRecordingStatusSchema = CameraRecordingStatusSchema;
|
|
51564
51926
|
exports.CameraSourceStatusSchema = CameraSourceStatusSchema;
|
|
@@ -51809,6 +52171,12 @@ exports.LabelDefinitionSchema = LabelDefinitionSchema;
|
|
|
51809
52171
|
exports.LabelTierSchema = LabelTierSchema;
|
|
51810
52172
|
exports.LawnMowerActivitySchema = LawnMowerActivitySchema;
|
|
51811
52173
|
exports.LawnMowerControlStatusSchema = LawnMowerControlStatusSchema;
|
|
52174
|
+
exports.LedgerWalkDeviceReportSchema = LedgerWalkDeviceReportSchema;
|
|
52175
|
+
exports.LedgerWalkInputSchema = LedgerWalkInputSchema;
|
|
52176
|
+
exports.LedgerWalkRefusalSchema = LedgerWalkRefusalSchema;
|
|
52177
|
+
exports.LedgerWalkReportSchema = LedgerWalkReportSchema;
|
|
52178
|
+
exports.LedgerWalkSkipCountsSchema = LedgerWalkSkipCountsSchema;
|
|
52179
|
+
exports.LedgerWalkSkipReasonSchema = LedgerWalkSkipReasonSchema;
|
|
51812
52180
|
exports.LinkedDeviceSchema = LinkedDeviceSchema;
|
|
51813
52181
|
exports.LinkedDevicesModeSchema = LinkedDevicesModeSchema;
|
|
51814
52182
|
exports.ListGroupsPageSchema = ListGroupsPageSchema;
|
|
@@ -51891,6 +52259,7 @@ exports.MaskRectShapeSchema = MaskRectShapeSchema;
|
|
|
51891
52259
|
exports.MaskShapeKindSchema = MaskShapeKindSchema;
|
|
51892
52260
|
exports.MaskShapeSchema = MaskShapeSchema;
|
|
51893
52261
|
exports.MediaFileInfoSchema = MediaFileInfoSchema;
|
|
52262
|
+
exports.MediaFileKindEnum = MediaFileKindEnum;
|
|
51894
52263
|
exports.MediaFileRefSchema = MediaFileRefSchema;
|
|
51895
52264
|
exports.MediaFileSchema = MediaFileSchema;
|
|
51896
52265
|
exports.MediaPlayerRepeatSchema = MediaPlayerRepeatSchema;
|
|
@@ -52229,6 +52598,7 @@ exports.SceneConditionSchema = SceneConditionSchema;
|
|
|
52229
52598
|
exports.SceneConfirmSchema = SceneConfirmSchema;
|
|
52230
52599
|
exports.SceneMonitorSchema = SceneMonitorSchema;
|
|
52231
52600
|
exports.SceneMonitorStateSchema = SceneMonitorStateSchema;
|
|
52601
|
+
exports.SceneMonitorStatusForDeviceSchema = SceneMonitorStatusForDeviceSchema;
|
|
52232
52602
|
exports.SceneMonitorStatusSchema = SceneMonitorStatusSchema;
|
|
52233
52603
|
exports.SceneReferenceSchema = SceneReferenceSchema;
|
|
52234
52604
|
exports.SceneUnavailableSchema = SceneUnavailableSchema;
|