@camstack/addon-auth 1.2.144 → 1.2.146
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-ChwITXNa.mjs → dist-BtJOajm3.mjs} +475 -12
- package/dist/{dist-0YTEFDYk.js → dist-DtqB-MTf.js} +498 -11
- package/dist/oidc/auth-oidc.addon.js +123 -15
- package/dist/oidc/auth-oidc.addon.mjs +123 -15
- package/dist/webauthn/_stub.js +1 -1
- package/dist/webauthn/{_virtual_mf-localSharedImportMap___mfe_internal__addon_auth_webauthn_widgets-ZRpCO_gp.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_auth_webauthn_widgets-C3_j2tlC.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-C_j9tv24.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-YhJ9npQM.mjs → hostInit-H35G8h3o.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-xhY74yma.mjs +0 -26
|
@@ -5386,7 +5386,7 @@ var ZodIssueCode = {
|
|
|
5386
5386
|
var ZodFirstPartyTypeKind;
|
|
5387
5387
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5388
5388
|
//#endregion
|
|
5389
|
-
//#region ../types/dist/sleep-
|
|
5389
|
+
//#region ../types/dist/sleep-DAX0-2v9.mjs
|
|
5390
5390
|
/**
|
|
5391
5391
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5392
5392
|
* window to float samples (D455).
|
|
@@ -12279,6 +12279,123 @@ var ConvertResultSchema = object({
|
|
|
12279
12279
|
})).readonly()
|
|
12280
12280
|
});
|
|
12281
12281
|
/**
|
|
12282
|
+
* The viewer app's custom-scheme callback — the ONE list of URLs a hub flow
|
|
12283
|
+
* may hand a browser back to the native app at.
|
|
12284
|
+
*
|
|
12285
|
+
* Two readers, one answer: the admin-ui login page (`redirect=` for the
|
|
12286
|
+
* native sign-in handoff) and the hub itself (`auth.beginExternalLink`'s
|
|
12287
|
+
* `returnTo` for a native account link, D801). Both validate against this
|
|
12288
|
+
* list, so a scheme added for one flow can never be accepted by one side and
|
|
12289
|
+
* refused by the other.
|
|
12290
|
+
*
|
|
12291
|
+
* `camstack` is the production app; `camstack.dev` the dev client
|
|
12292
|
+
* (`APP_VARIANT=development`). Exact match after canonicalisation — no
|
|
12293
|
+
* query or fragment riders, no http(s).
|
|
12294
|
+
*/
|
|
12295
|
+
var APP_AUTH_CALLBACK_URLS = ["camstack://auth-callback", "camstack.dev://auth-callback"];
|
|
12296
|
+
/**
|
|
12297
|
+
* The variants the OS / linking layer produces for the same callback:
|
|
12298
|
+
* `scheme:///auth-callback` (expo-linking's empty-host standalone form — three
|
|
12299
|
+
* slashes) and a trailing `/` both mean `scheme://auth-callback`. Nothing else
|
|
12300
|
+
* is normalised: riders keep failing the exact match.
|
|
12301
|
+
*/
|
|
12302
|
+
function canonicalizeAppCallback(raw) {
|
|
12303
|
+
return raw.replace(/^([a-z][a-z0-9.+-]*):\/\/\/(?!\/)/i, "$1://").replace(/\/$/, "");
|
|
12304
|
+
}
|
|
12305
|
+
/** The canonical allowlisted callback `raw` names, or `null`. */
|
|
12306
|
+
function parseAppAuthCallback(raw) {
|
|
12307
|
+
if (typeof raw !== "string" || raw.length === 0 || raw.length > 512) return null;
|
|
12308
|
+
const canonical = canonicalizeAppCallback(raw);
|
|
12309
|
+
return APP_AUTH_CALLBACK_URLS.includes(canonical) ? canonical : null;
|
|
12310
|
+
}
|
|
12311
|
+
/**
|
|
12312
|
+
* The native-app browser sign-in flows the hub serves itself (D858).
|
|
12313
|
+
*
|
|
12314
|
+
* The viewer app opens the system browser at a hub START route (OIDC
|
|
12315
|
+
* `/addon/auth-oidc/<id>/start`, the passkey page `/auth/app/passkey`) and gets
|
|
12316
|
+
* a one-shot handoff code back at its custom scheme. These helpers are the one
|
|
12317
|
+
* reading of the request every leg shares - the OIDC addon, the finish leg and
|
|
12318
|
+
* the passkey page - so a rule tightened for one is tightened for all:
|
|
12319
|
+
*
|
|
12320
|
+
* - PKCE is mandatory and S256 only (`code_challenge` = base64url of a SHA-256);
|
|
12321
|
+
* - `state` is echoed back exactly;
|
|
12322
|
+
* - the return URL is one of {@link APP_AUTH_CALLBACK_URLS}, never a free URL;
|
|
12323
|
+
* - the purpose is `new-session` or `step-up` (the legacy `renew` has no browser flow).
|
|
12324
|
+
*
|
|
12325
|
+
* Pure and dependency-free (zod only) so an addon, the backend and a spec read
|
|
12326
|
+
* the same code.
|
|
12327
|
+
*/
|
|
12328
|
+
/** What the app redeems the code for. `step-up` yields a proof, never a session. */
|
|
12329
|
+
var AppFlowPurposeSchema = _enum(["new-session", "step-up"]);
|
|
12330
|
+
/** Where the app is sent when the request names no `redirect`. */
|
|
12331
|
+
var APP_FLOW_DEFAULT_REDIRECT = "camstack://auth-callback";
|
|
12332
|
+
/** S256 challenge: base64url of 32 bytes = 43 characters, no padding. */
|
|
12333
|
+
var CHALLENGE_PATTERN = /^[A-Za-z0-9_-]{43}$/;
|
|
12334
|
+
/** The app's own `state`: URL-safe characters only, bounded. */
|
|
12335
|
+
var STATE_PATTERN = /^[A-Za-z0-9._~-]{1,256}$/;
|
|
12336
|
+
/**
|
|
12337
|
+
* The hub page that says why an app sign-in start was refused. A leg that
|
|
12338
|
+
* cannot render the hub's styled page itself (an addon: it has no access to the
|
|
12339
|
+
* hub's theme) redirects here with `?reason=<AppStartRefusal>`. Only a CODE
|
|
12340
|
+
* travels - the words come from {@link APP_START_REFUSAL_MESSAGES}, so the app's
|
|
12341
|
+
* parameters are never echoed.
|
|
12342
|
+
*/
|
|
12343
|
+
var APP_REFUSED_PATH = "/auth/app/refused";
|
|
12344
|
+
/**
|
|
12345
|
+
* Read the app parameters off a start query: `code_challenge`,
|
|
12346
|
+
* `code_challenge_method`, `state`, `purpose`, `redirect`. Anything missing or
|
|
12347
|
+
* malformed is refused - there is no lenient default for PKCE or state.
|
|
12348
|
+
*/
|
|
12349
|
+
function parseAppFlowRequest(query) {
|
|
12350
|
+
const challenge = query["code_challenge"];
|
|
12351
|
+
if (challenge === void 0 || !CHALLENGE_PATTERN.test(challenge)) return {
|
|
12352
|
+
ok: false,
|
|
12353
|
+
reason: "bad-challenge"
|
|
12354
|
+
};
|
|
12355
|
+
if (query["code_challenge_method"] !== "S256") return {
|
|
12356
|
+
ok: false,
|
|
12357
|
+
reason: "bad-challenge-method"
|
|
12358
|
+
};
|
|
12359
|
+
const state = query["state"];
|
|
12360
|
+
if (state === void 0 || !STATE_PATTERN.test(state)) return {
|
|
12361
|
+
ok: false,
|
|
12362
|
+
reason: "bad-state"
|
|
12363
|
+
};
|
|
12364
|
+
const purpose = AppFlowPurposeSchema.safeParse(query["purpose"]);
|
|
12365
|
+
if (!purpose.success) return {
|
|
12366
|
+
ok: false,
|
|
12367
|
+
reason: "bad-purpose"
|
|
12368
|
+
};
|
|
12369
|
+
const redirectParam = query["redirect"];
|
|
12370
|
+
const redirect = redirectParam === void 0 ? APP_FLOW_DEFAULT_REDIRECT : parseAppAuthCallback(redirectParam);
|
|
12371
|
+
if (redirect === null) return {
|
|
12372
|
+
ok: false,
|
|
12373
|
+
reason: "bad-redirect"
|
|
12374
|
+
};
|
|
12375
|
+
return {
|
|
12376
|
+
ok: true,
|
|
12377
|
+
request: {
|
|
12378
|
+
codeChallenge: challenge,
|
|
12379
|
+
state,
|
|
12380
|
+
purpose: purpose.data,
|
|
12381
|
+
redirect
|
|
12382
|
+
}
|
|
12383
|
+
};
|
|
12384
|
+
}
|
|
12385
|
+
/** The app's callback with `code` (success) or `error` (refusal), and the echoed `state` when known. */
|
|
12386
|
+
function appFlowLocation(redirect, result, state) {
|
|
12387
|
+
const params = new URLSearchParams();
|
|
12388
|
+
if ("code" in result) params.set("code", result.code);
|
|
12389
|
+
else params.set("error", result.error);
|
|
12390
|
+
if (state !== void 0) params.set("state", state);
|
|
12391
|
+
return `${redirect}?${params.toString()}`;
|
|
12392
|
+
}
|
|
12393
|
+
/** How a native app starts one login method (D858), as `auth.listLoginMethods` reports it. */
|
|
12394
|
+
var AppLoginPathSchema = discriminatedUnion("kind", [object({ kind: literal("native") }), object({
|
|
12395
|
+
kind: literal("browser"),
|
|
12396
|
+
startPath: string().startsWith("/")
|
|
12397
|
+
})]);
|
|
12398
|
+
/**
|
|
12282
12399
|
* The cookie that binds an SSO sign-in to the browser that started it.
|
|
12283
12400
|
*
|
|
12284
12401
|
* An IdP `/start` sets it to a random value and keeps only its SHA-256 in the
|
|
@@ -12451,7 +12568,9 @@ object({
|
|
|
12451
12568
|
signature: literal(DEVICE_CERT_SIGNATURE),
|
|
12452
12569
|
messageVersion: literal(DEVICE_SIGNATURE_MESSAGE_VERSION),
|
|
12453
12570
|
/** Which clients can execute it: a native app silently, a browser with a non-extractable WebCrypto key. */
|
|
12454
|
-
clients: array(_enum(["native", "web"]))
|
|
12571
|
+
clients: array(_enum(["native", "web"])),
|
|
12572
|
+
/** The app executes it itself, silently (D858). */
|
|
12573
|
+
app: AppLoginPathSchema.nullable()
|
|
12455
12574
|
});
|
|
12456
12575
|
/** host[:port] — a DNS name, IPv4 or bracketed IPv6. No userinfo, path or spaces. */
|
|
12457
12576
|
var AUTHORITY_RE = /^(?:[a-z0-9.-]+|\[[0-9a-f:.]+\])(?::\d{1,5})?$/i;
|
|
@@ -16134,6 +16253,208 @@ method(object({
|
|
|
16134
16253
|
kind: "mutation",
|
|
16135
16254
|
auth: "admin"
|
|
16136
16255
|
}), method(object({}), array(KeychainSecretMetaSchema).readonly(), { auth: "admin" }), method(object({}), KeychainStateSchema, { auth: "admin" });
|
|
16256
|
+
/**
|
|
16257
|
+
* device-history — the ONE mechanism for numeric history (D850).
|
|
16258
|
+
*
|
|
16259
|
+
* A device value is recorded because its capability says so (the `history`
|
|
16260
|
+
* block of a `*.cap.ts`, captured hub-side from `DeviceStateChanged`); any
|
|
16261
|
+
* other series is DECLARED by the addon that produces it and fed with points
|
|
16262
|
+
* (`record`) or closed five-minute buckets (`recordBuckets`). Rollups 5m / 1h /
|
|
16263
|
+
* 1d are computed here and nowhere else. Storage is `history.db` (D851).
|
|
16264
|
+
*
|
|
16265
|
+
* Who the PRODUCER is: `declareSeries`, `record` and `recordBuckets` are owner
|
|
16266
|
+
* checked against the `callerAddonId` the transport stamps into a call that
|
|
16267
|
+
* crossed a process (never in an input schema, so a session cannot supply it).
|
|
16268
|
+
* A call with no stamp is refused `not-owner`. The methods are `admin` so a
|
|
16269
|
+
* non-admin session never reaches them; an addon's `ctx.api` call bypasses the
|
|
16270
|
+
* tier by design.
|
|
16271
|
+
*/
|
|
16272
|
+
/** Whose history: a real device, or a cluster node (load, memory). */
|
|
16273
|
+
var DeviceHistorySubjectSchema = discriminatedUnion("kind", [object({
|
|
16274
|
+
kind: literal("device"),
|
|
16275
|
+
deviceId: number().int()
|
|
16276
|
+
}), object({
|
|
16277
|
+
kind: literal("node"),
|
|
16278
|
+
nodeId: string().min(1)
|
|
16279
|
+
})]);
|
|
16280
|
+
var DeviceHistoryKindSchema = _enum([
|
|
16281
|
+
"gauge",
|
|
16282
|
+
"counter",
|
|
16283
|
+
"boolean"
|
|
16284
|
+
]);
|
|
16285
|
+
var DeviceHistoryResolutionSchema = _enum([
|
|
16286
|
+
"raw",
|
|
16287
|
+
"5m",
|
|
16288
|
+
"1h",
|
|
16289
|
+
"1d"
|
|
16290
|
+
]);
|
|
16291
|
+
/** Why a producer's point or bucket was not stored. Counted, never silent (D391). */
|
|
16292
|
+
var DeviceHistoryRefusalReasonSchema = _enum([
|
|
16293
|
+
"undeclared",
|
|
16294
|
+
"not-owner",
|
|
16295
|
+
"opted-out",
|
|
16296
|
+
"not-a-real-device",
|
|
16297
|
+
"rate",
|
|
16298
|
+
"ingest-mismatch",
|
|
16299
|
+
"out-of-range"
|
|
16300
|
+
]);
|
|
16301
|
+
var RefusalSchema = object({
|
|
16302
|
+
key: string(),
|
|
16303
|
+
reason: DeviceHistoryRefusalReasonSchema,
|
|
16304
|
+
count: number().int()
|
|
16305
|
+
});
|
|
16306
|
+
var IngestResultSchema = object({
|
|
16307
|
+
accepted: number().int(),
|
|
16308
|
+
refused: array(RefusalSchema).readonly()
|
|
16309
|
+
});
|
|
16310
|
+
var SeriesInfoSchema = object({
|
|
16311
|
+
key: string(),
|
|
16312
|
+
scope: string(),
|
|
16313
|
+
kind: DeviceHistoryKindSchema,
|
|
16314
|
+
/** `null` is unknown (a `unitFrom` series whose device does not state a unit right now), never a guess. */
|
|
16315
|
+
unit: string().nullable(),
|
|
16316
|
+
displayName: string(),
|
|
16317
|
+
source: _enum(["cap", "addon"]),
|
|
16318
|
+
firstTs: number(),
|
|
16319
|
+
lastTs: number()
|
|
16320
|
+
});
|
|
16321
|
+
var QueryPointSchema = object({
|
|
16322
|
+
/** Raw: the point's time. Rollup: the bucket start. */
|
|
16323
|
+
t: number(),
|
|
16324
|
+
samples: number().int(),
|
|
16325
|
+
/** `sum / samples`. */
|
|
16326
|
+
mean: number().nullable(),
|
|
16327
|
+
/** Time-weighted mean (`tw_sum / tw_ms`); `null` for bucket-ingested series. For a boolean: the fraction of time true. */
|
|
16328
|
+
twMean: number().nullable(),
|
|
16329
|
+
min: number(),
|
|
16330
|
+
max: number(),
|
|
16331
|
+
/** `null` is unknown, never zero (D393). */
|
|
16332
|
+
last: number().nullable()
|
|
16333
|
+
});
|
|
16334
|
+
var QuerySeriesSchema = object({
|
|
16335
|
+
scope: string(),
|
|
16336
|
+
/** The last point STRICTLY BEFORE `from` in the chosen tier, so a step chart can start at the held value. */
|
|
16337
|
+
before: object({
|
|
16338
|
+
t: number(),
|
|
16339
|
+
value: number().nullable()
|
|
16340
|
+
}).nullable(),
|
|
16341
|
+
points: array(QueryPointSchema).readonly()
|
|
16342
|
+
});
|
|
16343
|
+
/** The window part of a query, shared by the device and node forms. */
|
|
16344
|
+
var QueryWindowShape = {
|
|
16345
|
+
key: string(),
|
|
16346
|
+
scope: string().optional(),
|
|
16347
|
+
from: number(),
|
|
16348
|
+
to: number(),
|
|
16349
|
+
resolution: union([DeviceHistoryResolutionSchema, literal("auto")]).default("auto"),
|
|
16350
|
+
maxPoints: number().int().positive().max(5e3).default(1e3)
|
|
16351
|
+
};
|
|
16352
|
+
var QueryResultSchema = object({
|
|
16353
|
+
resolution: DeviceHistoryResolutionSchema,
|
|
16354
|
+
series: array(QuerySeriesSchema).readonly(),
|
|
16355
|
+
truncated: boolean()
|
|
16356
|
+
});
|
|
16357
|
+
var TierStatusSchema = object({
|
|
16358
|
+
tier: DeviceHistoryResolutionSchema,
|
|
16359
|
+
/** `null` until the first background count answered. */
|
|
16360
|
+
rows: number().int().nullable(),
|
|
16361
|
+
/** `rows` times a fixed per-row estimate — approximate, labelled so. */
|
|
16362
|
+
approxBytes: number().nullable(),
|
|
16363
|
+
countedAt: number().nullable()
|
|
16364
|
+
});
|
|
16365
|
+
/** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
|
|
16366
|
+
var DeviceHistoryStatusSchema = object({
|
|
16367
|
+
startedAt: number(),
|
|
16368
|
+
/** The store is declared, series loaded and the first reconcile has answered. */
|
|
16369
|
+
ready: boolean(),
|
|
16370
|
+
series: number().int(),
|
|
16371
|
+
metrics: number().int(),
|
|
16372
|
+
optedOutDevices: number().int(),
|
|
16373
|
+
tiers: array(TierStatusSchema).readonly(),
|
|
16374
|
+
capture: object({
|
|
16375
|
+
eventsSeen: number().int(),
|
|
16376
|
+
pointsEmitted: number().int(),
|
|
16377
|
+
pointsWritten: number().int(),
|
|
16378
|
+
pointsDropped: number().int(),
|
|
16379
|
+
bufferDepth: number().int(),
|
|
16380
|
+
trailingEmitted: number().int(),
|
|
16381
|
+
reconciledPoints: number().int(),
|
|
16382
|
+
reconcileRuns: number().int(),
|
|
16383
|
+
reconcileFailures: number().int(),
|
|
16384
|
+
lastReconcileAt: number().nullable(),
|
|
16385
|
+
lastFlushAt: number().nullable(),
|
|
16386
|
+
flushFailures: number().int(),
|
|
16387
|
+
skipped: record(string(), number().int())
|
|
16388
|
+
}),
|
|
16389
|
+
ingest: object({
|
|
16390
|
+
accepted: number().int(),
|
|
16391
|
+
refused: record(string(), number().int())
|
|
16392
|
+
}),
|
|
16393
|
+
rollup: object({
|
|
16394
|
+
last5mAt: number().nullable(),
|
|
16395
|
+
last1hAt: number().nullable(),
|
|
16396
|
+
last1dAt: number().nullable(),
|
|
16397
|
+
errors: number().int(),
|
|
16398
|
+
dirty5m: number().int(),
|
|
16399
|
+
dirty1h: number().int(),
|
|
16400
|
+
dirty1d: number().int()
|
|
16401
|
+
}),
|
|
16402
|
+
retention: object({
|
|
16403
|
+
lastRunAt: number().nullable(),
|
|
16404
|
+
deleted: record(string(), number().int()),
|
|
16405
|
+
purgedSeries: number().int()
|
|
16406
|
+
}),
|
|
16407
|
+
directory: object({
|
|
16408
|
+
devices: number().int(),
|
|
16409
|
+
lastRefreshAt: number().nullable()
|
|
16410
|
+
})
|
|
16411
|
+
});
|
|
16412
|
+
method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({ nodeId: string().min(1) }), array(SeriesInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
16413
|
+
deviceId: number().int(),
|
|
16414
|
+
...QueryWindowShape
|
|
16415
|
+
}), QueryResultSchema), method(object({
|
|
16416
|
+
nodeId: string().min(1),
|
|
16417
|
+
...QueryWindowShape
|
|
16418
|
+
}), QueryResultSchema, { auth: "admin" }), method(object({
|
|
16419
|
+
name: string().regex(/^[a-z0-9-]+$/),
|
|
16420
|
+
subjectKind: _enum(["device", "node"]),
|
|
16421
|
+
kind: DeviceHistoryKindSchema,
|
|
16422
|
+
unit: string().optional(),
|
|
16423
|
+
displayName: string().min(1),
|
|
16424
|
+
ingest: _enum(["points", "buckets"])
|
|
16425
|
+
}), object({ key: string() }), {
|
|
16426
|
+
kind: "mutation",
|
|
16427
|
+
auth: "admin"
|
|
16428
|
+
}), method(object({ points: array(object({
|
|
16429
|
+
key: string(),
|
|
16430
|
+
subject: DeviceHistorySubjectSchema,
|
|
16431
|
+
scope: string().default(""),
|
|
16432
|
+
ts: number(),
|
|
16433
|
+
value: number()
|
|
16434
|
+
})).max(5e3) }), IngestResultSchema, {
|
|
16435
|
+
kind: "mutation",
|
|
16436
|
+
auth: "admin"
|
|
16437
|
+
}), method(object({ buckets: array(object({
|
|
16438
|
+
key: string(),
|
|
16439
|
+
subject: DeviceHistorySubjectSchema,
|
|
16440
|
+
scope: string().default(""),
|
|
16441
|
+
bucketStart: number(),
|
|
16442
|
+
samples: number().int().positive(),
|
|
16443
|
+
sum: number(),
|
|
16444
|
+
min: number(),
|
|
16445
|
+
max: number(),
|
|
16446
|
+
last: number().nullable(),
|
|
16447
|
+
lastTs: number().nullable()
|
|
16448
|
+
})).max(5e3) }), IngestResultSchema, {
|
|
16449
|
+
kind: "mutation",
|
|
16450
|
+
auth: "admin"
|
|
16451
|
+
}), method(object({ deviceId: number().int() }), object({ enabled: boolean() })), method(object({
|
|
16452
|
+
deviceId: number().int(),
|
|
16453
|
+
enabled: boolean()
|
|
16454
|
+
}), object({ enabled: boolean() }), {
|
|
16455
|
+
kind: "mutation",
|
|
16456
|
+
auth: "admin"
|
|
16457
|
+
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" });
|
|
16137
16458
|
var DeviceCaStatusSchema = discriminatedUnion("state", [
|
|
16138
16459
|
object({ state: literal("absent") }),
|
|
16139
16460
|
object({
|
|
@@ -16251,6 +16572,9 @@ method(object({}), object({
|
|
|
16251
16572
|
}), {
|
|
16252
16573
|
kind: "mutation",
|
|
16253
16574
|
auth: "admin"
|
|
16575
|
+
}), method(object({}), object({ ok: literal(true) }), {
|
|
16576
|
+
kind: "mutation",
|
|
16577
|
+
auth: "admin"
|
|
16254
16578
|
}), method(object({
|
|
16255
16579
|
certPem: string().min(1),
|
|
16256
16580
|
caCertPem: string().min(1),
|
|
@@ -39016,7 +39340,13 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
39016
39340
|
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
39017
39341
|
* whatever their id. Absent / false — a login button only.
|
|
39018
39342
|
*/
|
|
39019
|
-
linkable: boolean().optional()
|
|
39343
|
+
linkable: boolean().optional(),
|
|
39344
|
+
/**
|
|
39345
|
+
* How a NATIVE app starts this method (D858): `{ kind: 'browser', startPath }`
|
|
39346
|
+
* when the route understands the app flow query (`app=1&code_challenge=…`),
|
|
39347
|
+
* `null`/absent when there is no app path - the app hides the method.
|
|
39348
|
+
*/
|
|
39349
|
+
app: AppLoginPathSchema.nullable().optional()
|
|
39020
39350
|
}),
|
|
39021
39351
|
object({
|
|
39022
39352
|
kind: literal("widget"),
|
|
@@ -39028,7 +39358,9 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
39028
39358
|
bundle: string(),
|
|
39029
39359
|
/** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
|
|
39030
39360
|
remote: WidgetRemoteSchema,
|
|
39031
|
-
stage: LoginStageEnum
|
|
39361
|
+
stage: LoginStageEnum,
|
|
39362
|
+
/** Widgets are web ceremonies: no native app path (D858). Absent reads as `null`. */
|
|
39363
|
+
app: AppLoginPathSchema.nullable().optional()
|
|
39032
39364
|
}),
|
|
39033
39365
|
object({
|
|
39034
39366
|
kind: literal("passkey"),
|
|
@@ -39040,7 +39372,9 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
39040
39372
|
/** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
|
|
39041
39373
|
rpId: string(),
|
|
39042
39374
|
/** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
|
|
39043
|
-
origin: string().nullable()
|
|
39375
|
+
origin: string().nullable(),
|
|
39376
|
+
/** Set by the hub for the primary arm; a second-factor passkey has no app path (D858). */
|
|
39377
|
+
app: AppLoginPathSchema.nullable().optional()
|
|
39044
39378
|
})
|
|
39045
39379
|
]);
|
|
39046
39380
|
var loginMethodCapability = {
|
|
@@ -39558,7 +39892,21 @@ var NetworkEndpointSchema = object({
|
|
|
39558
39892
|
url: string(),
|
|
39559
39893
|
hostname: string(),
|
|
39560
39894
|
port: number(),
|
|
39561
|
-
protocol: _enum(["http", "https"])
|
|
39895
|
+
protocol: _enum(["http", "https"]),
|
|
39896
|
+
/**
|
|
39897
|
+
* Whether this address survives a restart of its provider. `false` = it is
|
|
39898
|
+
* re-issued every time (a Quick tunnel's random `*.trycloudflare.com`); the
|
|
39899
|
+
* hub never selects such an address AUTOMATICALLY for a role (D860), though
|
|
39900
|
+
* it stays visible and an operator may still flag it. Absent = stable: every
|
|
39901
|
+
* provider except a Quick tunnel owns a name that does not change.
|
|
39902
|
+
*/
|
|
39903
|
+
stable: boolean().optional()
|
|
39904
|
+
});
|
|
39905
|
+
object({
|
|
39906
|
+
url: string(),
|
|
39907
|
+
/** Mirrors {@link NetworkEndpointSchema} `stable`; absent = stable. */
|
|
39908
|
+
stable: boolean().optional(),
|
|
39909
|
+
updated: boolean().optional()
|
|
39562
39910
|
});
|
|
39563
39911
|
var NetworkAccessStatusSchema = object({
|
|
39564
39912
|
connected: boolean(),
|
|
@@ -49597,7 +49945,20 @@ var SsoBridgeClaimsSchema = object({
|
|
|
49597
49945
|
* request to present the matching cookie — a login bridge is useless in
|
|
49598
49946
|
* any other browser.
|
|
49599
49947
|
*/
|
|
49600
|
-
browserBinding: string().optional()
|
|
49948
|
+
browserBinding: string().optional(),
|
|
49949
|
+
/**
|
|
49950
|
+
* The native app that started this sign-in (D858): its PKCE challenge,
|
|
49951
|
+
* `state`, purpose and allow-listed return URL, copied from the server-side
|
|
49952
|
+
* pending OIDC state. A bridge carrying it is finished ONLY at
|
|
49953
|
+
* `/api/auth/sso/finish-app` (which mints a handoff code, never a web
|
|
49954
|
+
* session); `/api/auth/sso/finish` refuses it.
|
|
49955
|
+
*/
|
|
49956
|
+
app: object({
|
|
49957
|
+
codeChallenge: string(),
|
|
49958
|
+
state: string(),
|
|
49959
|
+
purpose: _enum(["new-session", "step-up"]),
|
|
49960
|
+
redirect: string()
|
|
49961
|
+
}).optional()
|
|
49601
49962
|
});
|
|
49602
49963
|
method(object({
|
|
49603
49964
|
claims: SsoBridgeClaimsSchema,
|
|
@@ -51838,7 +52199,12 @@ var SearchResultSchema = object({
|
|
|
51838
52199
|
publishedAt: string(),
|
|
51839
52200
|
author: string(),
|
|
51840
52201
|
installed: boolean(),
|
|
51841
|
-
installedVersion: string().optional()
|
|
52202
|
+
installedVersion: string().optional(),
|
|
52203
|
+
/**
|
|
52204
|
+
* Capability names the package's addons declare (from its published
|
|
52205
|
+
* manifest). `null` = the registry lookup failed — unknown, never `[]` (D393).
|
|
52206
|
+
*/
|
|
52207
|
+
capabilities: array(string()).readonly().nullable()
|
|
51842
52208
|
});
|
|
51843
52209
|
var AutoUpdateSettingsSchema = object({
|
|
51844
52210
|
channel: ChannelSchema,
|
|
@@ -52000,7 +52366,11 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
|
|
|
52000
52366
|
}), method(object({ packageName: string().optional() }), PackageInstallationsSchema, { auth: "admin" }), method(_void(), ReloadPackagesResultSchema, {
|
|
52001
52367
|
kind: "mutation",
|
|
52002
52368
|
auth: "admin"
|
|
52003
|
-
}), method(object({
|
|
52369
|
+
}), method(object({
|
|
52370
|
+
query: string().optional(),
|
|
52371
|
+
/** Only packages whose addons declare this capability (unknown ones excluded). */
|
|
52372
|
+
capability: string().optional()
|
|
52373
|
+
}), array(SearchResultSchema)), method(object({ nodeId: string().optional() }), array(PackageUpdateSchema).readonly(), { auth: "admin" }), method(object({
|
|
52004
52374
|
name: string().min(1),
|
|
52005
52375
|
version: string().optional(),
|
|
52006
52376
|
nodeId: string().optional()
|
|
@@ -54408,7 +54778,13 @@ var ConnectionEndpointSchema = object({
|
|
|
54408
54778
|
* calls so the client can sort even if the cap returns a new
|
|
54409
54779
|
* ordering between polls.
|
|
54410
54780
|
*/
|
|
54411
|
-
priority: number()
|
|
54781
|
+
priority: number(),
|
|
54782
|
+
/**
|
|
54783
|
+
* `false` = the address changes on its own (a Quick tunnel, re-issued on
|
|
54784
|
+
* every respawn). Automatic role resolution skips it (D860); an explicit
|
|
54785
|
+
* operator flag still honours it. Absent = stable.
|
|
54786
|
+
*/
|
|
54787
|
+
stable: boolean().optional()
|
|
54412
54788
|
});
|
|
54413
54789
|
/**
|
|
54414
54790
|
* Where the advertised local port came from. Ordered most → least
|
|
@@ -55037,7 +55413,7 @@ var MotionOnMotionChangedDataSchema = object({
|
|
|
55037
55413
|
/** Who started it (D672). Absent = the camera itself. Only `onboard` carries `sensor`. */
|
|
55038
55414
|
triggeredBy: MotionTriggeredBySchema.optional()
|
|
55039
55415
|
});
|
|
55040
|
-
DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean());
|
|
55416
|
+
DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean()), DeviceType.Camera;
|
|
55041
55417
|
object({
|
|
55042
55418
|
enabled: boolean(),
|
|
55043
55419
|
/** Ms epoch of the last operator-driven change. */
|
|
@@ -62394,6 +62770,66 @@ Object.freeze({
|
|
|
62394
62770
|
addonId: null,
|
|
62395
62771
|
access: "create"
|
|
62396
62772
|
},
|
|
62773
|
+
"deviceHistory.declareSeries": {
|
|
62774
|
+
capName: "device-history",
|
|
62775
|
+
capScope: "system",
|
|
62776
|
+
addonId: null,
|
|
62777
|
+
access: "create"
|
|
62778
|
+
},
|
|
62779
|
+
"deviceHistory.getDeviceEnabled": {
|
|
62780
|
+
capName: "device-history",
|
|
62781
|
+
capScope: "system",
|
|
62782
|
+
addonId: null,
|
|
62783
|
+
access: "view"
|
|
62784
|
+
},
|
|
62785
|
+
"deviceHistory.getStatus": {
|
|
62786
|
+
capName: "device-history",
|
|
62787
|
+
capScope: "system",
|
|
62788
|
+
addonId: null,
|
|
62789
|
+
access: "view"
|
|
62790
|
+
},
|
|
62791
|
+
"deviceHistory.listNodeSeries": {
|
|
62792
|
+
capName: "device-history",
|
|
62793
|
+
capScope: "system",
|
|
62794
|
+
addonId: null,
|
|
62795
|
+
access: "view"
|
|
62796
|
+
},
|
|
62797
|
+
"deviceHistory.listSeries": {
|
|
62798
|
+
capName: "device-history",
|
|
62799
|
+
capScope: "system",
|
|
62800
|
+
addonId: null,
|
|
62801
|
+
access: "view"
|
|
62802
|
+
},
|
|
62803
|
+
"deviceHistory.query": {
|
|
62804
|
+
capName: "device-history",
|
|
62805
|
+
capScope: "system",
|
|
62806
|
+
addonId: null,
|
|
62807
|
+
access: "view"
|
|
62808
|
+
},
|
|
62809
|
+
"deviceHistory.queryNode": {
|
|
62810
|
+
capName: "device-history",
|
|
62811
|
+
capScope: "system",
|
|
62812
|
+
addonId: null,
|
|
62813
|
+
access: "view"
|
|
62814
|
+
},
|
|
62815
|
+
"deviceHistory.record": {
|
|
62816
|
+
capName: "device-history",
|
|
62817
|
+
capScope: "system",
|
|
62818
|
+
addonId: null,
|
|
62819
|
+
access: "create"
|
|
62820
|
+
},
|
|
62821
|
+
"deviceHistory.recordBuckets": {
|
|
62822
|
+
capName: "device-history",
|
|
62823
|
+
capScope: "system",
|
|
62824
|
+
addonId: null,
|
|
62825
|
+
access: "create"
|
|
62826
|
+
},
|
|
62827
|
+
"deviceHistory.setDeviceEnabled": {
|
|
62828
|
+
capName: "device-history",
|
|
62829
|
+
capScope: "system",
|
|
62830
|
+
addonId: null,
|
|
62831
|
+
access: "create"
|
|
62832
|
+
},
|
|
62397
62833
|
"deviceManager.addLocation": {
|
|
62398
62834
|
capName: "device-manager",
|
|
62399
62835
|
capScope: "system",
|
|
@@ -64458,6 +64894,12 @@ Object.freeze({
|
|
|
64458
64894
|
addonId: null,
|
|
64459
64895
|
access: "create"
|
|
64460
64896
|
},
|
|
64897
|
+
"nodeCertificates.forgetHub": {
|
|
64898
|
+
capName: "node-certificates",
|
|
64899
|
+
capScope: "system",
|
|
64900
|
+
addonId: null,
|
|
64901
|
+
access: "delete"
|
|
64902
|
+
},
|
|
64461
64903
|
"nodeCertificates.getCertificates": {
|
|
64462
64904
|
capName: "node-certificates",
|
|
64463
64905
|
capScope: "system",
|
|
@@ -69185,6 +69627,26 @@ Object.freeze({
|
|
|
69185
69627
|
form: "single",
|
|
69186
69628
|
optional: false
|
|
69187
69629
|
}],
|
|
69630
|
+
"deviceHistory.getDeviceEnabled": [{
|
|
69631
|
+
name: "deviceId",
|
|
69632
|
+
form: "single",
|
|
69633
|
+
optional: false
|
|
69634
|
+
}],
|
|
69635
|
+
"deviceHistory.listSeries": [{
|
|
69636
|
+
name: "deviceId",
|
|
69637
|
+
form: "single",
|
|
69638
|
+
optional: false
|
|
69639
|
+
}],
|
|
69640
|
+
"deviceHistory.query": [{
|
|
69641
|
+
name: "deviceId",
|
|
69642
|
+
form: "single",
|
|
69643
|
+
optional: false
|
|
69644
|
+
}],
|
|
69645
|
+
"deviceHistory.setDeviceEnabled": [{
|
|
69646
|
+
name: "deviceId",
|
|
69647
|
+
form: "single",
|
|
69648
|
+
optional: false
|
|
69649
|
+
}],
|
|
69188
69650
|
"deviceManager.adoptionRelease": [{
|
|
69189
69651
|
name: "camDeviceId",
|
|
69190
69652
|
form: "single",
|
|
@@ -71363,6 +71825,7 @@ Object.freeze({
|
|
|
71363
71825
|
"network-access": "ingress",
|
|
71364
71826
|
"smtp-provider": "email"
|
|
71365
71827
|
});
|
|
71828
|
+
DeviceType.Camera;
|
|
71366
71829
|
var G711_SCALE_CORRECTION_DB = {
|
|
71367
71830
|
PCMU: 20 * Math.log10(4),
|
|
71368
71831
|
PCMA: 20 * Math.log10(8)
|
|
@@ -72429,4 +72892,4 @@ DEFAULT_NATIVE_LEASE_SETTINGS.admission;
|
|
|
72429
72892
|
var MB = 1024 * 1024;
|
|
72430
72893
|
1024 * MB, 3072 * MB;
|
|
72431
72894
|
//#endregion
|
|
72432
|
-
export {
|
|
72895
|
+
export { object as A, globalSecretScope as C, array as D, toSecretFieldView as E, boolean as O, arrayItemFieldPath as S, isSecretMarker as T, resolveIconKey as _, addonWidgetsSourceCapability as a, BaseAddon as b, authProviderCapability as c, loginMethodCapability as d, normalizeOrigin as f, requestMountPrefix as g, pickRequestOrigin as h, addonRoutesCapability as i, string as j, number as k, buildAddonRouteProvider as l, parseAppFlowRequest as m, APP_REFUSED_PATH as n, advertisedHubOrigins as o, oidcConnectionsCapability as p, SSO_STATE_COOKIE as r, appFlowLocation as s, APP_FLOW_DEFAULT_REDIRECT as t, claimedRequestOrigins as u, userPasskeysCapability as v, isSecretClear as w, SECRET_CLEAR as x, errMsg as y };
|