@camstack/addon-notifiers 1.2.127 → 1.2.128
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 +91 -27
- package/dist/addon.mjs +91 -27
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -14267,7 +14267,7 @@ DeviceType.Camera;
|
|
|
14267
14267
|
* This matters here more than anywhere else in the repo, because every provider
|
|
14268
14268
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
14269
14269
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
14270
|
-
* and `http://admin:hunter2@192.168.
|
|
14270
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
14271
14271
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
14272
14272
|
* filling it is the operator's business, not ours.
|
|
14273
14273
|
*
|
|
@@ -19739,8 +19739,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
19739
19739
|
disabledTargetIds: array(string()).default([])
|
|
19740
19740
|
});
|
|
19741
19741
|
/**
|
|
19742
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
19743
|
-
* still-true state. `
|
|
19742
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
19743
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
19744
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
19744
19745
|
* job is not an open state, and the alarm stays instant.
|
|
19745
19746
|
*/
|
|
19746
19747
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -19752,6 +19753,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
19752
19753
|
"detection-blind",
|
|
19753
19754
|
"nodes",
|
|
19754
19755
|
"addons",
|
|
19756
|
+
"addon-updates",
|
|
19755
19757
|
"updates"
|
|
19756
19758
|
]);
|
|
19757
19759
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -20232,7 +20234,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
20232
20234
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
20233
20235
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
20234
20236
|
*/
|
|
20235
|
-
schedule: NcScheduleSchema.optional()
|
|
20237
|
+
schedule: NcScheduleSchema.optional(),
|
|
20238
|
+
/**
|
|
20239
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
20240
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
20241
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
20242
|
+
*/
|
|
20243
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
20244
|
+
/**
|
|
20245
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
20246
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
20247
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
20248
|
+
*/
|
|
20249
|
+
notifySensorRewatched: boolean().optional()
|
|
20236
20250
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20237
20251
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20238
20252
|
mode: AlarmArmModeSchema,
|
|
@@ -20241,7 +20255,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
20241
20255
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
20242
20256
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
20243
20257
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
20244
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
20258
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
20259
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20260
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
20261
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20262
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
20245
20263
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20246
20264
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20247
20265
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -24062,6 +24080,22 @@ var MotionSourceEnum = _enum([
|
|
|
24062
24080
|
"device-activity"
|
|
24063
24081
|
]);
|
|
24064
24082
|
/**
|
|
24083
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
24084
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
24085
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
24086
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
24087
|
+
* absent when unknown or when the camera itself triggered.
|
|
24088
|
+
*
|
|
24089
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
24090
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
24091
|
+
* runner never decides anything on it.
|
|
24092
|
+
*/
|
|
24093
|
+
var SessionTriggerSchema = object({
|
|
24094
|
+
source: MotionSourceEnum,
|
|
24095
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
24096
|
+
sensorName: string().optional()
|
|
24097
|
+
});
|
|
24098
|
+
/**
|
|
24065
24099
|
* List of motion sources active on a camera. Empty array is valid:
|
|
24066
24100
|
* "no source" — happens for battery cams without firmware motion when
|
|
24067
24101
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -24313,6 +24347,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
24313
24347
|
*/
|
|
24314
24348
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
24315
24349
|
/**
|
|
24350
|
+
* What opened this attach, on a SESSION attach only (see
|
|
24351
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
24352
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
24353
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
24354
|
+
* runner then names no source on the phase event.
|
|
24355
|
+
*/
|
|
24356
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
24357
|
+
/**
|
|
24316
24358
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
24317
24359
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
24318
24360
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -30536,7 +30578,7 @@ var LocalInterfaceSchema = object({
|
|
|
30536
30578
|
name: string(),
|
|
30537
30579
|
family: _enum(["IPv4", "IPv6"]),
|
|
30538
30580
|
address: string(),
|
|
30539
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
30581
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
30540
30582
|
cidr: string(),
|
|
30541
30583
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
30542
30584
|
netmask: string(),
|
|
@@ -30590,7 +30632,8 @@ var ConnectionEndpointSchema = object({
|
|
|
30590
30632
|
"lan-ipv4",
|
|
30591
30633
|
"lan-ipv6",
|
|
30592
30634
|
"public",
|
|
30593
|
-
"loopback"
|
|
30635
|
+
"loopback",
|
|
30636
|
+
"app-link"
|
|
30594
30637
|
]),
|
|
30595
30638
|
/**
|
|
30596
30639
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -30659,15 +30702,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
30659
30702
|
localPort: AdvertisedLocalPortSchema
|
|
30660
30703
|
});
|
|
30661
30704
|
/**
|
|
30662
|
-
* The
|
|
30663
|
-
*
|
|
30664
|
-
*
|
|
30705
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
30706
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
30707
|
+
* so the UI can show it either way.
|
|
30665
30708
|
*/
|
|
30666
30709
|
var NotificationEndpointSchema = object({
|
|
30667
30710
|
/** The operator's explicit choice, or null for AUTO. */
|
|
30668
30711
|
baseUrl: string().nullable(),
|
|
30669
|
-
/**
|
|
30670
|
-
|
|
30712
|
+
/**
|
|
30713
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
30714
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
30715
|
+
* answered the public tunnel / mesh here, or null.
|
|
30716
|
+
*/
|
|
30717
|
+
resolved: string().nullable(),
|
|
30718
|
+
/**
|
|
30719
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
30720
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
30721
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
30722
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
30723
|
+
* Absent on a pre-D709 hub.
|
|
30724
|
+
*/
|
|
30725
|
+
appLinkHub: string().nullable()
|
|
30671
30726
|
});
|
|
30672
30727
|
/**
|
|
30673
30728
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -30721,7 +30776,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
30721
30776
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
30722
30777
|
* to avoid mixed-content blocks in the browser. The public
|
|
30723
30778
|
* tunnel always emits `https://` regardless. */
|
|
30724
|
-
scheme: _enum(["http", "https"]).optional()
|
|
30779
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
30780
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
30781
|
+
* an address notification links can be flagged with, not a hub
|
|
30782
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
30783
|
+
includeAppLink: boolean().optional()
|
|
30725
30784
|
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
|
|
30726
30785
|
kind: "mutation",
|
|
30727
30786
|
auth: "admin"
|
|
@@ -30982,7 +31041,7 @@ var MeshPeerSchema = object({
|
|
|
30982
31041
|
tags: array(string()).readonly(),
|
|
30983
31042
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
30984
31043
|
exitNodeOption: boolean(),
|
|
30985
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
31044
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
30986
31045
|
advertisedRoutes: array(string()).readonly(),
|
|
30987
31046
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
30988
31047
|
userLogin: string().nullable(),
|
|
@@ -47932,12 +47991,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
47932
47991
|
{
|
|
47933
47992
|
id: "addons",
|
|
47934
47993
|
family: "system",
|
|
47935
|
-
label: "Addons",
|
|
47936
|
-
kinds: [
|
|
47937
|
-
|
|
47938
|
-
|
|
47939
|
-
|
|
47940
|
-
|
|
47994
|
+
label: "Addons stopped",
|
|
47995
|
+
kinds: ["addon-crash-loop"]
|
|
47996
|
+
},
|
|
47997
|
+
{
|
|
47998
|
+
id: "addon-updates",
|
|
47999
|
+
family: "system",
|
|
48000
|
+
label: "Addon updates",
|
|
48001
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
47941
48002
|
},
|
|
47942
48003
|
{
|
|
47943
48004
|
id: "updates",
|
|
@@ -48097,13 +48158,15 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
48097
48158
|
},
|
|
48098
48159
|
{
|
|
48099
48160
|
name: "summaryAddons",
|
|
48100
|
-
label: "Summary: addons",
|
|
48101
|
-
example: "
|
|
48102
|
-
kinds: [
|
|
48103
|
-
|
|
48104
|
-
|
|
48105
|
-
|
|
48106
|
-
|
|
48161
|
+
label: "Summary: addons stopped",
|
|
48162
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
48163
|
+
kinds: ["addon-crash-loop"]
|
|
48164
|
+
},
|
|
48165
|
+
{
|
|
48166
|
+
name: "summaryAddonUpdates",
|
|
48167
|
+
label: "Summary: addon updates",
|
|
48168
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
48169
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
48107
48170
|
},
|
|
48108
48171
|
{
|
|
48109
48172
|
name: "summaryUpdates",
|
|
@@ -48187,6 +48250,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
48187
48250
|
[...RULE_BODY_ONLY],
|
|
48188
48251
|
[...RULE_TEXT],
|
|
48189
48252
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
48253
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
48190
48254
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
48191
48255
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
48192
48256
|
([...RULE_TEXT], [...CONSUMABLE]),
|
package/dist/addon.mjs
CHANGED
|
@@ -14240,7 +14240,7 @@ DeviceType.Camera;
|
|
|
14240
14240
|
* This matters here more than anywhere else in the repo, because every provider
|
|
14241
14241
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
14242
14242
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
14243
|
-
* and `http://admin:hunter2@192.168.
|
|
14243
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
14244
14244
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
14245
14245
|
* filling it is the operator's business, not ours.
|
|
14246
14246
|
*
|
|
@@ -19712,8 +19712,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
19712
19712
|
disabledTargetIds: array(string()).default([])
|
|
19713
19713
|
});
|
|
19714
19714
|
/**
|
|
19715
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
19716
|
-
* still-true state. `
|
|
19715
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
19716
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
19717
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
19717
19718
|
* job is not an open state, and the alarm stays instant.
|
|
19718
19719
|
*/
|
|
19719
19720
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -19725,6 +19726,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
19725
19726
|
"detection-blind",
|
|
19726
19727
|
"nodes",
|
|
19727
19728
|
"addons",
|
|
19729
|
+
"addon-updates",
|
|
19728
19730
|
"updates"
|
|
19729
19731
|
]);
|
|
19730
19732
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -20205,7 +20207,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
20205
20207
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
20206
20208
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
20207
20209
|
*/
|
|
20208
|
-
schedule: NcScheduleSchema.optional()
|
|
20210
|
+
schedule: NcScheduleSchema.optional(),
|
|
20211
|
+
/**
|
|
20212
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
20213
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
20214
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
20215
|
+
*/
|
|
20216
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
20217
|
+
/**
|
|
20218
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
20219
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
20220
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
20221
|
+
*/
|
|
20222
|
+
notifySensorRewatched: boolean().optional()
|
|
20209
20223
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20210
20224
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20211
20225
|
mode: AlarmArmModeSchema,
|
|
@@ -20214,7 +20228,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
20214
20228
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
20215
20229
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
20216
20230
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
20217
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
20231
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
20232
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20233
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
20234
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20235
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
20218
20236
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20219
20237
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20220
20238
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -24035,6 +24053,22 @@ var MotionSourceEnum = _enum([
|
|
|
24035
24053
|
"device-activity"
|
|
24036
24054
|
]);
|
|
24037
24055
|
/**
|
|
24056
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
24057
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
24058
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
24059
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
24060
|
+
* absent when unknown or when the camera itself triggered.
|
|
24061
|
+
*
|
|
24062
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
24063
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
24064
|
+
* runner never decides anything on it.
|
|
24065
|
+
*/
|
|
24066
|
+
var SessionTriggerSchema = object({
|
|
24067
|
+
source: MotionSourceEnum,
|
|
24068
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
24069
|
+
sensorName: string().optional()
|
|
24070
|
+
});
|
|
24071
|
+
/**
|
|
24038
24072
|
* List of motion sources active on a camera. Empty array is valid:
|
|
24039
24073
|
* "no source" — happens for battery cams without firmware motion when
|
|
24040
24074
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -24286,6 +24320,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
24286
24320
|
*/
|
|
24287
24321
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
24288
24322
|
/**
|
|
24323
|
+
* What opened this attach, on a SESSION attach only (see
|
|
24324
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
24325
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
24326
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
24327
|
+
* runner then names no source on the phase event.
|
|
24328
|
+
*/
|
|
24329
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
24330
|
+
/**
|
|
24289
24331
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
24290
24332
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
24291
24333
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -30509,7 +30551,7 @@ var LocalInterfaceSchema = object({
|
|
|
30509
30551
|
name: string(),
|
|
30510
30552
|
family: _enum(["IPv4", "IPv6"]),
|
|
30511
30553
|
address: string(),
|
|
30512
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
30554
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
30513
30555
|
cidr: string(),
|
|
30514
30556
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
30515
30557
|
netmask: string(),
|
|
@@ -30563,7 +30605,8 @@ var ConnectionEndpointSchema = object({
|
|
|
30563
30605
|
"lan-ipv4",
|
|
30564
30606
|
"lan-ipv6",
|
|
30565
30607
|
"public",
|
|
30566
|
-
"loopback"
|
|
30608
|
+
"loopback",
|
|
30609
|
+
"app-link"
|
|
30567
30610
|
]),
|
|
30568
30611
|
/**
|
|
30569
30612
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -30632,15 +30675,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
30632
30675
|
localPort: AdvertisedLocalPortSchema
|
|
30633
30676
|
});
|
|
30634
30677
|
/**
|
|
30635
|
-
* The
|
|
30636
|
-
*
|
|
30637
|
-
*
|
|
30678
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
30679
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
30680
|
+
* so the UI can show it either way.
|
|
30638
30681
|
*/
|
|
30639
30682
|
var NotificationEndpointSchema = object({
|
|
30640
30683
|
/** The operator's explicit choice, or null for AUTO. */
|
|
30641
30684
|
baseUrl: string().nullable(),
|
|
30642
|
-
/**
|
|
30643
|
-
|
|
30685
|
+
/**
|
|
30686
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
30687
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
30688
|
+
* answered the public tunnel / mesh here, or null.
|
|
30689
|
+
*/
|
|
30690
|
+
resolved: string().nullable(),
|
|
30691
|
+
/**
|
|
30692
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
30693
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
30694
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
30695
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
30696
|
+
* Absent on a pre-D709 hub.
|
|
30697
|
+
*/
|
|
30698
|
+
appLinkHub: string().nullable()
|
|
30644
30699
|
});
|
|
30645
30700
|
/**
|
|
30646
30701
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -30694,7 +30749,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
30694
30749
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
30695
30750
|
* to avoid mixed-content blocks in the browser. The public
|
|
30696
30751
|
* tunnel always emits `https://` regardless. */
|
|
30697
|
-
scheme: _enum(["http", "https"]).optional()
|
|
30752
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
30753
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
30754
|
+
* an address notification links can be flagged with, not a hub
|
|
30755
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
30756
|
+
includeAppLink: boolean().optional()
|
|
30698
30757
|
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
|
|
30699
30758
|
kind: "mutation",
|
|
30700
30759
|
auth: "admin"
|
|
@@ -30955,7 +31014,7 @@ var MeshPeerSchema = object({
|
|
|
30955
31014
|
tags: array(string()).readonly(),
|
|
30956
31015
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
30957
31016
|
exitNodeOption: boolean(),
|
|
30958
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
31017
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
30959
31018
|
advertisedRoutes: array(string()).readonly(),
|
|
30960
31019
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
30961
31020
|
userLogin: string().nullable(),
|
|
@@ -47905,12 +47964,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
47905
47964
|
{
|
|
47906
47965
|
id: "addons",
|
|
47907
47966
|
family: "system",
|
|
47908
|
-
label: "Addons",
|
|
47909
|
-
kinds: [
|
|
47910
|
-
|
|
47911
|
-
|
|
47912
|
-
|
|
47913
|
-
|
|
47967
|
+
label: "Addons stopped",
|
|
47968
|
+
kinds: ["addon-crash-loop"]
|
|
47969
|
+
},
|
|
47970
|
+
{
|
|
47971
|
+
id: "addon-updates",
|
|
47972
|
+
family: "system",
|
|
47973
|
+
label: "Addon updates",
|
|
47974
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
47914
47975
|
},
|
|
47915
47976
|
{
|
|
47916
47977
|
id: "updates",
|
|
@@ -48070,13 +48131,15 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
48070
48131
|
},
|
|
48071
48132
|
{
|
|
48072
48133
|
name: "summaryAddons",
|
|
48073
|
-
label: "Summary: addons",
|
|
48074
|
-
example: "
|
|
48075
|
-
kinds: [
|
|
48076
|
-
|
|
48077
|
-
|
|
48078
|
-
|
|
48079
|
-
|
|
48134
|
+
label: "Summary: addons stopped",
|
|
48135
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
48136
|
+
kinds: ["addon-crash-loop"]
|
|
48137
|
+
},
|
|
48138
|
+
{
|
|
48139
|
+
name: "summaryAddonUpdates",
|
|
48140
|
+
label: "Summary: addon updates",
|
|
48141
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
48142
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
48080
48143
|
},
|
|
48081
48144
|
{
|
|
48082
48145
|
name: "summaryUpdates",
|
|
@@ -48160,6 +48223,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
48160
48223
|
[...RULE_BODY_ONLY],
|
|
48161
48224
|
[...RULE_TEXT],
|
|
48162
48225
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
48226
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
48163
48227
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
48164
48228
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
48165
48229
|
([...RULE_TEXT], [...CONSUMABLE]),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-notifiers",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.128",
|
|
4
4
|
"description": "System notifiers addon for CamStack — a `notification-output` collection provider hosting per-kind notifier adapters (ntfy, pushover, gotify, telegram, discord, webhook, zentik).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|