@camstack/system 1.2.31 → 1.2.33
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/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
- package/dist/builtins/alerts/alerts.addon.d.ts +10 -0
- package/dist/builtins/alerts/alerts.addon.js +60 -1
- package/dist/builtins/alerts/alerts.addon.mjs +60 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
- package/dist/builtins/console-logging/index.js +1 -1
- package/dist/builtins/console-logging/index.mjs +1 -1
- package/dist/builtins/device-manager/device-manager.addon.js +1 -1
- package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
- package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
- package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
- package/dist/builtins/hub-forwarder/index.js +1 -1
- package/dist/builtins/hub-forwarder/index.mjs +1 -1
- package/dist/builtins/liveness-monitor/index.d.ts +2 -0
- package/dist/builtins/liveness-monitor/index.js +6 -0
- package/dist/builtins/liveness-monitor/index.mjs +2 -0
- package/dist/builtins/liveness-monitor/liveness-checks.d.ts +67 -0
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.d.ts +32 -0
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +216 -0
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +212 -0
- package/dist/builtins/local-auth/local-auth.addon.js +1 -1
- package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
- package/dist/builtins/local-network/local-network.addon.js +1 -1
- package/dist/builtins/local-network/local-network.addon.mjs +1 -1
- package/dist/builtins/loki-logging/index.js +1 -1
- package/dist/builtins/loki-logging/index.mjs +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
- package/dist/builtins/platform-probe/index.js +1 -1
- package/dist/builtins/platform-probe/index.mjs +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
- package/dist/builtins/snapshot/index.js +1 -1
- package/dist/builtins/snapshot/index.mjs +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -1
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
- package/dist/builtins/system-config/system-config.addon.js +1 -1
- package/dist/builtins/system-config/system-config.addon.mjs +1 -1
- package/dist/builtins/winston-logging/index.js +1 -1
- package/dist/builtins/winston-logging/index.mjs +1 -1
- package/dist/{dist-CDv5YTHQ.js → dist-CvmFWwEo.js} +191 -5
- package/dist/{dist-CNmXITJ-.mjs → dist-Q3N47mdR.mjs} +191 -5
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -1
- package/dist/index.mjs +4 -2
- package/package.json +10 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
let zod = require("zod");
|
|
2
|
-
//#region ../types/dist/event-category-
|
|
2
|
+
//#region ../types/dist/event-category-41fKf-q9.mjs
|
|
3
3
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4
4
|
EventCategory["SystemBoot"] = "system.boot";
|
|
5
5
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -59,6 +59,26 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
59
59
|
*/
|
|
60
60
|
EventCategory["AddonRetryScheduled"] = "addon.retry-scheduled";
|
|
61
61
|
/**
|
|
62
|
+
* A liveness invariant of this node is false — it has no devices, every
|
|
63
|
+
* camera is offline, or a camera that was recording has stopped producing
|
|
64
|
+
* segments. Emitted by the `liveness-monitor` builtin, once per fault (the
|
|
65
|
+
* `findingId` is stable across ticks), only after its boot grace period.
|
|
66
|
+
* AlertCenter raises a persistent operator-visible alert.
|
|
67
|
+
*
|
|
68
|
+
* It exists because on 2026-08-03 the hub ran four hours with zero devices
|
|
69
|
+
* and zero recordings while every surface stayed quiet.
|
|
70
|
+
*
|
|
71
|
+
* Payload: `{ findingId, severity, title, message, deviceId? }`.
|
|
72
|
+
*/
|
|
73
|
+
EventCategory["SystemLivenessFailed"] = "system.liveness-failed";
|
|
74
|
+
/**
|
|
75
|
+
* A previously reported liveness fault is true again. AlertCenter dismisses
|
|
76
|
+
* the matching `SystemLivenessFailed` alert.
|
|
77
|
+
*
|
|
78
|
+
* Payload: `{ findingId }`.
|
|
79
|
+
*/
|
|
80
|
+
EventCategory["SystemLivenessRecovered"] = "system.liveness-recovered";
|
|
81
|
+
/**
|
|
62
82
|
* Monitor is attempting to reload a failed addon NOW. UI uses this
|
|
63
83
|
* to show a spinner during the retry attempt. Same transient nature
|
|
64
84
|
* as AddonRetryScheduled.
|
|
@@ -5593,6 +5613,14 @@ var NcMediaPolicySchema = zod.z.object({
|
|
|
5593
5613
|
clipPreRollSec: zod.z.number().int().min(0).max(30).optional(),
|
|
5594
5614
|
clipPostRollSec: zod.z.number().int().min(0).max(30).optional(),
|
|
5595
5615
|
/**
|
|
5616
|
+
* Playback rate of the attached gif / clip. Absent = 2x.
|
|
5617
|
+
*
|
|
5618
|
+
* A notification clip is GLANCED at on a lock screen, not watched: at real
|
|
5619
|
+
* time an eight-second passage is eight seconds of the recipient's attention
|
|
5620
|
+
* and twice the bytes. 1 is real time for the operator who wants it.
|
|
5621
|
+
*/
|
|
5622
|
+
clipSpeed: zod.z.number().min(1).max(8).optional(),
|
|
5623
|
+
/**
|
|
5596
5624
|
* Which stream profile the footage is cut from. Absent = the CHEAPEST
|
|
5597
5625
|
* assigned profile: a notification is watched on a phone, so the 4K
|
|
5598
5626
|
* rendition would burn CPU to produce a file the client downscales anyway.
|
|
@@ -5664,7 +5692,21 @@ var NcRuleInputSchema = zod.z.object({
|
|
|
5664
5692
|
* behaviour, visible to all, read-only in the viewer). Present = personal
|
|
5665
5693
|
* rule owned by this userId. Server-stamped; never trusted from a client.
|
|
5666
5694
|
*/
|
|
5667
|
-
ownerUserId: zod.z.string().optional()
|
|
5695
|
+
ownerUserId: zod.z.string().optional(),
|
|
5696
|
+
/**
|
|
5697
|
+
* May a non-admin snooze this rule for EVERYONE, not just themselves?
|
|
5698
|
+
*
|
|
5699
|
+
* A snooze is personal by default — it silences the person who set it. This
|
|
5700
|
+
* opts THIS rule into the "the gardener is here all afternoon" case, where
|
|
5701
|
+
* silencing the camera for the whole household is legitimate. It silences
|
|
5702
|
+
* other people, so it is off unless a rule deliberately allows it.
|
|
5703
|
+
*
|
|
5704
|
+
* `.optional()`, deliberately NOT `.default()`: a Zod default does not run on
|
|
5705
|
+
* the addon cap path (three production failures in one day), so absent is
|
|
5706
|
+
* read as `false` by {@link canSetGlobal} in the engine. Admins are not bound
|
|
5707
|
+
* by this flag — see the scope rules on that function.
|
|
5708
|
+
*/
|
|
5709
|
+
snoozeAllowGlobal: zod.z.boolean().optional()
|
|
5668
5710
|
});
|
|
5669
5711
|
/**
|
|
5670
5712
|
* Partial patch for `updateRule` — any subset of the input fields, plus the
|
|
@@ -5749,7 +5791,28 @@ var NcConditionDescriptorSchema = zod.z.object({
|
|
|
5749
5791
|
/** Which delivery kinds the condition applies to. */
|
|
5750
5792
|
appliesTo: zod.z.array(NcDeliverySchema),
|
|
5751
5793
|
phase: zod.z.string(),
|
|
5752
|
-
description: zod.z.string().optional()
|
|
5794
|
+
description: zod.z.string().optional(),
|
|
5795
|
+
/**
|
|
5796
|
+
* The CHOICES for a single-choice widget (`sourceSelect`, `crossingSelect`,
|
|
5797
|
+
* `packagePhase`, …), served with the descriptor.
|
|
5798
|
+
*
|
|
5799
|
+
* Before this the descriptor said which widget to render and not what to put
|
|
5800
|
+
* in it, so every option list lived in three places: this file's enums, the
|
|
5801
|
+
* admin's `NC_*_OPTIONS` and the viewer's `NC_*_VALUES`. That triple mirror
|
|
5802
|
+
* is the drift that emptied the viewer's rule editor on 2026-08-04 — the app
|
|
5803
|
+
* mirrors the cap by hand, so it is only ever as current as its last build.
|
|
5804
|
+
*
|
|
5805
|
+
* With the options on the wire, a condition of an EXISTING `valueType` costs
|
|
5806
|
+
* zero client changes. Clients keep a local fallback for an older hub that
|
|
5807
|
+
* does not send them; absent here is "use your own list", not "no choices".
|
|
5808
|
+
*/
|
|
5809
|
+
options: zod.z.array(zod.z.object({
|
|
5810
|
+
/** Written to the rule verbatim. `''` means the ABSENT state. */
|
|
5811
|
+
value: zod.z.string(),
|
|
5812
|
+
label: zod.z.string(),
|
|
5813
|
+
/** What THIS choice matches — shown one at a time, under the control. */
|
|
5814
|
+
hint: zod.z.string().optional()
|
|
5815
|
+
})).readonly().optional()
|
|
5753
5816
|
});
|
|
5754
5817
|
/**
|
|
5755
5818
|
* The delivery lifecycle status of a history row — a straight read of the
|
|
@@ -5834,6 +5897,74 @@ var NcHistoryFilterSchema = zod.z.object({
|
|
|
5834
5897
|
until: zod.z.number().optional(),
|
|
5835
5898
|
limit: zod.z.number().int().min(1).max(500).default(100)
|
|
5836
5899
|
});
|
|
5900
|
+
/**
|
|
5901
|
+
* What a snooze covers. Broader scopes win when several overlap, so one window
|
|
5902
|
+
* leaves ONE digest rather than a rule snooze and a whole-feed snooze both
|
|
5903
|
+
* summarising the same silence.
|
|
5904
|
+
*/
|
|
5905
|
+
var NcSnoozeScopeSchema = zod.z.enum([
|
|
5906
|
+
"rule",
|
|
5907
|
+
"device",
|
|
5908
|
+
"all"
|
|
5909
|
+
]);
|
|
5910
|
+
/**
|
|
5911
|
+
* Client-authored snooze. The server stamps `userId`, `startedAt` and
|
|
5912
|
+
* `expiresAt` — a DURATION is sent rather than an instant so a client with a
|
|
5913
|
+
* skewed clock cannot author a window that is already over, or never ends.
|
|
5914
|
+
*/
|
|
5915
|
+
var NcSnoozeInputSchema = zod.z.object({
|
|
5916
|
+
scope: NcSnoozeScopeSchema,
|
|
5917
|
+
/** Required when `scope: 'rule'` — a scoped snooze with no id matches
|
|
5918
|
+
* NOTHING rather than degrading to "everything". */
|
|
5919
|
+
ruleId: zod.z.string().optional(),
|
|
5920
|
+
/** Required when `scope: 'device'`. */
|
|
5921
|
+
deviceId: zod.z.number().int().optional(),
|
|
5922
|
+
durationMinutes: zod.z.number().int().min(1).max(1440),
|
|
5923
|
+
/**
|
|
5924
|
+
* Silence this for EVERY recipient, not just the caller. Permission is
|
|
5925
|
+
* checked server-side (the rule's `snoozeAllowGlobal`, or admin for the
|
|
5926
|
+
* broader scopes). Absent = personal.
|
|
5927
|
+
*/
|
|
5928
|
+
global: zod.z.boolean().optional(),
|
|
5929
|
+
/**
|
|
5930
|
+
* Deliver a summary of what was suppressed when the window ends. Absent =
|
|
5931
|
+
* ON: someone silencing a nuisance camera wants it off, someone silencing a
|
|
5932
|
+
* SECURITY camera wants to know what they missed, and choosing "off" for
|
|
5933
|
+
* everybody is how a snooze becomes an outage. Resolved to a concrete
|
|
5934
|
+
* boolean by the server at create time — never left to a Zod default, which
|
|
5935
|
+
* does not run on the addon cap path.
|
|
5936
|
+
*/
|
|
5937
|
+
summary: zod.z.boolean().optional()
|
|
5938
|
+
});
|
|
5939
|
+
/** A persisted snooze window. */
|
|
5940
|
+
var NcSnoozeSchema = zod.z.object({
|
|
5941
|
+
id: zod.z.string(),
|
|
5942
|
+
/** Who set it. Also who it silences, unless `global`. */
|
|
5943
|
+
userId: zod.z.string(),
|
|
5944
|
+
scope: NcSnoozeScopeSchema,
|
|
5945
|
+
ruleId: zod.z.string().optional(),
|
|
5946
|
+
deviceId: zod.z.number().int().optional(),
|
|
5947
|
+
startedAt: zod.z.number(),
|
|
5948
|
+
/** Exclusive: at exactly this instant the snooze is over. Expiry is a
|
|
5949
|
+
* COMPARISON, not a job — no sweeper can leave the operator silenced. */
|
|
5950
|
+
expiresAt: zod.z.number(),
|
|
5951
|
+
global: zod.z.boolean(),
|
|
5952
|
+
summary: zod.z.boolean(),
|
|
5953
|
+
/** When the end-of-window digest went out. Absent = not sent (yet, or the
|
|
5954
|
+
* window has not closed, or `summary` is false). */
|
|
5955
|
+
digestSentAt: zod.z.number().optional()
|
|
5956
|
+
});
|
|
5957
|
+
zod.z.object({
|
|
5958
|
+
snoozeId: zod.z.string(),
|
|
5959
|
+
targetId: zod.z.string(),
|
|
5960
|
+
ruleId: zod.z.string(),
|
|
5961
|
+
ruleName: zod.z.string(),
|
|
5962
|
+
deviceId: zod.z.number().int(),
|
|
5963
|
+
/** How many notifications this snooze hid for that pair. */
|
|
5964
|
+
count: zod.z.number().int(),
|
|
5965
|
+
firstAt: zod.z.number(),
|
|
5966
|
+
lastAt: zod.z.number()
|
|
5967
|
+
});
|
|
5837
5968
|
var notificationRulesCapability = {
|
|
5838
5969
|
name: "notification-rules",
|
|
5839
5970
|
scope: "system",
|
|
@@ -5900,7 +6031,36 @@ var notificationRulesCapability = {
|
|
|
5900
6031
|
* P1 (no user dimension); the P2 viewer History screen adds per-caller
|
|
5901
6032
|
* scoping on the same method.
|
|
5902
6033
|
*/
|
|
5903
|
-
getHistory: method(zod.z.object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), zod.z.object({ entries: zod.z.array(NcHistoryEntrySchema) }), { auth: "admin" })
|
|
6034
|
+
getHistory: method(zod.z.object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), zod.z.object({ entries: zod.z.array(NcHistoryEntrySchema) }), { auth: "admin" }),
|
|
6035
|
+
/**
|
|
6036
|
+
* Snooze windows currently in effect, plus any whose digest has not yet
|
|
6037
|
+
* gone out. `caller: 'required'`: a user sees their OWN windows and the
|
|
6038
|
+
* global ones that silence them, never another person's private silence.
|
|
6039
|
+
* An admin sees every window — a household-wide silence is exactly the
|
|
6040
|
+
* thing an operator has to be able to find and cancel.
|
|
6041
|
+
*/
|
|
6042
|
+
listSnoozes: method(zod.z.object({}), zod.z.object({ snoozes: zod.z.array(NcSnoozeSchema) }), { caller: "required" }),
|
|
6043
|
+
/**
|
|
6044
|
+
* Open a window. `userId` is stamped from the caller; a GLOBAL window is
|
|
6045
|
+
* permission-checked server-side (the rule's `snoozeAllowGlobal` for a
|
|
6046
|
+
* rule-scoped one, admin for a camera or the whole feed) — a client asking
|
|
6047
|
+
* for one it may not have is rejected, never silently downgraded, because
|
|
6048
|
+
* a snooze the operator believes is in effect and is not is the same
|
|
6049
|
+
* failure as one they cannot end.
|
|
6050
|
+
*/
|
|
6051
|
+
createSnooze: method(zod.z.object({ snooze: NcSnoozeInputSchema }), zod.z.object({ snooze: NcSnoozeSchema }), {
|
|
6052
|
+
kind: "mutation",
|
|
6053
|
+
caller: "required"
|
|
6054
|
+
}),
|
|
6055
|
+
/**
|
|
6056
|
+
* End a window NOW. The digest still goes out (what was hidden while it
|
|
6057
|
+
* was open is still what the operator missed); only the silence stops.
|
|
6058
|
+
* A user may cancel their own; an admin may cancel any.
|
|
6059
|
+
*/
|
|
6060
|
+
cancelSnooze: method(zod.z.object({ snoozeId: zod.z.string() }), zod.z.object({ success: zod.z.literal(true) }), {
|
|
6061
|
+
kind: "mutation",
|
|
6062
|
+
caller: "required"
|
|
6063
|
+
})
|
|
5904
6064
|
}
|
|
5905
6065
|
};
|
|
5906
6066
|
/**
|
|
@@ -6968,7 +7128,15 @@ var streamBrokerCapability = {
|
|
|
6968
7128
|
format: zod.z.enum(["gif", "mp4"]).default("gif"),
|
|
6969
7129
|
maxWidth: zod.z.number().int().min(120).max(1920).default(480),
|
|
6970
7130
|
/** GIF only — MP4 keeps the source cadence. */
|
|
6971
|
-
fps: zod.z.number().int().min(1).max(15).default(5)
|
|
7131
|
+
fps: zod.z.number().int().min(1).max(15).default(5),
|
|
7132
|
+
/**
|
|
7133
|
+
* Playback rate. A notification clip is GLANCED at on a lock screen,
|
|
7134
|
+
* not watched, so 2x is the default: the recipient sees the whole
|
|
7135
|
+
* passage in half the time and the GIF is half the bytes. `1` is real
|
|
7136
|
+
* time. Applies to MP4 as well — the operator set a speed, not a GIF
|
|
7137
|
+
* speed.
|
|
7138
|
+
*/
|
|
7139
|
+
speed: zod.z.number().min(1).max(8).default(2)
|
|
6972
7140
|
}), zod.z.object({
|
|
6973
7141
|
base64: zod.z.string(),
|
|
6974
7142
|
mime: zod.z.string(),
|
|
@@ -26885,12 +27053,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
26885
27053
|
addonId: null,
|
|
26886
27054
|
access: "create"
|
|
26887
27055
|
},
|
|
27056
|
+
"notificationRules.cancelSnooze": {
|
|
27057
|
+
capName: "notification-rules",
|
|
27058
|
+
capScope: "system",
|
|
27059
|
+
addonId: null,
|
|
27060
|
+
access: "create"
|
|
27061
|
+
},
|
|
26888
27062
|
"notificationRules.createRule": {
|
|
26889
27063
|
capName: "notification-rules",
|
|
26890
27064
|
capScope: "system",
|
|
26891
27065
|
addonId: null,
|
|
26892
27066
|
access: "create"
|
|
26893
27067
|
},
|
|
27068
|
+
"notificationRules.createSnooze": {
|
|
27069
|
+
capName: "notification-rules",
|
|
27070
|
+
capScope: "system",
|
|
27071
|
+
addonId: null,
|
|
27072
|
+
access: "create"
|
|
27073
|
+
},
|
|
26894
27074
|
"notificationRules.deleteRule": {
|
|
26895
27075
|
capName: "notification-rules",
|
|
26896
27076
|
capScope: "system",
|
|
@@ -26921,6 +27101,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
26921
27101
|
addonId: null,
|
|
26922
27102
|
access: "view"
|
|
26923
27103
|
},
|
|
27104
|
+
"notificationRules.listSnoozes": {
|
|
27105
|
+
capName: "notification-rules",
|
|
27106
|
+
capScope: "system",
|
|
27107
|
+
addonId: null,
|
|
27108
|
+
access: "view"
|
|
27109
|
+
},
|
|
26924
27110
|
"notificationRules.setRuleEnabled": {
|
|
26925
27111
|
capName: "notification-rules",
|
|
26926
27112
|
capScope: "system",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
//#region ../types/dist/event-category-
|
|
2
|
+
//#region ../types/dist/event-category-41fKf-q9.mjs
|
|
3
3
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4
4
|
EventCategory["SystemBoot"] = "system.boot";
|
|
5
5
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -59,6 +59,26 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
59
59
|
*/
|
|
60
60
|
EventCategory["AddonRetryScheduled"] = "addon.retry-scheduled";
|
|
61
61
|
/**
|
|
62
|
+
* A liveness invariant of this node is false — it has no devices, every
|
|
63
|
+
* camera is offline, or a camera that was recording has stopped producing
|
|
64
|
+
* segments. Emitted by the `liveness-monitor` builtin, once per fault (the
|
|
65
|
+
* `findingId` is stable across ticks), only after its boot grace period.
|
|
66
|
+
* AlertCenter raises a persistent operator-visible alert.
|
|
67
|
+
*
|
|
68
|
+
* It exists because on 2026-08-03 the hub ran four hours with zero devices
|
|
69
|
+
* and zero recordings while every surface stayed quiet.
|
|
70
|
+
*
|
|
71
|
+
* Payload: `{ findingId, severity, title, message, deviceId? }`.
|
|
72
|
+
*/
|
|
73
|
+
EventCategory["SystemLivenessFailed"] = "system.liveness-failed";
|
|
74
|
+
/**
|
|
75
|
+
* A previously reported liveness fault is true again. AlertCenter dismisses
|
|
76
|
+
* the matching `SystemLivenessFailed` alert.
|
|
77
|
+
*
|
|
78
|
+
* Payload: `{ findingId }`.
|
|
79
|
+
*/
|
|
80
|
+
EventCategory["SystemLivenessRecovered"] = "system.liveness-recovered";
|
|
81
|
+
/**
|
|
62
82
|
* Monitor is attempting to reload a failed addon NOW. UI uses this
|
|
63
83
|
* to show a spinner during the retry attempt. Same transient nature
|
|
64
84
|
* as AddonRetryScheduled.
|
|
@@ -5593,6 +5613,14 @@ var NcMediaPolicySchema = z.object({
|
|
|
5593
5613
|
clipPreRollSec: z.number().int().min(0).max(30).optional(),
|
|
5594
5614
|
clipPostRollSec: z.number().int().min(0).max(30).optional(),
|
|
5595
5615
|
/**
|
|
5616
|
+
* Playback rate of the attached gif / clip. Absent = 2x.
|
|
5617
|
+
*
|
|
5618
|
+
* A notification clip is GLANCED at on a lock screen, not watched: at real
|
|
5619
|
+
* time an eight-second passage is eight seconds of the recipient's attention
|
|
5620
|
+
* and twice the bytes. 1 is real time for the operator who wants it.
|
|
5621
|
+
*/
|
|
5622
|
+
clipSpeed: z.number().min(1).max(8).optional(),
|
|
5623
|
+
/**
|
|
5596
5624
|
* Which stream profile the footage is cut from. Absent = the CHEAPEST
|
|
5597
5625
|
* assigned profile: a notification is watched on a phone, so the 4K
|
|
5598
5626
|
* rendition would burn CPU to produce a file the client downscales anyway.
|
|
@@ -5664,7 +5692,21 @@ var NcRuleInputSchema = z.object({
|
|
|
5664
5692
|
* behaviour, visible to all, read-only in the viewer). Present = personal
|
|
5665
5693
|
* rule owned by this userId. Server-stamped; never trusted from a client.
|
|
5666
5694
|
*/
|
|
5667
|
-
ownerUserId: z.string().optional()
|
|
5695
|
+
ownerUserId: z.string().optional(),
|
|
5696
|
+
/**
|
|
5697
|
+
* May a non-admin snooze this rule for EVERYONE, not just themselves?
|
|
5698
|
+
*
|
|
5699
|
+
* A snooze is personal by default — it silences the person who set it. This
|
|
5700
|
+
* opts THIS rule into the "the gardener is here all afternoon" case, where
|
|
5701
|
+
* silencing the camera for the whole household is legitimate. It silences
|
|
5702
|
+
* other people, so it is off unless a rule deliberately allows it.
|
|
5703
|
+
*
|
|
5704
|
+
* `.optional()`, deliberately NOT `.default()`: a Zod default does not run on
|
|
5705
|
+
* the addon cap path (three production failures in one day), so absent is
|
|
5706
|
+
* read as `false` by {@link canSetGlobal} in the engine. Admins are not bound
|
|
5707
|
+
* by this flag — see the scope rules on that function.
|
|
5708
|
+
*/
|
|
5709
|
+
snoozeAllowGlobal: z.boolean().optional()
|
|
5668
5710
|
});
|
|
5669
5711
|
/**
|
|
5670
5712
|
* Partial patch for `updateRule` — any subset of the input fields, plus the
|
|
@@ -5749,7 +5791,28 @@ var NcConditionDescriptorSchema = z.object({
|
|
|
5749
5791
|
/** Which delivery kinds the condition applies to. */
|
|
5750
5792
|
appliesTo: z.array(NcDeliverySchema),
|
|
5751
5793
|
phase: z.string(),
|
|
5752
|
-
description: z.string().optional()
|
|
5794
|
+
description: z.string().optional(),
|
|
5795
|
+
/**
|
|
5796
|
+
* The CHOICES for a single-choice widget (`sourceSelect`, `crossingSelect`,
|
|
5797
|
+
* `packagePhase`, …), served with the descriptor.
|
|
5798
|
+
*
|
|
5799
|
+
* Before this the descriptor said which widget to render and not what to put
|
|
5800
|
+
* in it, so every option list lived in three places: this file's enums, the
|
|
5801
|
+
* admin's `NC_*_OPTIONS` and the viewer's `NC_*_VALUES`. That triple mirror
|
|
5802
|
+
* is the drift that emptied the viewer's rule editor on 2026-08-04 — the app
|
|
5803
|
+
* mirrors the cap by hand, so it is only ever as current as its last build.
|
|
5804
|
+
*
|
|
5805
|
+
* With the options on the wire, a condition of an EXISTING `valueType` costs
|
|
5806
|
+
* zero client changes. Clients keep a local fallback for an older hub that
|
|
5807
|
+
* does not send them; absent here is "use your own list", not "no choices".
|
|
5808
|
+
*/
|
|
5809
|
+
options: z.array(z.object({
|
|
5810
|
+
/** Written to the rule verbatim. `''` means the ABSENT state. */
|
|
5811
|
+
value: z.string(),
|
|
5812
|
+
label: z.string(),
|
|
5813
|
+
/** What THIS choice matches — shown one at a time, under the control. */
|
|
5814
|
+
hint: z.string().optional()
|
|
5815
|
+
})).readonly().optional()
|
|
5753
5816
|
});
|
|
5754
5817
|
/**
|
|
5755
5818
|
* The delivery lifecycle status of a history row — a straight read of the
|
|
@@ -5834,6 +5897,74 @@ var NcHistoryFilterSchema = z.object({
|
|
|
5834
5897
|
until: z.number().optional(),
|
|
5835
5898
|
limit: z.number().int().min(1).max(500).default(100)
|
|
5836
5899
|
});
|
|
5900
|
+
/**
|
|
5901
|
+
* What a snooze covers. Broader scopes win when several overlap, so one window
|
|
5902
|
+
* leaves ONE digest rather than a rule snooze and a whole-feed snooze both
|
|
5903
|
+
* summarising the same silence.
|
|
5904
|
+
*/
|
|
5905
|
+
var NcSnoozeScopeSchema = z.enum([
|
|
5906
|
+
"rule",
|
|
5907
|
+
"device",
|
|
5908
|
+
"all"
|
|
5909
|
+
]);
|
|
5910
|
+
/**
|
|
5911
|
+
* Client-authored snooze. The server stamps `userId`, `startedAt` and
|
|
5912
|
+
* `expiresAt` — a DURATION is sent rather than an instant so a client with a
|
|
5913
|
+
* skewed clock cannot author a window that is already over, or never ends.
|
|
5914
|
+
*/
|
|
5915
|
+
var NcSnoozeInputSchema = z.object({
|
|
5916
|
+
scope: NcSnoozeScopeSchema,
|
|
5917
|
+
/** Required when `scope: 'rule'` — a scoped snooze with no id matches
|
|
5918
|
+
* NOTHING rather than degrading to "everything". */
|
|
5919
|
+
ruleId: z.string().optional(),
|
|
5920
|
+
/** Required when `scope: 'device'`. */
|
|
5921
|
+
deviceId: z.number().int().optional(),
|
|
5922
|
+
durationMinutes: z.number().int().min(1).max(1440),
|
|
5923
|
+
/**
|
|
5924
|
+
* Silence this for EVERY recipient, not just the caller. Permission is
|
|
5925
|
+
* checked server-side (the rule's `snoozeAllowGlobal`, or admin for the
|
|
5926
|
+
* broader scopes). Absent = personal.
|
|
5927
|
+
*/
|
|
5928
|
+
global: z.boolean().optional(),
|
|
5929
|
+
/**
|
|
5930
|
+
* Deliver a summary of what was suppressed when the window ends. Absent =
|
|
5931
|
+
* ON: someone silencing a nuisance camera wants it off, someone silencing a
|
|
5932
|
+
* SECURITY camera wants to know what they missed, and choosing "off" for
|
|
5933
|
+
* everybody is how a snooze becomes an outage. Resolved to a concrete
|
|
5934
|
+
* boolean by the server at create time — never left to a Zod default, which
|
|
5935
|
+
* does not run on the addon cap path.
|
|
5936
|
+
*/
|
|
5937
|
+
summary: z.boolean().optional()
|
|
5938
|
+
});
|
|
5939
|
+
/** A persisted snooze window. */
|
|
5940
|
+
var NcSnoozeSchema = z.object({
|
|
5941
|
+
id: z.string(),
|
|
5942
|
+
/** Who set it. Also who it silences, unless `global`. */
|
|
5943
|
+
userId: z.string(),
|
|
5944
|
+
scope: NcSnoozeScopeSchema,
|
|
5945
|
+
ruleId: z.string().optional(),
|
|
5946
|
+
deviceId: z.number().int().optional(),
|
|
5947
|
+
startedAt: z.number(),
|
|
5948
|
+
/** Exclusive: at exactly this instant the snooze is over. Expiry is a
|
|
5949
|
+
* COMPARISON, not a job — no sweeper can leave the operator silenced. */
|
|
5950
|
+
expiresAt: z.number(),
|
|
5951
|
+
global: z.boolean(),
|
|
5952
|
+
summary: z.boolean(),
|
|
5953
|
+
/** When the end-of-window digest went out. Absent = not sent (yet, or the
|
|
5954
|
+
* window has not closed, or `summary` is false). */
|
|
5955
|
+
digestSentAt: z.number().optional()
|
|
5956
|
+
});
|
|
5957
|
+
z.object({
|
|
5958
|
+
snoozeId: z.string(),
|
|
5959
|
+
targetId: z.string(),
|
|
5960
|
+
ruleId: z.string(),
|
|
5961
|
+
ruleName: z.string(),
|
|
5962
|
+
deviceId: z.number().int(),
|
|
5963
|
+
/** How many notifications this snooze hid for that pair. */
|
|
5964
|
+
count: z.number().int(),
|
|
5965
|
+
firstAt: z.number(),
|
|
5966
|
+
lastAt: z.number()
|
|
5967
|
+
});
|
|
5837
5968
|
var notificationRulesCapability = {
|
|
5838
5969
|
name: "notification-rules",
|
|
5839
5970
|
scope: "system",
|
|
@@ -5900,7 +6031,36 @@ var notificationRulesCapability = {
|
|
|
5900
6031
|
* P1 (no user dimension); the P2 viewer History screen adds per-caller
|
|
5901
6032
|
* scoping on the same method.
|
|
5902
6033
|
*/
|
|
5903
|
-
getHistory: method(z.object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), z.object({ entries: z.array(NcHistoryEntrySchema) }), { auth: "admin" })
|
|
6034
|
+
getHistory: method(z.object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), z.object({ entries: z.array(NcHistoryEntrySchema) }), { auth: "admin" }),
|
|
6035
|
+
/**
|
|
6036
|
+
* Snooze windows currently in effect, plus any whose digest has not yet
|
|
6037
|
+
* gone out. `caller: 'required'`: a user sees their OWN windows and the
|
|
6038
|
+
* global ones that silence them, never another person's private silence.
|
|
6039
|
+
* An admin sees every window — a household-wide silence is exactly the
|
|
6040
|
+
* thing an operator has to be able to find and cancel.
|
|
6041
|
+
*/
|
|
6042
|
+
listSnoozes: method(z.object({}), z.object({ snoozes: z.array(NcSnoozeSchema) }), { caller: "required" }),
|
|
6043
|
+
/**
|
|
6044
|
+
* Open a window. `userId` is stamped from the caller; a GLOBAL window is
|
|
6045
|
+
* permission-checked server-side (the rule's `snoozeAllowGlobal` for a
|
|
6046
|
+
* rule-scoped one, admin for a camera or the whole feed) — a client asking
|
|
6047
|
+
* for one it may not have is rejected, never silently downgraded, because
|
|
6048
|
+
* a snooze the operator believes is in effect and is not is the same
|
|
6049
|
+
* failure as one they cannot end.
|
|
6050
|
+
*/
|
|
6051
|
+
createSnooze: method(z.object({ snooze: NcSnoozeInputSchema }), z.object({ snooze: NcSnoozeSchema }), {
|
|
6052
|
+
kind: "mutation",
|
|
6053
|
+
caller: "required"
|
|
6054
|
+
}),
|
|
6055
|
+
/**
|
|
6056
|
+
* End a window NOW. The digest still goes out (what was hidden while it
|
|
6057
|
+
* was open is still what the operator missed); only the silence stops.
|
|
6058
|
+
* A user may cancel their own; an admin may cancel any.
|
|
6059
|
+
*/
|
|
6060
|
+
cancelSnooze: method(z.object({ snoozeId: z.string() }), z.object({ success: z.literal(true) }), {
|
|
6061
|
+
kind: "mutation",
|
|
6062
|
+
caller: "required"
|
|
6063
|
+
})
|
|
5904
6064
|
}
|
|
5905
6065
|
};
|
|
5906
6066
|
/**
|
|
@@ -6968,7 +7128,15 @@ var streamBrokerCapability = {
|
|
|
6968
7128
|
format: z.enum(["gif", "mp4"]).default("gif"),
|
|
6969
7129
|
maxWidth: z.number().int().min(120).max(1920).default(480),
|
|
6970
7130
|
/** GIF only — MP4 keeps the source cadence. */
|
|
6971
|
-
fps: z.number().int().min(1).max(15).default(5)
|
|
7131
|
+
fps: z.number().int().min(1).max(15).default(5),
|
|
7132
|
+
/**
|
|
7133
|
+
* Playback rate. A notification clip is GLANCED at on a lock screen,
|
|
7134
|
+
* not watched, so 2x is the default: the recipient sees the whole
|
|
7135
|
+
* passage in half the time and the GIF is half the bytes. `1` is real
|
|
7136
|
+
* time. Applies to MP4 as well — the operator set a speed, not a GIF
|
|
7137
|
+
* speed.
|
|
7138
|
+
*/
|
|
7139
|
+
speed: z.number().min(1).max(8).default(2)
|
|
6972
7140
|
}), z.object({
|
|
6973
7141
|
base64: z.string(),
|
|
6974
7142
|
mime: z.string(),
|
|
@@ -26885,12 +27053,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
26885
27053
|
addonId: null,
|
|
26886
27054
|
access: "create"
|
|
26887
27055
|
},
|
|
27056
|
+
"notificationRules.cancelSnooze": {
|
|
27057
|
+
capName: "notification-rules",
|
|
27058
|
+
capScope: "system",
|
|
27059
|
+
addonId: null,
|
|
27060
|
+
access: "create"
|
|
27061
|
+
},
|
|
26888
27062
|
"notificationRules.createRule": {
|
|
26889
27063
|
capName: "notification-rules",
|
|
26890
27064
|
capScope: "system",
|
|
26891
27065
|
addonId: null,
|
|
26892
27066
|
access: "create"
|
|
26893
27067
|
},
|
|
27068
|
+
"notificationRules.createSnooze": {
|
|
27069
|
+
capName: "notification-rules",
|
|
27070
|
+
capScope: "system",
|
|
27071
|
+
addonId: null,
|
|
27072
|
+
access: "create"
|
|
27073
|
+
},
|
|
26894
27074
|
"notificationRules.deleteRule": {
|
|
26895
27075
|
capName: "notification-rules",
|
|
26896
27076
|
capScope: "system",
|
|
@@ -26921,6 +27101,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
26921
27101
|
addonId: null,
|
|
26922
27102
|
access: "view"
|
|
26923
27103
|
},
|
|
27104
|
+
"notificationRules.listSnoozes": {
|
|
27105
|
+
capName: "notification-rules",
|
|
27106
|
+
capScope: "system",
|
|
27107
|
+
addonId: null,
|
|
27108
|
+
access: "view"
|
|
27109
|
+
},
|
|
26924
27110
|
"notificationRules.setRuleEnabled": {
|
|
26925
27111
|
capName: "notification-rules",
|
|
26926
27112
|
capScope: "system",
|
package/dist/index.d.ts
CHANGED
|
@@ -47,6 +47,7 @@ export { StorageOrchestratorAddon, StorageOrchestratorService, } from './builtin
|
|
|
47
47
|
export type { ListLocationsFilter, StorageProviderLookup, } from './builtins/storage-orchestrator/index.js';
|
|
48
48
|
export { default as NativeMetricsAddon } from './builtins/native-metrics/native-metrics.addon.js';
|
|
49
49
|
export { AlertCenterAddon } from './builtins/alerts/index.js';
|
|
50
|
+
export { LivenessMonitorAddon } from './builtins/liveness-monitor/index.js';
|
|
50
51
|
export { NativeMetricsProvider } from './builtins/native-metrics/native-metrics-provider.js';
|
|
51
52
|
export { SystemConfigAddon } from './builtins/system-config/index.js';
|
|
52
53
|
export { LocalAuthAddon } from './builtins/local-auth/index.js';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_chunk = require("./chunk-Cek0wNdY.js");
|
|
3
|
-
const require_dist = require("./dist-
|
|
3
|
+
const require_dist = require("./dist-CvmFWwEo.js");
|
|
4
4
|
const require_model_download_service = require("./model-download-service-hf0ookyy.js");
|
|
5
5
|
const require_manifest_python_deps = require("./manifest-python-deps-BqE5j0-O.js");
|
|
6
6
|
const require_resource_monitor = require("./resource-monitor-DNNomR-i.js");
|
|
@@ -17,6 +17,8 @@ require("./builtins/storage-orchestrator/index.js");
|
|
|
17
17
|
const require_builtins_native_metrics_native_metrics_addon = require("./builtins/native-metrics/native-metrics.addon.js");
|
|
18
18
|
const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
|
|
19
19
|
require("./builtins/alerts/index.js");
|
|
20
|
+
const require_builtins_liveness_monitor_liveness_monitor_addon = require("./builtins/liveness-monitor/liveness-monitor.addon.js");
|
|
21
|
+
require("./builtins/liveness-monitor/index.js");
|
|
20
22
|
const require_builtins_system_config_system_config_addon = require("./builtins/system-config/system-config.addon.js");
|
|
21
23
|
require("./builtins/system-config/index.js");
|
|
22
24
|
const require_builtins_local_auth_local_auth_addon = require("./builtins/local-auth/local-auth.addon.js");
|
|
@@ -94414,6 +94416,7 @@ exports.IntegrationRegistry = IntegrationRegistry;
|
|
|
94414
94416
|
exports.JobJournal = JobJournal;
|
|
94415
94417
|
exports.LifecycleJobEngine = LifecycleJobEngine;
|
|
94416
94418
|
exports.LifecycleStateMachine = LifecycleStateMachine;
|
|
94419
|
+
exports.LivenessMonitorAddon = require_builtins_liveness_monitor_liveness_monitor_addon.LivenessMonitorAddon;
|
|
94417
94420
|
exports.LocalAuthAddon = require_builtins_local_auth_local_auth_addon.LocalAuthAddon;
|
|
94418
94421
|
exports.LocalChildClient = require_manifest_python_deps.LocalChildClient;
|
|
94419
94422
|
exports.LocalChildRegistry = require_manifest_python_deps.LocalChildRegistry;
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM$1, r as __exportAll, t as __commonJSMin$1 } from "./chunk-CNf5ZN-e.mjs";
|
|
2
|
-
import { A as extractNestedAddonId, At as scopeKey, Dt as parseJsonUnknown$1, Et as parseJsonObject, F as isObjectInput, G as objectInputDeclaresAddonId, H as looseSchema, I as isVoidInput, J as procedureAuthKey, L as kebabToCamel, Mt as EventCategory$1, N as isArrayOutputSchema, Ot as readinessKey, P as isCollectionArrayMethod, R as lifecycleJobSchema, St as expandCapMethods, V as logLevelAtMost, _t as asNumber, at as errMsg$1, bt as emitDownForOwnedCaps, c as RUNTIME_DEFAULTS, ct as DEVICE_SETTINGS_CONTRIBUTION_METHODS, gt as asJsonObject$1, kt as resolveCapMount, lt as DEVICE_STATUS_METHOD, m as addonSettingsCapability, mt as ReadinessTimeoutError, pt as ReadinessRegistry, s as METHOD_ACCESS_MAP, st as DATAPLANE_SECRET_HEADER$1, t as ALL_CAPABILITY_DEFINITIONS, vt as asString$1, yt as createEvent } from "./dist-
|
|
2
|
+
import { A as extractNestedAddonId, At as scopeKey, Dt as parseJsonUnknown$1, Et as parseJsonObject, F as isObjectInput, G as objectInputDeclaresAddonId, H as looseSchema, I as isVoidInput, J as procedureAuthKey, L as kebabToCamel, Mt as EventCategory$1, N as isArrayOutputSchema, Ot as readinessKey, P as isCollectionArrayMethod, R as lifecycleJobSchema, St as expandCapMethods, V as logLevelAtMost, _t as asNumber, at as errMsg$1, bt as emitDownForOwnedCaps, c as RUNTIME_DEFAULTS, ct as DEVICE_SETTINGS_CONTRIBUTION_METHODS, gt as asJsonObject$1, kt as resolveCapMount, lt as DEVICE_STATUS_METHOD, m as addonSettingsCapability, mt as ReadinessTimeoutError, pt as ReadinessRegistry, s as METHOD_ACCESS_MAP, st as DATAPLANE_SECRET_HEADER$1, t as ALL_CAPABILITY_DEFINITIONS, vt as asString$1, yt as createEvent } from "./dist-Q3N47mdR.mjs";
|
|
3
3
|
import { a as downloadModel, c as getModelFilePath, d as contentTypeFor, f as createAuthenticatedFileServer, h as resolveFilePath, i as downloadFile, l as isModelDownloaded, m as parseTokenizedUrl, n as collectModelFiles, o as ensureModel, p as parseRangeHeader, r as deleteModelFromDisk, s as fetchJson, t as ModelDownloadService, u as createFileDataPlaneHandler } from "./model-download-service-Cp9f4dk6.mjs";
|
|
4
4
|
import { $ as buildNativeCapProxy, A as createHubCapForwardService, B as AGENT_CAP_FWD_ACTION, C as brokerTransportLink, Ct as resolveAddonClass, D as localProviderLink, E as ipcParentLink, F as createUdsLogger, G as callWithServiceDiscovery, H as CapRouteResolver, I as createUdsLoggerWithControl, J as UdsLocalTransportServer, K as createLocalTransport, L as LocalChildClient, M as createUdsEventBridge, N as createUdsEventBus, O as HUB_CAP_FWD_ACTION, P as udsChildLogToWorkerEntry, Q as encodeFrame, R as LocalChildRegistry, S as brokerCallForCap, St as runNpm, T as ipcChildLink, U as CapRouteError, V as AGENT_CAP_FWD_SERVICE, W as classifyCapRoute, X as localEndpointPath, Y as SocketChannel, Z as FrameDecoder, _ as createKernelHwAccel, _t as CapabilityHandle, a as getWorkerDeviceRegistry, b as __resetCapUsageRegistryForTests, bt as installManifestNativeDeps, c as setHubConnected, ct as NATIVE_PROVIDER_SERVICE_INFIX, d as getBrokerEventBus, dt as capBareAction, et as buildUdsNativeCapProxy, f as getMoleculerEventStats, ft as capServiceName, g as AddonDepsManager, gt as DeviceRegistry, h as subscribePassthrough, ht as serializeTypedArrays, i as createUdsAddonContext, it as mountNativeCapService, j as createParentUnownedCallHandler, k as HUB_CAP_FWD_SERVICE, l as EVENT_TOPIC_PREFIX, lt as capActionName, m as setNodeEventInterest, mt as deserializeTypedArrays, n as adaptBrokerToCluster, o as getOrInitReadinessRegistry, ot as createAddonService, p as registerEventBusService, pt as parseCapAction, q as UdsLocalTransportClient, r as createAddonContext, s as getOrInitReadinessRegistryForClient, st as validateProviderRegistrations, t as installManifestPythonDeps, tt as createBrokerDeviceManagerApi, u as clusterEventTopic, ut as capActionSuffix, v as resolveHwAccel, vt as CapabilityUnavailableError, w as buildLinkChain, wt as createAddonDataPlaneFacility, x as getCapUsageRegistry, xt as resolveNpmInvocation, y as CapUsageRegistry, yt as copyBundledNativeModules, z as UDS_NO_ROUTE_PREFIX } from "./manifest-python-deps-Ck4-9K9m.mjs";
|
|
5
5
|
import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-BkP504Vq.mjs";
|
|
@@ -16,6 +16,8 @@ import "./builtins/storage-orchestrator/index.mjs";
|
|
|
16
16
|
import NativeMetricsAddon, { t as NativeMetricsProvider } from "./builtins/native-metrics/native-metrics.addon.mjs";
|
|
17
17
|
import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
|
|
18
18
|
import "./builtins/alerts/index.mjs";
|
|
19
|
+
import { LivenessMonitorAddon } from "./builtins/liveness-monitor/liveness-monitor.addon.mjs";
|
|
20
|
+
import "./builtins/liveness-monitor/index.mjs";
|
|
19
21
|
import { SystemConfigAddon } from "./builtins/system-config/system-config.addon.mjs";
|
|
20
22
|
import "./builtins/system-config/index.mjs";
|
|
21
23
|
import { LocalAuthAddon, a as require_ms, i as AuthManager, n as ApiKeyManager, o as require_safe_buffer, r as UserManager, t as ScopedTokenManager } from "./builtins/local-auth/local-auth.addon.mjs";
|
|
@@ -94346,4 +94348,4 @@ var LifecycleJobEngine = class {
|
|
|
94346
94348
|
}
|
|
94347
94349
|
};
|
|
94348
94350
|
//#endregion
|
|
94349
|
-
export { AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_READINESS_SERVICE_NAME, ALL_CAPABILITY_DEFINITIONS, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRouteRegistry, AlertCenterAddon, ApiKeyManager, AuthManager, CLUSTER_SECRET_MISMATCH_TYPE, CLUSTER_SECRET_REJECTED_EXIT_CODE, CORE_CAP_SERVICE_NAME, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CustomActionRegistry, DEFAULT_DATA_PATH, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceManagerAddon, DeviceRegistry, DeviceStore, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HEAP_WATCH_INTERVAL_MS, HEAP_WATCH_WARN_RATIO, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, INFRA_CAPABILITIES, IntegrationRegistry, JobJournal, LifecycleJobEngine, LifecycleStateMachine, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, LokiDestination, LokiLoggingAddon, METHOD_ACCESS_MAP, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NATIVE_SCAN_DEPTH, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, PYTHON_VERSION, PipelineRunner, PipelineValidator, PythonEnvManager, RESTART_MARKER_FILE, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, ReplEngine, RingBuffer, ScopedLogger, ScopedTokenManager, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemConfigAddon, SystemEventBus, TRADITIONAL_NATIVE_PACKAGES, ToastService, UDS_NO_ROUTE_PREFIX, UdsLocalTransportClient, UdsLocalTransportServer, UserManager, WinstonDestination, WinstonLoggingAddon, __resetCapUsageRegistryForTests, adaptBrokerToCluster, addonSettingsCapability, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildBinaryPath, buildCapRouters, buildHeapSample, buildLinkChain, buildNativeCapProxy, buildNodeManifest, buildStorageLocationRegistry, buildUdsNativeCapProxy, builderMountedCapNames, callRegisterNodeWithRetry, callWithServiceDiscovery, capActionName, capActionSuffix, capBareAction, capServiceName, classifyCapRoute, clearPendingRestart, clusterEventTopic, clusterSecretMatches, collectModelFiles, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonService, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCoreCapService, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createKernelHwAccel, createLocalTransport, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, deleteModelFromDisk, deriveAgentListenPort, describeProviderKindDrift, detectWorkspacePackagesDir, downloadBinary, downloadFile, downloadModel, emitDownForOwnedCaps, encodeFrame, ensureAddonNativePrebuilds, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensureNativePrebuilds, ensurePython, ensureTlsCert, expandCapMethods, fetchJson, findInPath, formatLogLine, getBrokerEventBus, getCapUsageRegistry, getFfmpegDownloadUrl, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getWorkerDeviceRegistry, hasDotNode, hashClusterSecret, installManifestNativeDeps, installManifestPythonDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, ipcChildLink, ipcParentLink, isAddonDeploySource, isArrayOutputSchema, isClusterSecretMismatchError, isCollectionArrayMethod, isInfraCapability, isModelDownloaded, isSourceNewer, loadTlsCert, localEndpointPath, localProviderLink, mountNativeCapService, parseCapAction, parseRangeHeader, parseTokenizedUrl, proxyToUpstream, readPendingRestart, readinessKey, registerEventBusService, resolveFilePath, resolveHwAccel, resolveNpmInvocation, runNpm, scheduleSelfRestart, scopeKey, scopesAllowDeviceCap, serializeTypedArrays, setHubConnected, setNodeEventInterest, startHeapWatch, stripCamstackDeps, subscribePassthrough, udsChildLogToWorkerEntry, validateProviderRegistrations, writePendingRestart };
|
|
94351
|
+
export { AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_READINESS_SERVICE_NAME, ALL_CAPABILITY_DEFINITIONS, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRouteRegistry, AlertCenterAddon, ApiKeyManager, AuthManager, CLUSTER_SECRET_MISMATCH_TYPE, CLUSTER_SECRET_REJECTED_EXIT_CODE, CORE_CAP_SERVICE_NAME, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CustomActionRegistry, DEFAULT_DATA_PATH, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceManagerAddon, DeviceRegistry, DeviceStore, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HEAP_WATCH_INTERVAL_MS, HEAP_WATCH_WARN_RATIO, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, INFRA_CAPABILITIES, IntegrationRegistry, JobJournal, LifecycleJobEngine, LifecycleStateMachine, LivenessMonitorAddon, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, LokiDestination, LokiLoggingAddon, METHOD_ACCESS_MAP, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NATIVE_SCAN_DEPTH, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, PYTHON_VERSION, PipelineRunner, PipelineValidator, PythonEnvManager, RESTART_MARKER_FILE, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, ReplEngine, RingBuffer, ScopedLogger, ScopedTokenManager, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemConfigAddon, SystemEventBus, TRADITIONAL_NATIVE_PACKAGES, ToastService, UDS_NO_ROUTE_PREFIX, UdsLocalTransportClient, UdsLocalTransportServer, UserManager, WinstonDestination, WinstonLoggingAddon, __resetCapUsageRegistryForTests, adaptBrokerToCluster, addonSettingsCapability, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildBinaryPath, buildCapRouters, buildHeapSample, buildLinkChain, buildNativeCapProxy, buildNodeManifest, buildStorageLocationRegistry, buildUdsNativeCapProxy, builderMountedCapNames, callRegisterNodeWithRetry, callWithServiceDiscovery, capActionName, capActionSuffix, capBareAction, capServiceName, classifyCapRoute, clearPendingRestart, clusterEventTopic, clusterSecretMatches, collectModelFiles, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonService, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCoreCapService, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createKernelHwAccel, createLocalTransport, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, deleteModelFromDisk, deriveAgentListenPort, describeProviderKindDrift, detectWorkspacePackagesDir, downloadBinary, downloadFile, downloadModel, emitDownForOwnedCaps, encodeFrame, ensureAddonNativePrebuilds, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensureNativePrebuilds, ensurePython, ensureTlsCert, expandCapMethods, fetchJson, findInPath, formatLogLine, getBrokerEventBus, getCapUsageRegistry, getFfmpegDownloadUrl, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getWorkerDeviceRegistry, hasDotNode, hashClusterSecret, installManifestNativeDeps, installManifestPythonDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, ipcChildLink, ipcParentLink, isAddonDeploySource, isArrayOutputSchema, isClusterSecretMismatchError, isCollectionArrayMethod, isInfraCapability, isModelDownloaded, isSourceNewer, loadTlsCert, localEndpointPath, localProviderLink, mountNativeCapService, parseCapAction, parseRangeHeader, parseTokenizedUrl, proxyToUpstream, readPendingRestart, readinessKey, registerEventBusService, resolveFilePath, resolveHwAccel, resolveNpmInvocation, runNpm, scheduleSelfRestart, scopeKey, scopesAllowDeviceCap, serializeTypedArrays, setHubConnected, setNodeEventInterest, startHeapWatch, stripCamstackDeps, subscribePassthrough, udsChildLogToWorkerEntry, validateProviderRegistrations, writePendingRestart };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/system",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.33",
|
|
4
4
|
"description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|
|
@@ -192,6 +192,15 @@
|
|
|
192
192
|
}
|
|
193
193
|
]
|
|
194
194
|
},
|
|
195
|
+
{
|
|
196
|
+
"id": "liveness-monitor",
|
|
197
|
+
"category": "system",
|
|
198
|
+
"name": "Liveness Monitor",
|
|
199
|
+
"description": "Asserts that this node is actually working — it has devices, its cameras are online, and a camera that was recording has not silently stopped. Raises one persistent alert per fault and dismisses it on recovery. Exists because the hub once ran four hours with no devices and no recordings while every surface stayed quiet.",
|
|
200
|
+
"entry": "./dist/builtins/liveness-monitor/index.js",
|
|
201
|
+
"protected": true,
|
|
202
|
+
"capabilities": []
|
|
203
|
+
},
|
|
195
204
|
{
|
|
196
205
|
"id": "system-config",
|
|
197
206
|
"category": "system",
|