@camstack/types 1.2.369 → 1.2.371
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 +1 -1
- package/dist/addon.mjs +1 -1
- package/dist/auth/app-flow.d.ts +72 -0
- package/dist/auth/device-certificate.d.ts +6 -0
- package/dist/capabilities/addon-catalog-href.d.ts +8 -0
- package/dist/capabilities/addons.cap.d.ts +4 -0
- package/dist/capabilities/hub-address.d.ts +4 -2
- package/dist/capabilities/index.d.ts +4 -3
- package/dist/capabilities/local-network.cap.d.ts +8 -0
- package/dist/capabilities/login-method.cap.d.ts +54 -0
- package/dist/capabilities/network-access.cap.d.ts +18 -1
- package/dist/capabilities/sso-bridge.cap.d.ts +27 -0
- package/dist/client.js +9 -1
- package/dist/client.mjs +9 -1
- package/dist/generated/addon-api.d.ts +48 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +191 -10
- package/dist/index.mjs +183 -11
- package/dist/{sleep--g-h2_c_.mjs → sleep-DAX0-2v9.mjs} +2 -0
- package/dist/{sleep-CXlc9YJ5.js → sleep-DnQ5WsMI.js} +2 -0
- package/package.json +1 -1
|
@@ -12195,6 +12195,12 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
12195
12195
|
stage: "primary" | "second-factor";
|
|
12196
12196
|
icon?: string | undefined;
|
|
12197
12197
|
linkable?: boolean | undefined;
|
|
12198
|
+
app?: {
|
|
12199
|
+
kind: "native";
|
|
12200
|
+
} | {
|
|
12201
|
+
kind: "browser";
|
|
12202
|
+
startPath: string;
|
|
12203
|
+
} | null | undefined;
|
|
12198
12204
|
} | {
|
|
12199
12205
|
kind: "widget";
|
|
12200
12206
|
id: string;
|
|
@@ -12207,6 +12213,12 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
12207
12213
|
};
|
|
12208
12214
|
stage: "primary" | "second-factor";
|
|
12209
12215
|
bundleUrl: string;
|
|
12216
|
+
app?: {
|
|
12217
|
+
kind: "native";
|
|
12218
|
+
} | {
|
|
12219
|
+
kind: "browser";
|
|
12220
|
+
startPath: string;
|
|
12221
|
+
} | null | undefined;
|
|
12210
12222
|
} | {
|
|
12211
12223
|
kind: "passkey";
|
|
12212
12224
|
id: string;
|
|
@@ -12214,6 +12226,12 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
12214
12226
|
stage: "primary" | "second-factor";
|
|
12215
12227
|
rpId: string;
|
|
12216
12228
|
origin: string | null;
|
|
12229
|
+
app?: {
|
|
12230
|
+
kind: "native";
|
|
12231
|
+
} | {
|
|
12232
|
+
kind: "browser";
|
|
12233
|
+
startPath: string;
|
|
12234
|
+
} | null | undefined;
|
|
12217
12235
|
} | {
|
|
12218
12236
|
kind: "device-certificate";
|
|
12219
12237
|
id: "device-certificate";
|
|
@@ -12227,6 +12245,12 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
12227
12245
|
signature: "ecdsa-p256-sha256";
|
|
12228
12246
|
messageVersion: "camstack-device-cert-v1";
|
|
12229
12247
|
clients: ("web" | "native")[];
|
|
12248
|
+
app: {
|
|
12249
|
+
kind: "native";
|
|
12250
|
+
} | {
|
|
12251
|
+
kind: "browser";
|
|
12252
|
+
startPath: string;
|
|
12253
|
+
} | null;
|
|
12230
12254
|
})[];
|
|
12231
12255
|
meta: object;
|
|
12232
12256
|
}>;
|
|
@@ -13055,6 +13079,12 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
13055
13079
|
stage: "primary" | "second-factor";
|
|
13056
13080
|
icon?: string | undefined;
|
|
13057
13081
|
linkable?: boolean | undefined;
|
|
13082
|
+
app?: {
|
|
13083
|
+
kind: "native";
|
|
13084
|
+
} | {
|
|
13085
|
+
kind: "browser";
|
|
13086
|
+
startPath: string;
|
|
13087
|
+
} | null | undefined;
|
|
13058
13088
|
} | {
|
|
13059
13089
|
kind: "widget";
|
|
13060
13090
|
id: string;
|
|
@@ -13067,6 +13097,12 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
13067
13097
|
};
|
|
13068
13098
|
stage: "primary" | "second-factor";
|
|
13069
13099
|
bundleUrl: string;
|
|
13100
|
+
app?: {
|
|
13101
|
+
kind: "native";
|
|
13102
|
+
} | {
|
|
13103
|
+
kind: "browser";
|
|
13104
|
+
startPath: string;
|
|
13105
|
+
} | null | undefined;
|
|
13070
13106
|
} | {
|
|
13071
13107
|
kind: "passkey";
|
|
13072
13108
|
id: string;
|
|
@@ -13074,6 +13110,12 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
13074
13110
|
stage: "primary" | "second-factor";
|
|
13075
13111
|
rpId: string;
|
|
13076
13112
|
origin: string | null;
|
|
13113
|
+
app?: {
|
|
13114
|
+
kind: "native";
|
|
13115
|
+
} | {
|
|
13116
|
+
kind: "browser";
|
|
13117
|
+
startPath: string;
|
|
13118
|
+
} | null | undefined;
|
|
13077
13119
|
} | {
|
|
13078
13120
|
kind: "device-certificate";
|
|
13079
13121
|
id: "device-certificate";
|
|
@@ -13087,6 +13129,12 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
13087
13129
|
signature: "ecdsa-p256-sha256";
|
|
13088
13130
|
messageVersion: "camstack-device-cert-v1";
|
|
13089
13131
|
clients: ("web" | "native")[];
|
|
13132
|
+
app: {
|
|
13133
|
+
kind: "native";
|
|
13134
|
+
} | {
|
|
13135
|
+
kind: "browser";
|
|
13136
|
+
startPath: string;
|
|
13137
|
+
} | null;
|
|
13090
13138
|
})[];
|
|
13091
13139
|
meta: object;
|
|
13092
13140
|
}>;
|
package/dist/index.d.ts
CHANGED
|
@@ -151,6 +151,7 @@ export * from './types/pipeline-step.js';
|
|
|
151
151
|
export * from './types/tracked.js';
|
|
152
152
|
export { type BearerPayloadShape, type BearerPrincipal, classifyBearerPrincipal, methodAccessForHttpMethod, type PrincipalAddonReachInput, type PrincipalAddonReachVerdict, principalMayReachAddon, scopesAllowAddon, scopesAllowDeviceCap, } from './auth/principal-scope.js';
|
|
153
153
|
export { APP_AUTH_CALLBACK_MAX_LENGTH, APP_AUTH_CALLBACK_URLS, canonicalizeAppCallback, hasUrlScheme, parseAppAuthCallback, } from './auth/app-callback.js';
|
|
154
|
+
export { APP_FLOW_DEFAULT_REDIRECT, APP_FLOW_REFUSAL_MESSAGES, APP_FLOW_STATE_PREFIX, type AppFlowParse, type AppFlowPurpose, AppFlowPurposeSchema, type AppFlowRefusal, type AppFlowRequest, type AppLoginPath, AppLoginPathSchema, appFlowLocation, parseAppFlowRequest, } from './auth/app-flow.js';
|
|
154
155
|
export { SSO_STATE_COOKIE, SSO_STATE_COOKIE_MAX_AGE_SEC } from './auth/sso-state.js';
|
|
155
156
|
export { buildDeviceEnrollmentLink, buildDeviceSignatureMessage, type CompleteEnrollmentInput, CompleteEnrollmentInputSchema, type CompleteEnrollmentOutput, CompleteEnrollmentOutputSchema, DEVICE_CERT_RENEW_WINDOW_DAYS, DEVICE_CERT_SIGNATURE, DEVICE_CERT_VALIDITY_DAYS, DEVICE_ENROLLMENT_TTL_MS, DEVICE_NONCE_TTL_MS, DEVICE_SAN_CREDENTIAL_PREFIX, DEVICE_SAN_USER_PREFIX, DEVICE_SIGNATURE_MESSAGE_VERSION, type DeviceCertificateLoginMethod, DeviceCertificateLoginMethodSchema, type DeviceChallenge, DeviceChallengeSchema, type DeviceCredential, DeviceCredentialSchema, type DeviceCredentialStatus, DeviceCredentialStatusSchema, type DevicePlatform, DevicePlatformSchema, type DeviceProofInput, DeviceProofInputSchema, type CompleteEnrollmentResult, CompleteEnrollmentResultSchema, DEFINITIVE_DEVICE_REFUSALS, DEVICE_DEFINITIVE_REFUSALS_BEFORE_DELETE, DEVICE_REFRESH_REFUSAL_PREFIX, deviceRefusalFromMessage, type DeviceChallengeResult, DeviceChallengeResultSchema, DeviceEnrollProofSchema, type DeviceRefusal, type DeviceRefusalReason, DeviceRefusalReasonSchema, DeviceRefusalSchema, type DeviceRevoker, type EnrollSelfInput, EnrollSelfInputSchema, formatDeviceRevoker, isDefinitiveDeviceRefusal, type RenewDeviceCertificateResult, RenewDeviceCertificateResultSchema, type RevokeOwnDeviceCertificateResult, RevokeOwnDeviceCertificateResultSchema, type DeviceSignaturePurpose, DeviceSignaturePurposeSchema, type RenewDeviceCertificateOutput, RenewDeviceCertificateOutputSchema, type StartEnrollmentOutput, StartEnrollmentOutputSchema, parseDeviceEnrollmentLink, } from './auth/device-certificate.js';
|
|
156
157
|
export { advertisedHubOrigins, claimedRequestOrigins, normalizeOrigin, pickRequestOrigin, type RequestHeaders, requestMountPrefix, } from './auth/request-origin.js';
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_sleep = require("./sleep-
|
|
2
|
+
const require_sleep = require("./sleep-DnQ5WsMI.js");
|
|
3
3
|
const require_event_category = require("./event-category-T43rdQWR.js");
|
|
4
4
|
const require_composition = require("./composition-DCYnv4I6.js");
|
|
5
5
|
const require_node_color = require("./node-color.js");
|
|
@@ -6640,6 +6640,103 @@ function hasUrlScheme(url) {
|
|
|
6640
6640
|
return /^[a-z][a-z0-9+.-]*:/i.test(url);
|
|
6641
6641
|
}
|
|
6642
6642
|
//#endregion
|
|
6643
|
+
//#region src/auth/app-flow.ts
|
|
6644
|
+
/**
|
|
6645
|
+
* The native-app browser sign-in flows the hub serves itself (D858).
|
|
6646
|
+
*
|
|
6647
|
+
* The viewer app opens the system browser at a hub START route (OIDC
|
|
6648
|
+
* `/addon/auth-oidc/<id>/start`, the passkey page `/auth/app/passkey`) and gets
|
|
6649
|
+
* a one-shot handoff code back at its custom scheme. These helpers are the one
|
|
6650
|
+
* reading of the request every leg shares - the OIDC addon, the finish leg and
|
|
6651
|
+
* the passkey page - so a rule tightened for one is tightened for all:
|
|
6652
|
+
*
|
|
6653
|
+
* - PKCE is mandatory and S256 only (`code_challenge` = base64url of a SHA-256);
|
|
6654
|
+
* - `state` is echoed back exactly;
|
|
6655
|
+
* - the return URL is one of {@link APP_AUTH_CALLBACK_URLS}, never a free URL;
|
|
6656
|
+
* - the purpose is `new-session` or `step-up` (the legacy `renew` has no browser flow).
|
|
6657
|
+
*
|
|
6658
|
+
* Pure and dependency-free (zod only) so an addon, the backend and a spec read
|
|
6659
|
+
* the same code.
|
|
6660
|
+
*/
|
|
6661
|
+
/** What the app redeems the code for. `step-up` yields a proof, never a session. */
|
|
6662
|
+
var AppFlowPurposeSchema = zod.z.enum(["new-session", "step-up"]);
|
|
6663
|
+
/** Where the app is sent when the request names no `redirect`. */
|
|
6664
|
+
var APP_FLOW_DEFAULT_REDIRECT = "camstack://auth-callback";
|
|
6665
|
+
/**
|
|
6666
|
+
* A browser OIDC flow started for an app carries this prefix on the IdP
|
|
6667
|
+
* `state` it generates, so a callback whose pending state is gone (expired,
|
|
6668
|
+
* replayed) can still be answered at the app and not on a hub error page. The
|
|
6669
|
+
* destination of that answer is the fixed default callback - the prefix
|
|
6670
|
+
* selects nothing the requester controls.
|
|
6671
|
+
*/
|
|
6672
|
+
var APP_FLOW_STATE_PREFIX = "a.";
|
|
6673
|
+
/** S256 challenge: base64url of 32 bytes = 43 characters, no padding. */
|
|
6674
|
+
var CHALLENGE_PATTERN = /^[A-Za-z0-9_-]{43}$/;
|
|
6675
|
+
/** The app's own `state`: URL-safe characters only, bounded. */
|
|
6676
|
+
var STATE_PATTERN = /^[A-Za-z0-9._~-]{1,256}$/;
|
|
6677
|
+
/** Operator-facing words for a refusal (the "clear page", D858). */
|
|
6678
|
+
var APP_FLOW_REFUSAL_MESSAGES = {
|
|
6679
|
+
"bad-challenge": "The sign-in request has no valid PKCE challenge (S256).",
|
|
6680
|
+
"bad-challenge-method": "Only the S256 PKCE method is supported.",
|
|
6681
|
+
"bad-state": "The sign-in request has no valid state.",
|
|
6682
|
+
"bad-purpose": "The sign-in request names an unknown purpose.",
|
|
6683
|
+
"bad-redirect": "The sign-in request names a return address this hub does not accept."
|
|
6684
|
+
};
|
|
6685
|
+
/**
|
|
6686
|
+
* Read the app parameters off a start query: `code_challenge`,
|
|
6687
|
+
* `code_challenge_method`, `state`, `purpose`, `redirect`. Anything missing or
|
|
6688
|
+
* malformed is refused - there is no lenient default for PKCE or state.
|
|
6689
|
+
*/
|
|
6690
|
+
function parseAppFlowRequest(query) {
|
|
6691
|
+
const challenge = query["code_challenge"];
|
|
6692
|
+
if (challenge === void 0 || !CHALLENGE_PATTERN.test(challenge)) return {
|
|
6693
|
+
ok: false,
|
|
6694
|
+
reason: "bad-challenge"
|
|
6695
|
+
};
|
|
6696
|
+
if (query["code_challenge_method"] !== "S256") return {
|
|
6697
|
+
ok: false,
|
|
6698
|
+
reason: "bad-challenge-method"
|
|
6699
|
+
};
|
|
6700
|
+
const state = query["state"];
|
|
6701
|
+
if (state === void 0 || !STATE_PATTERN.test(state)) return {
|
|
6702
|
+
ok: false,
|
|
6703
|
+
reason: "bad-state"
|
|
6704
|
+
};
|
|
6705
|
+
const purpose = AppFlowPurposeSchema.safeParse(query["purpose"]);
|
|
6706
|
+
if (!purpose.success) return {
|
|
6707
|
+
ok: false,
|
|
6708
|
+
reason: "bad-purpose"
|
|
6709
|
+
};
|
|
6710
|
+
const redirectParam = query["redirect"];
|
|
6711
|
+
const redirect = redirectParam === void 0 ? APP_FLOW_DEFAULT_REDIRECT : parseAppAuthCallback(redirectParam);
|
|
6712
|
+
if (redirect === null) return {
|
|
6713
|
+
ok: false,
|
|
6714
|
+
reason: "bad-redirect"
|
|
6715
|
+
};
|
|
6716
|
+
return {
|
|
6717
|
+
ok: true,
|
|
6718
|
+
request: {
|
|
6719
|
+
codeChallenge: challenge,
|
|
6720
|
+
state,
|
|
6721
|
+
purpose: purpose.data,
|
|
6722
|
+
redirect
|
|
6723
|
+
}
|
|
6724
|
+
};
|
|
6725
|
+
}
|
|
6726
|
+
/** The app's callback with `code` (success) or `error` (refusal), and the echoed `state` when known. */
|
|
6727
|
+
function appFlowLocation(redirect, result, state) {
|
|
6728
|
+
const params = new URLSearchParams();
|
|
6729
|
+
if ("code" in result) params.set("code", result.code);
|
|
6730
|
+
else params.set("error", result.error);
|
|
6731
|
+
if (state !== void 0) params.set("state", state);
|
|
6732
|
+
return `${redirect}?${params.toString()}`;
|
|
6733
|
+
}
|
|
6734
|
+
/** How a native app starts one login method (D858), as `auth.listLoginMethods` reports it. */
|
|
6735
|
+
var AppLoginPathSchema = zod.z.discriminatedUnion("kind", [zod.z.object({ kind: zod.z.literal("native") }), zod.z.object({
|
|
6736
|
+
kind: zod.z.literal("browser"),
|
|
6737
|
+
startPath: zod.z.string().startsWith("/")
|
|
6738
|
+
})]);
|
|
6739
|
+
//#endregion
|
|
6643
6740
|
//#region src/auth/sso-state.ts
|
|
6644
6741
|
/**
|
|
6645
6742
|
* The cookie that binds an SSO sign-in to the browser that started it.
|
|
@@ -6902,7 +6999,9 @@ var DeviceCertificateLoginMethodSchema = zod.z.object({
|
|
|
6902
6999
|
signature: zod.z.literal(DEVICE_CERT_SIGNATURE),
|
|
6903
7000
|
messageVersion: zod.z.literal(DEVICE_SIGNATURE_MESSAGE_VERSION),
|
|
6904
7001
|
/** 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"]))
|
|
7002
|
+
clients: zod.z.array(zod.z.enum(["native", "web"])),
|
|
7003
|
+
/** The app executes it itself, silently (D858). */
|
|
7004
|
+
app: AppLoginPathSchema.nullable()
|
|
6906
7005
|
});
|
|
6907
7006
|
//#endregion
|
|
6908
7007
|
//#region src/auth/request-origin.ts
|
|
@@ -38200,10 +38299,14 @@ function isLanIpv4Literal(endpoint) {
|
|
|
38200
38299
|
const host = hostnameOf(endpoint.baseUrl);
|
|
38201
38300
|
return host !== null && IPV4_LITERAL.test(host);
|
|
38202
38301
|
}
|
|
38302
|
+
function isUnstable(endpoint) {
|
|
38303
|
+
return endpoint.stable === false;
|
|
38304
|
+
}
|
|
38203
38305
|
/** Lower = better; `null` = never this role's AUTOMATIC answer. */
|
|
38204
38306
|
function autoRankFor(role, endpoint) {
|
|
38205
38307
|
if (endpoint.kind === "loopback" || endpoint.kind === "app-link" || endpoint.kind === "custom") return null;
|
|
38206
38308
|
if (hostnameOf(endpoint.baseUrl) === null) return null;
|
|
38309
|
+
if (isUnstable(endpoint)) return null;
|
|
38207
38310
|
if (role === "internal") {
|
|
38208
38311
|
if (isLanIpv4Literal(endpoint)) return 0;
|
|
38209
38312
|
if (isPlausibleLan(endpoint)) return 1;
|
|
@@ -38358,6 +38461,7 @@ function resolveNotificationTapAddress(flags) {
|
|
|
38358
38461
|
}
|
|
38359
38462
|
/** AUTO app connections: LAN IPv4 + the public tunnel. Never IPv6, mesh, loopback or custom. */
|
|
38360
38463
|
function isDefaultAppConnectionEndpoint(endpoint) {
|
|
38464
|
+
if (isUnstable(endpoint)) return false;
|
|
38361
38465
|
if (endpoint.kind === "lan-ipv4") return true;
|
|
38362
38466
|
return endpoint.kind === "public" && endpoint.interfaceKind === "public";
|
|
38363
38467
|
}
|
|
@@ -38438,6 +38542,18 @@ var AGENT_MDNS_TXT_KEYS = {
|
|
|
38438
38542
|
keyFingerprint: "fp"
|
|
38439
38543
|
};
|
|
38440
38544
|
//#endregion
|
|
38545
|
+
//#region src/capabilities/addon-catalog-href.ts
|
|
38546
|
+
/**
|
|
38547
|
+
* The Addons catalog filtered to the packages that declare `capability` — the
|
|
38548
|
+
* ONE spelling of that link (D860). It lives in `@camstack/types` so an addon's
|
|
38549
|
+
* own page (which may not import the admin UI) and the admin pages build it the
|
|
38550
|
+
* same way. `scripts/check-addon-install-links.ts` pins this file as the only
|
|
38551
|
+
* place the URL is written.
|
|
38552
|
+
*/
|
|
38553
|
+
function addonCatalogHref(capability) {
|
|
38554
|
+
return `/system/addons?${new URLSearchParams({ capability }).toString()}`;
|
|
38555
|
+
}
|
|
38556
|
+
//#endregion
|
|
38441
38557
|
//#region src/capabilities/ai-cap-timeouts.ts
|
|
38442
38558
|
/**
|
|
38443
38559
|
* Transport bounds for AI capability methods.
|
|
@@ -39524,7 +39640,13 @@ var RedirectLoginMethodSchema = zod.z.object({
|
|
|
39524
39640
|
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
39525
39641
|
* whatever their id. Absent / false — a login button only.
|
|
39526
39642
|
*/
|
|
39527
|
-
linkable: zod.z.boolean().optional()
|
|
39643
|
+
linkable: zod.z.boolean().optional(),
|
|
39644
|
+
/**
|
|
39645
|
+
* How a NATIVE app starts this method (D858): `{ kind: 'browser', startPath }`
|
|
39646
|
+
* when the route understands the app flow query (`app=1&code_challenge=…`),
|
|
39647
|
+
* `null`/absent when there is no app path - the app hides the method.
|
|
39648
|
+
*/
|
|
39649
|
+
app: AppLoginPathSchema.nullable().optional()
|
|
39528
39650
|
});
|
|
39529
39651
|
/**
|
|
39530
39652
|
* A Module-Federation widget the login page mounts for an in-page
|
|
@@ -39543,7 +39665,9 @@ var WidgetLoginMethodSchema = zod.z.object({
|
|
|
39543
39665
|
bundle: zod.z.string(),
|
|
39544
39666
|
/** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
|
|
39545
39667
|
remote: WidgetRemoteSchema,
|
|
39546
|
-
stage: LoginStageEnum
|
|
39668
|
+
stage: LoginStageEnum,
|
|
39669
|
+
/** Widgets are web ceremonies: no native app path (D858). Absent reads as `null`. */
|
|
39670
|
+
app: AppLoginPathSchema.nullable().optional()
|
|
39547
39671
|
});
|
|
39548
39672
|
/**
|
|
39549
39673
|
* A declarative WebAuthn ceremony the shell renders natively (no remote
|
|
@@ -39561,7 +39685,9 @@ var PasskeyLoginMethodSchema = zod.z.object({
|
|
|
39561
39685
|
/** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
|
|
39562
39686
|
rpId: zod.z.string(),
|
|
39563
39687
|
/** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
|
|
39564
|
-
origin: zod.z.string().nullable()
|
|
39688
|
+
origin: zod.z.string().nullable(),
|
|
39689
|
+
/** Set by the hub for the primary arm; a second-factor passkey has no app path (D858). */
|
|
39690
|
+
app: AppLoginPathSchema.nullable().optional()
|
|
39565
39691
|
});
|
|
39566
39692
|
/** One login-method contribution — redirect button, pre-auth widget, or native passkey ceremony. */
|
|
39567
39693
|
var LoginMethodContributionSchema = zod.z.discriminatedUnion("kind", [
|
|
@@ -40230,7 +40356,25 @@ var NetworkEndpointSchema = zod.z.object({
|
|
|
40230
40356
|
url: zod.z.string(),
|
|
40231
40357
|
hostname: zod.z.string(),
|
|
40232
40358
|
port: zod.z.number(),
|
|
40233
|
-
protocol: zod.z.enum(["http", "https"])
|
|
40359
|
+
protocol: zod.z.enum(["http", "https"]),
|
|
40360
|
+
/**
|
|
40361
|
+
* Whether this address survives a restart of its provider. `false` = it is
|
|
40362
|
+
* re-issued every time (a Quick tunnel's random `*.trycloudflare.com`); the
|
|
40363
|
+
* hub never selects such an address AUTOMATICALLY for a role (D860), though
|
|
40364
|
+
* it stays visible and an operator may still flag it. Absent = stable: every
|
|
40365
|
+
* provider except a Quick tunnel owns a name that does not change.
|
|
40366
|
+
*/
|
|
40367
|
+
stable: zod.z.boolean().optional()
|
|
40368
|
+
});
|
|
40369
|
+
/**
|
|
40370
|
+
* `data` of a `network.tunnel.started` event — what `local-network` (which
|
|
40371
|
+
* tails the bus and cannot import a provider) learns about the new address.
|
|
40372
|
+
*/
|
|
40373
|
+
var NetworkTunnelStartedDataSchema = zod.z.object({
|
|
40374
|
+
url: zod.z.string(),
|
|
40375
|
+
/** Mirrors {@link NetworkEndpointSchema} `stable`; absent = stable. */
|
|
40376
|
+
stable: zod.z.boolean().optional(),
|
|
40377
|
+
updated: zod.z.boolean().optional()
|
|
40234
40378
|
});
|
|
40235
40379
|
var NetworkAccessStatusSchema = zod.z.object({
|
|
40236
40380
|
connected: zod.z.boolean(),
|
|
@@ -54215,7 +54359,20 @@ var SsoBridgeClaimsSchema = zod.z.object({
|
|
|
54215
54359
|
* request to present the matching cookie — a login bridge is useless in
|
|
54216
54360
|
* any other browser.
|
|
54217
54361
|
*/
|
|
54218
|
-
browserBinding: zod.z.string().optional()
|
|
54362
|
+
browserBinding: zod.z.string().optional(),
|
|
54363
|
+
/**
|
|
54364
|
+
* The native app that started this sign-in (D858): its PKCE challenge,
|
|
54365
|
+
* `state`, purpose and allow-listed return URL, copied from the server-side
|
|
54366
|
+
* pending OIDC state. A bridge carrying it is finished ONLY at
|
|
54367
|
+
* `/api/auth/sso/finish-app` (which mints a handoff code, never a web
|
|
54368
|
+
* session); `/api/auth/sso/finish` refuses it.
|
|
54369
|
+
*/
|
|
54370
|
+
app: zod.z.object({
|
|
54371
|
+
codeChallenge: zod.z.string(),
|
|
54372
|
+
state: zod.z.string(),
|
|
54373
|
+
purpose: zod.z.enum(["new-session", "step-up"]),
|
|
54374
|
+
redirect: zod.z.string()
|
|
54375
|
+
}).optional()
|
|
54219
54376
|
});
|
|
54220
54377
|
var ssoBridgeCapability = {
|
|
54221
54378
|
name: "sso-bridge",
|
|
@@ -57585,7 +57742,12 @@ var SearchResultSchema = zod.z.object({
|
|
|
57585
57742
|
publishedAt: zod.z.string(),
|
|
57586
57743
|
author: zod.z.string(),
|
|
57587
57744
|
installed: zod.z.boolean(),
|
|
57588
|
-
installedVersion: zod.z.string().optional()
|
|
57745
|
+
installedVersion: zod.z.string().optional(),
|
|
57746
|
+
/**
|
|
57747
|
+
* Capability names the package's addons declare (from its published
|
|
57748
|
+
* manifest). `null` = the registry lookup failed — unknown, never `[]` (D393).
|
|
57749
|
+
*/
|
|
57750
|
+
capabilities: zod.z.array(zod.z.string()).readonly().nullable()
|
|
57589
57751
|
});
|
|
57590
57752
|
var AutoUpdateSettingsSchema = zod.z.object({
|
|
57591
57753
|
channel: ChannelSchema,
|
|
@@ -57804,7 +57966,11 @@ var addonsCapability = {
|
|
|
57804
57966
|
kind: "mutation",
|
|
57805
57967
|
auth: "admin"
|
|
57806
57968
|
}),
|
|
57807
|
-
searchAvailable: require_sleep.method(zod.z.object({
|
|
57969
|
+
searchAvailable: require_sleep.method(zod.z.object({
|
|
57970
|
+
query: zod.z.string().optional(),
|
|
57971
|
+
/** Only packages whose addons declare this capability (unknown ones excluded). */
|
|
57972
|
+
capability: zod.z.string().optional()
|
|
57973
|
+
}), zod.z.array(SearchResultSchema)),
|
|
57808
57974
|
/**
|
|
57809
57975
|
* Available package updates for a node. `nodeId` omitted (or
|
|
57810
57976
|
* `'hub'`) checks the hub's own installed packages; an agent
|
|
@@ -62077,7 +62243,13 @@ var ConnectionEndpointSchema = zod.z.object({
|
|
|
62077
62243
|
* calls so the client can sort even if the cap returns a new
|
|
62078
62244
|
* ordering between polls.
|
|
62079
62245
|
*/
|
|
62080
|
-
priority: zod.z.number()
|
|
62246
|
+
priority: zod.z.number(),
|
|
62247
|
+
/**
|
|
62248
|
+
* `false` = the address changes on its own (a Quick tunnel, re-issued on
|
|
62249
|
+
* every respawn). Automatic role resolution skips it (D860); an explicit
|
|
62250
|
+
* operator flag still honours it. Absent = stable.
|
|
62251
|
+
*/
|
|
62252
|
+
stable: zod.z.boolean().optional()
|
|
62081
62253
|
});
|
|
62082
62254
|
/**
|
|
62083
62255
|
* Where the advertised local port came from. Ordered most → least
|
|
@@ -100400,6 +100572,9 @@ exports.APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT = APPEARANCE_RESOLVES_AMBIGUITY_DE
|
|
|
100400
100572
|
exports.APPLE_SA_TO_MACRO = APPLE_SA_TO_MACRO;
|
|
100401
100573
|
exports.APP_AUTH_CALLBACK_MAX_LENGTH = APP_AUTH_CALLBACK_MAX_LENGTH;
|
|
100402
100574
|
exports.APP_AUTH_CALLBACK_URLS = APP_AUTH_CALLBACK_URLS;
|
|
100575
|
+
exports.APP_FLOW_DEFAULT_REDIRECT = APP_FLOW_DEFAULT_REDIRECT;
|
|
100576
|
+
exports.APP_FLOW_REFUSAL_MESSAGES = APP_FLOW_REFUSAL_MESSAGES;
|
|
100577
|
+
exports.APP_FLOW_STATE_PREFIX = APP_FLOW_STATE_PREFIX;
|
|
100403
100578
|
exports.ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT = ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT;
|
|
100404
100579
|
exports.AUDIO_ANALYSIS_CAP_NAME = AUDIO_ANALYSIS_CAP_NAME;
|
|
100405
100580
|
exports.AUDIO_BACKEND_CHOICES = AUDIO_BACKEND_CHOICES;
|
|
@@ -100447,6 +100622,8 @@ exports.AmbientLightSensorStatusSchema = AmbientLightSensorStatusSchema;
|
|
|
100447
100622
|
exports.AnalyticsLtsSeriesSchema = AnalyticsLtsSeriesSchema;
|
|
100448
100623
|
exports.ApiKeyRecordSchema = ApiKeyRecordSchema;
|
|
100449
100624
|
exports.ApiKeySummarySchema = ApiKeySummarySchema;
|
|
100625
|
+
exports.AppFlowPurposeSchema = AppFlowPurposeSchema;
|
|
100626
|
+
exports.AppLoginPathSchema = AppLoginPathSchema;
|
|
100450
100627
|
exports.AppleFmAvailabilitySchema = AppleFmAvailabilitySchema;
|
|
100451
100628
|
exports.AppleFmUnavailableReasonSchema = AppleFmUnavailableReasonSchema;
|
|
100452
100629
|
exports.ArchiveEntrySchema = ArchiveEntrySchema;
|
|
@@ -101512,6 +101689,7 @@ exports.NetworkAccessStatusSchema = NetworkAccessStatusSchema;
|
|
|
101512
101689
|
exports.NetworkAddressSchema = NetworkAddressSchema;
|
|
101513
101690
|
exports.NetworkEndpointSchema = NetworkEndpointSchema;
|
|
101514
101691
|
exports.NetworkLinkStatusSchema = NetworkLinkStatusSchema;
|
|
101692
|
+
exports.NetworkTunnelStartedDataSchema = NetworkTunnelStartedDataSchema;
|
|
101515
101693
|
exports.NodeBenchCellSchema = NodeBenchCellSchema;
|
|
101516
101694
|
exports.NodeBenchClipSchema = NodeBenchClipSchema;
|
|
101517
101695
|
exports.NodeBenchDeviceCellSchema = NodeBenchDeviceCellSchema;
|
|
@@ -102160,6 +102338,7 @@ exports.actionsForDevice = actionsForDevice;
|
|
|
102160
102338
|
exports.actionsForDeviceType = actionsForDeviceType;
|
|
102161
102339
|
exports.actionsForDevices = actionsForDevices;
|
|
102162
102340
|
exports.activateAlarmProfile = activateAlarmProfile;
|
|
102341
|
+
exports.addonCatalogHref = addonCatalogHref;
|
|
102163
102342
|
exports.addonPagesCapability = addonPagesCapability;
|
|
102164
102343
|
exports.addonPagesSourceCapability = addonPagesSourceCapability;
|
|
102165
102344
|
exports.addonRoutesCapability = addonRoutesCapability;
|
|
@@ -102179,6 +102358,7 @@ exports.alertsCapability = alertsCapability;
|
|
|
102179
102358
|
exports.allDoActions = allDoActions;
|
|
102180
102359
|
exports.allowedSuppliedEffect = allowedSuppliedEffect;
|
|
102181
102360
|
exports.ambientLightSensorCapability = ambientLightSensorCapability;
|
|
102361
|
+
exports.appFlowLocation = appFlowLocation;
|
|
102182
102362
|
exports.applyBlockingEdit = applyBlockingEdit;
|
|
102183
102363
|
exports.applyModeDelaysEdits = applyModeDelaysEdits;
|
|
102184
102364
|
exports.applyModeDeviceListEdit = applyModeDeviceListEdit;
|
|
@@ -102679,6 +102859,7 @@ exports.overlayClusterStepSettings = overlayClusterStepSettings;
|
|
|
102679
102859
|
exports.packagePickerItems = packagePickerItems;
|
|
102680
102860
|
exports.parseAdminBase = parseAdminBase;
|
|
102681
102861
|
exports.parseAppAuthCallback = parseAppAuthCallback;
|
|
102862
|
+
exports.parseAppFlowRequest = parseAppFlowRequest;
|
|
102682
102863
|
exports.parseCameraStreamConfig = parseCameraStreamConfig;
|
|
102683
102864
|
exports.parseDeviceEnrollmentLink = parseDeviceEnrollmentLink;
|
|
102684
102865
|
exports.parseExpression = require_composition.parseExpression;
|