@camstack/types 1.2.364 → 1.2.365
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 +2 -1
- package/dist/addon.mjs +2 -1
- package/dist/auth/device-certificate.d.ts +372 -0
- package/dist/auth/request-origin.d.ts +43 -0
- package/dist/capabilities/device-credentials.cap.d.ts +174 -0
- package/dist/capabilities/index.d.ts +5 -1
- package/dist/capabilities/node-certificates.cap.d.ts +128 -0
- package/dist/client.d.ts +1 -1
- package/dist/client.js +255 -0
- package/dist/client.mjs +245 -1
- package/dist/generated/addon-api.d.ts +797 -4
- package/dist/generated/cap-input-defaults.d.ts +1 -1
- package/dist/generated/capability-router-map.d.ts +8 -2
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/system-proxy.d.ts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +706 -0
- package/dist/index.mjs +659 -1
- package/dist/interfaces/auth.d.ts +6 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6658,6 +6658,330 @@ var SSO_STATE_COOKIE = "camstack_sso_state";
|
|
|
6658
6658
|
/** Seconds the state cookie lives — the pending IdP state lasts 5 minutes, the bridge 5 more. */
|
|
6659
6659
|
var SSO_STATE_COOKIE_MAX_AGE_SEC = 600;
|
|
6660
6660
|
//#endregion
|
|
6661
|
+
//#region src/auth/device-certificate.ts
|
|
6662
|
+
/**
|
|
6663
|
+
* Device certificates (D855) — the wire contract shared by the hub, the admin
|
|
6664
|
+
* UI and the native viewer.
|
|
6665
|
+
*
|
|
6666
|
+
* A device (a phone) generates its OWN P-256 key pair in hardware (Secure
|
|
6667
|
+
* Enclave / Android Keystore / a non-extractable WebCrypto key). The private
|
|
6668
|
+
* key never travels. The hub signs the PUBLIC key into an X.509 leaf under a
|
|
6669
|
+
* dedicated device CA; the device later proves possession of the key by
|
|
6670
|
+
* signing a hub-issued nonce, and the hub answers with the same session a
|
|
6671
|
+
* password login opens.
|
|
6672
|
+
*
|
|
6673
|
+
* Everything on the wire is a small string (a PEM, a base64url signature):
|
|
6674
|
+
* D613 is about bulk bytes, and a certificate is ~600 bytes.
|
|
6675
|
+
*/
|
|
6676
|
+
/** Signature algorithm of every device credential: ECDSA, curve P-256, SHA-256. */
|
|
6677
|
+
var DEVICE_CERT_SIGNATURE = "ecdsa-p256-sha256";
|
|
6678
|
+
/** First line of every signed message; a change of format bumps the version. */
|
|
6679
|
+
var DEVICE_SIGNATURE_MESSAGE_VERSION = "camstack-device-cert-v1";
|
|
6680
|
+
/** What a signature is for. A login signature can never be replayed as a renewal. */
|
|
6681
|
+
var DeviceSignaturePurposeSchema = zod.z.enum([
|
|
6682
|
+
"login",
|
|
6683
|
+
"renew",
|
|
6684
|
+
"revoke"
|
|
6685
|
+
]);
|
|
6686
|
+
/** Leaf lifetime and the window in which the app renews it. */
|
|
6687
|
+
var DEVICE_CERT_VALIDITY_DAYS = 365;
|
|
6688
|
+
var DEVICE_CERT_RENEW_WINDOW_DAYS = 30;
|
|
6689
|
+
/** One-shot enrollment code and login nonce lifetimes. */
|
|
6690
|
+
var DEVICE_ENROLLMENT_TTL_MS = 10 * 6e4;
|
|
6691
|
+
var DEVICE_NONCE_TTL_MS = 6e4;
|
|
6692
|
+
/** SAN URI prefixes of a device leaf. */
|
|
6693
|
+
var DEVICE_SAN_CREDENTIAL_PREFIX = "camstack:credential:";
|
|
6694
|
+
var DEVICE_SAN_USER_PREFIX = "camstack:user:";
|
|
6695
|
+
/**
|
|
6696
|
+
* The exact bytes a device signs (UTF-8, `\n` separators, no trailing newline):
|
|
6697
|
+
*
|
|
6698
|
+
* camstack-device-cert-v1
|
|
6699
|
+
* <login|renew>
|
|
6700
|
+
* <origin> the hub origin returned by `getDeviceChallenge`
|
|
6701
|
+
* <nonce>
|
|
6702
|
+
*
|
|
6703
|
+
* The origin is part of the message so a signature collected by a look-alike
|
|
6704
|
+
* hub is worthless on the real one; the hub additionally binds the nonce to
|
|
6705
|
+
* the origin it issued it for and refuses any other.
|
|
6706
|
+
*/
|
|
6707
|
+
function buildDeviceSignatureMessage(input) {
|
|
6708
|
+
return [
|
|
6709
|
+
DEVICE_SIGNATURE_MESSAGE_VERSION,
|
|
6710
|
+
input.purpose,
|
|
6711
|
+
input.origin,
|
|
6712
|
+
input.nonce
|
|
6713
|
+
].join("\n");
|
|
6714
|
+
}
|
|
6715
|
+
/** The deep link a QR carries: `camstack://enroll?hub=<origin>&code=<code>`. */
|
|
6716
|
+
function buildDeviceEnrollmentLink(input) {
|
|
6717
|
+
const query = new URLSearchParams();
|
|
6718
|
+
if (input.hub !== void 0) query.set("hub", input.hub);
|
|
6719
|
+
query.set("code", input.code);
|
|
6720
|
+
return `${input.scheme ?? "camstack"}://enroll?${query.toString()}`;
|
|
6721
|
+
}
|
|
6722
|
+
/** Parse an enrollment deep link; `null` when it is not one. `hub` is absent when the link names none. */
|
|
6723
|
+
function parseDeviceEnrollmentLink(raw) {
|
|
6724
|
+
let url;
|
|
6725
|
+
try {
|
|
6726
|
+
url = new URL(raw);
|
|
6727
|
+
} catch {
|
|
6728
|
+
return null;
|
|
6729
|
+
}
|
|
6730
|
+
if (url.protocol !== "camstack:" && url.protocol !== "camstack.dev:") return null;
|
|
6731
|
+
if (url.hostname !== "enroll") return null;
|
|
6732
|
+
const code = url.searchParams.get("code");
|
|
6733
|
+
if (code === null || code === "") return null;
|
|
6734
|
+
const hub = url.searchParams.get("hub");
|
|
6735
|
+
return {
|
|
6736
|
+
hub: hub === null || hub === "" ? null : hub,
|
|
6737
|
+
code
|
|
6738
|
+
};
|
|
6739
|
+
}
|
|
6740
|
+
var DevicePlatformSchema = zod.z.enum([
|
|
6741
|
+
"ios",
|
|
6742
|
+
"android",
|
|
6743
|
+
"web",
|
|
6744
|
+
"other"
|
|
6745
|
+
]);
|
|
6746
|
+
var Base64UrlSchema = zod.z.string().min(1).max(4096).regex(/^[A-Za-z0-9_-]+$/);
|
|
6747
|
+
var PemSchema = zod.z.string().min(1).max(16384);
|
|
6748
|
+
/**
|
|
6749
|
+
* Why a device-certificate endpoint said no. Distinct from a transport / 5xx
|
|
6750
|
+
* failure: those carry no reason and mean "try again", never "the credential is
|
|
6751
|
+
* dead". The viewer switches on this exhaustively.
|
|
6752
|
+
*/
|
|
6753
|
+
var DeviceRefusalReasonSchema = zod.z.enum([
|
|
6754
|
+
"revoked",
|
|
6755
|
+
"unknown-credential",
|
|
6756
|
+
"expired",
|
|
6757
|
+
"bad-signature",
|
|
6758
|
+
"nonce-invalid",
|
|
6759
|
+
"rate-limited",
|
|
6760
|
+
"invalid-certificate",
|
|
6761
|
+
"superseded",
|
|
6762
|
+
"user-gone",
|
|
6763
|
+
"unavailable",
|
|
6764
|
+
"code-invalid",
|
|
6765
|
+
"self-enrollment-disabled",
|
|
6766
|
+
"step-up-required",
|
|
6767
|
+
"bad-public-key"
|
|
6768
|
+
]);
|
|
6769
|
+
/** The only answers after which the app may count towards deleting its credential. */
|
|
6770
|
+
var DEFINITIVE_DEVICE_REFUSALS = [
|
|
6771
|
+
"revoked",
|
|
6772
|
+
"unknown-credential",
|
|
6773
|
+
"user-gone"
|
|
6774
|
+
];
|
|
6775
|
+
/** Consecutive DEFINITIVE answers before the app deletes its key and certificate. */
|
|
6776
|
+
var DEVICE_DEFINITIVE_REFUSALS_BEFORE_DELETE = 3;
|
|
6777
|
+
function isDefinitiveDeviceRefusal(reason) {
|
|
6778
|
+
return DEFINITIVE_DEVICE_REFUSALS.includes(reason);
|
|
6779
|
+
}
|
|
6780
|
+
var DeviceRefusalSchema = zod.z.object({
|
|
6781
|
+
ok: zod.z.literal(false),
|
|
6782
|
+
reason: DeviceRefusalReasonSchema,
|
|
6783
|
+
definitive: zod.z.boolean(),
|
|
6784
|
+
retryAfterSeconds: zod.z.number().optional()
|
|
6785
|
+
});
|
|
6786
|
+
/**
|
|
6787
|
+
* A credential-bound session that can no longer refresh answers
|
|
6788
|
+
* `auth.refreshSession` with UNAUTHORIZED whose message is this prefix + the
|
|
6789
|
+
* reason; {@link deviceRefusalFromMessage} reads it back.
|
|
6790
|
+
*/
|
|
6791
|
+
var DEVICE_REFRESH_REFUSAL_PREFIX = "device-credential:";
|
|
6792
|
+
function deviceRefusalFromMessage(message) {
|
|
6793
|
+
if (!message.startsWith("device-credential:")) return null;
|
|
6794
|
+
const parsed = DeviceRefusalReasonSchema.safeParse(message.slice(18));
|
|
6795
|
+
return parsed.success ? parsed.data : null;
|
|
6796
|
+
}
|
|
6797
|
+
var CompleteEnrollmentInputSchema = zod.z.object({
|
|
6798
|
+
code: zod.z.string().min(1).max(256),
|
|
6799
|
+
/** SubjectPublicKeyInfo DER of the device's P-256 public key, base64url. */
|
|
6800
|
+
publicKeySpki: Base64UrlSchema,
|
|
6801
|
+
deviceName: zod.z.string().min(1).max(80).optional(),
|
|
6802
|
+
platform: DevicePlatformSchema
|
|
6803
|
+
});
|
|
6804
|
+
var CompleteEnrollmentOutputSchema = zod.z.object({
|
|
6805
|
+
credentialId: zod.z.string(),
|
|
6806
|
+
certPem: PemSchema,
|
|
6807
|
+
/** The device CA certificate the leaf chains to. */
|
|
6808
|
+
chainPem: PemSchema,
|
|
6809
|
+
notAfter: zod.z.number(),
|
|
6810
|
+
user: zod.z.object({
|
|
6811
|
+
id: zod.z.string(),
|
|
6812
|
+
username: zod.z.string()
|
|
6813
|
+
})
|
|
6814
|
+
});
|
|
6815
|
+
var CompleteEnrollmentResultSchema = zod.z.discriminatedUnion("ok", [CompleteEnrollmentOutputSchema.extend({ ok: zod.z.literal(true) }), DeviceRefusalSchema]);
|
|
6816
|
+
var EnrollSelfInputSchema = zod.z.object({
|
|
6817
|
+
/** The single-use step-up proof (`auth.deviceEnrollProofFrom…`). */
|
|
6818
|
+
proof: zod.z.string().min(1).max(512),
|
|
6819
|
+
publicKeySpki: Base64UrlSchema,
|
|
6820
|
+
deviceName: zod.z.string().min(1).max(80),
|
|
6821
|
+
platform: DevicePlatformSchema
|
|
6822
|
+
});
|
|
6823
|
+
var DeviceEnrollProofSchema = zod.z.object({
|
|
6824
|
+
proof: zod.z.string(),
|
|
6825
|
+
expiresAt: zod.z.number()
|
|
6826
|
+
});
|
|
6827
|
+
var DeviceChallengeSchema = zod.z.object({
|
|
6828
|
+
nonce: zod.z.string(),
|
|
6829
|
+
/** The origin to put in the signed message. The app compares it to the hub it dialled. */
|
|
6830
|
+
origin: zod.z.string(),
|
|
6831
|
+
expiresAt: zod.z.number(),
|
|
6832
|
+
signature: zod.z.literal(DEVICE_CERT_SIGNATURE)
|
|
6833
|
+
});
|
|
6834
|
+
var DeviceChallengeResultSchema = zod.z.discriminatedUnion("ok", [DeviceChallengeSchema.extend({ ok: zod.z.literal(true) }), DeviceRefusalSchema]);
|
|
6835
|
+
var DeviceProofInputSchema = zod.z.object({
|
|
6836
|
+
certPem: PemSchema,
|
|
6837
|
+
nonce: zod.z.string().min(1).max(256),
|
|
6838
|
+
/** ECDSA P-256 SHA-256 over {@link buildDeviceSignatureMessage}; raw r||s or DER, base64url. */
|
|
6839
|
+
signature: Base64UrlSchema
|
|
6840
|
+
});
|
|
6841
|
+
var RenewDeviceCertificateOutputSchema = zod.z.object({
|
|
6842
|
+
credentialId: zod.z.string(),
|
|
6843
|
+
certPem: PemSchema,
|
|
6844
|
+
chainPem: PemSchema,
|
|
6845
|
+
notAfter: zod.z.number()
|
|
6846
|
+
});
|
|
6847
|
+
var RenewDeviceCertificateResultSchema = zod.z.discriminatedUnion("ok", [RenewDeviceCertificateOutputSchema.extend({ ok: zod.z.literal(true) }), DeviceRefusalSchema]);
|
|
6848
|
+
var RevokeOwnDeviceCertificateResultSchema = zod.z.discriminatedUnion("ok", [zod.z.object({
|
|
6849
|
+
ok: zod.z.literal(true),
|
|
6850
|
+
credentialId: zod.z.string(),
|
|
6851
|
+
sessionsEnded: zod.z.number().int()
|
|
6852
|
+
}), DeviceRefusalSchema]);
|
|
6853
|
+
function formatDeviceRevoker(revoker) {
|
|
6854
|
+
return revoker.kind === "device" ? "device" : `${revoker.kind}:${revoker.userId}`;
|
|
6855
|
+
}
|
|
6856
|
+
var DeviceCredentialStatusSchema = zod.z.enum([
|
|
6857
|
+
"active",
|
|
6858
|
+
"expired",
|
|
6859
|
+
"revoked"
|
|
6860
|
+
]);
|
|
6861
|
+
var DeviceCredentialSchema = zod.z.object({
|
|
6862
|
+
id: zod.z.string(),
|
|
6863
|
+
userId: zod.z.string(),
|
|
6864
|
+
username: zod.z.string().nullable(),
|
|
6865
|
+
deviceName: zod.z.string(),
|
|
6866
|
+
platform: DevicePlatformSchema,
|
|
6867
|
+
enrolledVia: zod.z.enum(["qr", "self"]),
|
|
6868
|
+
/** SHA-256 of the leaf certificate DER, colon-hex. */
|
|
6869
|
+
fingerprint: zod.z.string(),
|
|
6870
|
+
issuedAt: zod.z.number(),
|
|
6871
|
+
expiresAt: zod.z.number(),
|
|
6872
|
+
lastUsedAt: zod.z.number().nullable(),
|
|
6873
|
+
lastUsedFrom: zod.z.string().nullable(),
|
|
6874
|
+
revokedAt: zod.z.number().nullable(),
|
|
6875
|
+
/** `admin:<userId>` | `user:<userId>` | `device` | `user-deleted`. */
|
|
6876
|
+
revokedBy: zod.z.string().nullable(),
|
|
6877
|
+
status: DeviceCredentialStatusSchema
|
|
6878
|
+
});
|
|
6879
|
+
var StartEnrollmentOutputSchema = zod.z.object({
|
|
6880
|
+
/** Shown once; only its hash is kept. */
|
|
6881
|
+
code: zod.z.string(),
|
|
6882
|
+
expiresAt: zod.z.number(),
|
|
6883
|
+
/** `camstack://enroll?hub=…&code=…` — what the QR encodes. */
|
|
6884
|
+
enrollUrl: zod.z.string(),
|
|
6885
|
+
/** The hub origin in the link, or `null` when the hub could not name one (the link then has no `hub`). */
|
|
6886
|
+
hubOrigin: zod.z.string().nullable(),
|
|
6887
|
+
/** Every origin the apps may try (role `appConnections`). */
|
|
6888
|
+
hubOrigins: zod.z.array(zod.z.string())
|
|
6889
|
+
});
|
|
6890
|
+
/** The `device-certificate` arm of `auth.listLoginMethods`. */
|
|
6891
|
+
var DeviceCertificateLoginMethodSchema = zod.z.object({
|
|
6892
|
+
kind: zod.z.literal("device-certificate"),
|
|
6893
|
+
id: zod.z.literal("device-certificate"),
|
|
6894
|
+
label: zod.z.string(),
|
|
6895
|
+
stage: zod.z.literal("primary"),
|
|
6896
|
+
/** tRPC paths under the hub's `auth` router, so a client names no literal. */
|
|
6897
|
+
challengePath: zod.z.literal("auth.getDeviceChallenge"),
|
|
6898
|
+
revokePath: zod.z.literal("auth.revokeOwnDeviceCertificate"),
|
|
6899
|
+
enrollSelfPath: zod.z.literal("auth.enrollSelf"),
|
|
6900
|
+
loginPath: zod.z.literal("auth.loginWithDeviceCertificate"),
|
|
6901
|
+
renewPath: zod.z.literal("auth.renewDeviceCertificate"),
|
|
6902
|
+
signature: zod.z.literal(DEVICE_CERT_SIGNATURE),
|
|
6903
|
+
messageVersion: zod.z.literal(DEVICE_SIGNATURE_MESSAGE_VERSION),
|
|
6904
|
+
/** Which clients can execute it: a native app silently, a browser with a non-extractable WebCrypto key. */
|
|
6905
|
+
clients: zod.z.array(zod.z.enum(["native", "web"]))
|
|
6906
|
+
});
|
|
6907
|
+
//#endregion
|
|
6908
|
+
//#region src/auth/request-origin.ts
|
|
6909
|
+
/** host[:port] — a DNS name, IPv4 or bracketed IPv6. No userinfo, path or spaces. */
|
|
6910
|
+
var AUTHORITY_RE = /^(?:[a-z0-9.-]+|\[[0-9a-f:.]+\])(?::\d{1,5})?$/i;
|
|
6911
|
+
/** Same grammar as the hub's `parseForwardedPrefix` (spa-mount.ts). */
|
|
6912
|
+
var PREFIX_RE = /^\/[A-Za-z0-9_\-.]+(?:\/[A-Za-z0-9_\-.]+)*$/;
|
|
6913
|
+
var MAX_PREFIX_LENGTH = 512;
|
|
6914
|
+
/** First value of a possibly comma-joined forwarded header (the client-most proxy). */
|
|
6915
|
+
function firstValue(value) {
|
|
6916
|
+
if (value === void 0) return null;
|
|
6917
|
+
const first = value.split(",")[0]?.trim() ?? "";
|
|
6918
|
+
return first.length === 0 ? null : first;
|
|
6919
|
+
}
|
|
6920
|
+
/** `scheme://host[:port]` normalised by WHATWG URL, or `null` if it is not an http(s) origin. */
|
|
6921
|
+
function normalizeOrigin(value) {
|
|
6922
|
+
try {
|
|
6923
|
+
const url = new URL(value);
|
|
6924
|
+
if (url.protocol !== "https:" && url.protocol !== "http:") return null;
|
|
6925
|
+
if (url.username !== "" || url.password !== "") return null;
|
|
6926
|
+
return url.origin;
|
|
6927
|
+
} catch {
|
|
6928
|
+
return null;
|
|
6929
|
+
}
|
|
6930
|
+
}
|
|
6931
|
+
/** The mount prefix the relay named (no trailing slash), or `''`. Invalid = absent. */
|
|
6932
|
+
function requestMountPrefix(headers) {
|
|
6933
|
+
const raw = headers["x-forwarded-prefix"];
|
|
6934
|
+
if (raw === void 0 || raw.length === 0 || raw.length > MAX_PREFIX_LENGTH) return "";
|
|
6935
|
+
const trimmed = raw.endsWith("/") ? raw.slice(0, -1) : raw;
|
|
6936
|
+
if (trimmed === "" || !PREFIX_RE.test(trimmed)) return "";
|
|
6937
|
+
if (trimmed.split("/").some((segment) => segment === ".." || segment === ".")) return "";
|
|
6938
|
+
return trimmed;
|
|
6939
|
+
}
|
|
6940
|
+
/**
|
|
6941
|
+
* The origins the request CLAIMS, most specific first: the proxy's
|
|
6942
|
+
* `X-Forwarded-Host` over `Host`; the named `X-Forwarded-Proto`, or https
|
|
6943
|
+
* then http when none is named (the hub terminates TLS itself on 4443).
|
|
6944
|
+
*/
|
|
6945
|
+
function claimedRequestOrigins(headers) {
|
|
6946
|
+
const authority = firstValue(headers["x-forwarded-host"]) ?? firstValue(headers["host"]);
|
|
6947
|
+
if (authority === null || !AUTHORITY_RE.test(authority)) return [];
|
|
6948
|
+
const proto = firstValue(headers["x-forwarded-proto"])?.toLowerCase() ?? null;
|
|
6949
|
+
const schemes = proto === "https" || proto === "http" ? [proto] : proto === null ? ["https", "http"] : [];
|
|
6950
|
+
const out = [];
|
|
6951
|
+
for (const scheme of schemes) {
|
|
6952
|
+
const origin = normalizeOrigin(`${scheme}://${authority}`);
|
|
6953
|
+
if (origin !== null) out.push(origin);
|
|
6954
|
+
}
|
|
6955
|
+
return out;
|
|
6956
|
+
}
|
|
6957
|
+
/** Every origin the hub advertises itself at, normalised. Never the app link, never loopback. */
|
|
6958
|
+
function advertisedHubOrigins(book) {
|
|
6959
|
+
const candidates = [];
|
|
6960
|
+
for (const row of book.rows) {
|
|
6961
|
+
if (row.kind === "app-link" || row.kind === "loopback") continue;
|
|
6962
|
+
candidates.push(row.baseUrl);
|
|
6963
|
+
}
|
|
6964
|
+
const { publicEndpoint, internal, appConnections } = book.roles;
|
|
6965
|
+
if (publicEndpoint.resolved !== null) candidates.push(publicEndpoint.resolved);
|
|
6966
|
+
if (internal.resolved !== null) candidates.push(internal.resolved);
|
|
6967
|
+
candidates.push(...appConnections.resolved);
|
|
6968
|
+
candidates.push(...book.listenerOrigins ?? []);
|
|
6969
|
+
const out = /* @__PURE__ */ new Set();
|
|
6970
|
+
for (const candidate of candidates) {
|
|
6971
|
+
const origin = normalizeOrigin(candidate);
|
|
6972
|
+
if (origin !== null) out.add(origin);
|
|
6973
|
+
}
|
|
6974
|
+
return out;
|
|
6975
|
+
}
|
|
6976
|
+
/**
|
|
6977
|
+
* The origin to send the browser back to: the first claimed origin that is in
|
|
6978
|
+
* `allowed`, or `null` (the caller then uses its default address).
|
|
6979
|
+
*/
|
|
6980
|
+
function pickRequestOrigin(headers, allowed) {
|
|
6981
|
+
for (const origin of claimedRequestOrigins(headers)) if (allowed.has(origin)) return origin;
|
|
6982
|
+
return null;
|
|
6983
|
+
}
|
|
6984
|
+
//#endregion
|
|
6661
6985
|
//#region src/expression/binding-source.ts
|
|
6662
6986
|
/**
|
|
6663
6987
|
* What an expression's named bindings READ from.
|
|
@@ -13549,6 +13873,224 @@ var keychainCapability = {
|
|
|
13549
13873
|
}
|
|
13550
13874
|
};
|
|
13551
13875
|
//#endregion
|
|
13876
|
+
//#region src/capabilities/device-credentials.cap.ts
|
|
13877
|
+
var DeviceCaStatusSchema = zod.z.discriminatedUnion("state", [
|
|
13878
|
+
zod.z.object({ state: zod.z.literal("absent") }),
|
|
13879
|
+
zod.z.object({
|
|
13880
|
+
state: zod.z.literal("ready"),
|
|
13881
|
+
subject: zod.z.string(),
|
|
13882
|
+
fingerprintSha256: zod.z.string(),
|
|
13883
|
+
validTo: zod.z.string()
|
|
13884
|
+
}),
|
|
13885
|
+
zod.z.object({
|
|
13886
|
+
state: zod.z.literal("unavailable"),
|
|
13887
|
+
reason: zod.z.string()
|
|
13888
|
+
})
|
|
13889
|
+
]);
|
|
13890
|
+
var DeviceCertificateSettingsSchema = zod.z.object({ selfEnrollment: zod.z.enum(["allowed", "disabled"]) });
|
|
13891
|
+
/**
|
|
13892
|
+
* `device-credentials` — the admin surface of device certificates (D855).
|
|
13893
|
+
*
|
|
13894
|
+
* Everything a device does ITSELF — completing an enrollment, getting a
|
|
13895
|
+
* challenge, signing in, renewing — is a PUBLIC procedure of the hub's `auth`
|
|
13896
|
+
* router (`auth.completeEnrollment`, `getDeviceChallenge`,
|
|
13897
|
+
* `loginWithDeviceCertificate`, `renewDeviceCertificate`): those legs are
|
|
13898
|
+
* proofs of possession, not capability calls, and must not be reachable as
|
|
13899
|
+
* cap methods. This cap holds only what an operator does about them.
|
|
13900
|
+
*
|
|
13901
|
+
* Provider: `local-auth`, which also owns the device CA and the registry.
|
|
13902
|
+
* The hub is the only node that persists device credentials.
|
|
13903
|
+
*/
|
|
13904
|
+
var deviceCredentialsCapability = {
|
|
13905
|
+
name: "device-credentials",
|
|
13906
|
+
scope: "system",
|
|
13907
|
+
mode: "singleton",
|
|
13908
|
+
methods: {
|
|
13909
|
+
/**
|
|
13910
|
+
* Every enrolled device, newest first; `userId` narrows to one user.
|
|
13911
|
+
* `status` is derived: revoked wins over expired.
|
|
13912
|
+
*/
|
|
13913
|
+
listDeviceCredentials: require_sleep.method(zod.z.object({
|
|
13914
|
+
userId: zod.z.string().min(1).optional(),
|
|
13915
|
+
includeRevoked: zod.z.boolean().default(false)
|
|
13916
|
+
}), zod.z.array(DeviceCredentialSchema).readonly(), { auth: "admin" }),
|
|
13917
|
+
/**
|
|
13918
|
+
* Mint a one-shot enrollment code for `userId` and a device name: 128-bit
|
|
13919
|
+
* random, single use, 10 minutes, kept only as a hash. Returns the code
|
|
13920
|
+
* once, with the `camstack://enroll?hub=…&code=…` link a QR carries.
|
|
13921
|
+
* `caller` (the admin) is recorded in the audit trail.
|
|
13922
|
+
*/
|
|
13923
|
+
startEnrollment: require_sleep.method(zod.z.object({
|
|
13924
|
+
userId: zod.z.string().min(1),
|
|
13925
|
+
deviceName: zod.z.string().min(1).max(80)
|
|
13926
|
+
}), StartEnrollmentOutputSchema, {
|
|
13927
|
+
kind: "mutation",
|
|
13928
|
+
auth: "admin",
|
|
13929
|
+
caller: "required"
|
|
13930
|
+
}),
|
|
13931
|
+
/**
|
|
13932
|
+
* Revoke a credential: its certificate stops logging in at once, and every
|
|
13933
|
+
* session it opened ends (an open session also dies at its next refresh
|
|
13934
|
+
* even if this call raced it). Idempotent.
|
|
13935
|
+
*/
|
|
13936
|
+
revokeDeviceCredential: require_sleep.method(zod.z.object({ id: zod.z.string().min(1) }), zod.z.object({
|
|
13937
|
+
revoked: zod.z.boolean(),
|
|
13938
|
+
sessionsEnded: zod.z.number().int(),
|
|
13939
|
+
status: DeviceCredentialStatusSchema
|
|
13940
|
+
}), {
|
|
13941
|
+
kind: "mutation",
|
|
13942
|
+
auth: "admin",
|
|
13943
|
+
caller: "required"
|
|
13944
|
+
}),
|
|
13945
|
+
/**
|
|
13946
|
+
* Hub-wide device-certificate settings. `selfEnrollment`: `allowed`
|
|
13947
|
+
* (default) lets a signed-in user enroll their own device after a step-up
|
|
13948
|
+
* sign-in; `disabled` makes `auth.enrollSelf` refuse. The admin QR path is
|
|
13949
|
+
* unaffected. Hub-wide only (no per-role switch).
|
|
13950
|
+
*/
|
|
13951
|
+
getDeviceCertificateSettings: require_sleep.method(zod.z.object({}), DeviceCertificateSettingsSchema, { auth: "admin" }),
|
|
13952
|
+
setDeviceCertificateSettings: require_sleep.method(DeviceCertificateSettingsSchema, DeviceCertificateSettingsSchema, {
|
|
13953
|
+
kind: "mutation",
|
|
13954
|
+
auth: "admin"
|
|
13955
|
+
}),
|
|
13956
|
+
/**
|
|
13957
|
+
* Delete the registry row of a REVOKED credential (clean-up; the audit trail
|
|
13958
|
+
* keeps the revocation). Refuses a live credential: revoke it first. After
|
|
13959
|
+
* the row is gone the device's next call answers `unknown-credential`.
|
|
13960
|
+
*/
|
|
13961
|
+
deleteDeviceCredential: require_sleep.method(zod.z.object({ id: zod.z.string().min(1) }), zod.z.object({ result: zod.z.enum([
|
|
13962
|
+
"deleted",
|
|
13963
|
+
"live",
|
|
13964
|
+
"unknown"
|
|
13965
|
+
]) }), {
|
|
13966
|
+
kind: "mutation",
|
|
13967
|
+
auth: "admin",
|
|
13968
|
+
caller: "required"
|
|
13969
|
+
}),
|
|
13970
|
+
/**
|
|
13971
|
+
* The device CA: `absent` until the first enrollment creates it (lazily,
|
|
13972
|
+
* never rotated on boot), `unavailable` while the keychain cannot answer.
|
|
13973
|
+
*/
|
|
13974
|
+
getDeviceCaStatus: require_sleep.method(zod.z.object({}), DeviceCaStatusSchema, { auth: "admin" }),
|
|
13975
|
+
/** Rename a credential (the label only; the certificate is unchanged). */
|
|
13976
|
+
renameDeviceCredential: require_sleep.method(zod.z.object({
|
|
13977
|
+
id: zod.z.string().min(1),
|
|
13978
|
+
deviceName: zod.z.string().min(1).max(80)
|
|
13979
|
+
}), zod.z.object({ renamed: zod.z.boolean() }), {
|
|
13980
|
+
kind: "mutation",
|
|
13981
|
+
auth: "admin"
|
|
13982
|
+
})
|
|
13983
|
+
}
|
|
13984
|
+
};
|
|
13985
|
+
//#endregion
|
|
13986
|
+
//#region src/capabilities/node-certificates.cap.ts
|
|
13987
|
+
/**
|
|
13988
|
+
* `node-certificates` - what a node holds and the two renewals the hub drives
|
|
13989
|
+
* (D856): the node's MESH leaf (mutual TLS to the hub) and its HTTPS leaf (issued
|
|
13990
|
+
* from the hub's local CA so a device that trusts the hub root trusts the node).
|
|
13991
|
+
*
|
|
13992
|
+
* Provided by the AGENT RUNTIME (the synthetic `agent-runtime` addon id, like
|
|
13993
|
+
* `server-management`): the hub reaches it through the ordinary node-pinned
|
|
13994
|
+
* capability call - no new Moleculer action. The hub's own certificates are
|
|
13995
|
+
* handled in-process by the hub (`certificates` router), so this cap has no hub
|
|
13996
|
+
* provider.
|
|
13997
|
+
*
|
|
13998
|
+
* No private key ever crosses the mesh: the node generates its key pair, sends a
|
|
13999
|
+
* CSR, and the hub returns only the signed certificate.
|
|
14000
|
+
*/
|
|
14001
|
+
var MeshLeafInfoSchema = zod.z.object({
|
|
14002
|
+
cn: zod.z.string(),
|
|
14003
|
+
serial: zod.z.string(),
|
|
14004
|
+
fingerprintSha256: zod.z.string(),
|
|
14005
|
+
notBefore: zod.z.number(),
|
|
14006
|
+
notAfter: zod.z.number()
|
|
14007
|
+
});
|
|
14008
|
+
var HttpsLeafInfoSchema = zod.z.object({
|
|
14009
|
+
fingerprintSha256: zod.z.string(),
|
|
14010
|
+
issuer: zod.z.string(),
|
|
14011
|
+
sans: zod.z.array(zod.z.string()),
|
|
14012
|
+
notBefore: zod.z.number(),
|
|
14013
|
+
notAfter: zod.z.number()
|
|
14014
|
+
});
|
|
14015
|
+
var NodeHttpsStateSchema = zod.z.discriminatedUnion("state", [zod.z.object({
|
|
14016
|
+
state: zod.z.literal("served"),
|
|
14017
|
+
leaf: HttpsLeafInfoSchema
|
|
14018
|
+
}), zod.z.object({
|
|
14019
|
+
state: zod.z.literal("not-issued"),
|
|
14020
|
+
reason: zod.z.string()
|
|
14021
|
+
})]);
|
|
14022
|
+
var nodeCertificatesCapability = {
|
|
14023
|
+
name: "node-certificates",
|
|
14024
|
+
scope: "system",
|
|
14025
|
+
mode: "singleton",
|
|
14026
|
+
internal: true,
|
|
14027
|
+
methods: {
|
|
14028
|
+
/** The node's current mesh leaf (`null` when it is not enrolled on mTLS) and HTTPS state. */
|
|
14029
|
+
getCertificates: require_sleep.method(zod.z.object({}), zod.z.object({
|
|
14030
|
+
nodeId: zod.z.string(),
|
|
14031
|
+
mesh: MeshLeafInfoSchema.nullable(),
|
|
14032
|
+
https: NodeHttpsStateSchema
|
|
14033
|
+
}), { auth: "admin" }),
|
|
14034
|
+
/** Generate a NEW mesh key pair on the node; return the CSR (CN = node id). The key stays here. */
|
|
14035
|
+
prepareMeshRenewal: require_sleep.method(zod.z.object({}), zod.z.object({ csrPem: zod.z.string() }), {
|
|
14036
|
+
kind: "mutation",
|
|
14037
|
+
auth: "admin"
|
|
14038
|
+
}),
|
|
14039
|
+
/**
|
|
14040
|
+
* Install the hub-signed leaf for the key made by `prepareMeshRenewal`: persist it
|
|
14041
|
+
* (keeping the previous one), then reconnect to the hub with it. The node reverts to
|
|
14042
|
+
* the previous leaf by itself unless `confirmMeshLeaf` arrives within `confirmWithinMs`.
|
|
14043
|
+
*/
|
|
14044
|
+
installMeshLeaf: require_sleep.method(zod.z.object({
|
|
14045
|
+
certPem: zod.z.string().min(1),
|
|
14046
|
+
caCertPem: zod.z.string().min(1),
|
|
14047
|
+
confirmWithinMs: zod.z.number().int().min(1e4).max(6e5)
|
|
14048
|
+
}), zod.z.object({
|
|
14049
|
+
fingerprintSha256: zod.z.string(),
|
|
14050
|
+
serial: zod.z.string()
|
|
14051
|
+
}), {
|
|
14052
|
+
kind: "mutation",
|
|
14053
|
+
auth: "admin"
|
|
14054
|
+
}),
|
|
14055
|
+
/** The hub saw the node reconnect with the new leaf: keep it, forget the previous one. */
|
|
14056
|
+
confirmMeshLeaf: require_sleep.method(zod.z.object({ fingerprintSha256: zod.z.string() }), zod.z.object({ confirmed: zod.z.boolean() }), {
|
|
14057
|
+
kind: "mutation",
|
|
14058
|
+
auth: "admin"
|
|
14059
|
+
}),
|
|
14060
|
+
/** Go back to the previous leaf now. `false` when there is none to go back to. */
|
|
14061
|
+
rollbackMeshLeaf: require_sleep.method(zod.z.object({}), zod.z.object({ rolledBack: zod.z.boolean() }), {
|
|
14062
|
+
kind: "mutation",
|
|
14063
|
+
auth: "admin"
|
|
14064
|
+
}),
|
|
14065
|
+
/** A key pair + CSR for the node's HTTPS leaf, and the names the node reports for itself. */
|
|
14066
|
+
prepareHttpsCertificate: require_sleep.method(zod.z.object({}), zod.z.object({
|
|
14067
|
+
csrPem: zod.z.string(),
|
|
14068
|
+
hostnames: zod.z.array(zod.z.string()),
|
|
14069
|
+
addresses: zod.z.array(zod.z.string()),
|
|
14070
|
+
/** SHA-256 of the hub local CA this node pinned at its first install; `null` before one. */
|
|
14071
|
+
pinnedCaFingerprintSha256: zod.z.string().nullable()
|
|
14072
|
+
}), {
|
|
14073
|
+
kind: "mutation",
|
|
14074
|
+
auth: "admin"
|
|
14075
|
+
}),
|
|
14076
|
+
/** Install the hub-signed HTTPS leaf and hot-swap the serving context (no restart). */
|
|
14077
|
+
installHttpsCertificate: require_sleep.method(zod.z.object({
|
|
14078
|
+
certPem: zod.z.string().min(1),
|
|
14079
|
+
caCertPem: zod.z.string().min(1),
|
|
14080
|
+
/**
|
|
14081
|
+
* The hub signals that its local CA was rotated (D227) and this leaf chains to the NEW
|
|
14082
|
+
* one. Only the hub, over the authenticated mesh, can say so; a leaf with a different CA
|
|
14083
|
+
* and no signal is refused.
|
|
14084
|
+
*/
|
|
14085
|
+
caRotation: zod.z.boolean().optional()
|
|
14086
|
+
}), HttpsLeafInfoSchema, {
|
|
14087
|
+
kind: "mutation",
|
|
14088
|
+
auth: "admin"
|
|
14089
|
+
})
|
|
14090
|
+
},
|
|
14091
|
+
mount: { kind: "skip" }
|
|
14092
|
+
};
|
|
14093
|
+
//#endregion
|
|
13552
14094
|
//#region src/capabilities/keychain-admin.cap.ts
|
|
13553
14095
|
/**
|
|
13554
14096
|
* `keychain-admin` — the operator's view of the keychain (System → Secrets).
|
|
@@ -76263,6 +76805,54 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
76263
76805
|
addonId: null,
|
|
76264
76806
|
access: "create"
|
|
76265
76807
|
},
|
|
76808
|
+
"deviceCredentials.deleteDeviceCredential": {
|
|
76809
|
+
capName: "device-credentials",
|
|
76810
|
+
capScope: "system",
|
|
76811
|
+
addonId: null,
|
|
76812
|
+
access: "delete"
|
|
76813
|
+
},
|
|
76814
|
+
"deviceCredentials.getDeviceCaStatus": {
|
|
76815
|
+
capName: "device-credentials",
|
|
76816
|
+
capScope: "system",
|
|
76817
|
+
addonId: null,
|
|
76818
|
+
access: "view"
|
|
76819
|
+
},
|
|
76820
|
+
"deviceCredentials.getDeviceCertificateSettings": {
|
|
76821
|
+
capName: "device-credentials",
|
|
76822
|
+
capScope: "system",
|
|
76823
|
+
addonId: null,
|
|
76824
|
+
access: "view"
|
|
76825
|
+
},
|
|
76826
|
+
"deviceCredentials.listDeviceCredentials": {
|
|
76827
|
+
capName: "device-credentials",
|
|
76828
|
+
capScope: "system",
|
|
76829
|
+
addonId: null,
|
|
76830
|
+
access: "view"
|
|
76831
|
+
},
|
|
76832
|
+
"deviceCredentials.renameDeviceCredential": {
|
|
76833
|
+
capName: "device-credentials",
|
|
76834
|
+
capScope: "system",
|
|
76835
|
+
addonId: null,
|
|
76836
|
+
access: "create"
|
|
76837
|
+
},
|
|
76838
|
+
"deviceCredentials.revokeDeviceCredential": {
|
|
76839
|
+
capName: "device-credentials",
|
|
76840
|
+
capScope: "system",
|
|
76841
|
+
addonId: null,
|
|
76842
|
+
access: "delete"
|
|
76843
|
+
},
|
|
76844
|
+
"deviceCredentials.setDeviceCertificateSettings": {
|
|
76845
|
+
capName: "device-credentials",
|
|
76846
|
+
capScope: "system",
|
|
76847
|
+
addonId: null,
|
|
76848
|
+
access: "create"
|
|
76849
|
+
},
|
|
76850
|
+
"deviceCredentials.startEnrollment": {
|
|
76851
|
+
capName: "device-credentials",
|
|
76852
|
+
capScope: "system",
|
|
76853
|
+
addonId: null,
|
|
76854
|
+
access: "create"
|
|
76855
|
+
},
|
|
76266
76856
|
"deviceDiscovery.adoptDevice": {
|
|
76267
76857
|
capName: "device-discovery",
|
|
76268
76858
|
capScope: "device",
|
|
@@ -78423,6 +79013,48 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
78423
79013
|
addonId: null,
|
|
78424
79014
|
access: "create"
|
|
78425
79015
|
},
|
|
79016
|
+
"nodeCertificates.confirmMeshLeaf": {
|
|
79017
|
+
capName: "node-certificates",
|
|
79018
|
+
capScope: "system",
|
|
79019
|
+
addonId: null,
|
|
79020
|
+
access: "create"
|
|
79021
|
+
},
|
|
79022
|
+
"nodeCertificates.getCertificates": {
|
|
79023
|
+
capName: "node-certificates",
|
|
79024
|
+
capScope: "system",
|
|
79025
|
+
addonId: null,
|
|
79026
|
+
access: "view"
|
|
79027
|
+
},
|
|
79028
|
+
"nodeCertificates.installHttpsCertificate": {
|
|
79029
|
+
capName: "node-certificates",
|
|
79030
|
+
capScope: "system",
|
|
79031
|
+
addonId: null,
|
|
79032
|
+
access: "create"
|
|
79033
|
+
},
|
|
79034
|
+
"nodeCertificates.installMeshLeaf": {
|
|
79035
|
+
capName: "node-certificates",
|
|
79036
|
+
capScope: "system",
|
|
79037
|
+
addonId: null,
|
|
79038
|
+
access: "create"
|
|
79039
|
+
},
|
|
79040
|
+
"nodeCertificates.prepareHttpsCertificate": {
|
|
79041
|
+
capName: "node-certificates",
|
|
79042
|
+
capScope: "system",
|
|
79043
|
+
addonId: null,
|
|
79044
|
+
access: "create"
|
|
79045
|
+
},
|
|
79046
|
+
"nodeCertificates.prepareMeshRenewal": {
|
|
79047
|
+
capName: "node-certificates",
|
|
79048
|
+
capScope: "system",
|
|
79049
|
+
addonId: null,
|
|
79050
|
+
access: "create"
|
|
79051
|
+
},
|
|
79052
|
+
"nodeCertificates.rollbackMeshLeaf": {
|
|
79053
|
+
capName: "node-certificates",
|
|
79054
|
+
capScope: "system",
|
|
79055
|
+
addonId: null,
|
|
79056
|
+
access: "create"
|
|
79057
|
+
},
|
|
78426
79058
|
"nodes.clusterAddonStatus": {
|
|
78427
79059
|
capName: "nodes",
|
|
78428
79060
|
capScope: "system",
|
|
@@ -82700,6 +83332,7 @@ var KNOWN_CAP_NAMES = [
|
|
|
82700
83332
|
"detection-pipeline",
|
|
82701
83333
|
"device-admin-link",
|
|
82702
83334
|
"device-adoption",
|
|
83335
|
+
"device-credentials",
|
|
82703
83336
|
"device-discovery",
|
|
82704
83337
|
"device-export",
|
|
82705
83338
|
"device-extension",
|
|
@@ -82751,6 +83384,7 @@ var KNOWN_CAP_NAMES = [
|
|
|
82751
83384
|
"network-access",
|
|
82752
83385
|
"network-link",
|
|
82753
83386
|
"network-quality",
|
|
83387
|
+
"node-certificates",
|
|
82754
83388
|
"nodes",
|
|
82755
83389
|
"notification-output",
|
|
82756
83390
|
"notification-rules",
|
|
@@ -82938,6 +83572,7 @@ var SYSTEM_CAP_NAMES = [
|
|
|
82938
83572
|
"database-snapshot",
|
|
82939
83573
|
"decoder",
|
|
82940
83574
|
"device-adoption",
|
|
83575
|
+
"device-credentials",
|
|
82941
83576
|
"device-export",
|
|
82942
83577
|
"device-manager",
|
|
82943
83578
|
"device-provider",
|
|
@@ -82963,6 +83598,7 @@ var SYSTEM_CAP_NAMES = [
|
|
|
82963
83598
|
"mqtt-broker",
|
|
82964
83599
|
"network-access",
|
|
82965
83600
|
"network-quality",
|
|
83601
|
+
"node-certificates",
|
|
82966
83602
|
"nodes",
|
|
82967
83603
|
"notification-output",
|
|
82968
83604
|
"notification-rules",
|
|
@@ -84964,6 +85600,7 @@ var CAPABILITY_NAMES = {
|
|
|
84964
85600
|
detectionPipeline: "detection-pipeline",
|
|
84965
85601
|
deviceAdminLink: "device-admin-link",
|
|
84966
85602
|
deviceAdoption: "device-adoption",
|
|
85603
|
+
deviceCredentials: "device-credentials",
|
|
84967
85604
|
deviceDiscovery: "device-discovery",
|
|
84968
85605
|
deviceExport: "device-export",
|
|
84969
85606
|
deviceExtension: "device-extension",
|
|
@@ -85015,6 +85652,7 @@ var CAPABILITY_NAMES = {
|
|
|
85015
85652
|
networkAccess: "network-access",
|
|
85016
85653
|
networkLink: "network-link",
|
|
85017
85654
|
networkQuality: "network-quality",
|
|
85655
|
+
nodeCertificates: "node-certificates",
|
|
85018
85656
|
nodes: "nodes",
|
|
85019
85657
|
notificationOutput: "notification-output",
|
|
85020
85658
|
notificationRules: "notification-rules",
|
|
@@ -85287,6 +85925,10 @@ var CAPABILITY_ROUTER_KEYS = [
|
|
|
85287
85925
|
key: "deviceAdoption",
|
|
85288
85926
|
name: "device-adoption"
|
|
85289
85927
|
},
|
|
85928
|
+
{
|
|
85929
|
+
key: "deviceCredentials",
|
|
85930
|
+
name: "device-credentials"
|
|
85931
|
+
},
|
|
85290
85932
|
{
|
|
85291
85933
|
key: "deviceDiscovery",
|
|
85292
85934
|
name: "device-discovery"
|
|
@@ -85491,6 +86133,10 @@ var CAPABILITY_ROUTER_KEYS = [
|
|
|
85491
86133
|
key: "networkQuality",
|
|
85492
86134
|
name: "network-quality"
|
|
85493
86135
|
},
|
|
86136
|
+
{
|
|
86137
|
+
key: "nodeCertificates",
|
|
86138
|
+
name: "node-certificates"
|
|
86139
|
+
},
|
|
85494
86140
|
{
|
|
85495
86141
|
key: "nodes",
|
|
85496
86142
|
name: "nodes"
|
|
@@ -85828,6 +86474,7 @@ var ALL_CAPABILITY_DEFINITIONS = [
|
|
|
85828
86474
|
detectionPipelineCapability,
|
|
85829
86475
|
deviceAdminLinkCapability,
|
|
85830
86476
|
deviceAdoptionCapability,
|
|
86477
|
+
deviceCredentialsCapability,
|
|
85831
86478
|
deviceDiscoveryCapability,
|
|
85832
86479
|
deviceExportCapability,
|
|
85833
86480
|
deviceExtensionCapability,
|
|
@@ -85879,6 +86526,7 @@ var ALL_CAPABILITY_DEFINITIONS = [
|
|
|
85879
86526
|
networkAccessCapability,
|
|
85880
86527
|
networkLinkCapability,
|
|
85881
86528
|
networkQualityCapability,
|
|
86529
|
+
nodeCertificatesCapability,
|
|
85882
86530
|
nodesCapability,
|
|
85883
86531
|
notificationOutputCapability,
|
|
85884
86532
|
notificationRulesCapability,
|
|
@@ -89384,6 +90032,16 @@ function createSystemProxy(api) {
|
|
|
89384
90032
|
release: (input) => dispatch("deviceAdoption", "release", "mutation", input),
|
|
89385
90033
|
resync: (input) => dispatch("deviceAdoption", "resync", "mutation", input)
|
|
89386
90034
|
},
|
|
90035
|
+
deviceCredentials: {
|
|
90036
|
+
listDeviceCredentials: (input) => dispatch("deviceCredentials", "listDeviceCredentials", "query", input),
|
|
90037
|
+
startEnrollment: (input) => dispatch("deviceCredentials", "startEnrollment", "mutation", input),
|
|
90038
|
+
revokeDeviceCredential: (input) => dispatch("deviceCredentials", "revokeDeviceCredential", "mutation", input),
|
|
90039
|
+
getDeviceCertificateSettings: (input) => dispatch("deviceCredentials", "getDeviceCertificateSettings", "query", input),
|
|
90040
|
+
setDeviceCertificateSettings: (input) => dispatch("deviceCredentials", "setDeviceCertificateSettings", "mutation", input),
|
|
90041
|
+
deleteDeviceCredential: (input) => dispatch("deviceCredentials", "deleteDeviceCredential", "mutation", input),
|
|
90042
|
+
getDeviceCaStatus: (input) => dispatch("deviceCredentials", "getDeviceCaStatus", "query", input),
|
|
90043
|
+
renameDeviceCredential: (input) => dispatch("deviceCredentials", "renameDeviceCredential", "mutation", input)
|
|
90044
|
+
},
|
|
89387
90045
|
deviceExport: {
|
|
89388
90046
|
getStatus: (input) => dispatch("deviceExport", "getStatus", "query", input),
|
|
89389
90047
|
listSupportedDeviceKinds: (input) => dispatch("deviceExport", "listSupportedDeviceKinds", "query", input),
|
|
@@ -98718,6 +99376,9 @@ exports.ClusterModelChoiceSchema = ClusterModelChoiceSchema;
|
|
|
98718
99376
|
exports.CollectionColumnSchema = CollectionColumnSchema;
|
|
98719
99377
|
exports.CollectionIndexSchema = CollectionIndexSchema;
|
|
98720
99378
|
exports.ColorStatusSchema = ColorStatusSchema;
|
|
99379
|
+
exports.CompleteEnrollmentInputSchema = CompleteEnrollmentInputSchema;
|
|
99380
|
+
exports.CompleteEnrollmentOutputSchema = CompleteEnrollmentOutputSchema;
|
|
99381
|
+
exports.CompleteEnrollmentResultSchema = CompleteEnrollmentResultSchema;
|
|
98721
99382
|
exports.ComposableCapabilitiesSchema = ComposableCapabilitiesSchema;
|
|
98722
99383
|
exports.ComposableCapabilitySchema = ComposableCapabilitySchema;
|
|
98723
99384
|
exports.ComposableFieldSchema = ComposableFieldSchema;
|
|
@@ -98835,6 +99496,7 @@ exports.DEFAULT_SESSION_PLACEMENT_POLICY = DEFAULT_SESSION_PLACEMENT_POLICY;
|
|
|
98835
99496
|
exports.DEFAULT_SHARE_SOURCE = DEFAULT_SHARE_SOURCE;
|
|
98836
99497
|
exports.DEFAULT_TIMELAPSE_PREVIEW_TEXT = DEFAULT_TIMELAPSE_PREVIEW_TEXT;
|
|
98837
99498
|
exports.DEFAULT_TOKEN_EXPIRY = require_sleep.DEFAULT_TOKEN_EXPIRY;
|
|
99499
|
+
exports.DEFINITIVE_DEVICE_REFUSALS = DEFINITIVE_DEVICE_REFUSALS;
|
|
98838
99500
|
exports.DERIVED_CAMERA_SILENCED_CAP_NAMES = DERIVED_CAMERA_SILENCED_CAP_NAMES;
|
|
98839
99501
|
exports.DETAIL_CROP_PADDING_FIELD = DETAIL_CROP_PADDING_FIELD;
|
|
98840
99502
|
exports.DETAIL_CROP_PADDING_KEY = DETAIL_CROP_PADDING_KEY;
|
|
@@ -98846,14 +99508,24 @@ exports.DETECTOR_ACCURACY = DETECTOR_ACCURACY;
|
|
|
98846
99508
|
exports.DETECTOR_PERF = DETECTOR_PERF;
|
|
98847
99509
|
exports.DEVICE_BACKEND_TO_FORMAT = DEVICE_BACKEND_TO_FORMAT;
|
|
98848
99510
|
exports.DEVICE_CAP_NAMES = DEVICE_CAP_NAMES;
|
|
99511
|
+
exports.DEVICE_CERT_RENEW_WINDOW_DAYS = DEVICE_CERT_RENEW_WINDOW_DAYS;
|
|
99512
|
+
exports.DEVICE_CERT_SIGNATURE = DEVICE_CERT_SIGNATURE;
|
|
99513
|
+
exports.DEVICE_CERT_VALIDITY_DAYS = DEVICE_CERT_VALIDITY_DAYS;
|
|
98849
99514
|
exports.DEVICE_CHILDREN_BATCH_MAX = require_sleep.DEVICE_CHILDREN_BATCH_MAX;
|
|
99515
|
+
exports.DEVICE_DEFINITIVE_REFUSALS_BEFORE_DELETE = DEVICE_DEFINITIVE_REFUSALS_BEFORE_DELETE;
|
|
98850
99516
|
exports.DEVICE_DO_ACTIONS = DEVICE_DO_ACTIONS;
|
|
99517
|
+
exports.DEVICE_ENROLLMENT_TTL_MS = DEVICE_ENROLLMENT_TTL_MS;
|
|
99518
|
+
exports.DEVICE_NONCE_TTL_MS = DEVICE_NONCE_TTL_MS;
|
|
98851
99519
|
exports.DEVICE_PROFILES = DEVICE_PROFILES;
|
|
98852
99520
|
exports.DEVICE_RAMP = DEVICE_RAMP;
|
|
99521
|
+
exports.DEVICE_REFRESH_REFUSAL_PREFIX = DEVICE_REFRESH_REFUSAL_PREFIX;
|
|
98853
99522
|
exports.DEVICE_RESTORE_RETRY_CONCURRENCY = DEVICE_RESTORE_RETRY_CONCURRENCY;
|
|
98854
99523
|
exports.DEVICE_RESTORE_RETRY_DELAYS_MS = DEVICE_RESTORE_RETRY_DELAYS_MS;
|
|
99524
|
+
exports.DEVICE_SAN_CREDENTIAL_PREFIX = DEVICE_SAN_CREDENTIAL_PREFIX;
|
|
99525
|
+
exports.DEVICE_SAN_USER_PREFIX = DEVICE_SAN_USER_PREFIX;
|
|
98855
99526
|
exports.DEVICE_SCOPED_CAPS = require_sleep.DEVICE_SCOPED_CAPS;
|
|
98856
99527
|
exports.DEVICE_SETTINGS_CONTRIBUTION_METHODS = require_sleep.DEVICE_SETTINGS_CONTRIBUTION_METHODS;
|
|
99528
|
+
exports.DEVICE_SIGNATURE_MESSAGE_VERSION = DEVICE_SIGNATURE_MESSAGE_VERSION;
|
|
98857
99529
|
exports.DEVICE_STATE_READERS = DEVICE_STATE_READERS;
|
|
98858
99530
|
exports.DEVICE_STATUS_METHOD = require_sleep.DEVICE_STATUS_METHOD;
|
|
98859
99531
|
exports.DEVICE_TYPE_CONTROL_KIND = DEVICE_TYPE_CONTROL_KIND;
|
|
@@ -98881,9 +99553,17 @@ exports.DetectionSourceSchema = DetectionSourceSchema;
|
|
|
98881
99553
|
exports.DetectionSourcesSchema = DetectionSourcesSchema;
|
|
98882
99554
|
exports.DetectorStoreClearSchema = DetectorStoreClearSchema;
|
|
98883
99555
|
exports.DeviceAdminLinkSchema = DeviceAdminLinkSchema;
|
|
99556
|
+
exports.DeviceCaStatusSchema = DeviceCaStatusSchema;
|
|
99557
|
+
exports.DeviceCertificateLoginMethodSchema = DeviceCertificateLoginMethodSchema;
|
|
99558
|
+
exports.DeviceCertificateSettingsSchema = DeviceCertificateSettingsSchema;
|
|
99559
|
+
exports.DeviceChallengeResultSchema = DeviceChallengeResultSchema;
|
|
99560
|
+
exports.DeviceChallengeSchema = DeviceChallengeSchema;
|
|
98884
99561
|
exports.DeviceCodeSeveritySchema = DeviceCodeSeveritySchema;
|
|
98885
99562
|
exports.DeviceConfig = DeviceConfig;
|
|
99563
|
+
exports.DeviceCredentialSchema = DeviceCredentialSchema;
|
|
99564
|
+
exports.DeviceCredentialStatusSchema = DeviceCredentialStatusSchema;
|
|
98886
99565
|
exports.DeviceDiscoveryStatusSchema = DeviceDiscoveryStatusSchema;
|
|
99566
|
+
exports.DeviceEnrollProofSchema = DeviceEnrollProofSchema;
|
|
98887
99567
|
exports.DeviceExportExposeInputSchema = ExposeInputSchema;
|
|
98888
99568
|
exports.DeviceExportStatusSchema = DeviceExportStatusSchema;
|
|
98889
99569
|
exports.DeviceExportUnexposeInputSchema = UnexposeInputSchema;
|
|
@@ -98891,11 +99571,16 @@ exports.DeviceFeature = require_err_msg.DeviceFeature;
|
|
|
98891
99571
|
exports.DeviceInfoSchema = DeviceInfoSchema;
|
|
98892
99572
|
exports.DeviceModelChoiceSchema = DeviceModelChoiceSchema;
|
|
98893
99573
|
exports.DeviceNetworkStatsSchema = DeviceNetworkStatsSchema;
|
|
99574
|
+
exports.DevicePlatformSchema = DevicePlatformSchema;
|
|
99575
|
+
exports.DeviceProofInputSchema = DeviceProofInputSchema;
|
|
98894
99576
|
exports.DeviceRecommendationSchema = DeviceRecommendationSchema;
|
|
99577
|
+
exports.DeviceRefusalReasonSchema = DeviceRefusalReasonSchema;
|
|
99578
|
+
exports.DeviceRefusalSchema = DeviceRefusalSchema;
|
|
98895
99579
|
exports.DeviceRestoreRetryScheduler = DeviceRestoreRetryScheduler;
|
|
98896
99580
|
exports.DeviceRole = require_err_msg.DeviceRole;
|
|
98897
99581
|
exports.DeviceRuntimeState = DeviceRuntimeState;
|
|
98898
99582
|
exports.DeviceSelectorSchema = DeviceSelectorSchema;
|
|
99583
|
+
exports.DeviceSignaturePurposeSchema = DeviceSignaturePurposeSchema;
|
|
98899
99584
|
exports.DeviceStatusSchema = DeviceStatusSchema;
|
|
98900
99585
|
exports.DeviceType = require_err_msg.DeviceType;
|
|
98901
99586
|
exports.DiagnosticIdSchema = DiagnosticIdSchema;
|
|
@@ -98948,6 +99633,7 @@ exports.EmbeddingResultSchema = EmbeddingResultSchema;
|
|
|
98948
99633
|
exports.EmbeddingTowerSchema = EmbeddingTowerSchema;
|
|
98949
99634
|
exports.EncodeProfileSchema = EncodeProfileSchema;
|
|
98950
99635
|
exports.EnrichedWidgetMetadataSchema = EnrichedWidgetMetadataSchema;
|
|
99636
|
+
exports.EnrollSelfInputSchema = EnrollSelfInputSchema;
|
|
98951
99637
|
exports.EnumSensorDateTimeFormatSchema = EnumSensorDateTimeFormatSchema;
|
|
98952
99638
|
exports.EnumSensorStatusSchema = EnumSensorStatusSchema;
|
|
98953
99639
|
exports.EventCategory = require_event_category.EventCategory;
|
|
@@ -99056,6 +99742,7 @@ exports.HealthStatusSchema = HealthStatusSchema;
|
|
|
99056
99742
|
exports.HfModelResolutionSchema = HfModelResolutionSchema;
|
|
99057
99743
|
exports.HistoryPointSchema = HistoryPointSchema;
|
|
99058
99744
|
exports.HistoryResolutionEnum = HistoryResolutionEnum;
|
|
99745
|
+
exports.HttpsLeafInfoSchema = HttpsLeafInfoSchema;
|
|
99059
99746
|
exports.HubAddressRoleSchema = HubAddressRoleSchema;
|
|
99060
99747
|
exports.HumidifierStatusSchema = HumidifierStatusSchema;
|
|
99061
99748
|
exports.HumiditySensorStatusSchema = HumiditySensorStatusSchema;
|
|
@@ -99251,6 +99938,7 @@ exports.MediaPlayerStateSchema = MediaPlayerStateSchema;
|
|
|
99251
99938
|
exports.MediaPlayerStatusSchema = MediaPlayerStatusSchema;
|
|
99252
99939
|
exports.MediaPresenceOwnerKindSchema = MediaPresenceOwnerKindSchema;
|
|
99253
99940
|
exports.MediaRelocateModeSchema = MediaRelocateModeSchema;
|
|
99941
|
+
exports.MeshLeafInfoSchema = MeshLeafInfoSchema;
|
|
99254
99942
|
exports.MeshPeerSchema = MeshPeerSchema;
|
|
99255
99943
|
exports.MeshStatusSchema = MeshStatusSchema;
|
|
99256
99944
|
exports.MethodAccessSchema = MethodAccessSchema;
|
|
@@ -99540,6 +100228,7 @@ exports.NodeColorIdSchema = require_node_color.NodeColorIdSchema;
|
|
|
99540
100228
|
exports.NodeDeviceChangeSchema = NodeDeviceChangeSchema;
|
|
99541
100229
|
exports.NodeDirectoryEntrySchema = NodeDirectoryEntrySchema;
|
|
99542
100230
|
exports.NodeDirectorySchema = NodeDirectorySchema;
|
|
100231
|
+
exports.NodeHttpsStateSchema = NodeHttpsStateSchema;
|
|
99543
100232
|
exports.NodeRecommendationSchema = NodeRecommendationSchema;
|
|
99544
100233
|
exports.NotificationActionIconSchema = NotificationActionIconSchema;
|
|
99545
100234
|
exports.NotificationActionSchema = NotificationActionSchema;
|
|
@@ -99758,6 +100447,8 @@ exports.RelocateMediaInputSchema = RelocateMediaInputSchema;
|
|
|
99758
100447
|
exports.RelocateResidueInputSchema = RelocateResidueInputSchema;
|
|
99759
100448
|
exports.RelocateResidueSchema = RelocateResidueSchema;
|
|
99760
100449
|
exports.RenderedAsSchema = RenderedAsSchema;
|
|
100450
|
+
exports.RenewDeviceCertificateOutputSchema = RenewDeviceCertificateOutputSchema;
|
|
100451
|
+
exports.RenewDeviceCertificateResultSchema = RenewDeviceCertificateResultSchema;
|
|
99761
100452
|
exports.ReportMotionInputSchema = ReportMotionInputSchema;
|
|
99762
100453
|
exports.ReportedFailureContributionSchema = ReportedFailureContributionSchema;
|
|
99763
100454
|
exports.ReportedLoadContributionSchema = ReportedLoadContributionSchema;
|
|
@@ -99809,6 +100500,7 @@ exports.RetrainTrackSchema = RetrainTrackSchema;
|
|
|
99809
100500
|
exports.RetrainTrainingCorpusResolveResultSchema = RetrainTrainingCorpusResolveResultSchema;
|
|
99810
100501
|
exports.RetrainTrainingCorpusSelectionSchema = RetrainTrainingCorpusSelectionSchema;
|
|
99811
100502
|
exports.RetrainTransitionResultSchema = RetrainTransitionResultSchema;
|
|
100503
|
+
exports.RevokeOwnDeviceCertificateResultSchema = RevokeOwnDeviceCertificateResultSchema;
|
|
99812
100504
|
exports.RingBuffer = RingBuffer;
|
|
99813
100505
|
exports.RootStepSupplySchema = RootStepSupplySchema;
|
|
99814
100506
|
exports.RtpSourceSchema = RtpSourceSchema;
|
|
@@ -99912,6 +100604,7 @@ exports.SpatialDetectionSchema = SpatialDetectionSchema;
|
|
|
99912
100604
|
exports.SsoBridgeClaimsSchema = SsoBridgeClaimsSchema;
|
|
99913
100605
|
exports.StaleDevicePinSchema = StaleDevicePinSchema;
|
|
99914
100606
|
exports.StartEmbeddedInputSchema = StartEmbeddedInputSchema;
|
|
100607
|
+
exports.StartEnrollmentOutputSchema = StartEnrollmentOutputSchema;
|
|
99915
100608
|
exports.StationaryObjectSchema = StationaryObjectSchema;
|
|
99916
100609
|
exports.StorageAbortUploadInputSchema = AbortUploadInputSchema;
|
|
99917
100610
|
exports.StorageAccessSchema = StorageAccessSchema;
|
|
@@ -100160,6 +100853,7 @@ exports.addonWidgetsCapability = addonWidgetsCapability;
|
|
|
100160
100853
|
exports.addonWidgetsSourceCapability = addonWidgetsSourceCapability;
|
|
100161
100854
|
exports.addonsCapability = addonsCapability;
|
|
100162
100855
|
exports.adminUiCapability = require_sleep.adminUiCapability;
|
|
100856
|
+
exports.advertisedHubOrigins = advertisedHubOrigins;
|
|
100163
100857
|
exports.airQualitySensorCapability = airQualitySensorCapability;
|
|
100164
100858
|
exports.alarmDeviceBlocksArming = alarmDeviceBlocksArming;
|
|
100165
100859
|
exports.alarmDeviceSecureOnArm = alarmDeviceSecureOnArm;
|
|
@@ -100212,6 +100906,8 @@ exports.buildAudioArgs = require_composition.buildAudioArgs;
|
|
|
100212
100906
|
exports.buildBenchStepTree = buildBenchStepTree;
|
|
100213
100907
|
exports.buildCapabilityLookup = buildCapabilityLookup;
|
|
100214
100908
|
exports.buildDeviceAdminUrl = buildDeviceAdminUrl;
|
|
100909
|
+
exports.buildDeviceEnrollmentLink = buildDeviceEnrollmentLink;
|
|
100910
|
+
exports.buildDeviceSignatureMessage = buildDeviceSignatureMessage;
|
|
100215
100911
|
exports.buildDoorbellCompositionFeature = buildDoorbellCompositionFeature;
|
|
100216
100912
|
exports.buildEventKindDescriptor = buildEventKindDescriptor;
|
|
100217
100913
|
exports.buildFfmpegArgs = require_composition.buildFfmpegArgs;
|
|
@@ -100244,6 +100940,7 @@ exports.capacitySessionsOf = capacitySessionsOf;
|
|
|
100244
100940
|
exports.carbonMonoxideCapability = carbonMonoxideCapability;
|
|
100245
100941
|
exports.cellsToRects = cellsToRects;
|
|
100246
100942
|
exports.checkRoleAddress = checkRoleAddress;
|
|
100943
|
+
exports.claimedRequestOrigins = claimedRequestOrigins;
|
|
100247
100944
|
exports.classifyBearerPrincipal = classifyBearerPrincipal;
|
|
100248
100945
|
exports.classifyCamerasForBenchmark = classifyCamerasForBenchmark;
|
|
100249
100946
|
exports.classifyInferenceHardware = classifyInferenceHardware;
|
|
@@ -100365,6 +101062,7 @@ exports.detectionPipelineCapability = detectionPipelineCapability;
|
|
|
100365
101062
|
exports.deviceAdminLinkCapability = deviceAdminLinkCapability;
|
|
100366
101063
|
exports.deviceAdoptionCapability = deviceAdoptionCapability;
|
|
100367
101064
|
exports.deviceBackendToFormat = deviceBackendToFormat;
|
|
101065
|
+
exports.deviceCredentialsCapability = deviceCredentialsCapability;
|
|
100368
101066
|
exports.deviceCustomAction = require_sleep.deviceCustomAction;
|
|
100369
101067
|
exports.deviceDiscoveryCapability = deviceDiscoveryCapability;
|
|
100370
101068
|
exports.deviceDoFamily = deviceDoFamily;
|
|
@@ -100374,6 +101072,7 @@ exports.deviceManagerCapability = deviceManagerCapability;
|
|
|
100374
101072
|
exports.deviceMatchesProfile = deviceMatchesProfile;
|
|
100375
101073
|
exports.deviceOpsCapability = require_sleep.deviceOpsCapability;
|
|
100376
101074
|
exports.deviceProviderCapability = deviceProviderCapability;
|
|
101075
|
+
exports.deviceRefusalFromMessage = deviceRefusalFromMessage;
|
|
100377
101076
|
exports.deviceSelectorMatches = deviceSelectorMatches;
|
|
100378
101077
|
exports.deviceStateCapability = deviceStateCapability;
|
|
100379
101078
|
exports.deviceStatusCapability = deviceStatusCapability;
|
|
@@ -100450,6 +101149,7 @@ exports.findTimezone = findTimezone;
|
|
|
100450
101149
|
exports.floodCapability = floodCapability;
|
|
100451
101150
|
exports.foldSnapshotByFunction = foldSnapshotByFunction;
|
|
100452
101151
|
exports.forgetKnownSecret = require_sleep.forgetKnownSecret;
|
|
101152
|
+
exports.formatDeviceRevoker = formatDeviceRevoker;
|
|
100453
101153
|
exports.formatForRuntime = formatForRuntime;
|
|
100454
101154
|
exports.formatMediaOwnerKey = formatMediaOwnerKey;
|
|
100455
101155
|
exports.formatMinutes = formatMinutes;
|
|
@@ -100509,6 +101209,7 @@ exports.isClusterScopedStep = isClusterScopedStep;
|
|
|
100509
101209
|
exports.isCollectionArrayMethod = isCollectionArrayMethod;
|
|
100510
101210
|
exports.isDefaultAlarmProfileId = isDefaultAlarmProfileId;
|
|
100511
101211
|
exports.isDefaultAppConnectionEndpoint = isDefaultAppConnectionEndpoint;
|
|
101212
|
+
exports.isDefinitiveDeviceRefusal = isDefinitiveDeviceRefusal;
|
|
100512
101213
|
exports.isDeployableToAgent = isDeployableToAgent;
|
|
100513
101214
|
exports.isDetectionMacroClass = isDetectionMacroClass;
|
|
100514
101215
|
exports.isDeviceConfigCap = require_sleep.isDeviceConfigCap;
|
|
@@ -100631,6 +101332,7 @@ exports.networkAccessCapability = networkAccessCapability;
|
|
|
100631
101332
|
exports.networkLinkCapability = networkLinkCapability;
|
|
100632
101333
|
exports.networkQualityCapability = networkQualityCapability;
|
|
100633
101334
|
exports.nodeBenchmarkRefusals = nodeBenchmarkRefusals;
|
|
101335
|
+
exports.nodeCertificatesCapability = nodeCertificatesCapability;
|
|
100634
101336
|
exports.nodePickerItems = nodePickerItems;
|
|
100635
101337
|
exports.nodePin = require_sleep.nodePin;
|
|
100636
101338
|
exports.nodesCapability = nodesCapability;
|
|
@@ -100638,6 +101340,7 @@ exports.normalizeAddonInitResult = require_sleep.normalizeAddonInitResult;
|
|
|
100638
101340
|
exports.normalizeAudioLabel = normalizeAudioLabel;
|
|
100639
101341
|
exports.normalizeCoreBlockWrite = normalizeCoreBlockWrite;
|
|
100640
101342
|
exports.normalizeNodeId = require_sleep.normalizeNodeId;
|
|
101343
|
+
exports.normalizeOrigin = normalizeOrigin;
|
|
100641
101344
|
exports.normalizeSecretOwner = require_sleep.normalizeSecretOwner;
|
|
100642
101345
|
exports.normalizeTokenScopes = normalizeTokenScopes;
|
|
100643
101346
|
exports.normalizeUnit = normalizeUnit;
|
|
@@ -100659,6 +101362,7 @@ exports.packagePickerItems = packagePickerItems;
|
|
|
100659
101362
|
exports.parseAdminBase = parseAdminBase;
|
|
100660
101363
|
exports.parseAppAuthCallback = parseAppAuthCallback;
|
|
100661
101364
|
exports.parseCameraStreamConfig = parseCameraStreamConfig;
|
|
101365
|
+
exports.parseDeviceEnrollmentLink = parseDeviceEnrollmentLink;
|
|
100662
101366
|
exports.parseExpression = require_composition.parseExpression;
|
|
100663
101367
|
exports.parseJsonArray = require_sleep.parseJsonArray;
|
|
100664
101368
|
exports.parseJsonObject = require_sleep.parseJsonObject;
|
|
@@ -100685,6 +101389,7 @@ exports.pickDetailCropConvention = pickDetailCropConvention;
|
|
|
100685
101389
|
exports.pickInvalidClusterStepModels = pickInvalidClusterStepModels;
|
|
100686
101390
|
exports.pickNativeLeaseOverride = pickNativeLeaseOverride;
|
|
100687
101391
|
exports.pickPreferredRtspEntry = pickPreferredRtspEntry;
|
|
101392
|
+
exports.pickRequestOrigin = pickRequestOrigin;
|
|
100688
101393
|
exports.pickRestartCandidate = pickRestartCandidate;
|
|
100689
101394
|
exports.pickVideoEncoder = require_composition.pickVideoEncoder;
|
|
100690
101395
|
exports.pickerForCondition = pickerForCondition;
|
|
@@ -100738,6 +101443,7 @@ exports.reducePoints = reducePoints;
|
|
|
100738
101443
|
exports.registerKnownSecret = require_sleep.registerKnownSecret;
|
|
100739
101444
|
exports.renameAlarmProfile = renameAlarmProfile;
|
|
100740
101445
|
exports.replacedFieldKeys = replacedFieldKeys;
|
|
101446
|
+
exports.requestMountPrefix = requestMountPrefix;
|
|
100741
101447
|
exports.requiredTopLevelKeys = requiredTopLevelKeys;
|
|
100742
101448
|
exports.requiresPython = requiresPython;
|
|
100743
101449
|
exports.reservedSourceOwner = reservedSourceOwner;
|