@camstack/addon-post-analysis 1.2.272 → 1.2.273
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{dist-4BOLDrB1.mjs → dist-PZVHV70g.mjs} +128 -171
- package/dist/{dist-BkBZcyAK.js → dist-m5QdWXqR.js} +127 -188
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/_stub.js +2 -2
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-D2l0wRbH.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-FrVPrAXW.mjs} +2 -2
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BhgGVqqB.mjs +26 -0
- package/dist/pipeline-analytics/{_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DJJiuYPX.mjs → _virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-mG9AoIzw.mjs} +1 -1
- package/dist/pipeline-analytics/{hostInit-DW0buByp.mjs → hostInit-jsytt0xF.mjs} +2 -2
- package/dist/pipeline-analytics/index.js +21 -455
- package/dist/pipeline-analytics/index.mjs +21 -455
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -4
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BePOftX5.mjs +0 -26
|
@@ -5359,7 +5359,7 @@ var ZodIssueCode = {
|
|
|
5359
5359
|
var ZodFirstPartyTypeKind;
|
|
5360
5360
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5361
5361
|
//#endregion
|
|
5362
|
-
//#region ../types/dist/sleep-
|
|
5362
|
+
//#region ../types/dist/sleep-CaB_hL5g.mjs
|
|
5363
5363
|
/**
|
|
5364
5364
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5365
5365
|
* window to float samples (D455).
|
|
@@ -5559,12 +5559,6 @@ Object.fromEntries([
|
|
|
5559
5559
|
icon: "circle-dot",
|
|
5560
5560
|
order: 40
|
|
5561
5561
|
},
|
|
5562
|
-
{
|
|
5563
|
-
id: "clips",
|
|
5564
|
-
label: "Clips",
|
|
5565
|
-
icon: "clapperboard",
|
|
5566
|
-
order: 41
|
|
5567
|
-
},
|
|
5568
5562
|
{
|
|
5569
5563
|
id: "engine",
|
|
5570
5564
|
label: "Inference Engine",
|
|
@@ -7591,6 +7585,8 @@ var EVENT_OWNER_TYPES = [
|
|
|
7591
7585
|
* nothing failing until a caller asked.
|
|
7592
7586
|
*/
|
|
7593
7587
|
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7588
|
+
/** The same list as a Zod enum, for the cap input that carries it. */
|
|
7589
|
+
var MediaPresenceOwnerKindSchema = _enum([...EVENT_OWNER_TYPES, "track"]);
|
|
7594
7590
|
var EVENT_OWNER_TYPE_SET = new Set(EVENT_OWNER_TYPES);
|
|
7595
7591
|
/** True when this key's owner is one of the three event tables. */
|
|
7596
7592
|
function isEventOwnerType(ownerType) {
|
|
@@ -8463,24 +8459,6 @@ var DetectionCatalogClassMapSchema = object({
|
|
|
8463
8459
|
preserveOriginal: boolean()
|
|
8464
8460
|
});
|
|
8465
8461
|
/**
|
|
8466
|
-
* THE canonical event-clip pad: the time window a single-timestamp analytics
|
|
8467
|
-
* event expands to when joined with footage (clip window = `[timestamp - preMs,
|
|
8468
|
-
* timestamp + postMs]`). Matches the admin-ui clip window (−5s/+10s).
|
|
8469
|
-
*
|
|
8470
|
-
* Every consumer derives from this ONE constant so event↔footage boundaries
|
|
8471
|
-
* agree everywhere (C1): today that is the `videoclips` default provider
|
|
8472
|
-
* (addon-post-analysis), which pads its clip windows with it. The recorder used
|
|
8473
|
-
* to pad in-RAM playback markers with it too; those markers had no reader
|
|
8474
|
-
* anywhere in the repo and were deleted on 2026-08-29.
|
|
8475
|
-
*
|
|
8476
|
-
* NOTE: this is a UI/JOIN convention, NOT the `events`-band keep/discard gate —
|
|
8477
|
-
* that uses the per-device `preBufferSec`/`postBufferSec` config.
|
|
8478
|
-
*/
|
|
8479
|
-
var EVENT_PAD_MS = {
|
|
8480
|
-
preMs: 5e3,
|
|
8481
|
-
postMs: 1e4
|
|
8482
|
-
};
|
|
8483
|
-
/**
|
|
8484
8462
|
* Numeric day-of-week: 0 = Sunday … 6 = Saturday (matches `Date.getDay`).
|
|
8485
8463
|
* Named `RecordingWeekday` to avoid collision with the string-union
|
|
8486
8464
|
* `Weekday` exported from `interfaces/timezones.ts`.
|
|
@@ -8633,20 +8611,7 @@ var RecordingBandSchema = object({
|
|
|
8633
8611
|
preBufferSec: number().min(0).optional(),
|
|
8634
8612
|
postBufferSec: number().min(0).optional()
|
|
8635
8613
|
});
|
|
8636
|
-
|
|
8637
|
-
* Adjacent recorded ranges closer than this belong to the SAME videoclip visit.
|
|
8638
|
-
*
|
|
8639
|
-
* This is NOT the recorder calendar merge (`RANGE_MERGE_GAP_MS = 5s`). That
|
|
8640
|
-
* threshold is for the timeline bar, which must show exact holes — including
|
|
8641
|
-
* the ~8s GOP/keyframe rolls measured on events-mode cameras (dispensa 1438,
|
|
8642
|
-
* 2026-08-16). A videoclip is the events-mode keep-window (writer session),
|
|
8643
|
-
* whose idle bound is `postBufferSec`. Using that default (30s) glues those
|
|
8644
|
-
* intra-visit holes without joining visits hours apart.
|
|
8645
|
-
*
|
|
8646
|
-
* Segments stay the source of truth on disk (`startMs-durMs-bytes.m4s`); a
|
|
8647
|
-
* visit is derived, not a second copy of the files.
|
|
8648
|
-
*/
|
|
8649
|
-
var VISIT_MERGE_GAP_MS = { postBufferSec: 30 }.postBufferSec * 1e3;
|
|
8614
|
+
({ postBufferSec: 30 }).postBufferSec * 1e3;
|
|
8650
8615
|
/**
|
|
8651
8616
|
* Per-device retention overrides. Every field is optional; an unset or `0`
|
|
8652
8617
|
* value inherits the node-wide recorder default. Only footage-lifetime limits
|
|
@@ -14910,8 +14875,6 @@ method(object({
|
|
|
14910
14875
|
deviceId: number(),
|
|
14911
14876
|
capName: string(),
|
|
14912
14877
|
wrapperAddonId: string(),
|
|
14913
|
-
/** The `ClipSource.source` id to toggle. Absent = all of the addon's. */
|
|
14914
|
-
sourceId: string().optional(),
|
|
14915
14878
|
active: boolean()
|
|
14916
14879
|
}), _void(), {
|
|
14917
14880
|
kind: "mutation",
|
|
@@ -23218,6 +23181,35 @@ var pipelineAnalyticsCapability = {
|
|
|
23218
23181
|
deviceId: number()
|
|
23219
23182
|
}), array(MediaFileInfoSchema).readonly()),
|
|
23220
23183
|
/**
|
|
23184
|
+
* Which of `ownerIds` hold at least ONE media row — an INDEX read, never a
|
|
23185
|
+
* blob read, and the LICENCE `videoclips` needs to publish a `thumbnail`.
|
|
23186
|
+
*
|
|
23187
|
+
* The event-media URL is stamped from a template for every event in the
|
|
23188
|
+
* system, so "the plane is up" was being served as "there are bytes": 64 of
|
|
23189
|
+
* one camera's 179 clips pointed at a 404 (device 3836, 2026-08-17). This
|
|
23190
|
+
* is the question that turns the stamp into a claim.
|
|
23191
|
+
*
|
|
23192
|
+
* It is on the WIRE because the clip source is registered by the addon that
|
|
23193
|
+
* owns the FOOTAGE, not by this one (D560) — the probe used to be an
|
|
23194
|
+
* in-process `MediaStore` read. One call per OWNER KIND, never one per
|
|
23195
|
+
* owner: that N+1 is what `MediaStore.ownersWithMedia` was written to
|
|
23196
|
+
* prevent, and crossing a process boundary makes it worse, not better.
|
|
23197
|
+
* `ownerIds` is bounded at the same 5 000 the annotation fetch is bounded
|
|
23198
|
+
* at, so one pathological camera-day cannot mint an unbounded request.
|
|
23199
|
+
*
|
|
23200
|
+
* THROWS rather than answering partially. A probe that quietly
|
|
23201
|
+
* under-reports reads as "these owners have nothing" and the caller drops
|
|
23202
|
+
* thumbnails that exist — the opposite failure to the one above, and
|
|
23203
|
+
* equally invisible.
|
|
23204
|
+
*
|
|
23205
|
+
* `deviceId` is the authorization subject, exactly as on `getEventMedia`.
|
|
23206
|
+
*/
|
|
23207
|
+
ownersWithMedia: method(object({
|
|
23208
|
+
deviceId: number(),
|
|
23209
|
+
ownerKind: MediaPresenceOwnerKindSchema,
|
|
23210
|
+
ownerIds: array(string()).max(5e3)
|
|
23211
|
+
}), array(string()).readonly()),
|
|
23212
|
+
/**
|
|
23221
23213
|
* Search object events by text query using CLIP cosine similarity.
|
|
23222
23214
|
* Encodes `text` via the `embedding-encoder` cap, queries the
|
|
23223
23215
|
* `ObjectEmbeddingStore` with optional prefilters, ranks all matching
|
|
@@ -26291,6 +26283,18 @@ method(VectorDeclareIndexInputSchema, _void(), {
|
|
|
26291
26283
|
kind: "mutation",
|
|
26292
26284
|
auth: "admin"
|
|
26293
26285
|
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
26286
|
+
_enum([
|
|
26287
|
+
"queue-full",
|
|
26288
|
+
"camera-backoff",
|
|
26289
|
+
"sleeping",
|
|
26290
|
+
"camera-refused",
|
|
26291
|
+
"no-keyframe",
|
|
26292
|
+
"no-catalog-row",
|
|
26293
|
+
"unsupported",
|
|
26294
|
+
"unknown-device",
|
|
26295
|
+
"uid-missing"
|
|
26296
|
+
]);
|
|
26297
|
+
_enum(["deferred", "final"]);
|
|
26294
26298
|
var ClipSchema = object({
|
|
26295
26299
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
26296
26300
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -26441,7 +26445,25 @@ var ClipSchema = object({
|
|
|
26441
26445
|
*/
|
|
26442
26446
|
playable: boolean().optional(),
|
|
26443
26447
|
/** Why {@link playable} is false, verbatim (`no-file-for-window`). */
|
|
26444
|
-
unplayableReason: string().optional()
|
|
26448
|
+
unplayableReason: string().optional(),
|
|
26449
|
+
/**
|
|
26450
|
+
* This clip is STILL BEING WRITTEN, so {@link ClipSchema.timeRange}`.endMs`
|
|
26451
|
+
* is not its end.
|
|
26452
|
+
*
|
|
26453
|
+
* Absent — the common case — means the row is closed and its `endMs` is the
|
|
26454
|
+
* end of the recording. Present and `true` means the source told us the file
|
|
26455
|
+
* has no end yet, and the `endMs` we carry is whatever the camera's index
|
|
26456
|
+
* entry happened to hold: on a Reolink E1 Outdoor PoE (592, measured
|
|
26457
|
+
* 2026-09-20) the newest file `…_192927_000000_…_0.mp4` reported an `endTime`
|
|
26458
|
+
* of 19:29:56 and STILL reported it eight minutes later, while the file went
|
|
26459
|
+
* on growing. A surface that drew 29 s there was lying about a clip that
|
|
26460
|
+
* plays for minutes, on the one row the operator looks at first.
|
|
26461
|
+
*
|
|
26462
|
+
* `endMs` is deliberately still a number: it is the best bound anything has
|
|
26463
|
+
* for a mint window or a byte fetch, and every consumer already requires it.
|
|
26464
|
+
* This flag says what it is WORTH, and a duration is not drawn from it.
|
|
26465
|
+
*/
|
|
26466
|
+
inProgress: boolean().optional()
|
|
26445
26467
|
});
|
|
26446
26468
|
var ClipPlaybackSchema = object({
|
|
26447
26469
|
/**
|
|
@@ -26524,143 +26546,67 @@ var ClipSourceSchema = object({
|
|
|
26524
26546
|
* alternative — a `native:reolink:* → provider-reolink` table inside the
|
|
26525
26547
|
* widget — is a second authority on provider identity living in the one
|
|
26526
26548
|
* package with no business knowing it, wrong the day a third source appears
|
|
26527
|
-
* (D557). One addon may serve SEVERAL sources
|
|
26528
|
-
*
|
|
26529
|
-
*
|
|
26530
|
-
*
|
|
26549
|
+
* (D557). One addon may serve SEVERAL sources, which is why the per-device
|
|
26550
|
+
* switch is keyed by SOURCE and not by this (D555) — `addon-provider-reolink`
|
|
26551
|
+
* served a hub child two of them until the two views were measured to be one
|
|
26552
|
+
* store read twice (D555) and then read ONE way (D565).
|
|
26531
26553
|
*
|
|
26532
26554
|
* Optional for version skew only. The collection dispatcher stamps it from
|
|
26533
26555
|
* the registry, so a row that travelled through the fan-out carries the
|
|
26534
26556
|
* authoritative id whatever the provider filled in.
|
|
26535
26557
|
*/
|
|
26536
26558
|
addonId: string().optional(),
|
|
26559
|
+
availability: ClipSourceAvailabilitySchema
|
|
26560
|
+
});
|
|
26561
|
+
DeviceType.Camera, method(object({
|
|
26562
|
+
deviceId: number(),
|
|
26563
|
+
since: number(),
|
|
26564
|
+
until: number(),
|
|
26565
|
+
limit: number().int().positive().optional(),
|
|
26566
|
+
/**
|
|
26567
|
+
* WHICH provider to ask — the `addonId` a {@link ClipSourceSchema} row
|
|
26568
|
+
* carries, never a source id and never a list.
|
|
26569
|
+
*
|
|
26570
|
+
* Absent means the device's BOUND provider, which is CamStack on every
|
|
26571
|
+
* camera today because that is what `deviceManager.getBindings`
|
|
26572
|
+
* answers with. A provider the device is not bound to is refused by
|
|
26573
|
+
* name rather than answered by another one (D552's
|
|
26574
|
+
* `rejectUnresolvedAddonPin` rule).
|
|
26575
|
+
*
|
|
26576
|
+
* It replaced `sources?: string[]`, a VIEW filter over source ids that
|
|
26577
|
+
* assumed the answer was a fan-out over everything a camera has. The
|
|
26578
|
+
* operator settled otherwise on 2026-09-20 — *"il get videoclips
|
|
26579
|
+
* prendere un provider opzionale, di default va su camstack"*,
|
|
26580
|
+
* *"l'utilizzatore è uno solo"* — so the list is asked of one provider
|
|
26581
|
+
* at a time and there is nothing to filter out of it.
|
|
26582
|
+
*/
|
|
26583
|
+
provider: string().optional()
|
|
26584
|
+
}), array(ClipSchema).readonly(), {
|
|
26585
|
+
kind: "query",
|
|
26586
|
+
auth: "protected"
|
|
26587
|
+
}), method(object({ deviceId: number() }), array(ClipSourceSchema).readonly(), {
|
|
26588
|
+
kind: "query",
|
|
26589
|
+
auth: "protected"
|
|
26590
|
+
}), method(object({
|
|
26591
|
+
deviceId: number(),
|
|
26592
|
+
clipId: string(),
|
|
26537
26593
|
/**
|
|
26538
|
-
* Which
|
|
26539
|
-
*
|
|
26540
|
-
*
|
|
26541
|
-
*
|
|
26542
|
-
*
|
|
26543
|
-
* CHOICE is the provider's, made from what the camera is, and is never a row
|
|
26544
|
-
* the operator has to understand; but it is REPORTED, because a source that
|
|
26545
|
-
* silently reads a different API on two cameras and then behaves differently
|
|
26546
|
-
* is the thing nobody can debug later. Absent when the source has only one
|
|
26547
|
-
* way to read its store.
|
|
26548
|
-
*/
|
|
26549
|
-
via: string().optional(),
|
|
26550
|
-
availability: ClipSourceAvailabilitySchema,
|
|
26551
|
-
/**
|
|
26552
|
-
* The operator switched this source OFF for this camera.
|
|
26553
|
-
*
|
|
26554
|
-
* Deliberately NOT a member of {@link ClipSourceAvailabilitySchema}'s
|
|
26555
|
-
* vocabulary. That enum models what the source CAN do — a sleeping camera, an
|
|
26556
|
-
* unmounted card, an index that disagrees with its own calendar — and a
|
|
26557
|
-
* switched-off source could answer perfectly well; the operator decided it
|
|
26558
|
-
* should not. Folding the choice in is how `disabled` and `broken` stop being
|
|
26559
|
-
* distinguishable, which is the D62 rule this repo has already paid for twice:
|
|
26560
|
-
* an off switch is REPORTED off (`CameraStatus.switchedOff`, the same word),
|
|
26561
|
-
* and disabled must never look like broken. It is also what lets every
|
|
26562
|
-
* exhaustive consumer of the availability enum keep compiling.
|
|
26563
|
-
*
|
|
26564
|
-
* A switched-off source contributes NO clips (`listClips` never calls it) and
|
|
26565
|
-
* its row carries no `catalogAsOf`: nothing confirms a catalog it is not
|
|
26566
|
-
* allowed to serve, and a frozen age that can only grow draws a stalling
|
|
26567
|
-
* source rather than an off switch.
|
|
26568
|
-
*
|
|
26569
|
-
* The row survives BECAUSE it is the control the operator switches the source
|
|
26570
|
-
* back on from — D554 decision 4's rule ("a source that cannot answer
|
|
26571
|
-
* produces a ROW, not an absence") applied to the one case D556 carved out of
|
|
26572
|
-
* it, and D557's own kept property ("a source is never hidden, only its
|
|
26573
|
-
* rows"). Absent means on.
|
|
26574
|
-
*
|
|
26575
|
-
* A provider never sets this — like {@link ClipSourceSchema.addonId} it is
|
|
26576
|
-
* stamped by the collection dispatcher, which holds the registry's projection
|
|
26577
|
-
* of the persisted authority (D556) and is the only place that knows it.
|
|
26578
|
-
*/
|
|
26579
|
-
switchedOff: boolean().optional()
|
|
26580
|
-
});
|
|
26581
|
-
var videoclipsCapability = {
|
|
26582
|
-
name: "videoclips",
|
|
26583
|
-
scope: "device",
|
|
26584
|
-
mode: "collection",
|
|
26585
|
-
kind: "wrapper",
|
|
26586
|
-
defaultActive: true,
|
|
26587
|
-
/** A clip is a window over a camera's footage — the cap is meaningless on a
|
|
26588
|
-
* sensor, a button or an event emitter, and the `defaultActive` auto-bind
|
|
26589
|
-
* reads this to decide which devices it may claim. */
|
|
26590
|
-
deviceTypes: [DeviceType.Camera],
|
|
26591
|
-
/**
|
|
26592
|
-
* The Clips section of a camera's device details is FRAMEWORK-DERIVED (D14):
|
|
26593
|
-
* the aggregator turns this declaration into the `type:'widget'` section and
|
|
26594
|
-
* `DeviceDetail.tsx` is never edited. `videoclips` is the first WRAPPER cap
|
|
26595
|
-
* to declare one — every previous `host/` widget cap is `deviceNative` — so
|
|
26596
|
-
* `device-config-widget-wrapped-binding.spec.ts` pins that a `kind:'wrapped'`
|
|
26597
|
-
* binding entry derives the same section a native one does.
|
|
26594
|
+
* Which twin to serve, on the ONE quality scale the system already has
|
|
26595
|
+
* (`CamProfileSchema`). `low | mid` → the sub file, `high` → the main
|
|
26596
|
+
* twin; both ids are already on the row so this never re-searches the
|
|
26597
|
+
* camera. Absent means the provider's own default (the sub file, which
|
|
26598
|
+
* every source is measured to hold).
|
|
26598
26599
|
*
|
|
26599
|
-
* `
|
|
26600
|
-
*
|
|
26601
|
-
* `
|
|
26600
|
+
* `auto` is deliberately NOT accepted here: a stored file has no
|
|
26601
|
+
* broker session, so the adaptive tier cannot be resolved for it. The
|
|
26602
|
+
* viewer resolves `auto` to a profile the same way live does, before
|
|
26603
|
+
* it calls (D549 15).
|
|
26602
26604
|
*/
|
|
26603
|
-
|
|
26604
|
-
|
|
26605
|
-
|
|
26606
|
-
|
|
26607
|
-
|
|
26608
|
-
label: "Clips",
|
|
26609
|
-
order: 0
|
|
26610
|
-
} },
|
|
26611
|
-
methods: {
|
|
26612
|
-
listClips: method(object({
|
|
26613
|
-
deviceId: number(),
|
|
26614
|
-
since: number(),
|
|
26615
|
-
until: number(),
|
|
26616
|
-
limit: number().int().positive().optional(),
|
|
26617
|
-
/**
|
|
26618
|
-
* View filter over {@link ClipSourceSchema.source} values — the
|
|
26619
|
-
* picker's selection, forwarded so a provider need not list what
|
|
26620
|
-
* nobody is looking at. ABSENT means every source this camera has,
|
|
26621
|
-
* which is the honest default for a surface whose whole point is that
|
|
26622
|
-
* nothing is hidden (D554 3). A provider with one source ignores it.
|
|
26623
|
-
*/
|
|
26624
|
-
sources: array(string()).optional()
|
|
26625
|
-
}), array(ClipSchema).readonly(), {
|
|
26626
|
-
kind: "query",
|
|
26627
|
-
auth: "protected"
|
|
26628
|
-
}),
|
|
26629
|
-
/**
|
|
26630
|
-
* The sources this camera has, WITH the reason any of them cannot answer.
|
|
26631
|
-
*
|
|
26632
|
-
* Asked separately from `listClips` because an empty clip list is
|
|
26633
|
-
* ambiguous and this is the only place the ambiguity is resolved: every
|
|
26634
|
-
* bound provider contributes its own rows, and a provider that could not
|
|
26635
|
-
* be reached at all still produces one row saying so. A surface that draws
|
|
26636
|
-
* "no clips" without reading this is drawing a guess.
|
|
26637
|
-
*/
|
|
26638
|
-
listSources: method(object({ deviceId: number() }), array(ClipSourceSchema).readonly(), {
|
|
26639
|
-
kind: "query",
|
|
26640
|
-
auth: "protected"
|
|
26641
|
-
}),
|
|
26642
|
-
getClipPlayback: method(object({
|
|
26643
|
-
deviceId: number(),
|
|
26644
|
-
clipId: string(),
|
|
26645
|
-
/**
|
|
26646
|
-
* Which twin to serve, on the ONE quality scale the system already has
|
|
26647
|
-
* (`CamProfileSchema`). `low | mid` → the sub file, `high` → the main
|
|
26648
|
-
* twin; both ids are already on the row so this never re-searches the
|
|
26649
|
-
* camera. Absent means the provider's own default (the sub file, which
|
|
26650
|
-
* every source is measured to hold).
|
|
26651
|
-
*
|
|
26652
|
-
* `auto` is deliberately NOT accepted here: a stored file has no
|
|
26653
|
-
* broker session, so the adaptive tier cannot be resolved for it. The
|
|
26654
|
-
* viewer resolves `auto` to a profile the same way live does, before
|
|
26655
|
-
* it calls (D549 15).
|
|
26656
|
-
*/
|
|
26657
|
-
profile: CamProfileSchema.optional()
|
|
26658
|
-
}), ClipPlaybackSchema, {
|
|
26659
|
-
kind: "query",
|
|
26660
|
-
auth: "protected"
|
|
26661
|
-
})
|
|
26662
|
-
}
|
|
26663
|
-
};
|
|
26605
|
+
profile: CamProfileSchema.optional()
|
|
26606
|
+
}), ClipPlaybackSchema, {
|
|
26607
|
+
kind: "query",
|
|
26608
|
+
auth: "protected"
|
|
26609
|
+
});
|
|
26664
26610
|
/**
|
|
26665
26611
|
* Optional client-side hints sent at session creation to help the provider
|
|
26666
26612
|
* pick the best native source. All fields optional — a viewer that knows
|
|
@@ -41965,6 +41911,12 @@ Object.freeze({
|
|
|
41965
41911
|
addonId: null,
|
|
41966
41912
|
access: "view"
|
|
41967
41913
|
},
|
|
41914
|
+
"pipelineAnalytics.ownersWithMedia": {
|
|
41915
|
+
capName: "pipeline-analytics",
|
|
41916
|
+
capScope: "device",
|
|
41917
|
+
addonId: null,
|
|
41918
|
+
access: "view"
|
|
41919
|
+
},
|
|
41968
41920
|
"pipelineAnalytics.pauseForStorageMigration": {
|
|
41969
41921
|
capName: "pipeline-analytics",
|
|
41970
41922
|
capScope: "device",
|
|
@@ -45865,6 +45817,11 @@ Object.freeze({
|
|
|
45865
45817
|
form: "single",
|
|
45866
45818
|
optional: false
|
|
45867
45819
|
}],
|
|
45820
|
+
"pipelineAnalytics.ownersWithMedia": [{
|
|
45821
|
+
name: "deviceId",
|
|
45822
|
+
form: "single",
|
|
45823
|
+
optional: false
|
|
45824
|
+
}],
|
|
45868
45825
|
"pipelineAnalytics.proposeRetrainAnnotations": [{
|
|
45869
45826
|
name: "deviceId",
|
|
45870
45827
|
form: "single",
|
|
@@ -47857,4 +47814,4 @@ function vectorDimFromBase64(encoded) {
|
|
|
47857
47814
|
return Math.floor(Buffer.from(encoded, "base64").byteLength / 4);
|
|
47858
47815
|
}
|
|
47859
47816
|
//#endregion
|
|
47860
|
-
export {
|
|
47817
|
+
export { TrackSourceSchema as $, literal as $t, NcRuleInputSchema as A, resolveLocationMode as At, OpsLogEntrySchema as B, CamProfileSchema as Bt, MediaFileKindEnum as C, occupancyScope as Ct, NC_SNOOZE_MAX_MINUTES as D, plateGalleryCapability as Dt, NC_DEFAULT_SNOOZE_MINUTES as E, pipelineAnalyticsCapability as Et, NcSnoozeInputSchema as F, systemEventFilterApplies as Ft, SCENE_DEFAULT_ANCHOR_THRESHOLD as G, hydrateSchema as Gt, RECORDING_EXPORT_MAX_READ_BYTES as H, createEvent as Ht, NcSnoozeSchema as I, vectorDimFromBase64 as It, SceneMonitorSchema as J, sleep as Jt, SCENE_DEFAULT_UNCOVERED_POLICY as K, isDeviceScopedCap as Kt, NcSnoozeSuppressedSchema as L, zoneAnalyticsCapability as Lt, NcRuleSchema as M, sceneMonitorCapability as Mt, NcRuleTargetSchema as N, storageOccupancyCapability as Nt, NC_TAXONOMY as O, readDeviceStateFrom as Ot, NcScheduleSchema as P, subKindsOf as Pt, TimelapseRuleSchema as Q, discriminatedUnion as Qt, NcSystemEventKindSchema as R, errMsg as Rt, MOTION_CLOSE_AFTER_MS as S, notificationRulesCapability as St, NC_CONDITION_CATALOG as T, pickClusterStepModels as Tt, RetrainStatusSchema as U, customAction as Ut, PoolMemoryWatchdog as V, DeviceType as Vt, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS as W, defineCustomActions as Wt, TimelapseRuleInputSchema as X, array as Xt, TIMELAPSE_DENSE_FLOOR_SEC as Y, _enum as Yt, TimelapseRulePatchSchema as Z, boolean as Zt, FailureCounters as _, isMediaOwnerType as _t, CLUSTER_MODEL_SCOPED_STEPS as a, unknown as an, buildEventKindDescriptor as at, MAX_BIRTH_DECISION_RECORDS as b, kebabToCamel as bt, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as c, embeddingEncoderCapability as ct, DETECTION_PIPELINE_CAP_NAME as d, evictionPolicyOfLocation as dt, number as en, addonWidgetsSourceCapability as et, DeclaredDevices as f, faceGalleryCapability as ft, FULL_IMAGE_BBOX as g, isEventOwnerType as gt, FIRST_LEVEL_MACRO_CLASSES as h, isDetectionMacroClass as ht, BirthDecisionRecordSchema as i, string as in, audioModeOf as it, NcRulePatchSchema as j, resolvePoolMemoryPolicy as jt, NcConditionDescriptorSchema as k, readTimelapseGeneratedAt as kt, DEFAULT_TIMELAPSE_PREVIEW_TEXT as l, encodeVectorBase64 as lt, EVENT_OWNER_TYPES as m, hfModelUrl as mt, ArchivedDebugNoteSchema as n, partialRecord as nn, assertTimelapseCadences as nt, COCO_TO_MACRO as o, EventCategory as on, cosineSimilarity as ot, EVENT_KIND_BY_CAP as p, failureContributionCapability as pt, SCENE_DIVERGED as q, nodePin as qt, BaseDevice as r, record as rn, audioMetricsCapability as rt, DEFAULT_EVENT_COLOR as s, deriveRecordingMode as st, AUDIO_MACRO_LABELS as t, object as tn, alarmPanelCapability as tt, DETECTION_MACRO_CLASSES as u, evaluateSensorEdge as ut, LabelAttributionSchema as v, isScheduleActive as vt, NC_ALARM_SYSTEM_EVENT_KINDS as w, parseProcStatus as wt, MAX_BIRTH_LATENCY_PROXY_MS as x, mayWriteToLocation as xt, MAX_ARCHIVED_DEBUG_NOTES as y, isSourceCap as yt, NcTaxonomySchema as z, BaseAddon as zt };
|