@camstack/addon-auth 1.2.143 → 1.2.145
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{dist-DscyrBBw.js → dist-B2h4Ziv7.mjs} +897 -202
- package/dist/{dist-fzt8gRGY.mjs → dist-Be0i-dLp.js} +1146 -7
- package/dist/oidc/auth-oidc.addon.js +131 -97
- package/dist/oidc/auth-oidc.addon.mjs +126 -92
- package/dist/webauthn/_stub.js +1 -1
- package/dist/webauthn/{_virtual_mf-localSharedImportMap___mfe_internal__addon_auth_webauthn_widgets-CDD1e9sj.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_auth_webauthn_widgets-DuRYyuGp.mjs} +2 -2
- package/dist/webauthn/_virtual_mf___mfe_internal__addon_auth_webauthn_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DSXWgur5.mjs +26 -0
- package/dist/webauthn/auth-webauthn.addon.js +16 -4
- package/dist/webauthn/auth-webauthn.addon.mjs +16 -5
- package/dist/webauthn/{hostInit-Ch3QCBTy.mjs → hostInit-B5ByDlK7.mjs} +2 -2
- package/dist/webauthn/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/webauthn/_virtual_mf___mfe_internal__addon_auth_webauthn_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BlpPaWg4.mjs +0 -26
|
@@ -1,3 +1,37 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __esmMin = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
9
|
+
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
10
|
+
var __exportAll = (all, no_symbols) => {
|
|
11
|
+
let target = {};
|
|
12
|
+
for (var name in all) __defProp(target, name, {
|
|
13
|
+
get: all[name],
|
|
14
|
+
enumerable: true
|
|
15
|
+
});
|
|
16
|
+
if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
17
|
+
return target;
|
|
18
|
+
};
|
|
19
|
+
var __copyProps = (to, from, except, desc) => {
|
|
20
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
21
|
+
key = keys[i];
|
|
22
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
23
|
+
get: ((k) => from[k]).bind(null, key),
|
|
24
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return to;
|
|
28
|
+
};
|
|
29
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
30
|
+
value: mod,
|
|
31
|
+
enumerable: true
|
|
32
|
+
}) : target, mod));
|
|
33
|
+
var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
34
|
+
require("node:crypto");
|
|
1
35
|
//#region ../types/dist/event-category-C4hVnRo8.mjs
|
|
2
36
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
3
37
|
EventCategory["SystemBoot"] = "system.boot";
|
|
@@ -5386,7 +5420,7 @@ var ZodIssueCode = {
|
|
|
5386
5420
|
var ZodFirstPartyTypeKind;
|
|
5387
5421
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5388
5422
|
//#endregion
|
|
5389
|
-
//#region ../types/dist/sleep-
|
|
5423
|
+
//#region ../types/dist/sleep-DAX0-2v9.mjs
|
|
5390
5424
|
/**
|
|
5391
5425
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5392
5426
|
* window to float samples (D455).
|
|
@@ -12279,6 +12313,123 @@ var ConvertResultSchema = object({
|
|
|
12279
12313
|
})).readonly()
|
|
12280
12314
|
});
|
|
12281
12315
|
/**
|
|
12316
|
+
* The viewer app's custom-scheme callback — the ONE list of URLs a hub flow
|
|
12317
|
+
* may hand a browser back to the native app at.
|
|
12318
|
+
*
|
|
12319
|
+
* Two readers, one answer: the admin-ui login page (`redirect=` for the
|
|
12320
|
+
* native sign-in handoff) and the hub itself (`auth.beginExternalLink`'s
|
|
12321
|
+
* `returnTo` for a native account link, D801). Both validate against this
|
|
12322
|
+
* list, so a scheme added for one flow can never be accepted by one side and
|
|
12323
|
+
* refused by the other.
|
|
12324
|
+
*
|
|
12325
|
+
* `camstack` is the production app; `camstack.dev` the dev client
|
|
12326
|
+
* (`APP_VARIANT=development`). Exact match after canonicalisation — no
|
|
12327
|
+
* query or fragment riders, no http(s).
|
|
12328
|
+
*/
|
|
12329
|
+
var APP_AUTH_CALLBACK_URLS = ["camstack://auth-callback", "camstack.dev://auth-callback"];
|
|
12330
|
+
/**
|
|
12331
|
+
* The variants the OS / linking layer produces for the same callback:
|
|
12332
|
+
* `scheme:///auth-callback` (expo-linking's empty-host standalone form — three
|
|
12333
|
+
* slashes) and a trailing `/` both mean `scheme://auth-callback`. Nothing else
|
|
12334
|
+
* is normalised: riders keep failing the exact match.
|
|
12335
|
+
*/
|
|
12336
|
+
function canonicalizeAppCallback(raw) {
|
|
12337
|
+
return raw.replace(/^([a-z][a-z0-9.+-]*):\/\/\/(?!\/)/i, "$1://").replace(/\/$/, "");
|
|
12338
|
+
}
|
|
12339
|
+
/** The canonical allowlisted callback `raw` names, or `null`. */
|
|
12340
|
+
function parseAppAuthCallback(raw) {
|
|
12341
|
+
if (typeof raw !== "string" || raw.length === 0 || raw.length > 512) return null;
|
|
12342
|
+
const canonical = canonicalizeAppCallback(raw);
|
|
12343
|
+
return APP_AUTH_CALLBACK_URLS.includes(canonical) ? canonical : null;
|
|
12344
|
+
}
|
|
12345
|
+
/**
|
|
12346
|
+
* The native-app browser sign-in flows the hub serves itself (D858).
|
|
12347
|
+
*
|
|
12348
|
+
* The viewer app opens the system browser at a hub START route (OIDC
|
|
12349
|
+
* `/addon/auth-oidc/<id>/start`, the passkey page `/auth/app/passkey`) and gets
|
|
12350
|
+
* a one-shot handoff code back at its custom scheme. These helpers are the one
|
|
12351
|
+
* reading of the request every leg shares - the OIDC addon, the finish leg and
|
|
12352
|
+
* the passkey page - so a rule tightened for one is tightened for all:
|
|
12353
|
+
*
|
|
12354
|
+
* - PKCE is mandatory and S256 only (`code_challenge` = base64url of a SHA-256);
|
|
12355
|
+
* - `state` is echoed back exactly;
|
|
12356
|
+
* - the return URL is one of {@link APP_AUTH_CALLBACK_URLS}, never a free URL;
|
|
12357
|
+
* - the purpose is `new-session` or `step-up` (the legacy `renew` has no browser flow).
|
|
12358
|
+
*
|
|
12359
|
+
* Pure and dependency-free (zod only) so an addon, the backend and a spec read
|
|
12360
|
+
* the same code.
|
|
12361
|
+
*/
|
|
12362
|
+
/** What the app redeems the code for. `step-up` yields a proof, never a session. */
|
|
12363
|
+
var AppFlowPurposeSchema = _enum(["new-session", "step-up"]);
|
|
12364
|
+
/** Where the app is sent when the request names no `redirect`. */
|
|
12365
|
+
var APP_FLOW_DEFAULT_REDIRECT = "camstack://auth-callback";
|
|
12366
|
+
/** S256 challenge: base64url of 32 bytes = 43 characters, no padding. */
|
|
12367
|
+
var CHALLENGE_PATTERN = /^[A-Za-z0-9_-]{43}$/;
|
|
12368
|
+
/** The app's own `state`: URL-safe characters only, bounded. */
|
|
12369
|
+
var STATE_PATTERN = /^[A-Za-z0-9._~-]{1,256}$/;
|
|
12370
|
+
/** Operator-facing words for a refusal (the "clear page", D858). */
|
|
12371
|
+
var APP_FLOW_REFUSAL_MESSAGES = {
|
|
12372
|
+
"bad-challenge": "The sign-in request has no valid PKCE challenge (S256).",
|
|
12373
|
+
"bad-challenge-method": "Only the S256 PKCE method is supported.",
|
|
12374
|
+
"bad-state": "The sign-in request has no valid state.",
|
|
12375
|
+
"bad-purpose": "The sign-in request names an unknown purpose.",
|
|
12376
|
+
"bad-redirect": "The sign-in request names a return address this hub does not accept."
|
|
12377
|
+
};
|
|
12378
|
+
/**
|
|
12379
|
+
* Read the app parameters off a start query: `code_challenge`,
|
|
12380
|
+
* `code_challenge_method`, `state`, `purpose`, `redirect`. Anything missing or
|
|
12381
|
+
* malformed is refused - there is no lenient default for PKCE or state.
|
|
12382
|
+
*/
|
|
12383
|
+
function parseAppFlowRequest(query) {
|
|
12384
|
+
const challenge = query["code_challenge"];
|
|
12385
|
+
if (challenge === void 0 || !CHALLENGE_PATTERN.test(challenge)) return {
|
|
12386
|
+
ok: false,
|
|
12387
|
+
reason: "bad-challenge"
|
|
12388
|
+
};
|
|
12389
|
+
if (query["code_challenge_method"] !== "S256") return {
|
|
12390
|
+
ok: false,
|
|
12391
|
+
reason: "bad-challenge-method"
|
|
12392
|
+
};
|
|
12393
|
+
const state = query["state"];
|
|
12394
|
+
if (state === void 0 || !STATE_PATTERN.test(state)) return {
|
|
12395
|
+
ok: false,
|
|
12396
|
+
reason: "bad-state"
|
|
12397
|
+
};
|
|
12398
|
+
const purpose = AppFlowPurposeSchema.safeParse(query["purpose"]);
|
|
12399
|
+
if (!purpose.success) return {
|
|
12400
|
+
ok: false,
|
|
12401
|
+
reason: "bad-purpose"
|
|
12402
|
+
};
|
|
12403
|
+
const redirectParam = query["redirect"];
|
|
12404
|
+
const redirect = redirectParam === void 0 ? APP_FLOW_DEFAULT_REDIRECT : parseAppAuthCallback(redirectParam);
|
|
12405
|
+
if (redirect === null) return {
|
|
12406
|
+
ok: false,
|
|
12407
|
+
reason: "bad-redirect"
|
|
12408
|
+
};
|
|
12409
|
+
return {
|
|
12410
|
+
ok: true,
|
|
12411
|
+
request: {
|
|
12412
|
+
codeChallenge: challenge,
|
|
12413
|
+
state,
|
|
12414
|
+
purpose: purpose.data,
|
|
12415
|
+
redirect
|
|
12416
|
+
}
|
|
12417
|
+
};
|
|
12418
|
+
}
|
|
12419
|
+
/** The app's callback with `code` (success) or `error` (refusal), and the echoed `state` when known. */
|
|
12420
|
+
function appFlowLocation(redirect, result, state) {
|
|
12421
|
+
const params = new URLSearchParams();
|
|
12422
|
+
if ("code" in result) params.set("code", result.code);
|
|
12423
|
+
else params.set("error", result.error);
|
|
12424
|
+
if (state !== void 0) params.set("state", state);
|
|
12425
|
+
return `${redirect}?${params.toString()}`;
|
|
12426
|
+
}
|
|
12427
|
+
/** How a native app starts one login method (D858), as `auth.listLoginMethods` reports it. */
|
|
12428
|
+
var AppLoginPathSchema = discriminatedUnion("kind", [object({ kind: literal("native") }), object({
|
|
12429
|
+
kind: literal("browser"),
|
|
12430
|
+
startPath: string().startsWith("/")
|
|
12431
|
+
})]);
|
|
12432
|
+
/**
|
|
12282
12433
|
* The cookie that binds an SSO sign-in to the browser that started it.
|
|
12283
12434
|
*
|
|
12284
12435
|
* An IdP `/start` sets it to a random value and keeps only its SHA-256 in the
|
|
@@ -12292,6 +12443,244 @@ var ConvertResultSchema = object({
|
|
|
12292
12443
|
* One name, two readers (the OIDC addon that sets it, the hub that checks it).
|
|
12293
12444
|
*/
|
|
12294
12445
|
var SSO_STATE_COOKIE = "camstack_sso_state";
|
|
12446
|
+
/**
|
|
12447
|
+
* Device certificates (D855) — the wire contract shared by the hub, the admin
|
|
12448
|
+
* UI and the native viewer.
|
|
12449
|
+
*
|
|
12450
|
+
* A device (a phone) generates its OWN P-256 key pair in hardware (Secure
|
|
12451
|
+
* Enclave / Android Keystore / a non-extractable WebCrypto key). The private
|
|
12452
|
+
* key never travels. The hub signs the PUBLIC key into an X.509 leaf under a
|
|
12453
|
+
* dedicated device CA; the device later proves possession of the key by
|
|
12454
|
+
* signing a hub-issued nonce, and the hub answers with the same session a
|
|
12455
|
+
* password login opens.
|
|
12456
|
+
*
|
|
12457
|
+
* Everything on the wire is a small string (a PEM, a base64url signature):
|
|
12458
|
+
* D613 is about bulk bytes, and a certificate is ~600 bytes.
|
|
12459
|
+
*/
|
|
12460
|
+
/** Signature algorithm of every device credential: ECDSA, curve P-256, SHA-256. */
|
|
12461
|
+
var DEVICE_CERT_SIGNATURE = "ecdsa-p256-sha256";
|
|
12462
|
+
/** First line of every signed message; a change of format bumps the version. */
|
|
12463
|
+
var DEVICE_SIGNATURE_MESSAGE_VERSION = "camstack-device-cert-v1";
|
|
12464
|
+
_enum([
|
|
12465
|
+
"login",
|
|
12466
|
+
"renew",
|
|
12467
|
+
"revoke"
|
|
12468
|
+
]);
|
|
12469
|
+
var DevicePlatformSchema = _enum([
|
|
12470
|
+
"ios",
|
|
12471
|
+
"android",
|
|
12472
|
+
"web",
|
|
12473
|
+
"other"
|
|
12474
|
+
]);
|
|
12475
|
+
var Base64UrlSchema = string().min(1).max(4096).regex(/^[A-Za-z0-9_-]+$/);
|
|
12476
|
+
var PemSchema = string().min(1).max(16384);
|
|
12477
|
+
/**
|
|
12478
|
+
* Why a device-certificate endpoint said no. Distinct from a transport / 5xx
|
|
12479
|
+
* failure: those carry no reason and mean "try again", never "the credential is
|
|
12480
|
+
* dead". The viewer switches on this exhaustively.
|
|
12481
|
+
*/
|
|
12482
|
+
var DeviceRefusalReasonSchema = _enum([
|
|
12483
|
+
"revoked",
|
|
12484
|
+
"unknown-credential",
|
|
12485
|
+
"expired",
|
|
12486
|
+
"bad-signature",
|
|
12487
|
+
"nonce-invalid",
|
|
12488
|
+
"rate-limited",
|
|
12489
|
+
"invalid-certificate",
|
|
12490
|
+
"superseded",
|
|
12491
|
+
"user-gone",
|
|
12492
|
+
"unavailable",
|
|
12493
|
+
"code-invalid",
|
|
12494
|
+
"self-enrollment-disabled",
|
|
12495
|
+
"step-up-required",
|
|
12496
|
+
"bad-public-key"
|
|
12497
|
+
]);
|
|
12498
|
+
var DeviceRefusalSchema = object({
|
|
12499
|
+
ok: literal(false),
|
|
12500
|
+
reason: DeviceRefusalReasonSchema,
|
|
12501
|
+
definitive: boolean(),
|
|
12502
|
+
retryAfterSeconds: number().optional()
|
|
12503
|
+
});
|
|
12504
|
+
object({
|
|
12505
|
+
code: string().min(1).max(256),
|
|
12506
|
+
/** SubjectPublicKeyInfo DER of the device's P-256 public key, base64url. */
|
|
12507
|
+
publicKeySpki: Base64UrlSchema,
|
|
12508
|
+
deviceName: string().min(1).max(80).optional(),
|
|
12509
|
+
platform: DevicePlatformSchema
|
|
12510
|
+
});
|
|
12511
|
+
discriminatedUnion("ok", [object({
|
|
12512
|
+
credentialId: string(),
|
|
12513
|
+
certPem: PemSchema,
|
|
12514
|
+
/** The device CA certificate the leaf chains to. */
|
|
12515
|
+
chainPem: PemSchema,
|
|
12516
|
+
notAfter: number(),
|
|
12517
|
+
user: object({
|
|
12518
|
+
id: string(),
|
|
12519
|
+
username: string()
|
|
12520
|
+
})
|
|
12521
|
+
}).extend({ ok: literal(true) }), DeviceRefusalSchema]);
|
|
12522
|
+
object({
|
|
12523
|
+
/** The single-use step-up proof (`auth.deviceEnrollProofFrom…`). */
|
|
12524
|
+
proof: string().min(1).max(512),
|
|
12525
|
+
publicKeySpki: Base64UrlSchema,
|
|
12526
|
+
deviceName: string().min(1).max(80),
|
|
12527
|
+
platform: DevicePlatformSchema
|
|
12528
|
+
});
|
|
12529
|
+
object({
|
|
12530
|
+
proof: string(),
|
|
12531
|
+
expiresAt: number()
|
|
12532
|
+
});
|
|
12533
|
+
discriminatedUnion("ok", [object({
|
|
12534
|
+
nonce: string(),
|
|
12535
|
+
/** The origin to put in the signed message. The app compares it to the hub it dialled. */
|
|
12536
|
+
origin: string(),
|
|
12537
|
+
expiresAt: number(),
|
|
12538
|
+
signature: literal(DEVICE_CERT_SIGNATURE)
|
|
12539
|
+
}).extend({ ok: literal(true) }), DeviceRefusalSchema]);
|
|
12540
|
+
object({
|
|
12541
|
+
certPem: PemSchema,
|
|
12542
|
+
nonce: string().min(1).max(256),
|
|
12543
|
+
/** ECDSA P-256 SHA-256 over {@link buildDeviceSignatureMessage}; raw r||s or DER, base64url. */
|
|
12544
|
+
signature: Base64UrlSchema
|
|
12545
|
+
});
|
|
12546
|
+
discriminatedUnion("ok", [object({
|
|
12547
|
+
credentialId: string(),
|
|
12548
|
+
certPem: PemSchema,
|
|
12549
|
+
chainPem: PemSchema,
|
|
12550
|
+
notAfter: number()
|
|
12551
|
+
}).extend({ ok: literal(true) }), DeviceRefusalSchema]);
|
|
12552
|
+
discriminatedUnion("ok", [object({
|
|
12553
|
+
ok: literal(true),
|
|
12554
|
+
credentialId: string(),
|
|
12555
|
+
sessionsEnded: number().int()
|
|
12556
|
+
}), DeviceRefusalSchema]);
|
|
12557
|
+
var DeviceCredentialStatusSchema = _enum([
|
|
12558
|
+
"active",
|
|
12559
|
+
"expired",
|
|
12560
|
+
"revoked"
|
|
12561
|
+
]);
|
|
12562
|
+
var DeviceCredentialSchema = object({
|
|
12563
|
+
id: string(),
|
|
12564
|
+
userId: string(),
|
|
12565
|
+
username: string().nullable(),
|
|
12566
|
+
deviceName: string(),
|
|
12567
|
+
platform: DevicePlatformSchema,
|
|
12568
|
+
enrolledVia: _enum(["qr", "self"]),
|
|
12569
|
+
/** SHA-256 of the leaf certificate DER, colon-hex. */
|
|
12570
|
+
fingerprint: string(),
|
|
12571
|
+
issuedAt: number(),
|
|
12572
|
+
expiresAt: number(),
|
|
12573
|
+
lastUsedAt: number().nullable(),
|
|
12574
|
+
lastUsedFrom: string().nullable(),
|
|
12575
|
+
revokedAt: number().nullable(),
|
|
12576
|
+
/** `admin:<userId>` | `user:<userId>` | `device` | `user-deleted`. */
|
|
12577
|
+
revokedBy: string().nullable(),
|
|
12578
|
+
status: DeviceCredentialStatusSchema
|
|
12579
|
+
});
|
|
12580
|
+
var StartEnrollmentOutputSchema = object({
|
|
12581
|
+
/** Shown once; only its hash is kept. */
|
|
12582
|
+
code: string(),
|
|
12583
|
+
expiresAt: number(),
|
|
12584
|
+
/** `camstack://enroll?hub=…&code=…` — what the QR encodes. */
|
|
12585
|
+
enrollUrl: string(),
|
|
12586
|
+
/** The hub origin in the link, or `null` when the hub could not name one (the link then has no `hub`). */
|
|
12587
|
+
hubOrigin: string().nullable(),
|
|
12588
|
+
/** Every origin the apps may try (role `appConnections`). */
|
|
12589
|
+
hubOrigins: array(string())
|
|
12590
|
+
});
|
|
12591
|
+
object({
|
|
12592
|
+
kind: literal("device-certificate"),
|
|
12593
|
+
id: literal("device-certificate"),
|
|
12594
|
+
label: string(),
|
|
12595
|
+
stage: literal("primary"),
|
|
12596
|
+
/** tRPC paths under the hub's `auth` router, so a client names no literal. */
|
|
12597
|
+
challengePath: literal("auth.getDeviceChallenge"),
|
|
12598
|
+
revokePath: literal("auth.revokeOwnDeviceCertificate"),
|
|
12599
|
+
enrollSelfPath: literal("auth.enrollSelf"),
|
|
12600
|
+
loginPath: literal("auth.loginWithDeviceCertificate"),
|
|
12601
|
+
renewPath: literal("auth.renewDeviceCertificate"),
|
|
12602
|
+
signature: literal(DEVICE_CERT_SIGNATURE),
|
|
12603
|
+
messageVersion: literal(DEVICE_SIGNATURE_MESSAGE_VERSION),
|
|
12604
|
+
/** Which clients can execute it: a native app silently, a browser with a non-extractable WebCrypto key. */
|
|
12605
|
+
clients: array(_enum(["native", "web"])),
|
|
12606
|
+
/** The app executes it itself, silently (D858). */
|
|
12607
|
+
app: AppLoginPathSchema.nullable()
|
|
12608
|
+
});
|
|
12609
|
+
/** host[:port] — a DNS name, IPv4 or bracketed IPv6. No userinfo, path or spaces. */
|
|
12610
|
+
var AUTHORITY_RE = /^(?:[a-z0-9.-]+|\[[0-9a-f:.]+\])(?::\d{1,5})?$/i;
|
|
12611
|
+
/** Same grammar as the hub's `parseForwardedPrefix` (spa-mount.ts). */
|
|
12612
|
+
var PREFIX_RE = /^\/[A-Za-z0-9_\-.]+(?:\/[A-Za-z0-9_\-.]+)*$/;
|
|
12613
|
+
var MAX_PREFIX_LENGTH = 512;
|
|
12614
|
+
/** First value of a possibly comma-joined forwarded header (the client-most proxy). */
|
|
12615
|
+
function firstValue(value) {
|
|
12616
|
+
if (value === void 0) return null;
|
|
12617
|
+
const first = value.split(",")[0]?.trim() ?? "";
|
|
12618
|
+
return first.length === 0 ? null : first;
|
|
12619
|
+
}
|
|
12620
|
+
/** `scheme://host[:port]` normalised by WHATWG URL, or `null` if it is not an http(s) origin. */
|
|
12621
|
+
function normalizeOrigin(value) {
|
|
12622
|
+
try {
|
|
12623
|
+
const url = new URL(value);
|
|
12624
|
+
if (url.protocol !== "https:" && url.protocol !== "http:") return null;
|
|
12625
|
+
if (url.username !== "" || url.password !== "") return null;
|
|
12626
|
+
return url.origin;
|
|
12627
|
+
} catch {
|
|
12628
|
+
return null;
|
|
12629
|
+
}
|
|
12630
|
+
}
|
|
12631
|
+
/** The mount prefix the relay named (no trailing slash), or `''`. Invalid = absent. */
|
|
12632
|
+
function requestMountPrefix(headers) {
|
|
12633
|
+
const raw = headers["x-forwarded-prefix"];
|
|
12634
|
+
if (raw === void 0 || raw.length === 0 || raw.length > MAX_PREFIX_LENGTH) return "";
|
|
12635
|
+
const trimmed = raw.endsWith("/") ? raw.slice(0, -1) : raw;
|
|
12636
|
+
if (trimmed === "" || !PREFIX_RE.test(trimmed)) return "";
|
|
12637
|
+
if (trimmed.split("/").some((segment) => segment === ".." || segment === ".")) return "";
|
|
12638
|
+
return trimmed;
|
|
12639
|
+
}
|
|
12640
|
+
/**
|
|
12641
|
+
* The origins the request CLAIMS, most specific first: the proxy's
|
|
12642
|
+
* `X-Forwarded-Host` over `Host`; the named `X-Forwarded-Proto`, or https
|
|
12643
|
+
* then http when none is named (the hub terminates TLS itself on 4443).
|
|
12644
|
+
*/
|
|
12645
|
+
function claimedRequestOrigins(headers) {
|
|
12646
|
+
const authority = firstValue(headers["x-forwarded-host"]) ?? firstValue(headers["host"]);
|
|
12647
|
+
if (authority === null || !AUTHORITY_RE.test(authority)) return [];
|
|
12648
|
+
const proto = firstValue(headers["x-forwarded-proto"])?.toLowerCase() ?? null;
|
|
12649
|
+
const schemes = proto === "https" || proto === "http" ? [proto] : proto === null ? ["https", "http"] : [];
|
|
12650
|
+
const out = [];
|
|
12651
|
+
for (const scheme of schemes) {
|
|
12652
|
+
const origin = normalizeOrigin(`${scheme}://${authority}`);
|
|
12653
|
+
if (origin !== null) out.push(origin);
|
|
12654
|
+
}
|
|
12655
|
+
return out;
|
|
12656
|
+
}
|
|
12657
|
+
/** Every origin the hub advertises itself at, normalised. Never the app link, never loopback. */
|
|
12658
|
+
function advertisedHubOrigins(book) {
|
|
12659
|
+
const candidates = [];
|
|
12660
|
+
for (const row of book.rows) {
|
|
12661
|
+
if (row.kind === "app-link" || row.kind === "loopback") continue;
|
|
12662
|
+
candidates.push(row.baseUrl);
|
|
12663
|
+
}
|
|
12664
|
+
const { publicEndpoint, internal, appConnections } = book.roles;
|
|
12665
|
+
if (publicEndpoint.resolved !== null) candidates.push(publicEndpoint.resolved);
|
|
12666
|
+
if (internal.resolved !== null) candidates.push(internal.resolved);
|
|
12667
|
+
candidates.push(...appConnections.resolved);
|
|
12668
|
+
candidates.push(...book.listenerOrigins ?? []);
|
|
12669
|
+
const out = /* @__PURE__ */ new Set();
|
|
12670
|
+
for (const candidate of candidates) {
|
|
12671
|
+
const origin = normalizeOrigin(candidate);
|
|
12672
|
+
if (origin !== null) out.add(origin);
|
|
12673
|
+
}
|
|
12674
|
+
return out;
|
|
12675
|
+
}
|
|
12676
|
+
/**
|
|
12677
|
+
* The origin to send the browser back to: the first claimed origin that is in
|
|
12678
|
+
* `allowed`, or `null` (the caller then uses its default address).
|
|
12679
|
+
*/
|
|
12680
|
+
function pickRequestOrigin(headers, allowed) {
|
|
12681
|
+
for (const origin of claimedRequestOrigins(headers)) if (allowed.has(origin)) return origin;
|
|
12682
|
+
return null;
|
|
12683
|
+
}
|
|
12295
12684
|
var ExpressionBindingSourceSchema = union([
|
|
12296
12685
|
object({
|
|
12297
12686
|
kind: literal("field").optional(),
|
|
@@ -15898,6 +16287,341 @@ method(object({
|
|
|
15898
16287
|
kind: "mutation",
|
|
15899
16288
|
auth: "admin"
|
|
15900
16289
|
}), method(object({}), array(KeychainSecretMetaSchema).readonly(), { auth: "admin" }), method(object({}), KeychainStateSchema, { auth: "admin" });
|
|
16290
|
+
/**
|
|
16291
|
+
* device-history — the ONE mechanism for numeric history (D850).
|
|
16292
|
+
*
|
|
16293
|
+
* A device value is recorded because its capability says so (the `history`
|
|
16294
|
+
* block of a `*.cap.ts`, captured hub-side from `DeviceStateChanged`); any
|
|
16295
|
+
* other series is DECLARED by the addon that produces it and fed with points
|
|
16296
|
+
* (`record`) or closed five-minute buckets (`recordBuckets`). Rollups 5m / 1h /
|
|
16297
|
+
* 1d are computed here and nowhere else. Storage is `history.db` (D851).
|
|
16298
|
+
*
|
|
16299
|
+
* Who the PRODUCER is: `declareSeries`, `record` and `recordBuckets` are owner
|
|
16300
|
+
* checked against the `callerAddonId` the transport stamps into a call that
|
|
16301
|
+
* crossed a process (never in an input schema, so a session cannot supply it).
|
|
16302
|
+
* A call with no stamp is refused `not-owner`. The methods are `admin` so a
|
|
16303
|
+
* non-admin session never reaches them; an addon's `ctx.api` call bypasses the
|
|
16304
|
+
* tier by design.
|
|
16305
|
+
*/
|
|
16306
|
+
/** Whose history: a real device, or a cluster node (load, memory). */
|
|
16307
|
+
var DeviceHistorySubjectSchema = discriminatedUnion("kind", [object({
|
|
16308
|
+
kind: literal("device"),
|
|
16309
|
+
deviceId: number().int()
|
|
16310
|
+
}), object({
|
|
16311
|
+
kind: literal("node"),
|
|
16312
|
+
nodeId: string().min(1)
|
|
16313
|
+
})]);
|
|
16314
|
+
var DeviceHistoryKindSchema = _enum([
|
|
16315
|
+
"gauge",
|
|
16316
|
+
"counter",
|
|
16317
|
+
"boolean"
|
|
16318
|
+
]);
|
|
16319
|
+
var DeviceHistoryResolutionSchema = _enum([
|
|
16320
|
+
"raw",
|
|
16321
|
+
"5m",
|
|
16322
|
+
"1h",
|
|
16323
|
+
"1d"
|
|
16324
|
+
]);
|
|
16325
|
+
/** Why a producer's point or bucket was not stored. Counted, never silent (D391). */
|
|
16326
|
+
var DeviceHistoryRefusalReasonSchema = _enum([
|
|
16327
|
+
"undeclared",
|
|
16328
|
+
"not-owner",
|
|
16329
|
+
"opted-out",
|
|
16330
|
+
"not-a-real-device",
|
|
16331
|
+
"rate",
|
|
16332
|
+
"ingest-mismatch",
|
|
16333
|
+
"out-of-range"
|
|
16334
|
+
]);
|
|
16335
|
+
var RefusalSchema = object({
|
|
16336
|
+
key: string(),
|
|
16337
|
+
reason: DeviceHistoryRefusalReasonSchema,
|
|
16338
|
+
count: number().int()
|
|
16339
|
+
});
|
|
16340
|
+
var IngestResultSchema = object({
|
|
16341
|
+
accepted: number().int(),
|
|
16342
|
+
refused: array(RefusalSchema).readonly()
|
|
16343
|
+
});
|
|
16344
|
+
var SeriesInfoSchema = object({
|
|
16345
|
+
key: string(),
|
|
16346
|
+
scope: string(),
|
|
16347
|
+
kind: DeviceHistoryKindSchema,
|
|
16348
|
+
/** `null` is unknown (a `unitFrom` series whose device does not state a unit right now), never a guess. */
|
|
16349
|
+
unit: string().nullable(),
|
|
16350
|
+
displayName: string(),
|
|
16351
|
+
source: _enum(["cap", "addon"]),
|
|
16352
|
+
firstTs: number(),
|
|
16353
|
+
lastTs: number()
|
|
16354
|
+
});
|
|
16355
|
+
var QueryPointSchema = object({
|
|
16356
|
+
/** Raw: the point's time. Rollup: the bucket start. */
|
|
16357
|
+
t: number(),
|
|
16358
|
+
samples: number().int(),
|
|
16359
|
+
/** `sum / samples`. */
|
|
16360
|
+
mean: number().nullable(),
|
|
16361
|
+
/** Time-weighted mean (`tw_sum / tw_ms`); `null` for bucket-ingested series. For a boolean: the fraction of time true. */
|
|
16362
|
+
twMean: number().nullable(),
|
|
16363
|
+
min: number(),
|
|
16364
|
+
max: number(),
|
|
16365
|
+
/** `null` is unknown, never zero (D393). */
|
|
16366
|
+
last: number().nullable()
|
|
16367
|
+
});
|
|
16368
|
+
var QuerySeriesSchema = object({
|
|
16369
|
+
scope: string(),
|
|
16370
|
+
/** The last point STRICTLY BEFORE `from` in the chosen tier, so a step chart can start at the held value. */
|
|
16371
|
+
before: object({
|
|
16372
|
+
t: number(),
|
|
16373
|
+
value: number().nullable()
|
|
16374
|
+
}).nullable(),
|
|
16375
|
+
points: array(QueryPointSchema).readonly()
|
|
16376
|
+
});
|
|
16377
|
+
/** The window part of a query, shared by the device and node forms. */
|
|
16378
|
+
var QueryWindowShape = {
|
|
16379
|
+
key: string(),
|
|
16380
|
+
scope: string().optional(),
|
|
16381
|
+
from: number(),
|
|
16382
|
+
to: number(),
|
|
16383
|
+
resolution: union([DeviceHistoryResolutionSchema, literal("auto")]).default("auto"),
|
|
16384
|
+
maxPoints: number().int().positive().max(5e3).default(1e3)
|
|
16385
|
+
};
|
|
16386
|
+
var QueryResultSchema = object({
|
|
16387
|
+
resolution: DeviceHistoryResolutionSchema,
|
|
16388
|
+
series: array(QuerySeriesSchema).readonly(),
|
|
16389
|
+
truncated: boolean()
|
|
16390
|
+
});
|
|
16391
|
+
var TierStatusSchema = object({
|
|
16392
|
+
tier: DeviceHistoryResolutionSchema,
|
|
16393
|
+
/** `null` until the first background count answered. */
|
|
16394
|
+
rows: number().int().nullable(),
|
|
16395
|
+
/** `rows` times a fixed per-row estimate — approximate, labelled so. */
|
|
16396
|
+
approxBytes: number().nullable(),
|
|
16397
|
+
countedAt: number().nullable()
|
|
16398
|
+
});
|
|
16399
|
+
/** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
|
|
16400
|
+
var DeviceHistoryStatusSchema = object({
|
|
16401
|
+
startedAt: number(),
|
|
16402
|
+
/** The store is declared, series loaded and the first reconcile has answered. */
|
|
16403
|
+
ready: boolean(),
|
|
16404
|
+
series: number().int(),
|
|
16405
|
+
metrics: number().int(),
|
|
16406
|
+
optedOutDevices: number().int(),
|
|
16407
|
+
tiers: array(TierStatusSchema).readonly(),
|
|
16408
|
+
capture: object({
|
|
16409
|
+
eventsSeen: number().int(),
|
|
16410
|
+
pointsEmitted: number().int(),
|
|
16411
|
+
pointsWritten: number().int(),
|
|
16412
|
+
pointsDropped: number().int(),
|
|
16413
|
+
bufferDepth: number().int(),
|
|
16414
|
+
trailingEmitted: number().int(),
|
|
16415
|
+
reconciledPoints: number().int(),
|
|
16416
|
+
reconcileRuns: number().int(),
|
|
16417
|
+
reconcileFailures: number().int(),
|
|
16418
|
+
lastReconcileAt: number().nullable(),
|
|
16419
|
+
lastFlushAt: number().nullable(),
|
|
16420
|
+
flushFailures: number().int(),
|
|
16421
|
+
skipped: record(string(), number().int())
|
|
16422
|
+
}),
|
|
16423
|
+
ingest: object({
|
|
16424
|
+
accepted: number().int(),
|
|
16425
|
+
refused: record(string(), number().int())
|
|
16426
|
+
}),
|
|
16427
|
+
rollup: object({
|
|
16428
|
+
last5mAt: number().nullable(),
|
|
16429
|
+
last1hAt: number().nullable(),
|
|
16430
|
+
last1dAt: number().nullable(),
|
|
16431
|
+
errors: number().int(),
|
|
16432
|
+
dirty5m: number().int(),
|
|
16433
|
+
dirty1h: number().int(),
|
|
16434
|
+
dirty1d: number().int()
|
|
16435
|
+
}),
|
|
16436
|
+
retention: object({
|
|
16437
|
+
lastRunAt: number().nullable(),
|
|
16438
|
+
deleted: record(string(), number().int()),
|
|
16439
|
+
purgedSeries: number().int()
|
|
16440
|
+
}),
|
|
16441
|
+
directory: object({
|
|
16442
|
+
devices: number().int(),
|
|
16443
|
+
lastRefreshAt: number().nullable()
|
|
16444
|
+
})
|
|
16445
|
+
});
|
|
16446
|
+
method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({ nodeId: string().min(1) }), array(SeriesInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
16447
|
+
deviceId: number().int(),
|
|
16448
|
+
...QueryWindowShape
|
|
16449
|
+
}), QueryResultSchema), method(object({
|
|
16450
|
+
nodeId: string().min(1),
|
|
16451
|
+
...QueryWindowShape
|
|
16452
|
+
}), QueryResultSchema, { auth: "admin" }), method(object({
|
|
16453
|
+
name: string().regex(/^[a-z0-9-]+$/),
|
|
16454
|
+
subjectKind: _enum(["device", "node"]),
|
|
16455
|
+
kind: DeviceHistoryKindSchema,
|
|
16456
|
+
unit: string().optional(),
|
|
16457
|
+
displayName: string().min(1),
|
|
16458
|
+
ingest: _enum(["points", "buckets"])
|
|
16459
|
+
}), object({ key: string() }), {
|
|
16460
|
+
kind: "mutation",
|
|
16461
|
+
auth: "admin"
|
|
16462
|
+
}), method(object({ points: array(object({
|
|
16463
|
+
key: string(),
|
|
16464
|
+
subject: DeviceHistorySubjectSchema,
|
|
16465
|
+
scope: string().default(""),
|
|
16466
|
+
ts: number(),
|
|
16467
|
+
value: number()
|
|
16468
|
+
})).max(5e3) }), IngestResultSchema, {
|
|
16469
|
+
kind: "mutation",
|
|
16470
|
+
auth: "admin"
|
|
16471
|
+
}), method(object({ buckets: array(object({
|
|
16472
|
+
key: string(),
|
|
16473
|
+
subject: DeviceHistorySubjectSchema,
|
|
16474
|
+
scope: string().default(""),
|
|
16475
|
+
bucketStart: number(),
|
|
16476
|
+
samples: number().int().positive(),
|
|
16477
|
+
sum: number(),
|
|
16478
|
+
min: number(),
|
|
16479
|
+
max: number(),
|
|
16480
|
+
last: number().nullable(),
|
|
16481
|
+
lastTs: number().nullable()
|
|
16482
|
+
})).max(5e3) }), IngestResultSchema, {
|
|
16483
|
+
kind: "mutation",
|
|
16484
|
+
auth: "admin"
|
|
16485
|
+
}), method(object({ deviceId: number().int() }), object({ enabled: boolean() })), method(object({
|
|
16486
|
+
deviceId: number().int(),
|
|
16487
|
+
enabled: boolean()
|
|
16488
|
+
}), object({ enabled: boolean() }), {
|
|
16489
|
+
kind: "mutation",
|
|
16490
|
+
auth: "admin"
|
|
16491
|
+
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" });
|
|
16492
|
+
var DeviceCaStatusSchema = discriminatedUnion("state", [
|
|
16493
|
+
object({ state: literal("absent") }),
|
|
16494
|
+
object({
|
|
16495
|
+
state: literal("ready"),
|
|
16496
|
+
subject: string(),
|
|
16497
|
+
fingerprintSha256: string(),
|
|
16498
|
+
validTo: string()
|
|
16499
|
+
}),
|
|
16500
|
+
object({
|
|
16501
|
+
state: literal("unavailable"),
|
|
16502
|
+
reason: string()
|
|
16503
|
+
})
|
|
16504
|
+
]);
|
|
16505
|
+
var DeviceCertificateSettingsSchema = object({ selfEnrollment: _enum(["allowed", "disabled"]) });
|
|
16506
|
+
method(object({
|
|
16507
|
+
userId: string().min(1).optional(),
|
|
16508
|
+
includeRevoked: boolean().default(false)
|
|
16509
|
+
}), array(DeviceCredentialSchema).readonly(), { auth: "admin" }), method(object({
|
|
16510
|
+
userId: string().min(1),
|
|
16511
|
+
deviceName: string().min(1).max(80)
|
|
16512
|
+
}), StartEnrollmentOutputSchema, {
|
|
16513
|
+
kind: "mutation",
|
|
16514
|
+
auth: "admin",
|
|
16515
|
+
caller: "required"
|
|
16516
|
+
}), method(object({ id: string().min(1) }), object({
|
|
16517
|
+
revoked: boolean(),
|
|
16518
|
+
sessionsEnded: number().int(),
|
|
16519
|
+
status: DeviceCredentialStatusSchema
|
|
16520
|
+
}), {
|
|
16521
|
+
kind: "mutation",
|
|
16522
|
+
auth: "admin",
|
|
16523
|
+
caller: "required"
|
|
16524
|
+
}), method(object({}), DeviceCertificateSettingsSchema, { auth: "admin" }), method(DeviceCertificateSettingsSchema, DeviceCertificateSettingsSchema, {
|
|
16525
|
+
kind: "mutation",
|
|
16526
|
+
auth: "admin"
|
|
16527
|
+
}), method(object({ id: string().min(1) }), object({ result: _enum([
|
|
16528
|
+
"deleted",
|
|
16529
|
+
"live",
|
|
16530
|
+
"unknown"
|
|
16531
|
+
]) }), {
|
|
16532
|
+
kind: "mutation",
|
|
16533
|
+
auth: "admin",
|
|
16534
|
+
caller: "required"
|
|
16535
|
+
}), method(object({}), DeviceCaStatusSchema, { auth: "admin" }), method(object({
|
|
16536
|
+
id: string().min(1),
|
|
16537
|
+
deviceName: string().min(1).max(80)
|
|
16538
|
+
}), object({ renamed: boolean() }), {
|
|
16539
|
+
kind: "mutation",
|
|
16540
|
+
auth: "admin"
|
|
16541
|
+
});
|
|
16542
|
+
/**
|
|
16543
|
+
* `node-certificates` - what a node holds and the two renewals the hub drives
|
|
16544
|
+
* (D856): the node's MESH leaf (mutual TLS to the hub) and its HTTPS leaf (issued
|
|
16545
|
+
* from the hub's local CA so a device that trusts the hub root trusts the node).
|
|
16546
|
+
*
|
|
16547
|
+
* Provided by the AGENT RUNTIME (the synthetic `agent-runtime` addon id, like
|
|
16548
|
+
* `server-management`): the hub reaches it through the ordinary node-pinned
|
|
16549
|
+
* capability call - no new Moleculer action. The hub's own certificates are
|
|
16550
|
+
* handled in-process by the hub (`certificates` router), so this cap has no hub
|
|
16551
|
+
* provider.
|
|
16552
|
+
*
|
|
16553
|
+
* No private key ever crosses the mesh: the node generates its key pair, sends a
|
|
16554
|
+
* CSR, and the hub returns only the signed certificate.
|
|
16555
|
+
*/
|
|
16556
|
+
var MeshLeafInfoSchema = object({
|
|
16557
|
+
cn: string(),
|
|
16558
|
+
serial: string(),
|
|
16559
|
+
fingerprintSha256: string(),
|
|
16560
|
+
notBefore: number(),
|
|
16561
|
+
notAfter: number()
|
|
16562
|
+
});
|
|
16563
|
+
var HttpsLeafInfoSchema = object({
|
|
16564
|
+
fingerprintSha256: string(),
|
|
16565
|
+
issuer: string(),
|
|
16566
|
+
sans: array(string()),
|
|
16567
|
+
notBefore: number(),
|
|
16568
|
+
notAfter: number()
|
|
16569
|
+
});
|
|
16570
|
+
var NodeHttpsStateSchema = discriminatedUnion("state", [object({
|
|
16571
|
+
state: literal("served"),
|
|
16572
|
+
leaf: HttpsLeafInfoSchema
|
|
16573
|
+
}), object({
|
|
16574
|
+
state: literal("not-issued"),
|
|
16575
|
+
reason: string()
|
|
16576
|
+
})]);
|
|
16577
|
+
method(object({}), object({
|
|
16578
|
+
nodeId: string(),
|
|
16579
|
+
mesh: MeshLeafInfoSchema.nullable(),
|
|
16580
|
+
https: NodeHttpsStateSchema
|
|
16581
|
+
}), { auth: "admin" }), method(object({}), object({ csrPem: string() }), {
|
|
16582
|
+
kind: "mutation",
|
|
16583
|
+
auth: "admin"
|
|
16584
|
+
}), method(object({
|
|
16585
|
+
certPem: string().min(1),
|
|
16586
|
+
caCertPem: string().min(1),
|
|
16587
|
+
confirmWithinMs: number().int().min(1e4).max(6e5)
|
|
16588
|
+
}), object({
|
|
16589
|
+
fingerprintSha256: string(),
|
|
16590
|
+
serial: string()
|
|
16591
|
+
}), {
|
|
16592
|
+
kind: "mutation",
|
|
16593
|
+
auth: "admin"
|
|
16594
|
+
}), method(object({ fingerprintSha256: string() }), object({ confirmed: boolean() }), {
|
|
16595
|
+
kind: "mutation",
|
|
16596
|
+
auth: "admin"
|
|
16597
|
+
}), method(object({}), object({ rolledBack: boolean() }), {
|
|
16598
|
+
kind: "mutation",
|
|
16599
|
+
auth: "admin"
|
|
16600
|
+
}), method(object({}), object({
|
|
16601
|
+
csrPem: string(),
|
|
16602
|
+
hostnames: array(string()),
|
|
16603
|
+
addresses: array(string()),
|
|
16604
|
+
/** SHA-256 of the hub local CA this node pinned at its first install; `null` before one. */
|
|
16605
|
+
pinnedCaFingerprintSha256: string().nullable()
|
|
16606
|
+
}), {
|
|
16607
|
+
kind: "mutation",
|
|
16608
|
+
auth: "admin"
|
|
16609
|
+
}), method(object({}), object({ ok: literal(true) }), {
|
|
16610
|
+
kind: "mutation",
|
|
16611
|
+
auth: "admin"
|
|
16612
|
+
}), method(object({
|
|
16613
|
+
certPem: string().min(1),
|
|
16614
|
+
caCertPem: string().min(1),
|
|
16615
|
+
/**
|
|
16616
|
+
* The hub signals that its local CA was rotated (D227) and this leaf chains to the NEW
|
|
16617
|
+
* one. Only the hub, over the authenticated mesh, can say so; a leaf with a different CA
|
|
16618
|
+
* and no signal is refused.
|
|
16619
|
+
*/
|
|
16620
|
+
caRotation: boolean().optional()
|
|
16621
|
+
}), HttpsLeafInfoSchema, {
|
|
16622
|
+
kind: "mutation",
|
|
16623
|
+
auth: "admin"
|
|
16624
|
+
});
|
|
15901
16625
|
var KeychainKeySourceSchema = object({
|
|
15902
16626
|
kind: _enum([
|
|
15903
16627
|
"config-file",
|
|
@@ -38650,7 +39374,13 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
38650
39374
|
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
38651
39375
|
* whatever their id. Absent / false — a login button only.
|
|
38652
39376
|
*/
|
|
38653
|
-
linkable: boolean().optional()
|
|
39377
|
+
linkable: boolean().optional(),
|
|
39378
|
+
/**
|
|
39379
|
+
* How a NATIVE app starts this method (D858): `{ kind: 'browser', startPath }`
|
|
39380
|
+
* when the route understands the app flow query (`app=1&code_challenge=…`),
|
|
39381
|
+
* `null`/absent when there is no app path - the app hides the method.
|
|
39382
|
+
*/
|
|
39383
|
+
app: AppLoginPathSchema.nullable().optional()
|
|
38654
39384
|
}),
|
|
38655
39385
|
object({
|
|
38656
39386
|
kind: literal("widget"),
|
|
@@ -38662,7 +39392,9 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
38662
39392
|
bundle: string(),
|
|
38663
39393
|
/** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
|
|
38664
39394
|
remote: WidgetRemoteSchema,
|
|
38665
|
-
stage: LoginStageEnum
|
|
39395
|
+
stage: LoginStageEnum,
|
|
39396
|
+
/** Widgets are web ceremonies: no native app path (D858). Absent reads as `null`. */
|
|
39397
|
+
app: AppLoginPathSchema.nullable().optional()
|
|
38666
39398
|
}),
|
|
38667
39399
|
object({
|
|
38668
39400
|
kind: literal("passkey"),
|
|
@@ -38674,7 +39406,9 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
38674
39406
|
/** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
|
|
38675
39407
|
rpId: string(),
|
|
38676
39408
|
/** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
|
|
38677
|
-
origin: string().nullable()
|
|
39409
|
+
origin: string().nullable(),
|
|
39410
|
+
/** Set by the hub for the primary arm; a second-factor passkey has no app path (D858). */
|
|
39411
|
+
app: AppLoginPathSchema.nullable().optional()
|
|
38678
39412
|
})
|
|
38679
39413
|
]);
|
|
38680
39414
|
var loginMethodCapability = {
|
|
@@ -49231,7 +49965,20 @@ var SsoBridgeClaimsSchema = object({
|
|
|
49231
49965
|
* request to present the matching cookie — a login bridge is useless in
|
|
49232
49966
|
* any other browser.
|
|
49233
49967
|
*/
|
|
49234
|
-
browserBinding: string().optional()
|
|
49968
|
+
browserBinding: string().optional(),
|
|
49969
|
+
/**
|
|
49970
|
+
* The native app that started this sign-in (D858): its PKCE challenge,
|
|
49971
|
+
* `state`, purpose and allow-listed return URL, copied from the server-side
|
|
49972
|
+
* pending OIDC state. A bridge carrying it is finished ONLY at
|
|
49973
|
+
* `/api/auth/sso/finish-app` (which mints a handoff code, never a web
|
|
49974
|
+
* session); `/api/auth/sso/finish` refuses it.
|
|
49975
|
+
*/
|
|
49976
|
+
app: object({
|
|
49977
|
+
codeChallenge: string(),
|
|
49978
|
+
state: string(),
|
|
49979
|
+
purpose: _enum(["new-session", "step-up"]),
|
|
49980
|
+
redirect: string()
|
|
49981
|
+
}).optional()
|
|
49235
49982
|
});
|
|
49236
49983
|
method(object({
|
|
49237
49984
|
claims: SsoBridgeClaimsSchema,
|
|
@@ -54671,7 +55418,7 @@ var MotionOnMotionChangedDataSchema = object({
|
|
|
54671
55418
|
/** Who started it (D672). Absent = the camera itself. Only `onboard` carries `sensor`. */
|
|
54672
55419
|
triggeredBy: MotionTriggeredBySchema.optional()
|
|
54673
55420
|
});
|
|
54674
|
-
DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean());
|
|
55421
|
+
DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean()), DeviceType.Camera;
|
|
54675
55422
|
object({
|
|
54676
55423
|
enabled: boolean(),
|
|
54677
55424
|
/** Ms epoch of the last operator-driven change. */
|
|
@@ -61878,6 +62625,54 @@ Object.freeze({
|
|
|
61878
62625
|
addonId: null,
|
|
61879
62626
|
access: "create"
|
|
61880
62627
|
},
|
|
62628
|
+
"deviceCredentials.deleteDeviceCredential": {
|
|
62629
|
+
capName: "device-credentials",
|
|
62630
|
+
capScope: "system",
|
|
62631
|
+
addonId: null,
|
|
62632
|
+
access: "delete"
|
|
62633
|
+
},
|
|
62634
|
+
"deviceCredentials.getDeviceCaStatus": {
|
|
62635
|
+
capName: "device-credentials",
|
|
62636
|
+
capScope: "system",
|
|
62637
|
+
addonId: null,
|
|
62638
|
+
access: "view"
|
|
62639
|
+
},
|
|
62640
|
+
"deviceCredentials.getDeviceCertificateSettings": {
|
|
62641
|
+
capName: "device-credentials",
|
|
62642
|
+
capScope: "system",
|
|
62643
|
+
addonId: null,
|
|
62644
|
+
access: "view"
|
|
62645
|
+
},
|
|
62646
|
+
"deviceCredentials.listDeviceCredentials": {
|
|
62647
|
+
capName: "device-credentials",
|
|
62648
|
+
capScope: "system",
|
|
62649
|
+
addonId: null,
|
|
62650
|
+
access: "view"
|
|
62651
|
+
},
|
|
62652
|
+
"deviceCredentials.renameDeviceCredential": {
|
|
62653
|
+
capName: "device-credentials",
|
|
62654
|
+
capScope: "system",
|
|
62655
|
+
addonId: null,
|
|
62656
|
+
access: "create"
|
|
62657
|
+
},
|
|
62658
|
+
"deviceCredentials.revokeDeviceCredential": {
|
|
62659
|
+
capName: "device-credentials",
|
|
62660
|
+
capScope: "system",
|
|
62661
|
+
addonId: null,
|
|
62662
|
+
access: "delete"
|
|
62663
|
+
},
|
|
62664
|
+
"deviceCredentials.setDeviceCertificateSettings": {
|
|
62665
|
+
capName: "device-credentials",
|
|
62666
|
+
capScope: "system",
|
|
62667
|
+
addonId: null,
|
|
62668
|
+
access: "create"
|
|
62669
|
+
},
|
|
62670
|
+
"deviceCredentials.startEnrollment": {
|
|
62671
|
+
capName: "device-credentials",
|
|
62672
|
+
capScope: "system",
|
|
62673
|
+
addonId: null,
|
|
62674
|
+
access: "create"
|
|
62675
|
+
},
|
|
61881
62676
|
"deviceDiscovery.adoptDevice": {
|
|
61882
62677
|
capName: "device-discovery",
|
|
61883
62678
|
capScope: "device",
|
|
@@ -61980,6 +62775,66 @@ Object.freeze({
|
|
|
61980
62775
|
addonId: null,
|
|
61981
62776
|
access: "create"
|
|
61982
62777
|
},
|
|
62778
|
+
"deviceHistory.declareSeries": {
|
|
62779
|
+
capName: "device-history",
|
|
62780
|
+
capScope: "system",
|
|
62781
|
+
addonId: null,
|
|
62782
|
+
access: "create"
|
|
62783
|
+
},
|
|
62784
|
+
"deviceHistory.getDeviceEnabled": {
|
|
62785
|
+
capName: "device-history",
|
|
62786
|
+
capScope: "system",
|
|
62787
|
+
addonId: null,
|
|
62788
|
+
access: "view"
|
|
62789
|
+
},
|
|
62790
|
+
"deviceHistory.getStatus": {
|
|
62791
|
+
capName: "device-history",
|
|
62792
|
+
capScope: "system",
|
|
62793
|
+
addonId: null,
|
|
62794
|
+
access: "view"
|
|
62795
|
+
},
|
|
62796
|
+
"deviceHistory.listNodeSeries": {
|
|
62797
|
+
capName: "device-history",
|
|
62798
|
+
capScope: "system",
|
|
62799
|
+
addonId: null,
|
|
62800
|
+
access: "view"
|
|
62801
|
+
},
|
|
62802
|
+
"deviceHistory.listSeries": {
|
|
62803
|
+
capName: "device-history",
|
|
62804
|
+
capScope: "system",
|
|
62805
|
+
addonId: null,
|
|
62806
|
+
access: "view"
|
|
62807
|
+
},
|
|
62808
|
+
"deviceHistory.query": {
|
|
62809
|
+
capName: "device-history",
|
|
62810
|
+
capScope: "system",
|
|
62811
|
+
addonId: null,
|
|
62812
|
+
access: "view"
|
|
62813
|
+
},
|
|
62814
|
+
"deviceHistory.queryNode": {
|
|
62815
|
+
capName: "device-history",
|
|
62816
|
+
capScope: "system",
|
|
62817
|
+
addonId: null,
|
|
62818
|
+
access: "view"
|
|
62819
|
+
},
|
|
62820
|
+
"deviceHistory.record": {
|
|
62821
|
+
capName: "device-history",
|
|
62822
|
+
capScope: "system",
|
|
62823
|
+
addonId: null,
|
|
62824
|
+
access: "create"
|
|
62825
|
+
},
|
|
62826
|
+
"deviceHistory.recordBuckets": {
|
|
62827
|
+
capName: "device-history",
|
|
62828
|
+
capScope: "system",
|
|
62829
|
+
addonId: null,
|
|
62830
|
+
access: "create"
|
|
62831
|
+
},
|
|
62832
|
+
"deviceHistory.setDeviceEnabled": {
|
|
62833
|
+
capName: "device-history",
|
|
62834
|
+
capScope: "system",
|
|
62835
|
+
addonId: null,
|
|
62836
|
+
access: "create"
|
|
62837
|
+
},
|
|
61983
62838
|
"deviceManager.addLocation": {
|
|
61984
62839
|
capName: "device-manager",
|
|
61985
62840
|
capScope: "system",
|
|
@@ -64038,6 +64893,54 @@ Object.freeze({
|
|
|
64038
64893
|
addonId: null,
|
|
64039
64894
|
access: "create"
|
|
64040
64895
|
},
|
|
64896
|
+
"nodeCertificates.confirmMeshLeaf": {
|
|
64897
|
+
capName: "node-certificates",
|
|
64898
|
+
capScope: "system",
|
|
64899
|
+
addonId: null,
|
|
64900
|
+
access: "create"
|
|
64901
|
+
},
|
|
64902
|
+
"nodeCertificates.forgetHub": {
|
|
64903
|
+
capName: "node-certificates",
|
|
64904
|
+
capScope: "system",
|
|
64905
|
+
addonId: null,
|
|
64906
|
+
access: "delete"
|
|
64907
|
+
},
|
|
64908
|
+
"nodeCertificates.getCertificates": {
|
|
64909
|
+
capName: "node-certificates",
|
|
64910
|
+
capScope: "system",
|
|
64911
|
+
addonId: null,
|
|
64912
|
+
access: "view"
|
|
64913
|
+
},
|
|
64914
|
+
"nodeCertificates.installHttpsCertificate": {
|
|
64915
|
+
capName: "node-certificates",
|
|
64916
|
+
capScope: "system",
|
|
64917
|
+
addonId: null,
|
|
64918
|
+
access: "create"
|
|
64919
|
+
},
|
|
64920
|
+
"nodeCertificates.installMeshLeaf": {
|
|
64921
|
+
capName: "node-certificates",
|
|
64922
|
+
capScope: "system",
|
|
64923
|
+
addonId: null,
|
|
64924
|
+
access: "create"
|
|
64925
|
+
},
|
|
64926
|
+
"nodeCertificates.prepareHttpsCertificate": {
|
|
64927
|
+
capName: "node-certificates",
|
|
64928
|
+
capScope: "system",
|
|
64929
|
+
addonId: null,
|
|
64930
|
+
access: "create"
|
|
64931
|
+
},
|
|
64932
|
+
"nodeCertificates.prepareMeshRenewal": {
|
|
64933
|
+
capName: "node-certificates",
|
|
64934
|
+
capScope: "system",
|
|
64935
|
+
addonId: null,
|
|
64936
|
+
access: "create"
|
|
64937
|
+
},
|
|
64938
|
+
"nodeCertificates.rollbackMeshLeaf": {
|
|
64939
|
+
capName: "node-certificates",
|
|
64940
|
+
capScope: "system",
|
|
64941
|
+
addonId: null,
|
|
64942
|
+
access: "create"
|
|
64943
|
+
},
|
|
64041
64944
|
"nodes.clusterAddonStatus": {
|
|
64042
64945
|
capName: "nodes",
|
|
64043
64946
|
capScope: "system",
|
|
@@ -68729,6 +69632,26 @@ Object.freeze({
|
|
|
68729
69632
|
form: "single",
|
|
68730
69633
|
optional: false
|
|
68731
69634
|
}],
|
|
69635
|
+
"deviceHistory.getDeviceEnabled": [{
|
|
69636
|
+
name: "deviceId",
|
|
69637
|
+
form: "single",
|
|
69638
|
+
optional: false
|
|
69639
|
+
}],
|
|
69640
|
+
"deviceHistory.listSeries": [{
|
|
69641
|
+
name: "deviceId",
|
|
69642
|
+
form: "single",
|
|
69643
|
+
optional: false
|
|
69644
|
+
}],
|
|
69645
|
+
"deviceHistory.query": [{
|
|
69646
|
+
name: "deviceId",
|
|
69647
|
+
form: "single",
|
|
69648
|
+
optional: false
|
|
69649
|
+
}],
|
|
69650
|
+
"deviceHistory.setDeviceEnabled": [{
|
|
69651
|
+
name: "deviceId",
|
|
69652
|
+
form: "single",
|
|
69653
|
+
optional: false
|
|
69654
|
+
}],
|
|
68732
69655
|
"deviceManager.adoptionRelease": [{
|
|
68733
69656
|
name: "camDeviceId",
|
|
68734
69657
|
form: "single",
|
|
@@ -70907,6 +71830,7 @@ Object.freeze({
|
|
|
70907
71830
|
"network-access": "ingress",
|
|
70908
71831
|
"smtp-provider": "email"
|
|
70909
71832
|
});
|
|
71833
|
+
DeviceType.Camera;
|
|
70910
71834
|
var G711_SCALE_CORRECTION_DB = {
|
|
70911
71835
|
PCMU: 20 * Math.log10(4),
|
|
70912
71836
|
PCMA: 20 * Math.log10(8)
|
|
@@ -71973,4 +72897,219 @@ DEFAULT_NATIVE_LEASE_SETTINGS.admission;
|
|
|
71973
72897
|
var MB = 1024 * 1024;
|
|
71974
72898
|
1024 * MB, 3072 * MB;
|
|
71975
72899
|
//#endregion
|
|
71976
|
-
|
|
72900
|
+
Object.defineProperty(exports, "APP_FLOW_DEFAULT_REDIRECT", {
|
|
72901
|
+
enumerable: true,
|
|
72902
|
+
get: function() {
|
|
72903
|
+
return APP_FLOW_DEFAULT_REDIRECT;
|
|
72904
|
+
}
|
|
72905
|
+
});
|
|
72906
|
+
Object.defineProperty(exports, "APP_FLOW_REFUSAL_MESSAGES", {
|
|
72907
|
+
enumerable: true,
|
|
72908
|
+
get: function() {
|
|
72909
|
+
return APP_FLOW_REFUSAL_MESSAGES;
|
|
72910
|
+
}
|
|
72911
|
+
});
|
|
72912
|
+
Object.defineProperty(exports, "BaseAddon", {
|
|
72913
|
+
enumerable: true,
|
|
72914
|
+
get: function() {
|
|
72915
|
+
return BaseAddon;
|
|
72916
|
+
}
|
|
72917
|
+
});
|
|
72918
|
+
Object.defineProperty(exports, "SECRET_CLEAR", {
|
|
72919
|
+
enumerable: true,
|
|
72920
|
+
get: function() {
|
|
72921
|
+
return SECRET_CLEAR;
|
|
72922
|
+
}
|
|
72923
|
+
});
|
|
72924
|
+
Object.defineProperty(exports, "SSO_STATE_COOKIE", {
|
|
72925
|
+
enumerable: true,
|
|
72926
|
+
get: function() {
|
|
72927
|
+
return SSO_STATE_COOKIE;
|
|
72928
|
+
}
|
|
72929
|
+
});
|
|
72930
|
+
Object.defineProperty(exports, "__commonJSMin", {
|
|
72931
|
+
enumerable: true,
|
|
72932
|
+
get: function() {
|
|
72933
|
+
return __commonJSMin;
|
|
72934
|
+
}
|
|
72935
|
+
});
|
|
72936
|
+
Object.defineProperty(exports, "__esmMin", {
|
|
72937
|
+
enumerable: true,
|
|
72938
|
+
get: function() {
|
|
72939
|
+
return __esmMin;
|
|
72940
|
+
}
|
|
72941
|
+
});
|
|
72942
|
+
Object.defineProperty(exports, "__exportAll", {
|
|
72943
|
+
enumerable: true,
|
|
72944
|
+
get: function() {
|
|
72945
|
+
return __exportAll;
|
|
72946
|
+
}
|
|
72947
|
+
});
|
|
72948
|
+
Object.defineProperty(exports, "__toCommonJS", {
|
|
72949
|
+
enumerable: true,
|
|
72950
|
+
get: function() {
|
|
72951
|
+
return __toCommonJS;
|
|
72952
|
+
}
|
|
72953
|
+
});
|
|
72954
|
+
Object.defineProperty(exports, "__toESM", {
|
|
72955
|
+
enumerable: true,
|
|
72956
|
+
get: function() {
|
|
72957
|
+
return __toESM;
|
|
72958
|
+
}
|
|
72959
|
+
});
|
|
72960
|
+
Object.defineProperty(exports, "addonRoutesCapability", {
|
|
72961
|
+
enumerable: true,
|
|
72962
|
+
get: function() {
|
|
72963
|
+
return addonRoutesCapability;
|
|
72964
|
+
}
|
|
72965
|
+
});
|
|
72966
|
+
Object.defineProperty(exports, "addonWidgetsSourceCapability", {
|
|
72967
|
+
enumerable: true,
|
|
72968
|
+
get: function() {
|
|
72969
|
+
return addonWidgetsSourceCapability;
|
|
72970
|
+
}
|
|
72971
|
+
});
|
|
72972
|
+
Object.defineProperty(exports, "advertisedHubOrigins", {
|
|
72973
|
+
enumerable: true,
|
|
72974
|
+
get: function() {
|
|
72975
|
+
return advertisedHubOrigins;
|
|
72976
|
+
}
|
|
72977
|
+
});
|
|
72978
|
+
Object.defineProperty(exports, "appFlowLocation", {
|
|
72979
|
+
enumerable: true,
|
|
72980
|
+
get: function() {
|
|
72981
|
+
return appFlowLocation;
|
|
72982
|
+
}
|
|
72983
|
+
});
|
|
72984
|
+
Object.defineProperty(exports, "array", {
|
|
72985
|
+
enumerable: true,
|
|
72986
|
+
get: function() {
|
|
72987
|
+
return array;
|
|
72988
|
+
}
|
|
72989
|
+
});
|
|
72990
|
+
Object.defineProperty(exports, "arrayItemFieldPath", {
|
|
72991
|
+
enumerable: true,
|
|
72992
|
+
get: function() {
|
|
72993
|
+
return arrayItemFieldPath;
|
|
72994
|
+
}
|
|
72995
|
+
});
|
|
72996
|
+
Object.defineProperty(exports, "authProviderCapability", {
|
|
72997
|
+
enumerable: true,
|
|
72998
|
+
get: function() {
|
|
72999
|
+
return authProviderCapability;
|
|
73000
|
+
}
|
|
73001
|
+
});
|
|
73002
|
+
Object.defineProperty(exports, "boolean", {
|
|
73003
|
+
enumerable: true,
|
|
73004
|
+
get: function() {
|
|
73005
|
+
return boolean;
|
|
73006
|
+
}
|
|
73007
|
+
});
|
|
73008
|
+
Object.defineProperty(exports, "buildAddonRouteProvider", {
|
|
73009
|
+
enumerable: true,
|
|
73010
|
+
get: function() {
|
|
73011
|
+
return buildAddonRouteProvider;
|
|
73012
|
+
}
|
|
73013
|
+
});
|
|
73014
|
+
Object.defineProperty(exports, "claimedRequestOrigins", {
|
|
73015
|
+
enumerable: true,
|
|
73016
|
+
get: function() {
|
|
73017
|
+
return claimedRequestOrigins;
|
|
73018
|
+
}
|
|
73019
|
+
});
|
|
73020
|
+
Object.defineProperty(exports, "errMsg", {
|
|
73021
|
+
enumerable: true,
|
|
73022
|
+
get: function() {
|
|
73023
|
+
return errMsg;
|
|
73024
|
+
}
|
|
73025
|
+
});
|
|
73026
|
+
Object.defineProperty(exports, "globalSecretScope", {
|
|
73027
|
+
enumerable: true,
|
|
73028
|
+
get: function() {
|
|
73029
|
+
return globalSecretScope;
|
|
73030
|
+
}
|
|
73031
|
+
});
|
|
73032
|
+
Object.defineProperty(exports, "isSecretClear", {
|
|
73033
|
+
enumerable: true,
|
|
73034
|
+
get: function() {
|
|
73035
|
+
return isSecretClear;
|
|
73036
|
+
}
|
|
73037
|
+
});
|
|
73038
|
+
Object.defineProperty(exports, "isSecretMarker", {
|
|
73039
|
+
enumerable: true,
|
|
73040
|
+
get: function() {
|
|
73041
|
+
return isSecretMarker;
|
|
73042
|
+
}
|
|
73043
|
+
});
|
|
73044
|
+
Object.defineProperty(exports, "loginMethodCapability", {
|
|
73045
|
+
enumerable: true,
|
|
73046
|
+
get: function() {
|
|
73047
|
+
return loginMethodCapability;
|
|
73048
|
+
}
|
|
73049
|
+
});
|
|
73050
|
+
Object.defineProperty(exports, "normalizeOrigin", {
|
|
73051
|
+
enumerable: true,
|
|
73052
|
+
get: function() {
|
|
73053
|
+
return normalizeOrigin;
|
|
73054
|
+
}
|
|
73055
|
+
});
|
|
73056
|
+
Object.defineProperty(exports, "number", {
|
|
73057
|
+
enumerable: true,
|
|
73058
|
+
get: function() {
|
|
73059
|
+
return number;
|
|
73060
|
+
}
|
|
73061
|
+
});
|
|
73062
|
+
Object.defineProperty(exports, "object", {
|
|
73063
|
+
enumerable: true,
|
|
73064
|
+
get: function() {
|
|
73065
|
+
return object;
|
|
73066
|
+
}
|
|
73067
|
+
});
|
|
73068
|
+
Object.defineProperty(exports, "oidcConnectionsCapability", {
|
|
73069
|
+
enumerable: true,
|
|
73070
|
+
get: function() {
|
|
73071
|
+
return oidcConnectionsCapability;
|
|
73072
|
+
}
|
|
73073
|
+
});
|
|
73074
|
+
Object.defineProperty(exports, "parseAppFlowRequest", {
|
|
73075
|
+
enumerable: true,
|
|
73076
|
+
get: function() {
|
|
73077
|
+
return parseAppFlowRequest;
|
|
73078
|
+
}
|
|
73079
|
+
});
|
|
73080
|
+
Object.defineProperty(exports, "pickRequestOrigin", {
|
|
73081
|
+
enumerable: true,
|
|
73082
|
+
get: function() {
|
|
73083
|
+
return pickRequestOrigin;
|
|
73084
|
+
}
|
|
73085
|
+
});
|
|
73086
|
+
Object.defineProperty(exports, "requestMountPrefix", {
|
|
73087
|
+
enumerable: true,
|
|
73088
|
+
get: function() {
|
|
73089
|
+
return requestMountPrefix;
|
|
73090
|
+
}
|
|
73091
|
+
});
|
|
73092
|
+
Object.defineProperty(exports, "resolveIconKey", {
|
|
73093
|
+
enumerable: true,
|
|
73094
|
+
get: function() {
|
|
73095
|
+
return resolveIconKey;
|
|
73096
|
+
}
|
|
73097
|
+
});
|
|
73098
|
+
Object.defineProperty(exports, "string", {
|
|
73099
|
+
enumerable: true,
|
|
73100
|
+
get: function() {
|
|
73101
|
+
return string;
|
|
73102
|
+
}
|
|
73103
|
+
});
|
|
73104
|
+
Object.defineProperty(exports, "toSecretFieldView", {
|
|
73105
|
+
enumerable: true,
|
|
73106
|
+
get: function() {
|
|
73107
|
+
return toSecretFieldView;
|
|
73108
|
+
}
|
|
73109
|
+
});
|
|
73110
|
+
Object.defineProperty(exports, "userPasskeysCapability", {
|
|
73111
|
+
enumerable: true,
|
|
73112
|
+
get: function() {
|
|
73113
|
+
return userPasskeysCapability;
|
|
73114
|
+
}
|
|
73115
|
+
});
|