@camstack/types 1.2.310 → 1.2.311
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/capabilities/hub-address.d.ts +60 -51
- package/dist/capabilities/index.d.ts +1 -1
- package/dist/capabilities/local-network.cap.d.ts +149 -147
- package/dist/capabilities/notification-rules.cap.d.ts +12 -0
- package/dist/client.js +15 -3
- package/dist/client.mjs +15 -3
- package/dist/index.js +124 -106
- package/dist/index.mjs +118 -100
- package/dist/notification/alarm-settings.d.ts +6 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -16234,24 +16234,24 @@ function buildViewerLink(input) {
|
|
|
16234
16234
|
//#endregion
|
|
16235
16235
|
//#region src/capabilities/hub-address.ts
|
|
16236
16236
|
var HUB_ADDRESS_ROLES = [
|
|
16237
|
-
"
|
|
16238
|
-
"
|
|
16239
|
-
"
|
|
16240
|
-
"
|
|
16237
|
+
"appConnections",
|
|
16238
|
+
"notificationTaps",
|
|
16239
|
+
"internal",
|
|
16240
|
+
"publicEndpoint"
|
|
16241
16241
|
];
|
|
16242
16242
|
var SINGLE_HUB_ADDRESS_ROLES = [
|
|
16243
|
-
"
|
|
16244
|
-
"
|
|
16245
|
-
"
|
|
16243
|
+
"notificationTaps",
|
|
16244
|
+
"internal",
|
|
16245
|
+
"publicEndpoint"
|
|
16246
16246
|
];
|
|
16247
16247
|
function isSingleHubAddressRole(role) {
|
|
16248
|
-
return role !== "
|
|
16248
|
+
return role !== "appConnections";
|
|
16249
16249
|
}
|
|
16250
16250
|
var AUTOMATIC_HUB_ADDRESS_FLAGS = {
|
|
16251
|
-
|
|
16252
|
-
|
|
16253
|
-
|
|
16254
|
-
|
|
16251
|
+
appConnections: [],
|
|
16252
|
+
notificationTaps: null,
|
|
16253
|
+
internal: null,
|
|
16254
|
+
publicEndpoint: null
|
|
16255
16255
|
};
|
|
16256
16256
|
var IPV4_LITERAL = /^\d{1,3}(?:\.\d{1,3}){3}$/;
|
|
16257
16257
|
function hostnameOf(baseUrl) {
|
|
@@ -16283,7 +16283,7 @@ function isLanIpv4Literal(endpoint) {
|
|
|
16283
16283
|
function autoRankFor(role, endpoint) {
|
|
16284
16284
|
if (endpoint.kind === "loopback" || endpoint.kind === "app-link" || endpoint.kind === "custom") return null;
|
|
16285
16285
|
if (hostnameOf(endpoint.baseUrl) === null) return null;
|
|
16286
|
-
if (role === "
|
|
16286
|
+
if (role === "internal") {
|
|
16287
16287
|
if (isLanIpv4Literal(endpoint)) return 0;
|
|
16288
16288
|
if (isPlausibleLan(endpoint)) return 1;
|
|
16289
16289
|
if (isMesh(endpoint)) return 2;
|
|
@@ -16353,28 +16353,28 @@ function validateCustomAddress(raw) {
|
|
|
16353
16353
|
baseUrl: parsed.origin
|
|
16354
16354
|
};
|
|
16355
16355
|
}
|
|
16356
|
-
/** The reason a plain-http
|
|
16357
|
-
var
|
|
16356
|
+
/** The reason a plain-http public endpoint is refused unless accepted. */
|
|
16357
|
+
var PUBLIC_ENDPOINT_HTTP_REASON = "The public endpoint needs an https:// address: passkeys and most identity providers refuse a plain-http origin. Accept http only when sign-in and notification links never leave your own network.";
|
|
16358
16358
|
/**
|
|
16359
16359
|
* May `baseUrl` carry `role`? The address check above, plus two role rules:
|
|
16360
|
-
* the app link carries `
|
|
16361
|
-
* plain-http address carries `
|
|
16362
|
-
* accepted it (`acceptInsecureHttp`) — a LAN-only password or
|
|
16363
|
-
* sign-in works over http, a passkey or an OIDC callback does not.
|
|
16360
|
+
* the app link carries `notificationTaps` only (it is not a hub address), and
|
|
16361
|
+
* a plain-http address carries `publicEndpoint` only when the operator
|
|
16362
|
+
* explicitly accepted it (`acceptInsecureHttp`) — a LAN-only password or
|
|
16363
|
+
* magic-link sign-in works over http, a passkey or an OIDC callback does not.
|
|
16364
16364
|
*/
|
|
16365
16365
|
function checkRoleAddress(role, baseUrl, options = {}) {
|
|
16366
|
-
if (isAppLinkBase(baseUrl)) return role === "
|
|
16366
|
+
if (isAppLinkBase(baseUrl)) return role === "notificationTaps" ? {
|
|
16367
16367
|
ok: true,
|
|
16368
16368
|
baseUrl: CAMSTACK_APP_LINK_ORIGIN
|
|
16369
16369
|
} : {
|
|
16370
16370
|
ok: false,
|
|
16371
|
-
reason: "The CamStack app link is not a hub address — only
|
|
16371
|
+
reason: "The CamStack app link is not a hub address — only notification taps can use it."
|
|
16372
16372
|
};
|
|
16373
16373
|
const check = validateCustomAddress(baseUrl);
|
|
16374
16374
|
if (!check.ok) return check;
|
|
16375
|
-
if (role === "
|
|
16375
|
+
if (role === "publicEndpoint" && check.baseUrl.startsWith("http:") && options.acceptInsecureHttp !== true) return {
|
|
16376
16376
|
ok: false,
|
|
16377
|
-
reason:
|
|
16377
|
+
reason: PUBLIC_ENDPOINT_HTTP_REASON
|
|
16378
16378
|
};
|
|
16379
16379
|
return check;
|
|
16380
16380
|
}
|
|
@@ -16409,17 +16409,21 @@ function resolveHubRole(endpoints, role, flag) {
|
|
|
16409
16409
|
source: auto === null ? "none" : "auto"
|
|
16410
16410
|
};
|
|
16411
16411
|
}
|
|
16412
|
-
/** `
|
|
16413
|
-
function
|
|
16414
|
-
return resolveHubRole(endpoints, "
|
|
16412
|
+
/** `internal`: what agents and LAN devices download from. */
|
|
16413
|
+
function resolveInternalAddress(endpoints, flags) {
|
|
16414
|
+
return resolveHubRole(endpoints, "internal", flags.internal);
|
|
16415
16415
|
}
|
|
16416
|
-
/**
|
|
16417
|
-
|
|
16418
|
-
|
|
16416
|
+
/**
|
|
16417
|
+
* `publicEndpoint`: every URL that must work off the LAN — sign-in links, OIDC
|
|
16418
|
+
* / OAuth2 callbacks, the relying party, and notification buttons,
|
|
16419
|
+
* attachments, media and admin links.
|
|
16420
|
+
*/
|
|
16421
|
+
function resolvePublicEndpoint(endpoints, flags) {
|
|
16422
|
+
return resolveHubRole(endpoints, "publicEndpoint", flags.publicEndpoint);
|
|
16419
16423
|
}
|
|
16420
|
-
/** `
|
|
16421
|
-
function
|
|
16422
|
-
const flagged = validFlag("
|
|
16424
|
+
/** `notificationTaps`: the flagged address, else the CamStack app link (D709). */
|
|
16425
|
+
function resolveNotificationTapAddress(flags) {
|
|
16426
|
+
const flagged = validFlag("notificationTaps", flags.notificationTaps);
|
|
16423
16427
|
if (flagged !== null && !isAppLinkBase(flagged)) return {
|
|
16424
16428
|
flagged,
|
|
16425
16429
|
resolved: flagged,
|
|
@@ -16431,46 +16435,47 @@ function resolveNotificationsAddress(flags) {
|
|
|
16431
16435
|
source: "auto"
|
|
16432
16436
|
};
|
|
16433
16437
|
}
|
|
16434
|
-
/** AUTO
|
|
16435
|
-
function
|
|
16438
|
+
/** AUTO app connections: LAN IPv4 + the public tunnel. Never IPv6, mesh, loopback or custom. */
|
|
16439
|
+
function isDefaultAppConnectionEndpoint(endpoint) {
|
|
16436
16440
|
if (endpoint.kind === "lan-ipv4") return true;
|
|
16437
16441
|
return endpoint.kind === "public" && endpoint.interfaceKind === "public";
|
|
16438
16442
|
}
|
|
16439
16443
|
/**
|
|
16440
16444
|
* The endpoints the apps race: the flagged ones that are in `endpoints`
|
|
16441
|
-
* (which carries the custom addresses flagged `
|
|
16445
|
+
* (which carries the custom addresses flagged `appConnections`), else AUTO. A flagged
|
|
16442
16446
|
* set none of which is currently up falls back to AUTO rather than racing
|
|
16443
16447
|
* nothing.
|
|
16444
16448
|
*/
|
|
16445
|
-
function
|
|
16446
|
-
const auto = endpoints.filter(
|
|
16447
|
-
if (flags.
|
|
16448
|
-
const wanted = new Set(flags.
|
|
16449
|
+
function selectAppConnectionEndpoints(endpoints, flags) {
|
|
16450
|
+
const auto = endpoints.filter(isDefaultAppConnectionEndpoint);
|
|
16451
|
+
if (flags.appConnections.length === 0) return auto;
|
|
16452
|
+
const wanted = new Set(flags.appConnections);
|
|
16449
16453
|
const explicit = endpoints.filter((e) => wanted.has(e.baseUrl));
|
|
16450
16454
|
return explicit.length > 0 ? explicit : auto;
|
|
16451
16455
|
}
|
|
16452
|
-
/** `
|
|
16453
|
-
function
|
|
16454
|
-
const wanted = new Set(flags.
|
|
16455
|
-
const selected =
|
|
16456
|
+
/** `appConnections`: what the apps try when connecting. */
|
|
16457
|
+
function resolveAppConnections(endpoints, flags) {
|
|
16458
|
+
const wanted = new Set(flags.appConnections);
|
|
16459
|
+
const selected = selectAppConnectionEndpoints(endpoints, flags);
|
|
16456
16460
|
const usedFlags = selected.some((e) => wanted.has(e.baseUrl));
|
|
16457
16461
|
return {
|
|
16458
|
-
flagged: flags.
|
|
16462
|
+
flagged: flags.appConnections,
|
|
16459
16463
|
resolved: selected.map((e) => e.baseUrl),
|
|
16460
16464
|
source: selected.length === 0 ? "none" : usedFlags ? "flagged" : "auto"
|
|
16461
16465
|
};
|
|
16462
16466
|
}
|
|
16463
16467
|
/**
|
|
16464
|
-
* Every role at once, each through its own resolver. `
|
|
16465
|
-
* the apps race (it carries the custom addresses flagged `
|
|
16466
|
-
* `hubPalette` is the detected HTTPS palette
|
|
16468
|
+
* Every role at once, each through its own resolver. `appPalette` is what
|
|
16469
|
+
* the apps race (it carries the custom addresses flagged `appConnections`);
|
|
16470
|
+
* `hubPalette` is the detected HTTPS palette `internal` and `publicEndpoint`
|
|
16471
|
+
* resolve over.
|
|
16467
16472
|
*/
|
|
16468
|
-
function resolveHubAddressRoles(
|
|
16473
|
+
function resolveHubAddressRoles(appPalette, hubPalette, flags) {
|
|
16469
16474
|
return {
|
|
16470
|
-
|
|
16471
|
-
|
|
16472
|
-
|
|
16473
|
-
|
|
16475
|
+
appConnections: resolveAppConnections(appPalette, flags),
|
|
16476
|
+
notificationTaps: resolveNotificationTapAddress(flags),
|
|
16477
|
+
internal: resolveInternalAddress(hubPalette, flags),
|
|
16478
|
+
publicEndpoint: resolvePublicEndpoint(hubPalette, flags)
|
|
16474
16479
|
};
|
|
16475
16480
|
}
|
|
16476
16481
|
/** The bare hostname of a base URL, or `null` when it does not parse. */
|
|
@@ -22275,7 +22280,13 @@ var NcAlarmModeDelaysSchema = zod.z.object({
|
|
|
22275
22280
|
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
22276
22281
|
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
22277
22282
|
*/
|
|
22278
|
-
notifySensorRewatched: zod.z.boolean().optional()
|
|
22283
|
+
notifySensorRewatched: zod.z.boolean().optional(),
|
|
22284
|
+
/**
|
|
22285
|
+
* D735: notify "ignored" when a sensor this arm bypassed really MOVED while armed (its own
|
|
22286
|
+
* change time is after the arm) and set nothing off. Absent = false (logged, not sent). A
|
|
22287
|
+
* re-sync, a recovery from `unavailable` or a duplicate is never announced, switch or not.
|
|
22288
|
+
*/
|
|
22289
|
+
notifySensorIgnored: zod.z.boolean().optional()
|
|
22279
22290
|
});
|
|
22280
22291
|
var NcAlarmModeDelaysListSchema = zod.z.array(NcAlarmModeDelaysSchema).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
22281
22292
|
/**
|
|
@@ -22294,7 +22305,9 @@ var NcAlarmModeDelaysEditSchema = zod.z.object({
|
|
|
22294
22305
|
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
22295
22306
|
notifyDuringEntryDelay: zod.z.boolean().nullable().optional(),
|
|
22296
22307
|
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
22297
|
-
notifySensorRewatched: zod.z.boolean().nullable().optional()
|
|
22308
|
+
notifySensorRewatched: zod.z.boolean().nullable().optional(),
|
|
22309
|
+
/** D735: set the switch, or `null` to clear it (back to the default, false). */
|
|
22310
|
+
notifySensorIgnored: zod.z.boolean().nullable().optional()
|
|
22298
22311
|
});
|
|
22299
22312
|
var NcAlarmModeDelaysEditListSchema = zod.z.array(NcAlarmModeDelaysEditSchema).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
22300
22313
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
@@ -38040,7 +38053,7 @@ var GetConnectionEndpointsResultSchema = zod.z.object({
|
|
|
38040
38053
|
localPort: AdvertisedLocalPortSchema
|
|
38041
38054
|
});
|
|
38042
38055
|
/**
|
|
38043
|
-
* The address flagged for notification
|
|
38056
|
+
* The address flagged for notification taps (`notificationTaps`). `baseUrl: null` = AUTO, which
|
|
38044
38057
|
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
38045
38058
|
* so the UI can show it either way.
|
|
38046
38059
|
*/
|
|
@@ -38075,8 +38088,8 @@ var ViewerEndpointsSchema = zod.z.object({
|
|
|
38075
38088
|
});
|
|
38076
38089
|
/**
|
|
38077
38090
|
* DEPRECATED compatibility shape of `getHubAddresses` (D729 amendment, kept
|
|
38078
|
-
*
|
|
38079
|
-
*
|
|
38091
|
+
* for addons built against it): `cluster` is the `internal` role, `browser`
|
|
38092
|
+
* the `publicEndpoint` role; `override` is the flagged address.
|
|
38080
38093
|
*/
|
|
38081
38094
|
var HubAddressSnapshotSchema = zod.z.object({
|
|
38082
38095
|
override: zod.z.string().nullable(),
|
|
@@ -38092,15 +38105,11 @@ var HubAddressesSchema = zod.z.object({
|
|
|
38092
38105
|
browser: HubAddressSnapshotSchema
|
|
38093
38106
|
});
|
|
38094
38107
|
/**
|
|
38095
|
-
* What an address is used for (`hub-address.ts
|
|
38096
|
-
* `
|
|
38108
|
+
* What an address is used for (`hub-address.ts`, D734). `appConnections` is
|
|
38109
|
+
* many-valued; `notificationTaps`, `publicEndpoint` and `internal` are carried
|
|
38110
|
+
* by at most one address.
|
|
38097
38111
|
*/
|
|
38098
|
-
var HubAddressRoleSchema = zod.z.enum(
|
|
38099
|
-
"viewer",
|
|
38100
|
-
"notifications",
|
|
38101
|
-
"agents",
|
|
38102
|
-
"signIn"
|
|
38103
|
-
]);
|
|
38112
|
+
var HubAddressRoleSchema = zod.z.enum(HUB_ADDRESS_ROLES);
|
|
38104
38113
|
var RoleSourceSchema = zod.z.enum([
|
|
38105
38114
|
"flagged",
|
|
38106
38115
|
"auto",
|
|
@@ -38114,8 +38123,8 @@ var HubAddressRoleResolutionSchema = zod.z.object({
|
|
|
38114
38123
|
resolved: zod.z.string().nullable(),
|
|
38115
38124
|
source: RoleSourceSchema
|
|
38116
38125
|
});
|
|
38117
|
-
var
|
|
38118
|
-
/** The addresses flagged `
|
|
38126
|
+
var HubAppConnectionsResolutionSchema = zod.z.object({
|
|
38127
|
+
/** The addresses flagged `appConnections`, or empty = automatic. */
|
|
38119
38128
|
flagged: zod.z.array(zod.z.string()).readonly(),
|
|
38120
38129
|
/** What the apps race right now. */
|
|
38121
38130
|
resolved: zod.z.array(zod.z.string()).readonly(),
|
|
@@ -38141,10 +38150,10 @@ var HubAddressRowSchema = ConnectionEndpointSchema.extend({
|
|
|
38141
38150
|
var HubAddressBookSchema = zod.z.object({
|
|
38142
38151
|
rows: zod.z.array(HubAddressRowSchema).readonly(),
|
|
38143
38152
|
roles: zod.z.object({
|
|
38144
|
-
|
|
38145
|
-
|
|
38146
|
-
|
|
38147
|
-
|
|
38153
|
+
appConnections: HubAppConnectionsResolutionSchema,
|
|
38154
|
+
notificationTaps: HubAddressRoleResolutionSchema,
|
|
38155
|
+
internal: HubAddressRoleResolutionSchema,
|
|
38156
|
+
publicEndpoint: HubAddressRoleResolutionSchema
|
|
38148
38157
|
}),
|
|
38149
38158
|
/** The `hub=` an app link carries (D709), or null. */
|
|
38150
38159
|
appLinkHub: zod.z.string().nullable()
|
|
@@ -38239,19 +38248,18 @@ var localNetworkCapability = {
|
|
|
38239
38248
|
* tunnel always emits `https://` regardless. */
|
|
38240
38249
|
scheme: zod.z.enum(["http", "https"]).optional(),
|
|
38241
38250
|
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
38242
|
-
* an address notification
|
|
38251
|
+
* an address notification taps can be flagged with, not a hub
|
|
38243
38252
|
* route. Default `false`: racers and rankers never see it. */
|
|
38244
38253
|
includeAppLink: zod.z.boolean().optional()
|
|
38245
38254
|
}), GetConnectionEndpointsResultSchema),
|
|
38246
38255
|
/**
|
|
38247
|
-
* The
|
|
38248
|
-
* AUTO, which is the CamStack app link (D709):
|
|
38249
|
-
* `https://camstack.zentik.app/…?hub=<appLinkHub>` and open the
|
|
38250
|
-
* hub address the palette lists can be flagged instead; then
|
|
38251
|
-
*
|
|
38252
|
-
*
|
|
38253
|
-
*
|
|
38254
|
-
* the LAN), never loopback.
|
|
38256
|
+
* The `notificationTaps` role (D734): where TAPPING a notification opens.
|
|
38257
|
+
* `baseUrl: null` means AUTO, which is the CamStack app link (D709): taps
|
|
38258
|
+
* go through `https://camstack.zentik.app/…?hub=<appLinkHub>` and open the
|
|
38259
|
+
* app. Any hub address the palette lists can be flagged instead; then a
|
|
38260
|
+
* tap opens that address. Only the tap: action buttons, attachment /
|
|
38261
|
+
* media links and admin links follow the `publicEndpoint` role
|
|
38262
|
+
* (`getAddresses().roles.publicEndpoint`), never this one.
|
|
38255
38263
|
*
|
|
38256
38264
|
* Why an explicit marker: the automatic ranking cannot know which of
|
|
38257
38265
|
* several reachable addresses the RECIPIENT can actually open. A link is
|
|
@@ -38261,14 +38269,13 @@ var localNetworkCapability = {
|
|
|
38261
38269
|
*/
|
|
38262
38270
|
getNotificationEndpoint: require_sleep.method(zod.z.void(), NotificationEndpointSchema),
|
|
38263
38271
|
/**
|
|
38264
|
-
* @deprecated Use `setAddressRole({ role: '
|
|
38265
|
-
*
|
|
38266
|
-
* flag, with the same validation. `baseUrl: null` restores automatic; an
|
|
38272
|
+
* @deprecated Use `setAddressRole({ role: 'notificationTaps', … })`. It
|
|
38273
|
+
* writes the same `notificationTaps` flag, with the same validation. `baseUrl: null` restores automatic; an
|
|
38267
38274
|
* address that is not detected becomes a custom address.
|
|
38268
38275
|
*/
|
|
38269
38276
|
setNotificationEndpoint: require_sleep.method(zod.z.object({ baseUrl: zod.z.string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }),
|
|
38270
38277
|
/**
|
|
38271
|
-
* The `
|
|
38278
|
+
* The `appConnections` role as shipped apps read it: the flagged addresses
|
|
38272
38279
|
* (detected or custom), or empty for AUTO — every LAN IPv4 address plus
|
|
38273
38280
|
* the public tunnel, never IPv6, mesh, loopback or a custom address.
|
|
38274
38281
|
* `resolved` is the set as it stands right now; the custom ones in it are
|
|
@@ -38276,8 +38283,8 @@ var localNetworkCapability = {
|
|
|
38276
38283
|
*/
|
|
38277
38284
|
getViewerEndpoints: require_sleep.method(zod.z.void(), ViewerEndpointsSchema),
|
|
38278
38285
|
/**
|
|
38279
|
-
* @deprecated Use `setAddressRole({ role: '
|
|
38280
|
-
*
|
|
38286
|
+
* @deprecated Use `setAddressRole({ role: 'appConnections', … })`. It
|
|
38287
|
+
* replaces the same `appConnections` flags.
|
|
38281
38288
|
* Empty `baseUrls` restores automatic.
|
|
38282
38289
|
*/
|
|
38283
38290
|
setViewerEndpoints: require_sleep.method(zod.z.object({ baseUrls: zod.z.array(zod.z.string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }),
|
|
@@ -38286,10 +38293,12 @@ var localNetworkCapability = {
|
|
|
38286
38293
|
* reading of "which address is this hub reached at, for what": detected
|
|
38287
38294
|
* endpoints and custom addresses with their role flags, and per role the
|
|
38288
38295
|
* flagged address, the one in use and whether it is automatic. Agent
|
|
38289
|
-
* deliveries
|
|
38290
|
-
*
|
|
38291
|
-
*
|
|
38292
|
-
*
|
|
38296
|
+
* deliveries and LAN devices read `roles.internal`; sign-in, OAuth2 and
|
|
38297
|
+
* the notification centre's buttons / media / admin links read
|
|
38298
|
+
* `roles.publicEndpoint`; nothing ranks the palette itself. `scheme` is
|
|
38299
|
+
* the one the caller shows LAN rows in (as `getConnectionEndpoints`);
|
|
38300
|
+
* `internal` and `publicEndpoint` are always resolved over the HTTPS
|
|
38301
|
+
* palette.
|
|
38293
38302
|
*/
|
|
38294
38303
|
getAddresses: require_sleep.method(zod.z.object({ scheme: zod.z.enum(["http", "https"]).optional() }).optional(), HubAddressBookSchema),
|
|
38295
38304
|
/**
|
|
@@ -38314,8 +38323,9 @@ var localNetworkCapability = {
|
|
|
38314
38323
|
* Flag (`enabled: true`) or unflag an address for a role. For a
|
|
38315
38324
|
* single-valued role, flagging moves the flag off every other address.
|
|
38316
38325
|
* `baseUrl: null` returns the role to automatic. The address must be a row
|
|
38317
|
-
* of the table (detected, custom, or the app link for
|
|
38318
|
-
* `
|
|
38326
|
+
* of the table (detected, custom, or the app link for `notificationTaps`);
|
|
38327
|
+
* `publicEndpoint` on a plain-http address is refused unless
|
|
38328
|
+
* `acceptInsecureHttp`, and never takes the app link.
|
|
38319
38329
|
*/
|
|
38320
38330
|
setAddressRole: require_sleep.method(zod.z.object({
|
|
38321
38331
|
role: HubAddressRoleSchema,
|
|
@@ -38327,9 +38337,9 @@ var localNetworkCapability = {
|
|
|
38327
38337
|
auth: "admin"
|
|
38328
38338
|
}),
|
|
38329
38339
|
/**
|
|
38330
|
-
* @deprecated Read `getAddresses().roles.
|
|
38331
|
-
*
|
|
38332
|
-
* `cluster` = the `
|
|
38340
|
+
* @deprecated Read `getAddresses().roles.internal` / `.publicEndpoint`.
|
|
38341
|
+
* Kept so an addon built against the D729 amendment keeps resolving:
|
|
38342
|
+
* `cluster` = the `internal` role, `browser` = the `publicEndpoint` role.
|
|
38333
38343
|
*/
|
|
38334
38344
|
getHubAddresses: require_sleep.method(zod.z.void(), HubAddressesSchema),
|
|
38335
38345
|
/**
|
|
@@ -68907,17 +68917,23 @@ var NC_ALARM_DELAY_FIELDS = [
|
|
|
68907
68917
|
* all read this one constant.
|
|
68908
68918
|
*/
|
|
68909
68919
|
var NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC = 30;
|
|
68910
|
-
var NC_ALARM_NOTIFY_FIELDS = [
|
|
68920
|
+
var NC_ALARM_NOTIFY_FIELDS = [
|
|
68921
|
+
"notifyDuringEntryDelay",
|
|
68922
|
+
"notifySensorRewatched",
|
|
68923
|
+
"notifySensorIgnored"
|
|
68924
|
+
];
|
|
68911
68925
|
/**
|
|
68912
68926
|
* The switches `mode` runs on. There is no global value: absent is OFF (operator decision
|
|
68913
68927
|
* 2026-10-06 — the entry-delay notification is the only one by default, and "watched again"
|
|
68914
|
-
* is not sent). An answer from an older hub carries no
|
|
68928
|
+
* is not sent; 2026-10-07 — nor is "ignored", D735). An answer from an older hub carries no
|
|
68929
|
+
* switch and reads as off.
|
|
68915
68930
|
*/
|
|
68916
68931
|
function resolveModeNotifyPolicy(settings, mode) {
|
|
68917
68932
|
const entry = (settings.modeDelays ?? []).find((e) => e.mode === mode);
|
|
68918
68933
|
return {
|
|
68919
68934
|
notifyDuringEntryDelay: entry?.notifyDuringEntryDelay === true,
|
|
68920
|
-
notifySensorRewatched: entry?.notifySensorRewatched === true
|
|
68935
|
+
notifySensorRewatched: entry?.notifySensorRewatched === true,
|
|
68936
|
+
notifySensorIgnored: entry?.notifySensorIgnored === true
|
|
68921
68937
|
};
|
|
68922
68938
|
}
|
|
68923
68939
|
/**
|
|
@@ -69009,6 +69025,7 @@ function applyModeDelaysEdits(current, edits) {
|
|
|
69009
69025
|
const schedule = editedSchedule(base.schedule, edit.schedule);
|
|
69010
69026
|
const duringEntry = editedFlag(base.notifyDuringEntryDelay, edit.notifyDuringEntryDelay);
|
|
69011
69027
|
const rewatched = editedFlag(base.notifySensorRewatched, edit.notifySensorRewatched);
|
|
69028
|
+
const ignored = editedFlag(base.notifySensorIgnored, edit.notifySensorIgnored);
|
|
69012
69029
|
if (exit !== void 0) next.exitDelaySec = exit;
|
|
69013
69030
|
if (entry !== void 0) next.entryDelaySec = entry;
|
|
69014
69031
|
if (triggered !== void 0) next.triggeredDurationSec = triggered;
|
|
@@ -69016,10 +69033,11 @@ function applyModeDelaysEdits(current, edits) {
|
|
|
69016
69033
|
if (schedule !== void 0) next.schedule = schedule;
|
|
69017
69034
|
if (duringEntry !== void 0) next.notifyDuringEntryDelay = duringEntry;
|
|
69018
69035
|
if (rewatched !== void 0) next.notifySensorRewatched = rewatched;
|
|
69036
|
+
if (ignored !== void 0) next.notifySensorIgnored = ignored;
|
|
69019
69037
|
if (at >= 0) out[at] = next;
|
|
69020
69038
|
else out.push(next);
|
|
69021
69039
|
}
|
|
69022
|
-
return out.filter((e) => e.exitDelaySec !== void 0 || e.entryDelaySec !== void 0 || e.triggeredDurationSec !== void 0 || e.postTriggeredAction !== void 0 || e.schedule !== void 0 || e.notifyDuringEntryDelay !== void 0 || e.notifySensorRewatched !== void 0);
|
|
69040
|
+
return out.filter((e) => e.exitDelaySec !== void 0 || e.entryDelaySec !== void 0 || e.triggeredDurationSec !== void 0 || e.postTriggeredAction !== void 0 || e.schedule !== void 0 || e.notifyDuringEntryDelay !== void 0 || e.notifySensorRewatched !== void 0 || e.notifySensorIgnored !== void 0);
|
|
69023
69041
|
}
|
|
69024
69042
|
/**
|
|
69025
69043
|
* Put ONE device on, or take it off, ONE mode's device-id list. A no-op answers
|
|
@@ -74891,6 +74909,7 @@ exports.PIPELINE_OWNER_CAPABILITY_NAMES = PIPELINE_OWNER_CAPABILITY_NAMES;
|
|
|
74891
74909
|
exports.PRIVACY_MASK_CAP_NAME = PRIVACY_MASK_CAP_NAME;
|
|
74892
74910
|
exports.PROVIDER_KIND_CAP_NAMES = PROVIDER_KIND_CAP_NAMES;
|
|
74893
74911
|
exports.PROVIDER_PIN_FIELD = require_sleep.PROVIDER_PIN_FIELD;
|
|
74912
|
+
exports.PUBLIC_ENDPOINT_HTTP_REASON = PUBLIC_ENDPOINT_HTTP_REASON;
|
|
74894
74913
|
exports.PYTHON_SCRIPT = PYTHON_SCRIPT;
|
|
74895
74914
|
exports.PackageUpdateSchema = PackageUpdateSchema;
|
|
74896
74915
|
exports.PackageVersionInfoSchema = PackageVersionInfoSchema;
|
|
@@ -75076,7 +75095,6 @@ exports.SCOPE_PRESETS = SCOPE_PRESETS;
|
|
|
75076
75095
|
exports.SENSOR_FEATURES = SENSOR_FEATURES;
|
|
75077
75096
|
exports.SENSOR_MAP = SENSOR_MAP;
|
|
75078
75097
|
exports.SHARE_VIEW_KINDS = require_sleep.SHARE_VIEW_KINDS;
|
|
75079
|
-
exports.SIGN_IN_HTTP_REASON = SIGN_IN_HTTP_REASON;
|
|
75080
75098
|
exports.SINGLE_HUB_ADDRESS_ROLES = SINGLE_HUB_ADDRESS_ROLES;
|
|
75081
75099
|
exports.SOURCE_CAPS = require_composition.SOURCE_CAPS;
|
|
75082
75100
|
exports.SOURCE_CAP_ACTIVE_FIELD = require_composition.SOURCE_CAP_ACTIVE_FIELD;
|
|
@@ -75660,7 +75678,7 @@ exports.isBatteryPresenceFault = isBatteryPresenceFault;
|
|
|
75660
75678
|
exports.isClusterScopedStep = isClusterScopedStep;
|
|
75661
75679
|
exports.isCollectionArrayMethod = isCollectionArrayMethod;
|
|
75662
75680
|
exports.isDefaultAlarmProfileId = isDefaultAlarmProfileId;
|
|
75663
|
-
exports.
|
|
75681
|
+
exports.isDefaultAppConnectionEndpoint = isDefaultAppConnectionEndpoint;
|
|
75664
75682
|
exports.isDeployableToAgent = isDeployableToAgent;
|
|
75665
75683
|
exports.isDetectionMacroClass = isDetectionMacroClass;
|
|
75666
75684
|
exports.isDeviceConfigCap = require_sleep.isDeviceConfigCap;
|
|
@@ -75867,7 +75885,7 @@ exports.resetPoolBaseline = resetPoolBaseline;
|
|
|
75867
75885
|
exports.resolveAddonExecution = resolveAddonExecution;
|
|
75868
75886
|
exports.resolveAddonGroup = resolveAddonGroup;
|
|
75869
75887
|
exports.resolveAddonPlacement = resolveAddonPlacement;
|
|
75870
|
-
exports.
|
|
75888
|
+
exports.resolveAppConnections = resolveAppConnections;
|
|
75871
75889
|
exports.resolveBucketMs = resolveBucketMs;
|
|
75872
75890
|
exports.resolveCapMount = require_sleep.resolveCapMount;
|
|
75873
75891
|
exports.resolveClipSearchMinScore = resolveClipSearchMinScore;
|
|
@@ -75883,22 +75901,22 @@ exports.resolveExportProfiles = resolveExportProfiles;
|
|
|
75883
75901
|
exports.resolveFormat = resolveFormat;
|
|
75884
75902
|
exports.resolveHubAddressRoles = resolveHubAddressRoles;
|
|
75885
75903
|
exports.resolveHydratedFieldValue = require_sleep.resolveHydratedFieldValue;
|
|
75904
|
+
exports.resolveInternalAddress = resolveInternalAddress;
|
|
75886
75905
|
exports.resolveLocationIcon = resolveLocationIcon;
|
|
75887
75906
|
exports.resolveLocationMode = resolveLocationMode;
|
|
75888
75907
|
exports.resolveMethodAuth = resolveMethodAuth;
|
|
75889
75908
|
exports.resolveModeDelays = resolveModeDelays;
|
|
75890
75909
|
exports.resolveModeNotifyPolicy = resolveModeNotifyPolicy;
|
|
75891
75910
|
exports.resolveMutate = resolveMutate;
|
|
75892
|
-
exports.
|
|
75911
|
+
exports.resolveNotificationTapAddress = resolveNotificationTapAddress;
|
|
75893
75912
|
exports.resolvePoolMemoryPolicy = resolvePoolMemoryPolicy;
|
|
75913
|
+
exports.resolvePublicEndpoint = resolvePublicEndpoint;
|
|
75894
75914
|
exports.resolveRecordingProfiles = resolveRecordingProfiles;
|
|
75895
75915
|
exports.resolveRootSupply = resolveRootSupply;
|
|
75896
75916
|
exports.resolveRunnerId = resolveRunnerId;
|
|
75897
|
-
exports.resolveSignInAddress = resolveSignInAddress;
|
|
75898
75917
|
exports.resolveStreamMaps = require_composition.resolveStreamMaps;
|
|
75899
75918
|
exports.resolveVariantModelId = resolveVariantModelId;
|
|
75900
75919
|
exports.resolveViewableDeviceIds = resolveViewableDeviceIds;
|
|
75901
|
-
exports.resolveViewerAddresses = resolveViewerAddresses;
|
|
75902
75920
|
exports.roleSpec = roleSpec;
|
|
75903
75921
|
exports.roomCompositionExample = roomCompositionExample;
|
|
75904
75922
|
exports.rootSuppliesOf = rootSuppliesOf;
|
|
@@ -75931,8 +75949,8 @@ exports.scoreRuntimes = scoreRuntimes;
|
|
|
75931
75949
|
exports.scriptRunnerCapability = scriptRunnerCapability;
|
|
75932
75950
|
exports.searchDisplayIcons = searchDisplayIcons;
|
|
75933
75951
|
exports.secureActuationFor = secureActuationFor;
|
|
75952
|
+
exports.selectAppConnectionEndpoints = selectAppConnectionEndpoints;
|
|
75934
75953
|
exports.selectAssignedProfileSlots = require_sleep.selectAssignedProfileSlots;
|
|
75935
|
-
exports.selectViewerEndpoints = selectViewerEndpoints;
|
|
75936
75954
|
exports.sendTimesForEditor = sendTimesForEditor;
|
|
75937
75955
|
exports.sendTimesOfSchedule = sendTimesOfSchedule;
|
|
75938
75956
|
exports.sensorRaisedOf = sensorRaisedOf;
|