@camstack/types 1.2.53 → 1.2.55
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/auth/principal-scope.d.ts +123 -0
- package/dist/capabilities/oauth-integration.cap.d.ts +72 -0
- package/dist/capabilities/sso-bridge.cap.d.ts +4 -1
- package/dist/capabilities/user-management.cap.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +221 -4
- package/dist/index.mjs +217 -5
- package/package.json +1 -1
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one place a bearer principal is classified and matched against a
|
|
3
|
+
* `TokenScope` set. Pure — no I/O, no registry, no logger — so the kernel,
|
|
4
|
+
* `server/backend` and any ADDON can share it. It lives in `@camstack/types`
|
|
5
|
+
* for exactly that reason: `scopesAllowDeviceCap` used to live in
|
|
6
|
+
* `@camstack/system`, which addons may not import, so `addon-export-alexa`
|
|
7
|
+
* hand-copied it into `directive-router.ts` and said so in a comment twice.
|
|
8
|
+
* One vector, one derivation.
|
|
9
|
+
*
|
|
10
|
+
* ── What this exists to stop ────────────────────────────────────────────
|
|
11
|
+
*
|
|
12
|
+
* Measured on the live hub, 2026-08-09: an `oauth-access` token minted for the
|
|
13
|
+
* `export-alexa` account link was accepted on
|
|
14
|
+
* `POST /addon/homeassistant-export/command` — a route that actuates PTZ,
|
|
15
|
+
* reboot, the per-camera switches and notification snooze. The addon-route gate
|
|
16
|
+
* verified the JWT signature and checked `isAdmin` for `access: 'admin'` routes
|
|
17
|
+
* and nothing else, so every `access: 'authenticated'` route in the product was
|
|
18
|
+
* reachable by ANY valid hub JWT, including one issued to a different
|
|
19
|
+
* integration, a 60-second single-use authorization CODE, and a 30-day refresh
|
|
20
|
+
* token. See D103.
|
|
21
|
+
*/
|
|
22
|
+
import type { MethodAccess, TokenScope } from '../schemas/auth-records.js';
|
|
23
|
+
/**
|
|
24
|
+
* The access flavour an HTTP verb asks for. `GET`/`HEAD` read; anything that
|
|
25
|
+
* can change state is at least `create`.
|
|
26
|
+
*
|
|
27
|
+
* An UNRECOGNISED verb resolves to `delete`, the most privileged flavour, so a
|
|
28
|
+
* method nobody thought about fails closed. The inverse default — treating the
|
|
29
|
+
* unknown as `view` — is how a gate quietly stops gating.
|
|
30
|
+
*/
|
|
31
|
+
export declare function methodAccessForHttpMethod(method: string): MethodAccess;
|
|
32
|
+
/**
|
|
33
|
+
* True if the scope set grants `access` on device-scoped capabilities.
|
|
34
|
+
* A `category:device` grant covers every device cap (the broad grant).
|
|
35
|
+
*/
|
|
36
|
+
export declare function scopesAllowDeviceCap(scopes: readonly TokenScope[], access: MethodAccess): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* True if the scope set names this addon with at least `access`.
|
|
39
|
+
*
|
|
40
|
+
* Deliberately NOT satisfied by `category:device`: a grant over per-camera
|
|
41
|
+
* capabilities says nothing about an addon's own HTTP surface, and conflating
|
|
42
|
+
* the two is precisely the confusion that let an Alexa token drive Home
|
|
43
|
+
* Assistant's command route.
|
|
44
|
+
*/
|
|
45
|
+
export declare function scopesAllowAddon(scopes: readonly TokenScope[], addonId: string, access: MethodAccess): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* What a verified JWT actually IS. Every one of these verifies under the same
|
|
48
|
+
* hub secret — that is the whole trap. `jwt.verify` succeeding means "we minted
|
|
49
|
+
* this", never "this is an API credential".
|
|
50
|
+
*/
|
|
51
|
+
export type BearerPrincipal =
|
|
52
|
+
/** An ordinary user session from `auth.login`. Governed by the user's own scopes. */
|
|
53
|
+
{
|
|
54
|
+
readonly kind: 'session';
|
|
55
|
+
}
|
|
56
|
+
/** An account-linking token issued to an integration. Governed by the grant. */
|
|
57
|
+
| {
|
|
58
|
+
readonly kind: 'integration';
|
|
59
|
+
readonly provider: 'oauth-access';
|
|
60
|
+
}
|
|
61
|
+
/** Minted for one hand-off step and never meant to authenticate an API call. */
|
|
62
|
+
| {
|
|
63
|
+
readonly kind: 'not-a-credential';
|
|
64
|
+
readonly reason: string;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* The narrow shape read off a verified JWT payload. Every field optional: the
|
|
68
|
+
* payload arrives as whatever was signed, and a missing discriminator must
|
|
69
|
+
* classify, never throw.
|
|
70
|
+
*/
|
|
71
|
+
export interface BearerPayloadShape {
|
|
72
|
+
readonly kind?: unknown;
|
|
73
|
+
readonly provider?: unknown;
|
|
74
|
+
readonly userId?: unknown;
|
|
75
|
+
readonly isAdmin?: unknown;
|
|
76
|
+
readonly scopes?: unknown;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Classify a VERIFIED JWT payload.
|
|
80
|
+
*
|
|
81
|
+
* A session JWT carries no `kind`. Everything else in this system tags itself:
|
|
82
|
+
* `kind: 'sso-bridge'` for the OAuth/SSO family (discriminated further by
|
|
83
|
+
* `provider`), `kind: 'totp-challenge'` for login leg 1. Only `oauth-access` is
|
|
84
|
+
* an API credential; a code lives in a browser redirect URL and a refresh token
|
|
85
|
+
* belongs to `/token`.
|
|
86
|
+
*/
|
|
87
|
+
export declare function classifyBearerPrincipal(payload: BearerPayloadShape): BearerPrincipal;
|
|
88
|
+
export interface PrincipalAddonReachInput {
|
|
89
|
+
readonly principal: BearerPrincipal;
|
|
90
|
+
readonly scopes: readonly TokenScope[];
|
|
91
|
+
readonly isAdmin: boolean;
|
|
92
|
+
readonly addonId: string;
|
|
93
|
+
/** The HTTP verb of the request being gated. */
|
|
94
|
+
readonly method: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The verdict, with the reason carried so the refusal can be LOGGED. A branch
|
|
98
|
+
* that drops a request silently reads as "never happened".
|
|
99
|
+
*/
|
|
100
|
+
export type PrincipalAddonReachVerdict = {
|
|
101
|
+
readonly allowed: true;
|
|
102
|
+
} | {
|
|
103
|
+
readonly allowed: false;
|
|
104
|
+
readonly reason: string;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* May this principal reach `/addon/<addonId>/…` on an `authenticated` route or
|
|
108
|
+
* data-plane endpoint?
|
|
109
|
+
*
|
|
110
|
+
* Three principals, three answers:
|
|
111
|
+
*
|
|
112
|
+
* - **session** — unchanged. A user session is governed by the route's own
|
|
113
|
+
* `access` (`authenticated` / `admin`), exactly as before. Tightening HERE
|
|
114
|
+
* would lock every non-admin viewer out of recorder playback, snapshot media
|
|
115
|
+
* and the stream-broker embed, which is a worse outcome than the hole.
|
|
116
|
+
* - **integration** — must hold `addon:<addonId>` at the verb's access. This is
|
|
117
|
+
* the same rule the `cst_` scoped-token branch has always applied; the JWT
|
|
118
|
+
* branch simply never applied it, and closing that divergence IS the fix.
|
|
119
|
+
* `isAdmin` is ignored: an integration token is minted `isAdmin: false` and a
|
|
120
|
+
* token claiming otherwise must not talk its way past the grant.
|
|
121
|
+
* - **not-a-credential** — refused unconditionally.
|
|
122
|
+
*/
|
|
123
|
+
export declare function principalMayReachAddon(input: PrincipalAddonReachInput): PrincipalAddonReachVerdict;
|
|
@@ -6,6 +6,76 @@ import { type InferProvider } from './capability-definition.js';
|
|
|
6
6
|
* Each provider returns a static descriptor; the core enumerates them
|
|
7
7
|
* to validate the `integration=` query param and resolve the consent
|
|
8
8
|
* label + the scopes baked into the issued token.
|
|
9
|
+
*
|
|
10
|
+
* ## Declaring one
|
|
11
|
+
*
|
|
12
|
+
* An OAuth client is integration-specific knowledge — who the client is, what
|
|
13
|
+
* it may ask for, where it may be sent — so it is declared by the ADDON that
|
|
14
|
+
* owns the integration, never by the kernel and never as a branch inside
|
|
15
|
+
* `oauth2-routes.ts` ([D101](../../../../docs/decisions/adr-0101.md)). Three
|
|
16
|
+
* steps, no others:
|
|
17
|
+
*
|
|
18
|
+
* 1. Add `{ "name": "oauth-integration" }` to the addon's `camstack.addons[]`
|
|
19
|
+
* manifest entry. This is also what tells the hub, at addon-LOAD time, that
|
|
20
|
+
* a descriptor is owed — see "the boot window" below.
|
|
21
|
+
* 2. Return a provider from `onInitialize()`:
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* const provider: IOauthIntegrationProvider = {
|
|
25
|
+
* getDescriptor: async () => ({
|
|
26
|
+
* integrationId: 'my-thing', // the `integration=` query param
|
|
27
|
+
* displayName: 'My Thing',
|
|
28
|
+
* requestedScopes: [ … ], // see below
|
|
29
|
+
* allowedRedirectPrefixes: ['https://callback.example/'],
|
|
30
|
+
* }),
|
|
31
|
+
* }
|
|
32
|
+
* return [{ capability: oauthIntegrationCapability, provider }]
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* The descriptor must be **static** — it is read on the authorize path, so
|
|
36
|
+
* never put an await on network or disk behind it, and never register it
|
|
37
|
+
* behind one either (a provider is registered only once `onInitialize`
|
|
38
|
+
* RETURNS, so anything awaited before the return delays linking).
|
|
39
|
+
* 3. Nothing else. There is no allow-list to join, no id to register with the
|
|
40
|
+
* core, and no per-integration branch anywhere: `/api/oauth2/authorize` and
|
|
41
|
+
* `/api/oauth2/integrations` are built from this collection alone.
|
|
42
|
+
*
|
|
43
|
+
* **Scopes. `requestedScopes` has exactly ONE meaning: what the integration
|
|
44
|
+
* NEEDS to function.** Not a blast radius, not a conservative
|
|
45
|
+
* under-declaration, not a description of some other path the addon happens to
|
|
46
|
+
* have. Derive it from what the client actually calls **with this token** —
|
|
47
|
+
* every tRPC path against `METHOD_ACCESS_MAP`, plus an `addon:` grant for every
|
|
48
|
+
* addon HTTP route it posts to — and write the call that justifies each entry
|
|
49
|
+
* next to it. Two integrations once used this field to mean two different
|
|
50
|
+
* things; the operator ruled there is one meaning, and any third integration
|
|
51
|
+
* inherits it (2026-08-09).
|
|
52
|
+
*
|
|
53
|
+
* This is not documentation, it is the ENFORCEMENT INPUT. Since
|
|
54
|
+
* [D103](../../../../docs/decisions/adr-0103.md) the `/addon/:addonId/*` gate
|
|
55
|
+
* checks an integration token's grant before letting it reach an
|
|
56
|
+
* `access: 'authenticated'` route, so an **under-declaration is an integration
|
|
57
|
+
* that stops working** — a missing `addon:` entry means `403 Token scope
|
|
58
|
+
* mismatch` on every control the client tries to actuate. Widen the descriptor
|
|
59
|
+
* honestly rather than weakening a check to make a route pass.
|
|
60
|
+
*
|
|
61
|
+
* Prefer a narrow `capability:` scope to a `category:` one unless the client
|
|
62
|
+
* genuinely needs a whole family; a category scope grants every future member
|
|
63
|
+
* of that category too. `category:system [create]` has been rejected once and
|
|
64
|
+
* should stay rejected: it hands `addons.installPackage` to an integration.
|
|
65
|
+
*
|
|
66
|
+
* Calls the ADDON itself makes over `ctx.api` run as the addon and are not
|
|
67
|
+
* scope-checked, so they are not what this field describes — but reaching the
|
|
68
|
+
* addon's route in the first place IS, and that is the entry to declare.
|
|
69
|
+
*
|
|
70
|
+
* **The boot window.** An addon registers its provider after its runner forks
|
|
71
|
+
* and initialises, so between hub start and that moment this collection is
|
|
72
|
+
* incomplete and an `integrationId` can be legitimately absent. The core does
|
|
73
|
+
* not wait, poll or cache around this ([D3](../../../../docs/decisions/adr-0003.md)):
|
|
74
|
+
* it compares the manifest declarers against the registered providers and
|
|
75
|
+
* answers `503 temporarily_unavailable` (with `Retry-After` and the pending
|
|
76
|
+
* addon ids) instead of `400 unknown integration`, and reports
|
|
77
|
+
* `complete: false` on `GET /api/oauth2/integrations`. A client should retry
|
|
78
|
+
* while the list is incomplete rather than conclude the hub cannot do OAuth.
|
|
9
79
|
*/
|
|
10
80
|
declare const OauthIntegrationDescriptorSchema: z.ZodObject<{
|
|
11
81
|
integrationId: z.ZodString;
|
|
@@ -50,6 +120,7 @@ declare const OauthIntegrationDescriptorSchema: z.ZodObject<{
|
|
|
50
120
|
allowedPrivateHostPaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
51
121
|
requiresPkce: z.ZodOptional<z.ZodBoolean>;
|
|
52
122
|
hubUrl: z.ZodOptional<z.ZodString>;
|
|
123
|
+
refreshTokenTtlSec: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"never">]>>;
|
|
53
124
|
}, z.core.$strip>;
|
|
54
125
|
export declare const oauthIntegrationCapability: {
|
|
55
126
|
readonly name: "oauth-integration";
|
|
@@ -100,6 +171,7 @@ export declare const oauthIntegrationCapability: {
|
|
|
100
171
|
allowedPrivateHostPaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
101
172
|
requiresPkce: z.ZodOptional<z.ZodBoolean>;
|
|
102
173
|
hubUrl: z.ZodOptional<z.ZodString>;
|
|
174
|
+
refreshTokenTtlSec: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"never">]>>;
|
|
103
175
|
}, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
|
|
104
176
|
};
|
|
105
177
|
};
|
|
@@ -63,6 +63,7 @@ declare const SsoBridgeClaimsSchema: z.ZodObject<{
|
|
|
63
63
|
jti: z.ZodOptional<z.ZodString>;
|
|
64
64
|
codeChallenge: z.ZodOptional<z.ZodString>;
|
|
65
65
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
66
|
+
refreshTtl: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"never">]>>;
|
|
66
67
|
}, z.core.$strip>;
|
|
67
68
|
export declare const ssoBridgeCapability: {
|
|
68
69
|
readonly name: "sso-bridge";
|
|
@@ -120,8 +121,9 @@ export declare const ssoBridgeCapability: {
|
|
|
120
121
|
jti: z.ZodOptional<z.ZodString>;
|
|
121
122
|
codeChallenge: z.ZodOptional<z.ZodString>;
|
|
122
123
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
124
|
+
refreshTtl: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"never">]>>;
|
|
123
125
|
}, z.core.$strip>;
|
|
124
|
-
ttlSec: z.ZodOptional<z.ZodNumber
|
|
126
|
+
ttlSec: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"never">]>>;
|
|
125
127
|
}, z.core.$strip>, z.ZodObject<{
|
|
126
128
|
token: z.ZodString;
|
|
127
129
|
}, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
|
|
@@ -176,6 +178,7 @@ export declare const ssoBridgeCapability: {
|
|
|
176
178
|
jti: z.ZodOptional<z.ZodString>;
|
|
177
179
|
codeChallenge: z.ZodOptional<z.ZodString>;
|
|
178
180
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
181
|
+
refreshTtl: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"never">]>>;
|
|
179
182
|
}, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
|
|
180
183
|
};
|
|
181
184
|
};
|
|
@@ -938,6 +938,7 @@ export declare const userManagementCapability: {
|
|
|
938
938
|
redirectUri: z.ZodString;
|
|
939
939
|
hubUrl: z.ZodString;
|
|
940
940
|
codeChallenge: z.ZodOptional<z.ZodString>;
|
|
941
|
+
refreshTtlSec: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"never">]>>;
|
|
941
942
|
}, z.core.$strip>, z.ZodObject<{
|
|
942
943
|
code: z.ZodString;
|
|
943
944
|
}, z.core.$strip>, "mutation">;
|
package/dist/index.d.ts
CHANGED
|
@@ -113,6 +113,7 @@ export * from './types/pipeline.js';
|
|
|
113
113
|
export type { AvailableEngine, PipelineAddonSchema, PipelineDefaultStep, PipelineModelOption, PipelineSchema, PipelineSlotSchema, PipelineTemplate, PipelineTemplateStep, TemplateValidationResult, } from './types/pipeline-schema.js';
|
|
114
114
|
export * from './types/pipeline-step.js';
|
|
115
115
|
export * from './types/tracked.js';
|
|
116
|
+
export { type BearerPayloadShape, type BearerPrincipal, classifyBearerPrincipal, methodAccessForHttpMethod, type PrincipalAddonReachInput, type PrincipalAddonReachVerdict, principalMayReachAddon, scopesAllowAddon, scopesAllowDeviceCap, } from './auth/principal-scope.js';
|
|
116
117
|
export type { AutomationAction, AutomationCondition, AutomationConditionAll, AutomationConditionAny, AutomationConditionExpression, AutomationConditionLeaf, AutomationConditionNot, AutomationConditionOperator, AutomationRecipe, AutomationTrigger, GenerateAutomationBlockInput, } from './automation/index.js';
|
|
117
118
|
export { AutomationActionSchema, AutomationConditionOperatorSchema, AutomationConditionSchema, AutomationRecipeSchema, AutomationTriggerSchema, conditionDepth, countConditionLeaves, generateAutomationBlock, MAX_CONDITION_DEPTH, MAX_CONDITION_LEAVES, validateRecipeBounds, } from './automation/index.js';
|
|
118
119
|
export * from './cap-call-context.js';
|
package/dist/index.js
CHANGED
|
@@ -2469,6 +2469,102 @@ var ConvertResultSchema = zod.z.object({
|
|
|
2469
2469
|
artifacts: zod.z.array(ConvertArtifactSchema).readonly()
|
|
2470
2470
|
});
|
|
2471
2471
|
//#endregion
|
|
2472
|
+
//#region src/auth/principal-scope.ts
|
|
2473
|
+
/**
|
|
2474
|
+
* The access flavour an HTTP verb asks for. `GET`/`HEAD` read; anything that
|
|
2475
|
+
* can change state is at least `create`.
|
|
2476
|
+
*
|
|
2477
|
+
* An UNRECOGNISED verb resolves to `delete`, the most privileged flavour, so a
|
|
2478
|
+
* method nobody thought about fails closed. The inverse default — treating the
|
|
2479
|
+
* unknown as `view` — is how a gate quietly stops gating.
|
|
2480
|
+
*/
|
|
2481
|
+
function methodAccessForHttpMethod(method) {
|
|
2482
|
+
switch (method.toUpperCase()) {
|
|
2483
|
+
case "GET":
|
|
2484
|
+
case "HEAD":
|
|
2485
|
+
case "OPTIONS": return "view";
|
|
2486
|
+
case "POST":
|
|
2487
|
+
case "PUT":
|
|
2488
|
+
case "PATCH": return "create";
|
|
2489
|
+
default: return "delete";
|
|
2490
|
+
}
|
|
2491
|
+
}
|
|
2492
|
+
/**
|
|
2493
|
+
* True if the scope set grants `access` on device-scoped capabilities.
|
|
2494
|
+
* A `category:device` grant covers every device cap (the broad grant).
|
|
2495
|
+
*/
|
|
2496
|
+
function scopesAllowDeviceCap(scopes, access) {
|
|
2497
|
+
return scopes.some((s) => s.type === "category" && s.target === "device" && s.access.includes(access));
|
|
2498
|
+
}
|
|
2499
|
+
/**
|
|
2500
|
+
* True if the scope set names this addon with at least `access`.
|
|
2501
|
+
*
|
|
2502
|
+
* Deliberately NOT satisfied by `category:device`: a grant over per-camera
|
|
2503
|
+
* capabilities says nothing about an addon's own HTTP surface, and conflating
|
|
2504
|
+
* the two is precisely the confusion that let an Alexa token drive Home
|
|
2505
|
+
* Assistant's command route.
|
|
2506
|
+
*/
|
|
2507
|
+
function scopesAllowAddon(scopes, addonId, access) {
|
|
2508
|
+
return scopes.some((s) => s.type === "addon" && s.target === addonId && s.access.includes(access));
|
|
2509
|
+
}
|
|
2510
|
+
/**
|
|
2511
|
+
* Classify a VERIFIED JWT payload.
|
|
2512
|
+
*
|
|
2513
|
+
* A session JWT carries no `kind`. Everything else in this system tags itself:
|
|
2514
|
+
* `kind: 'sso-bridge'` for the OAuth/SSO family (discriminated further by
|
|
2515
|
+
* `provider`), `kind: 'totp-challenge'` for login leg 1. Only `oauth-access` is
|
|
2516
|
+
* an API credential; a code lives in a browser redirect URL and a refresh token
|
|
2517
|
+
* belongs to `/token`.
|
|
2518
|
+
*/
|
|
2519
|
+
function classifyBearerPrincipal(payload) {
|
|
2520
|
+
const kind = payload.kind;
|
|
2521
|
+
if (kind === void 0) return { kind: "session" };
|
|
2522
|
+
if (kind !== "sso-bridge") return {
|
|
2523
|
+
kind: "not-a-credential",
|
|
2524
|
+
reason: `bridge token kind=${String(kind)}`
|
|
2525
|
+
};
|
|
2526
|
+
const provider = payload.provider;
|
|
2527
|
+
if (provider === "oauth-access") return {
|
|
2528
|
+
kind: "integration",
|
|
2529
|
+
provider: "oauth-access"
|
|
2530
|
+
};
|
|
2531
|
+
return {
|
|
2532
|
+
kind: "not-a-credential",
|
|
2533
|
+
reason: `bridge token provider=${String(provider)}`
|
|
2534
|
+
};
|
|
2535
|
+
}
|
|
2536
|
+
/**
|
|
2537
|
+
* May this principal reach `/addon/<addonId>/…` on an `authenticated` route or
|
|
2538
|
+
* data-plane endpoint?
|
|
2539
|
+
*
|
|
2540
|
+
* Three principals, three answers:
|
|
2541
|
+
*
|
|
2542
|
+
* - **session** — unchanged. A user session is governed by the route's own
|
|
2543
|
+
* `access` (`authenticated` / `admin`), exactly as before. Tightening HERE
|
|
2544
|
+
* would lock every non-admin viewer out of recorder playback, snapshot media
|
|
2545
|
+
* and the stream-broker embed, which is a worse outcome than the hole.
|
|
2546
|
+
* - **integration** — must hold `addon:<addonId>` at the verb's access. This is
|
|
2547
|
+
* the same rule the `cst_` scoped-token branch has always applied; the JWT
|
|
2548
|
+
* branch simply never applied it, and closing that divergence IS the fix.
|
|
2549
|
+
* `isAdmin` is ignored: an integration token is minted `isAdmin: false` and a
|
|
2550
|
+
* token claiming otherwise must not talk its way past the grant.
|
|
2551
|
+
* - **not-a-credential** — refused unconditionally.
|
|
2552
|
+
*/
|
|
2553
|
+
function principalMayReachAddon(input) {
|
|
2554
|
+
const { principal } = input;
|
|
2555
|
+
if (principal.kind === "not-a-credential") return {
|
|
2556
|
+
allowed: false,
|
|
2557
|
+
reason: principal.reason
|
|
2558
|
+
};
|
|
2559
|
+
if (principal.kind === "session") return { allowed: true };
|
|
2560
|
+
const access = methodAccessForHttpMethod(input.method);
|
|
2561
|
+
if (scopesAllowAddon(input.scopes, input.addonId, access)) return { allowed: true };
|
|
2562
|
+
return {
|
|
2563
|
+
allowed: false,
|
|
2564
|
+
reason: `integration token holds no addon:${input.addonId}[${access}] grant`
|
|
2565
|
+
};
|
|
2566
|
+
}
|
|
2567
|
+
//#endregion
|
|
2472
2568
|
//#region src/expression/errors.ts
|
|
2473
2569
|
/**
|
|
2474
2570
|
* Error types for the safe expression engine. Two distinct classes so callers
|
|
@@ -13012,6 +13108,76 @@ var ScopedTokenSchema = zod.z.object({
|
|
|
13012
13108
|
* Each provider returns a static descriptor; the core enumerates them
|
|
13013
13109
|
* to validate the `integration=` query param and resolve the consent
|
|
13014
13110
|
* label + the scopes baked into the issued token.
|
|
13111
|
+
*
|
|
13112
|
+
* ## Declaring one
|
|
13113
|
+
*
|
|
13114
|
+
* An OAuth client is integration-specific knowledge — who the client is, what
|
|
13115
|
+
* it may ask for, where it may be sent — so it is declared by the ADDON that
|
|
13116
|
+
* owns the integration, never by the kernel and never as a branch inside
|
|
13117
|
+
* `oauth2-routes.ts` ([D101](../../../../docs/decisions/adr-0101.md)). Three
|
|
13118
|
+
* steps, no others:
|
|
13119
|
+
*
|
|
13120
|
+
* 1. Add `{ "name": "oauth-integration" }` to the addon's `camstack.addons[]`
|
|
13121
|
+
* manifest entry. This is also what tells the hub, at addon-LOAD time, that
|
|
13122
|
+
* a descriptor is owed — see "the boot window" below.
|
|
13123
|
+
* 2. Return a provider from `onInitialize()`:
|
|
13124
|
+
*
|
|
13125
|
+
* ```ts
|
|
13126
|
+
* const provider: IOauthIntegrationProvider = {
|
|
13127
|
+
* getDescriptor: async () => ({
|
|
13128
|
+
* integrationId: 'my-thing', // the `integration=` query param
|
|
13129
|
+
* displayName: 'My Thing',
|
|
13130
|
+
* requestedScopes: [ … ], // see below
|
|
13131
|
+
* allowedRedirectPrefixes: ['https://callback.example/'],
|
|
13132
|
+
* }),
|
|
13133
|
+
* }
|
|
13134
|
+
* return [{ capability: oauthIntegrationCapability, provider }]
|
|
13135
|
+
* ```
|
|
13136
|
+
*
|
|
13137
|
+
* The descriptor must be **static** — it is read on the authorize path, so
|
|
13138
|
+
* never put an await on network or disk behind it, and never register it
|
|
13139
|
+
* behind one either (a provider is registered only once `onInitialize`
|
|
13140
|
+
* RETURNS, so anything awaited before the return delays linking).
|
|
13141
|
+
* 3. Nothing else. There is no allow-list to join, no id to register with the
|
|
13142
|
+
* core, and no per-integration branch anywhere: `/api/oauth2/authorize` and
|
|
13143
|
+
* `/api/oauth2/integrations` are built from this collection alone.
|
|
13144
|
+
*
|
|
13145
|
+
* **Scopes. `requestedScopes` has exactly ONE meaning: what the integration
|
|
13146
|
+
* NEEDS to function.** Not a blast radius, not a conservative
|
|
13147
|
+
* under-declaration, not a description of some other path the addon happens to
|
|
13148
|
+
* have. Derive it from what the client actually calls **with this token** —
|
|
13149
|
+
* every tRPC path against `METHOD_ACCESS_MAP`, plus an `addon:` grant for every
|
|
13150
|
+
* addon HTTP route it posts to — and write the call that justifies each entry
|
|
13151
|
+
* next to it. Two integrations once used this field to mean two different
|
|
13152
|
+
* things; the operator ruled there is one meaning, and any third integration
|
|
13153
|
+
* inherits it (2026-08-09).
|
|
13154
|
+
*
|
|
13155
|
+
* This is not documentation, it is the ENFORCEMENT INPUT. Since
|
|
13156
|
+
* [D103](../../../../docs/decisions/adr-0103.md) the `/addon/:addonId/*` gate
|
|
13157
|
+
* checks an integration token's grant before letting it reach an
|
|
13158
|
+
* `access: 'authenticated'` route, so an **under-declaration is an integration
|
|
13159
|
+
* that stops working** — a missing `addon:` entry means `403 Token scope
|
|
13160
|
+
* mismatch` on every control the client tries to actuate. Widen the descriptor
|
|
13161
|
+
* honestly rather than weakening a check to make a route pass.
|
|
13162
|
+
*
|
|
13163
|
+
* Prefer a narrow `capability:` scope to a `category:` one unless the client
|
|
13164
|
+
* genuinely needs a whole family; a category scope grants every future member
|
|
13165
|
+
* of that category too. `category:system [create]` has been rejected once and
|
|
13166
|
+
* should stay rejected: it hands `addons.installPackage` to an integration.
|
|
13167
|
+
*
|
|
13168
|
+
* Calls the ADDON itself makes over `ctx.api` run as the addon and are not
|
|
13169
|
+
* scope-checked, so they are not what this field describes — but reaching the
|
|
13170
|
+
* addon's route in the first place IS, and that is the entry to declare.
|
|
13171
|
+
*
|
|
13172
|
+
* **The boot window.** An addon registers its provider after its runner forks
|
|
13173
|
+
* and initialises, so between hub start and that moment this collection is
|
|
13174
|
+
* incomplete and an `integrationId` can be legitimately absent. The core does
|
|
13175
|
+
* not wait, poll or cache around this ([D3](../../../../docs/decisions/adr-0003.md)):
|
|
13176
|
+
* it compares the manifest declarers against the registered providers and
|
|
13177
|
+
* answers `503 temporarily_unavailable` (with `Retry-After` and the pending
|
|
13178
|
+
* addon ids) instead of `400 unknown integration`, and reports
|
|
13179
|
+
* `complete: false` on `GET /api/oauth2/integrations`. A client should retry
|
|
13180
|
+
* while the list is incomplete rather than conclude the hub cannot do OAuth.
|
|
13015
13181
|
*/
|
|
13016
13182
|
var OauthIntegrationDescriptorSchema = zod.z.object({
|
|
13017
13183
|
/** Stable id used as the `integration=` query param, e.g. 'export-alexa'. */
|
|
@@ -13042,7 +13208,30 @@ var OauthIntegrationDescriptorSchema = zod.z.object({
|
|
|
13042
13208
|
* present, /api/oauth2/authorize bakes THIS into the code instead of the
|
|
13043
13209
|
* hub-global `publicHubUrl()`, so a forked exporter addon (which can't set
|
|
13044
13210
|
* the hub's env) drives the claim that its cloud Lambda routes back on. */
|
|
13045
|
-
hubUrl: zod.z.string().optional()
|
|
13211
|
+
hubUrl: zod.z.string().optional(),
|
|
13212
|
+
/**
|
|
13213
|
+
* How long a REFRESH token issued for this integration lives — seconds, or
|
|
13214
|
+
* `'never'` for a token minted with no `exp` claim at all. Omit to keep the
|
|
13215
|
+
* 30-day default, which is what every link used before this field existed.
|
|
13216
|
+
*
|
|
13217
|
+
* Declared here for the same reason `requestedScopes` is: the integration
|
|
13218
|
+
* knows what it needs. Amazon's account linking and a Home Assistant config
|
|
13219
|
+
* entry are both meant to survive indefinitely, and re-linking is a manual
|
|
13220
|
+
* user action, so a 30-day expiry silently unlinks a working integration.
|
|
13221
|
+
*
|
|
13222
|
+
* **The security posture, stated so it is owned deliberately.** A refresh
|
|
13223
|
+
* token that never expires is permanent access if it leaks. What bounds it is
|
|
13224
|
+
* revocation, not time: `oauthRefresh` re-reads the session on every use and
|
|
13225
|
+
* returns `null` once `revokedAt` is set, as does `oauthVerifyAccessToken`.
|
|
13226
|
+
* The one gap is the ACCESS token — it is a plain signed JWT that nothing
|
|
13227
|
+
* re-checks against the session on the `/trpc` and `/addon/*` paths, so
|
|
13228
|
+
* revoking a link takes effect there only after its remaining hour. That hour
|
|
13229
|
+
* is why the access TTL is not configurable.
|
|
13230
|
+
*
|
|
13231
|
+
* The value is baked into the authorization code at `/authorize` and travels
|
|
13232
|
+
* on the tokens, so editing this field changes FUTURE links only.
|
|
13233
|
+
*/
|
|
13234
|
+
refreshTokenTtlSec: zod.z.union([zod.z.number().int().positive(), zod.z.literal("never")]).optional()
|
|
13046
13235
|
});
|
|
13047
13236
|
var oauthIntegrationCapability = {
|
|
13048
13237
|
name: "oauth-integration",
|
|
@@ -17557,7 +17746,16 @@ var SsoBridgeClaimsSchema = zod.z.object({
|
|
|
17557
17746
|
codeChallenge: zod.z.string().optional(),
|
|
17558
17747
|
/** OAuth session registry id — set on `oauth-access`/`oauth-refresh`
|
|
17559
17748
|
* tokens so the verify path can check the session is not revoked. */
|
|
17560
|
-
sessionId: zod.z.string().optional()
|
|
17749
|
+
sessionId: zod.z.string().optional(),
|
|
17750
|
+
/**
|
|
17751
|
+
* The refresh lifetime this LINK was created with, in seconds, or `'never'`.
|
|
17752
|
+
* Baked into the code at `/authorize` from the integration's descriptor and
|
|
17753
|
+
* carried forward so `oauthRefresh` re-mints with the same lifetime. It rides
|
|
17754
|
+
* on the token rather than being re-read from the descriptor on purpose:
|
|
17755
|
+
* editing a descriptor must not retroactively extend or shorten a link the
|
|
17756
|
+
* operator already consented to.
|
|
17757
|
+
*/
|
|
17758
|
+
refreshTtl: zod.z.union([zod.z.number().int().positive(), zod.z.literal("never")]).optional()
|
|
17561
17759
|
});
|
|
17562
17760
|
var ssoBridgeCapability = {
|
|
17563
17761
|
name: "sso-bridge",
|
|
@@ -17567,7 +17765,16 @@ var ssoBridgeCapability = {
|
|
|
17567
17765
|
methods: {
|
|
17568
17766
|
signBridgeToken: require_sleep.method(zod.z.object({
|
|
17569
17767
|
claims: SsoBridgeClaimsSchema,
|
|
17570
|
-
|
|
17768
|
+
/**
|
|
17769
|
+
* Seconds, or `'never'` for a token minted with NO `exp` claim.
|
|
17770
|
+
*
|
|
17771
|
+
* `'never'` is a literal rather than `undefined`/`0` because omitting
|
|
17772
|
+
* this field already means "the 5-minute SSO hand-off default", and
|
|
17773
|
+
* `jwt.sign` THROWS on `{ expiresIn: undefined }` — a "no expiry" that
|
|
17774
|
+
* went through the numeric path would fail at mint time and break
|
|
17775
|
+
* linking rather than produce an eternal token.
|
|
17776
|
+
*/
|
|
17777
|
+
ttlSec: zod.z.union([zod.z.number().int().positive(), zod.z.literal("never")]).optional()
|
|
17571
17778
|
}), zod.z.object({ token: zod.z.string() })),
|
|
17572
17779
|
verifyBridgeToken: require_sleep.method(zod.z.object({ token: zod.z.string() }), SsoBridgeClaimsSchema.nullable())
|
|
17573
17780
|
}
|
|
@@ -26649,7 +26856,12 @@ var userManagementCapability = {
|
|
|
26649
26856
|
hubUrl: zod.z.string(),
|
|
26650
26857
|
/** PKCE (RFC 7636) S256 challenge. Baked into the signed code; a code
|
|
26651
26858
|
* that carries one can ONLY be exchanged with the matching verifier. */
|
|
26652
|
-
codeChallenge: zod.z.string().optional()
|
|
26859
|
+
codeChallenge: zod.z.string().optional(),
|
|
26860
|
+
/** The integration's declared refresh lifetime — seconds, or `'never'`.
|
|
26861
|
+
* From `OauthIntegrationDescriptor.refreshTokenTtlSec`. Baked into the
|
|
26862
|
+
* code so the link carries its own lifetime; omit for the 30-day
|
|
26863
|
+
* default. */
|
|
26864
|
+
refreshTtlSec: zod.z.union([zod.z.number().int().positive(), zod.z.literal("never")]).optional()
|
|
26653
26865
|
}), zod.z.object({ code: zod.z.string() }), {
|
|
26654
26866
|
kind: "mutation",
|
|
26655
26867
|
access: "create"
|
|
@@ -40442,6 +40654,7 @@ exports.canConvertUnit = canConvertUnit;
|
|
|
40442
40654
|
exports.canonicalEgressPlan = canonicalEgressPlan;
|
|
40443
40655
|
exports.carbonMonoxideCapability = carbonMonoxideCapability;
|
|
40444
40656
|
exports.cellsToRects = cellsToRects;
|
|
40657
|
+
exports.classifyBearerPrincipal = classifyBearerPrincipal;
|
|
40445
40658
|
exports.classifyStream = classifyStream;
|
|
40446
40659
|
exports.classifyStreams = classifyStreams;
|
|
40447
40660
|
exports.climateControlCapability = climateControlCapability;
|
|
@@ -40588,6 +40801,7 @@ exports.mediaPlayerCapability = mediaPlayerCapability;
|
|
|
40588
40801
|
exports.mergeSourceInfo = mergeSourceInfo;
|
|
40589
40802
|
exports.meshNetworkCapability = meshNetworkCapability;
|
|
40590
40803
|
exports.method = require_sleep.method;
|
|
40804
|
+
exports.methodAccessForHttpMethod = methodAccessForHttpMethod;
|
|
40591
40805
|
exports.metricsProviderCapability = metricsProviderCapability;
|
|
40592
40806
|
exports.modelConvertCapability = modelConvertCapability;
|
|
40593
40807
|
exports.modelDistributorCapability = modelDistributorCapability;
|
|
@@ -40636,6 +40850,7 @@ exports.powerMeterCapability = powerMeterCapability;
|
|
|
40636
40850
|
exports.prepareNotification = prepareNotification;
|
|
40637
40851
|
exports.presenceCapability = presenceCapability;
|
|
40638
40852
|
exports.pressureSensorCapability = pressureSensorCapability;
|
|
40853
|
+
exports.principalMayReachAddon = principalMayReachAddon;
|
|
40639
40854
|
exports.privacyMaskCapability = privacyMaskCapability;
|
|
40640
40855
|
exports.procedureAuthKey = procedureAuthKey;
|
|
40641
40856
|
exports.ptzAutotrackCapability = ptzAutotrackCapability;
|
|
@@ -40671,6 +40886,8 @@ exports.runInferenceStep = runInferenceStep;
|
|
|
40671
40886
|
exports.runtimeDevices = runtimeDevices;
|
|
40672
40887
|
exports.sceneMonitorCapability = sceneMonitorCapability;
|
|
40673
40888
|
exports.scopeKey = require_sleep.scopeKey;
|
|
40889
|
+
exports.scopesAllowAddon = scopesAllowAddon;
|
|
40890
|
+
exports.scopesAllowDeviceCap = scopesAllowDeviceCap;
|
|
40674
40891
|
exports.scoreRuntimes = scoreRuntimes;
|
|
40675
40892
|
exports.scriptRunnerCapability = scriptRunnerCapability;
|
|
40676
40893
|
exports.selectAssignedProfileSlots = require_sleep.selectAssignedProfileSlots;
|
package/dist/index.mjs
CHANGED
|
@@ -2468,6 +2468,102 @@ var ConvertResultSchema = z.object({
|
|
|
2468
2468
|
artifacts: z.array(ConvertArtifactSchema).readonly()
|
|
2469
2469
|
});
|
|
2470
2470
|
//#endregion
|
|
2471
|
+
//#region src/auth/principal-scope.ts
|
|
2472
|
+
/**
|
|
2473
|
+
* The access flavour an HTTP verb asks for. `GET`/`HEAD` read; anything that
|
|
2474
|
+
* can change state is at least `create`.
|
|
2475
|
+
*
|
|
2476
|
+
* An UNRECOGNISED verb resolves to `delete`, the most privileged flavour, so a
|
|
2477
|
+
* method nobody thought about fails closed. The inverse default — treating the
|
|
2478
|
+
* unknown as `view` — is how a gate quietly stops gating.
|
|
2479
|
+
*/
|
|
2480
|
+
function methodAccessForHttpMethod(method) {
|
|
2481
|
+
switch (method.toUpperCase()) {
|
|
2482
|
+
case "GET":
|
|
2483
|
+
case "HEAD":
|
|
2484
|
+
case "OPTIONS": return "view";
|
|
2485
|
+
case "POST":
|
|
2486
|
+
case "PUT":
|
|
2487
|
+
case "PATCH": return "create";
|
|
2488
|
+
default: return "delete";
|
|
2489
|
+
}
|
|
2490
|
+
}
|
|
2491
|
+
/**
|
|
2492
|
+
* True if the scope set grants `access` on device-scoped capabilities.
|
|
2493
|
+
* A `category:device` grant covers every device cap (the broad grant).
|
|
2494
|
+
*/
|
|
2495
|
+
function scopesAllowDeviceCap(scopes, access) {
|
|
2496
|
+
return scopes.some((s) => s.type === "category" && s.target === "device" && s.access.includes(access));
|
|
2497
|
+
}
|
|
2498
|
+
/**
|
|
2499
|
+
* True if the scope set names this addon with at least `access`.
|
|
2500
|
+
*
|
|
2501
|
+
* Deliberately NOT satisfied by `category:device`: a grant over per-camera
|
|
2502
|
+
* capabilities says nothing about an addon's own HTTP surface, and conflating
|
|
2503
|
+
* the two is precisely the confusion that let an Alexa token drive Home
|
|
2504
|
+
* Assistant's command route.
|
|
2505
|
+
*/
|
|
2506
|
+
function scopesAllowAddon(scopes, addonId, access) {
|
|
2507
|
+
return scopes.some((s) => s.type === "addon" && s.target === addonId && s.access.includes(access));
|
|
2508
|
+
}
|
|
2509
|
+
/**
|
|
2510
|
+
* Classify a VERIFIED JWT payload.
|
|
2511
|
+
*
|
|
2512
|
+
* A session JWT carries no `kind`. Everything else in this system tags itself:
|
|
2513
|
+
* `kind: 'sso-bridge'` for the OAuth/SSO family (discriminated further by
|
|
2514
|
+
* `provider`), `kind: 'totp-challenge'` for login leg 1. Only `oauth-access` is
|
|
2515
|
+
* an API credential; a code lives in a browser redirect URL and a refresh token
|
|
2516
|
+
* belongs to `/token`.
|
|
2517
|
+
*/
|
|
2518
|
+
function classifyBearerPrincipal(payload) {
|
|
2519
|
+
const kind = payload.kind;
|
|
2520
|
+
if (kind === void 0) return { kind: "session" };
|
|
2521
|
+
if (kind !== "sso-bridge") return {
|
|
2522
|
+
kind: "not-a-credential",
|
|
2523
|
+
reason: `bridge token kind=${String(kind)}`
|
|
2524
|
+
};
|
|
2525
|
+
const provider = payload.provider;
|
|
2526
|
+
if (provider === "oauth-access") return {
|
|
2527
|
+
kind: "integration",
|
|
2528
|
+
provider: "oauth-access"
|
|
2529
|
+
};
|
|
2530
|
+
return {
|
|
2531
|
+
kind: "not-a-credential",
|
|
2532
|
+
reason: `bridge token provider=${String(provider)}`
|
|
2533
|
+
};
|
|
2534
|
+
}
|
|
2535
|
+
/**
|
|
2536
|
+
* May this principal reach `/addon/<addonId>/…` on an `authenticated` route or
|
|
2537
|
+
* data-plane endpoint?
|
|
2538
|
+
*
|
|
2539
|
+
* Three principals, three answers:
|
|
2540
|
+
*
|
|
2541
|
+
* - **session** — unchanged. A user session is governed by the route's own
|
|
2542
|
+
* `access` (`authenticated` / `admin`), exactly as before. Tightening HERE
|
|
2543
|
+
* would lock every non-admin viewer out of recorder playback, snapshot media
|
|
2544
|
+
* and the stream-broker embed, which is a worse outcome than the hole.
|
|
2545
|
+
* - **integration** — must hold `addon:<addonId>` at the verb's access. This is
|
|
2546
|
+
* the same rule the `cst_` scoped-token branch has always applied; the JWT
|
|
2547
|
+
* branch simply never applied it, and closing that divergence IS the fix.
|
|
2548
|
+
* `isAdmin` is ignored: an integration token is minted `isAdmin: false` and a
|
|
2549
|
+
* token claiming otherwise must not talk its way past the grant.
|
|
2550
|
+
* - **not-a-credential** — refused unconditionally.
|
|
2551
|
+
*/
|
|
2552
|
+
function principalMayReachAddon(input) {
|
|
2553
|
+
const { principal } = input;
|
|
2554
|
+
if (principal.kind === "not-a-credential") return {
|
|
2555
|
+
allowed: false,
|
|
2556
|
+
reason: principal.reason
|
|
2557
|
+
};
|
|
2558
|
+
if (principal.kind === "session") return { allowed: true };
|
|
2559
|
+
const access = methodAccessForHttpMethod(input.method);
|
|
2560
|
+
if (scopesAllowAddon(input.scopes, input.addonId, access)) return { allowed: true };
|
|
2561
|
+
return {
|
|
2562
|
+
allowed: false,
|
|
2563
|
+
reason: `integration token holds no addon:${input.addonId}[${access}] grant`
|
|
2564
|
+
};
|
|
2565
|
+
}
|
|
2566
|
+
//#endregion
|
|
2471
2567
|
//#region src/expression/errors.ts
|
|
2472
2568
|
/**
|
|
2473
2569
|
* Error types for the safe expression engine. Two distinct classes so callers
|
|
@@ -13011,6 +13107,76 @@ var ScopedTokenSchema = z.object({
|
|
|
13011
13107
|
* Each provider returns a static descriptor; the core enumerates them
|
|
13012
13108
|
* to validate the `integration=` query param and resolve the consent
|
|
13013
13109
|
* label + the scopes baked into the issued token.
|
|
13110
|
+
*
|
|
13111
|
+
* ## Declaring one
|
|
13112
|
+
*
|
|
13113
|
+
* An OAuth client is integration-specific knowledge — who the client is, what
|
|
13114
|
+
* it may ask for, where it may be sent — so it is declared by the ADDON that
|
|
13115
|
+
* owns the integration, never by the kernel and never as a branch inside
|
|
13116
|
+
* `oauth2-routes.ts` ([D101](../../../../docs/decisions/adr-0101.md)). Three
|
|
13117
|
+
* steps, no others:
|
|
13118
|
+
*
|
|
13119
|
+
* 1. Add `{ "name": "oauth-integration" }` to the addon's `camstack.addons[]`
|
|
13120
|
+
* manifest entry. This is also what tells the hub, at addon-LOAD time, that
|
|
13121
|
+
* a descriptor is owed — see "the boot window" below.
|
|
13122
|
+
* 2. Return a provider from `onInitialize()`:
|
|
13123
|
+
*
|
|
13124
|
+
* ```ts
|
|
13125
|
+
* const provider: IOauthIntegrationProvider = {
|
|
13126
|
+
* getDescriptor: async () => ({
|
|
13127
|
+
* integrationId: 'my-thing', // the `integration=` query param
|
|
13128
|
+
* displayName: 'My Thing',
|
|
13129
|
+
* requestedScopes: [ … ], // see below
|
|
13130
|
+
* allowedRedirectPrefixes: ['https://callback.example/'],
|
|
13131
|
+
* }),
|
|
13132
|
+
* }
|
|
13133
|
+
* return [{ capability: oauthIntegrationCapability, provider }]
|
|
13134
|
+
* ```
|
|
13135
|
+
*
|
|
13136
|
+
* The descriptor must be **static** — it is read on the authorize path, so
|
|
13137
|
+
* never put an await on network or disk behind it, and never register it
|
|
13138
|
+
* behind one either (a provider is registered only once `onInitialize`
|
|
13139
|
+
* RETURNS, so anything awaited before the return delays linking).
|
|
13140
|
+
* 3. Nothing else. There is no allow-list to join, no id to register with the
|
|
13141
|
+
* core, and no per-integration branch anywhere: `/api/oauth2/authorize` and
|
|
13142
|
+
* `/api/oauth2/integrations` are built from this collection alone.
|
|
13143
|
+
*
|
|
13144
|
+
* **Scopes. `requestedScopes` has exactly ONE meaning: what the integration
|
|
13145
|
+
* NEEDS to function.** Not a blast radius, not a conservative
|
|
13146
|
+
* under-declaration, not a description of some other path the addon happens to
|
|
13147
|
+
* have. Derive it from what the client actually calls **with this token** —
|
|
13148
|
+
* every tRPC path against `METHOD_ACCESS_MAP`, plus an `addon:` grant for every
|
|
13149
|
+
* addon HTTP route it posts to — and write the call that justifies each entry
|
|
13150
|
+
* next to it. Two integrations once used this field to mean two different
|
|
13151
|
+
* things; the operator ruled there is one meaning, and any third integration
|
|
13152
|
+
* inherits it (2026-08-09).
|
|
13153
|
+
*
|
|
13154
|
+
* This is not documentation, it is the ENFORCEMENT INPUT. Since
|
|
13155
|
+
* [D103](../../../../docs/decisions/adr-0103.md) the `/addon/:addonId/*` gate
|
|
13156
|
+
* checks an integration token's grant before letting it reach an
|
|
13157
|
+
* `access: 'authenticated'` route, so an **under-declaration is an integration
|
|
13158
|
+
* that stops working** — a missing `addon:` entry means `403 Token scope
|
|
13159
|
+
* mismatch` on every control the client tries to actuate. Widen the descriptor
|
|
13160
|
+
* honestly rather than weakening a check to make a route pass.
|
|
13161
|
+
*
|
|
13162
|
+
* Prefer a narrow `capability:` scope to a `category:` one unless the client
|
|
13163
|
+
* genuinely needs a whole family; a category scope grants every future member
|
|
13164
|
+
* of that category too. `category:system [create]` has been rejected once and
|
|
13165
|
+
* should stay rejected: it hands `addons.installPackage` to an integration.
|
|
13166
|
+
*
|
|
13167
|
+
* Calls the ADDON itself makes over `ctx.api` run as the addon and are not
|
|
13168
|
+
* scope-checked, so they are not what this field describes — but reaching the
|
|
13169
|
+
* addon's route in the first place IS, and that is the entry to declare.
|
|
13170
|
+
*
|
|
13171
|
+
* **The boot window.** An addon registers its provider after its runner forks
|
|
13172
|
+
* and initialises, so between hub start and that moment this collection is
|
|
13173
|
+
* incomplete and an `integrationId` can be legitimately absent. The core does
|
|
13174
|
+
* not wait, poll or cache around this ([D3](../../../../docs/decisions/adr-0003.md)):
|
|
13175
|
+
* it compares the manifest declarers against the registered providers and
|
|
13176
|
+
* answers `503 temporarily_unavailable` (with `Retry-After` and the pending
|
|
13177
|
+
* addon ids) instead of `400 unknown integration`, and reports
|
|
13178
|
+
* `complete: false` on `GET /api/oauth2/integrations`. A client should retry
|
|
13179
|
+
* while the list is incomplete rather than conclude the hub cannot do OAuth.
|
|
13014
13180
|
*/
|
|
13015
13181
|
var OauthIntegrationDescriptorSchema = z.object({
|
|
13016
13182
|
/** Stable id used as the `integration=` query param, e.g. 'export-alexa'. */
|
|
@@ -13041,7 +13207,30 @@ var OauthIntegrationDescriptorSchema = z.object({
|
|
|
13041
13207
|
* present, /api/oauth2/authorize bakes THIS into the code instead of the
|
|
13042
13208
|
* hub-global `publicHubUrl()`, so a forked exporter addon (which can't set
|
|
13043
13209
|
* the hub's env) drives the claim that its cloud Lambda routes back on. */
|
|
13044
|
-
hubUrl: z.string().optional()
|
|
13210
|
+
hubUrl: z.string().optional(),
|
|
13211
|
+
/**
|
|
13212
|
+
* How long a REFRESH token issued for this integration lives — seconds, or
|
|
13213
|
+
* `'never'` for a token minted with no `exp` claim at all. Omit to keep the
|
|
13214
|
+
* 30-day default, which is what every link used before this field existed.
|
|
13215
|
+
*
|
|
13216
|
+
* Declared here for the same reason `requestedScopes` is: the integration
|
|
13217
|
+
* knows what it needs. Amazon's account linking and a Home Assistant config
|
|
13218
|
+
* entry are both meant to survive indefinitely, and re-linking is a manual
|
|
13219
|
+
* user action, so a 30-day expiry silently unlinks a working integration.
|
|
13220
|
+
*
|
|
13221
|
+
* **The security posture, stated so it is owned deliberately.** A refresh
|
|
13222
|
+
* token that never expires is permanent access if it leaks. What bounds it is
|
|
13223
|
+
* revocation, not time: `oauthRefresh` re-reads the session on every use and
|
|
13224
|
+
* returns `null` once `revokedAt` is set, as does `oauthVerifyAccessToken`.
|
|
13225
|
+
* The one gap is the ACCESS token — it is a plain signed JWT that nothing
|
|
13226
|
+
* re-checks against the session on the `/trpc` and `/addon/*` paths, so
|
|
13227
|
+
* revoking a link takes effect there only after its remaining hour. That hour
|
|
13228
|
+
* is why the access TTL is not configurable.
|
|
13229
|
+
*
|
|
13230
|
+
* The value is baked into the authorization code at `/authorize` and travels
|
|
13231
|
+
* on the tokens, so editing this field changes FUTURE links only.
|
|
13232
|
+
*/
|
|
13233
|
+
refreshTokenTtlSec: z.union([z.number().int().positive(), z.literal("never")]).optional()
|
|
13045
13234
|
});
|
|
13046
13235
|
var oauthIntegrationCapability = {
|
|
13047
13236
|
name: "oauth-integration",
|
|
@@ -17556,7 +17745,16 @@ var SsoBridgeClaimsSchema = z.object({
|
|
|
17556
17745
|
codeChallenge: z.string().optional(),
|
|
17557
17746
|
/** OAuth session registry id — set on `oauth-access`/`oauth-refresh`
|
|
17558
17747
|
* tokens so the verify path can check the session is not revoked. */
|
|
17559
|
-
sessionId: z.string().optional()
|
|
17748
|
+
sessionId: z.string().optional(),
|
|
17749
|
+
/**
|
|
17750
|
+
* The refresh lifetime this LINK was created with, in seconds, or `'never'`.
|
|
17751
|
+
* Baked into the code at `/authorize` from the integration's descriptor and
|
|
17752
|
+
* carried forward so `oauthRefresh` re-mints with the same lifetime. It rides
|
|
17753
|
+
* on the token rather than being re-read from the descriptor on purpose:
|
|
17754
|
+
* editing a descriptor must not retroactively extend or shorten a link the
|
|
17755
|
+
* operator already consented to.
|
|
17756
|
+
*/
|
|
17757
|
+
refreshTtl: z.union([z.number().int().positive(), z.literal("never")]).optional()
|
|
17560
17758
|
});
|
|
17561
17759
|
var ssoBridgeCapability = {
|
|
17562
17760
|
name: "sso-bridge",
|
|
@@ -17566,7 +17764,16 @@ var ssoBridgeCapability = {
|
|
|
17566
17764
|
methods: {
|
|
17567
17765
|
signBridgeToken: method(z.object({
|
|
17568
17766
|
claims: SsoBridgeClaimsSchema,
|
|
17569
|
-
|
|
17767
|
+
/**
|
|
17768
|
+
* Seconds, or `'never'` for a token minted with NO `exp` claim.
|
|
17769
|
+
*
|
|
17770
|
+
* `'never'` is a literal rather than `undefined`/`0` because omitting
|
|
17771
|
+
* this field already means "the 5-minute SSO hand-off default", and
|
|
17772
|
+
* `jwt.sign` THROWS on `{ expiresIn: undefined }` — a "no expiry" that
|
|
17773
|
+
* went through the numeric path would fail at mint time and break
|
|
17774
|
+
* linking rather than produce an eternal token.
|
|
17775
|
+
*/
|
|
17776
|
+
ttlSec: z.union([z.number().int().positive(), z.literal("never")]).optional()
|
|
17570
17777
|
}), z.object({ token: z.string() })),
|
|
17571
17778
|
verifyBridgeToken: method(z.object({ token: z.string() }), SsoBridgeClaimsSchema.nullable())
|
|
17572
17779
|
}
|
|
@@ -26648,7 +26855,12 @@ var userManagementCapability = {
|
|
|
26648
26855
|
hubUrl: z.string(),
|
|
26649
26856
|
/** PKCE (RFC 7636) S256 challenge. Baked into the signed code; a code
|
|
26650
26857
|
* that carries one can ONLY be exchanged with the matching verifier. */
|
|
26651
|
-
codeChallenge: z.string().optional()
|
|
26858
|
+
codeChallenge: z.string().optional(),
|
|
26859
|
+
/** The integration's declared refresh lifetime — seconds, or `'never'`.
|
|
26860
|
+
* From `OauthIntegrationDescriptor.refreshTokenTtlSec`. Baked into the
|
|
26861
|
+
* code so the link carries its own lifetime; omit for the 30-day
|
|
26862
|
+
* default. */
|
|
26863
|
+
refreshTtlSec: z.union([z.number().int().positive(), z.literal("never")]).optional()
|
|
26652
26864
|
}), z.object({ code: z.string() }), {
|
|
26653
26865
|
kind: "mutation",
|
|
26654
26866
|
access: "create"
|
|
@@ -39577,4 +39789,4 @@ function enumerateInferenceDevices(hw) {
|
|
|
39577
39789
|
return out;
|
|
39578
39790
|
}
|
|
39579
39791
|
//#endregion
|
|
39580
|
-
export { ACCESSORY_LABEL, ALEXA_EGRESS_PROFILE, ALL_CAPABILITY_DEFINITIONS, APPLE_SA_TO_MACRO, AUDIO_ANALYSIS_CAP_NAME, AUDIO_BACKEND_CHOICES, AUDIO_MACRO_LABELS, AUDIO_PRESETS, AccessoriesStatusSchema, AccessoryKind, AddBrokerInputSchema, AddonAutoUpdateSchema, AddonListItemSchema, AddonPageDeclarationSchema, AddonPageInfoSchema, AdoptInputSchema as AdoptionAdoptInputSchema, AdoptResultSchema as AdoptionAdoptResultSchema, AdoptionCandidateResultSchema, AdoptionFilterSchema, GetCandidateInputSchema as AdoptionGetCandidateInputSchema, AdoptionJobSchema, AdoptionJobStateSchema, ListCandidatesInputSchema as AdoptionListCandidatesInputSchema, ListCandidatesOutputSchema as AdoptionListCandidatesOutputSchema, AdoptionOutcomeSchema, ReleaseInputSchema as AdoptionReleaseInputSchema, AdoptionStatusSchema, AgentLoadSummarySchema, AirQualitySensorStatusSchema, AlarmArmModeSchema, AlarmPanelStatusSchema, AlarmStateSchema, AlertSchema, AlertSeveritySchema, AlertSourceSchema, AlertStatusSchema, AmbientLightSensorStatusSchema, ApiKeyRecordSchema, ApiKeySummarySchema, ArchiveEntrySchema, ArchiveManifestSchema, AttachmentMediaTypeSchema, AttachmentSchema, AudioAnalysisResultSchema, AudioAnalysisSettingsSchema, AudioChunkInputSchema, AudioClassSummarySchema, AudioClassificationLabelSchema, AudioClassificationResultSchema, AudioCodecInfoSchema, AudioDecodeSessionConfigSchema, AudioEncodeSchema, AudioEncodeSessionConfigSchema, AudioEncodedChunkSchema, AudioEventSchema, AudioLevelSchema, AudioMetricsHistoryPointSchema, AudioMetricsHistorySchema, AudioMetricsSnapshotSchema, AudioPcmChunkSchema, AuthResultSchema, AutoUpdateSettingsSchema, AutomationActionSchema, AutomationConditionOperatorSchema, AutomationConditionSchema, AutomationControlStatusSchema, AutomationRecipeSchema, AutomationTriggerSchema, AvailableIntegrationTypeSchema, BACKEND_TO_FORMAT, BASE_LIVE_EGRESS_PROFILE, BATTERY_DEVICE_PROFILE, BacklightModeSchema, BackupDestinationInfoSchema, BackupEntrySchema, BaseAddon, BaseDevice, BaseDeviceProvider, BatteryStatusSchema, BinaryStatusSchema, BoundingBoxSchema, BrightnessStatusSchema, AddInputSchema as BrokerAddInputSchema, BrokerAudioClientSchema, BrokerClientsSchema, BrokerConnectionDetailsSchema, BrokerConsumerAttributionSchema, BrokerConsumerKindSchema, BrokerDecodedClientSchema, BrokerEncodedClientSchema, GetStateInputSchema as BrokerGetStateInputSchema, BrokerInfoSchema, BrokerProviderInfoSchema, PublishInputSchema as BrokerPublishInputSchema, RegistryStatusSchema as BrokerRegistryStatusSchema, BrokerRtspClientSchema, BrokerStatsSchema, BrokerStatusEnum, BrokerStatusSchema, SubscribeInputSchema as BrokerSubscribeInputSchema, SubscribeResultSchema as BrokerSubscribeResultSchema, TestConnectionResultSchema as BrokerTestConnectionResultSchema, UnsubscribeInputSchema as BrokerUnsubscribeInputSchema, CAMERA_SWITCH_CATALOG, CAMERA_SWITCH_ORDER, CAM_PROFILE_ORDER, CAPABILITY_NAMES, CAPABILITY_ROUTER_KEYS, CAP_NAMES_WITH_STATUS, CAP_NODE_PIN_CONTEXT_KEY, CAP_PROVIDER_KIND_MAP, COCO_80_LABELS, COCO_TO_MACRO, CONNECTION_TEST_TIMEOUT_MS, CORE_BLOCKS_ADDON_ID, CORE_BLOCK_ADDON_PREFIX, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusDegradationReasonSchema, CameraStatusDegradationSchema, CameraStatusSchema, CameraStatusStageSchema, CameraStreamSchema, CameraSwitchAuthoritySchema, CameraSwitchGroupSchema, CameraSwitchIdSchema, CameraSwitchSchema, CameraSwitchUnavailableReasonSchema, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CarbonMonoxideStatusSchema, ChargingStatus, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipPlaybackSchema, ClipSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, ConnectionTestDescriptorSchema, ConnectionTestInputSchema, ConnectionTestOutcomeSchema, ConnectivityStatusSchema, ConsumableItemSchema, ConsumablesStatusSchema, ContactStatusSchema, ControlKindSchema, ControlStatusSchema, ConvertArtifactSchema, ConvertResultSchema, ConvertTargetSchema, CoreBlockCompileResultSchema, CoreBlockInputSchema, CoreBlockPlacementSchema, CoreBlockSchema, CoreBlockStatusSchema, CoverStateSchema, CoverStatusSchema, CreateApiKeyInputSchema, CreateApiKeyResultSchema, CreateIntegrationInputSchema, CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, CreateUserInputSchema, CustomActionInputSchema, CustomModelDescriptorSchema, DATAPLANE_SECRET_HEADER, DECLARED_DEVICE_SWEEP_LIMIT, DECLARED_INTEGRATION_FIXED_KEY, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_DETAIL_CROP_CONVENTION, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_NATIVE_LEASE_SETTINGS, DEFAULT_RETENTION, DEFAULT_SCRUB_THUMBNAIL_PRESET, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, DETECTION_PIPELINE_CAP_NAME, DEVICE_BACKEND_TO_FORMAT, DEVICE_CAP_NAMES, DEVICE_PROFILES, DEVICE_SCOPED_CAPS, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATE_READERS, DEVICE_STATUS_METHOD, DEVICE_TYPE_CONTROL_KIND, DEVICE_TYPE_INFO, EngineInfoSchema as DataStoreEngineInfoSchema, DayNightModeSchema, DayNightOptionsSchema, DayNightSettingsPatchSchema, DayNightStatusSchema, DeclaredDevices, DecodedAudioChunkSchema, DecodedFrameSchema, DecoderSessionConfigSchema, DecoderStatsSchema, DeleteIntegrationResultSchema, DetailCropConventionSchema, DetectionSourceSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceDiscoveryStatusSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceInfoSchema, DeviceNetworkStatsSchema, DeviceRole, DeviceRuntimeState, DeviceStatusSchema, DeviceType, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EVENTFUL_CAP_NAMES, EVENT_KIND_BY_CAP, EVENT_PAD_MS, EVENT_TAXONOMY, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, EgressEncodeSchema, EgressRateControlSchema, EgressTranscodeRequestSchema, EgressTranscodeSchema, ElementConfigStore, EmbeddingInfoSchema, EmbeddingResultSchema, EncodeProfileSchema, EncodedPacketSchema, EnrichedWidgetMetadataSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, EventCategory, EventEmitterStatusSchema, EventFireSchema, EventItemSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventKindsForDeviceSchema, EventMediaArtifactSchema, EventMediaCoverageSchema, EventMediaKindSchema, EventMediaProductionSchema, EventSourceType, ExportDownloadSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionBindingSourceSchema, ExpressionEvalError, ExpressionFieldBindingSchema, ExpressionGlobalBindingSchema, ExpressionLiteralBindingSchema, ExpressionParseError, ExpressionSourceSchema, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FloodStatusSchema, Fmp4BoxSplitter, FrameHandleFormatSchema, FrameHandleSchema, FrameInputSchema, GasStatusSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, HAP_AUDIO_BASE, HAP_AUDIO_BITRATE_KBPS, HAP_AUDIO_VBV_KBITS, HAP_KEYFRAME_INTERVAL_SEC, HF_BASE_URL, HF_REPO, HWACCEL_OPTIONS, HealthStatusSchema, HistoryPointSchema, HistoryResolutionEnum, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, ImageContractSchema, ImageContractStateSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, IngestOwnerSchema, InstalledPackageSchema, IntegrationLiteSchema, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, KNOWN_CAP_NAMES, KeyEventSchema, LOG_LEVEL_RANK, LabelAttributionSchema, LabelDefinitionSchema, LabelTierSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, LinkedDevicesModeSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmNodeModelSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmUsageRollupSchema, LlmUsageSchema, LocateSegmentResultSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogEntrySchema, LogLevelSchema, LogStreamEntrySchema, LoginMethodContributionSchema, LoginStageEnum, MACRO_LABELS, MAX_CONDITION_DEPTH, MAX_CONDITION_LEAVES, MAX_EXPRESSION_AST_NODES, MAX_EXPRESSION_BINDINGS, MAX_EXPRESSION_CALL_ARGS, MAX_EXPRESSION_EVAL_STEPS, MAX_EXPRESSION_SOURCE_LENGTH, METHOD_ACCESS_MAP, MODEL_FORMATS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, ManagedModelRefSchema, ManagedRuntimeConfigSchema, MaskGridDimsSchema, MaskGridShapeSchema, MaskLineShapeSchema, MaskPointSchema, MaskPolygonShapeSchema, MaskPolygonVerticesSchema, MaskRectShapeSchema, MaskShapeKindSchema, MaskShapeSchema, MediaFileInfoSchema, MediaFileSchema, MediaPlayerRepeatSchema, MediaPlayerStateSchema, MediaPlayerStatusSchema, MeshPeerSchema, MeshStatusSchema, MethodAccessSchema, ModelCatalogEntrySchema, ModelConvertInputSchema, ModelConvertMetadataSchema, ModelDistributeInputSchema, ModelDistributeResultSchema, ModelExtraFileSchema, ModelFormatEntrySchema, ModelFormatsSchema, ModelSubstitutionSchema, ModelVariantGroupSchema, MotionAnalysisResultSchema, MotionEventSchema, MotionOnMotionChangedDataSchema, MotionRegionSchema, MotionSourceEnum, MotionSourcesSchema, MotionStatusSchema, MotionTriggerRuntimeStateSchema, MotionTriggerStatusSchema, MotionZoneOptionsSchema, MotionZonePatchSchema, MotionZoneRegionSchema, MotionZoneStatusSchema, StatusSchema as MqttBrokerStatusSchema, MutationFilterSchema, NATIVE_LEASE_ACTIVITY_FIELD, NATIVE_LEASE_ACTIVITY_KEY, NATIVE_LEASE_ADMISSION_FIELD, NATIVE_LEASE_ADMISSION_KEY, NATIVE_LEASE_BUDGET_FIELD, NATIVE_LEASE_BUDGET_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TTL_FIELD, NATIVE_LEASE_TTL_KEY, NC_BASE_CONDITION_KEYS, NC_CONDITION_CATALOG, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_MAX_PER_TRACK_IMMEDIATE, NC_SNOOZE_MAX_MINUTES, NC_TAXONOMY, NativeCropBboxSchema, NativeCropRefSchema, NativeCropResultSchema, NativeDetectionSchema, NativeLeaseAdmissionSchema, NativeLeaseSettingsSchema, NativeObjectClassEnum, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionStatusSchema, NcAlarmConfigSchema, NcAlarmModeCoverageSchema, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, NcConditionDescriptorSchema, NcConditionsSchema, NcCrossingSchema, NcDeliverySchema, NcDeviceStateConditionSchema, NcHistoryEntrySchema, NcHistoryFilterSchema, NcHistoryRecordKindSchema, NcHistoryStatusSchema, NcHistorySubjectSchema, NcMediaFrameSchema, NcMediaPolicySchema, NcOccupancyConditionSchema, NcPlateMatcherSchema, NcRuleActionSchema, NcRuleActionSequenceSchema, NcRuleActionsSchema, NcRuleInputSchema, NcRuleNotificationButtonSchema, NcRulePatchSchema, NcRuleSchema, NcRuleTargetSchema, NcScheduleSchema, NcScheduleWindowSchema, NcSnoozeInputSchema, NcSnoozeSchema, NcSnoozeScopeSchema, NcSnoozeSuppressedSchema, NcTaxonomyEntrySchema, NcTaxonomySchema, NcTestResultSchema, NcThrottleGranularitySchema, NcThrottleSchema, NcZoneConditionSchema, NetworkAccessStatusSchema, NetworkAddressSchema, NetworkEndpointSchema, NotificationActionIconSchema, NotificationActionSchema, NotificationFormatSchema, NotificationSchema, NotifierStatusSchema, NumericSensorStatusSchema, OPS_LOG_DEFAULT_LIMIT, OPS_LOG_RING_DEFAULT_MAX, OauthIntegrationDescriptorSchema, ObjectEventSchema, OpsLogDomainSchema, OpsLogEntrySchema, OpsLogOpSchema, OpsLogQueryInputSchema, OpsLogReasonSchema, OrchestratorMetricsSchema, OsdOverlayKindEnum, OsdOverlayPatchSchema, OsdOverlaySchema, OsdPositionEnum, OsdRenderOutcomeEnum, OsdRenderResultSchema, OsdSlotBindingSchema, OsdSlotViewSchema, OsdSourceOptionSchema, OsdSourceSchema, OsdSourceValueTypeEnum, OsdStatusSchema, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PRIVACY_MASK_CAP_NAME, PROVIDER_KIND_CAP_NAMES, PYTHON_SCRIPT, PackageUpdateSchema, PackageVersionInfoSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PolygonPointSchema, PowerMeterStatusSchema, PresenceStatusSchema, PressureSensorStatusSchema, PrivacyMaskOptionsSchema, PrivacyMaskPatchSchema, PrivacyMaskRegionSchema, PrivacyMaskShapeSchema, PrivacyMaskStatusSchema, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, ProviderStatusSchema, PtzAutotrackRuntimeStateSchema, PtzAutotrackSettingsSchema, PtzAutotrackStatusSchema, PtzAutotrackTargetOptionSchema, PtzMoveCommandSchema, PtzOptionsSchema, PtzPositionSchema, PtzPresetSchema, PtzStatusSchema, QueryFilterSchema, RATE_CONTROL_RELAXED, RATE_CONTROL_TIGHT, REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, RECOGNITION_TYPES, RESERVED_BINDING_NAMES, RUNTIME_DEFAULTS, RUNTIME_TO_FORMAT, RawStateResultSchema, ReadGopBytesResultSchema, ReadSegmentBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, RecentTracksPageSchema, RecentTracksQueryInput, RecordingAvailabilitySchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingRangeSchema, RecordingRetentionSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RedirectLoginMethodSchema, RelocateFootageInputSchema, RelocateJobSchema, RelocateJobStateSchema, RelocateMediaInputSchema, RenderedAsSchema, ReportMotionInputSchema, RetrainAnnotationDraftSchema, RetrainAnnotationKindSchema, RetrainAnnotationSchema, RetrainAnnotationSourceSchema, RetrainAssistResultSchema, RetrainAssistSubjectSchema, RetrainCopyRefusalSchema, RetrainFrameCandidateSchema, RetrainFrameListSchema, RetrainFrameSchema, RetrainFrameSelectionSchema, RetrainMacroClassSchema, RetrainStatusSchema, RetrainTrackSchema, RetrainTransitionResultSchema, RingBuffer, RtpSourceSchema, RtspRestreamEntrySchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerInferenceDeviceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, SCOPE_PRESETS, SCRUB_THUMBNAIL_PRESETS, SCRUB_THUMBNAIL_PRESET_LABELS, SCRUB_THUMBNAIL_PRESET_ORDER, SENSOR_FEATURES, SENSOR_MAP, SOURCE_INFO_METADATA_KEY, STREAM_PROFILE_META, STREAM_QUALITY_LABELS, SUB_DETECTION_TYPES, SYSTEM_CAP_NAMES, SceneCheckSchema, SceneConditionSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusSchema, SceneReferenceSchema, ScopedTokenSchema, ScopedTokenSummarySchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, ScrubThumbnailPresetSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateStateSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShmRingStatsSchema, SmokeStatusSchema, SmtpStatusSchema, SnapshotImageSchema, SourceInfoSchema, SpatialDetectionSchema, SsoBridgeClaimsSchema, StartEmbeddedInputSchema, StationaryObjectSchema, AbortUploadInputSchema as StorageAbortUploadInputSchema, BeginDownloadInputSchema as StorageBeginDownloadInputSchema, BeginDownloadResultSchema as StorageBeginDownloadResultSchema, BeginUploadInputSchema as StorageBeginUploadInputSchema, BeginUploadResultSchema as StorageBeginUploadResultSchema, EndDownloadInputSchema as StorageEndDownloadInputSchema, FinalizeUploadInputSchema as StorageFinalizeUploadInputSchema, StorageLocationDeclarationSchema, StorageLocationRefSchema, StorageLocationSchema, StorageLocationTypeSchema, ProviderInfoSchema as StorageProviderInfoSchema, ReadChunkInputSchema as StorageReadChunkInputSchema, TestLocationResultSchema as StorageTestLocationResultSchema, WriteChunkInputSchema as StorageWriteChunkInputSchema, StreamCodecSchema, StreamFormatSchema, StreamNetworkStatsSchema, StreamParamsOptionsSchema, StreamParamsStatusSchema, StreamProfileConfigSchema, StreamProfileOptionsSchema, StreamProfilePatchSchema, StreamProfileSchema, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, SwitchStatusSchema, SystemMetricsSchema, SystemMirror, TAXONOMY_COLORS, TIMEZONES, TRANSCODE_DOWN_MAX_BITRATE_KBPS, TRANSCODE_DOWN_MAX_HEIGHT, TamperStatusSchema, TankStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TerminalProfileInfoSchema, TerminalSessionInfoSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestConnectionStatusEnum, TestResultSchema, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackFlagsPatchSchema, TrackFlagsSchema, TrackProjectionSchema, TrackSchema, TrackSourceSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TrainingExportDeviceTotalsSchema, TrainingExportSummarySchema, TurnServerSchema, UNIT_TABLE, BrokerInfoSchema$1 as UnifiedBrokerInfoSchema, UnitConversionError, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserSummarySchema, VacuumControlStatusSchema, VacuumStateSchema, ValveStateSchema, ValveStatusSchema, VectorDeclareIndexInputSchema, VectorDeleteByFilterInputSchema, VectorDeleteInputSchema, VectorDeleteResultSchema, VectorFilterSchema, VectorGetInputSchema, VectorGetResultSchema, VectorItemSchema, VectorMatchSchema, VectorMetadataSchema, VectorMetricSchema, VectorQueryInputSchema, VectorQueryResultSchema, VectorStatsInputSchema, VectorStatsResultSchema, VectorUpsertInputSchema, VectorUpsertResultSchema, VibrationStatusSchema, VideoEncodeSchema, WEBRTC_EGRESS_PROFILE, WELL_KNOWN_TABS, WELL_KNOWN_TAB_MAP, WaterHeaterStatusSchema, WeatherStatusSchema, WebrtcStreamChoiceSchema, WebrtcStreamTargetSchema, WhiteBalanceModeSchema, WidgetHostEnum, WidgetLoginMethodSchema, WidgetMetadataSchema, WidgetRemoteSchema, WidgetSizeEnum, YAMNET_TO_MACRO, ZoneCrossingDirectionSchema, ZoneCrossingSchema, ZoneKindEnum, ZoneRuleModeEnum, ZoneRuleSchema, ZoneRuleStageEnum, ZoneRulesArraySchema, ZoneSchema, ZoneScopeBreakdownSchema, accessoriesCapability, accessoryStableId, addonPagesCapability, addonPagesSourceCapability, addonRoutesCapability, addonSettingsCapability, addonWidgetsCapability, addonWidgetsSourceCapability, addonsCapability, adminUiCapability, airQualitySensorCapability, alarmPanelCapability, alertsCapability, ambientLightSensorCapability, asBoolean, asJsonArray, asJsonObject, asNumber, asString, audioAnalysisCapability, audioAnalyzerCapability, audioCodecCapability, audioMetricsCapability, audioPlanFromEncodeProfile, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, bareAddonId, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, buildAddonRouteProvider, buildAudioArgs, buildEventKindDescriptor, buildFfmpegArgs, buildInputArgs, buildModelVariantGroups, buildNcTaxonomy, buildStreamParamsConfigSchema, buildVideoArgs, buttonCapability, cameraCredentialsCapability, cameraPipelineConfigCapability, cameraStreamsCapability, canConvertUnit, canonicalEgressPlan, carbonMonoxideCapability, cellsToRects, classifyStream, classifyStreams, climateControlCapability, collectHydratedFieldEntries, collectHydratedFieldValues, colorCapability, colorForKind, compileExpression, compileExpressionSafe, conditionDepth, connectionTestCapability, connectivityCapability, consumablesCapability, contactCapability, controlCapability, convertUnit, coreBlockAddonId, coreBlockIdFromAddonId, coreBlocksCapability, cosineSimilarity, countConditionLeaves, coverCapability, createDeviceProxy, createDurableState, createEvent, createExpressionScope, createHwAccelCache, createLazyTrpcSource, createMirrorSource, createRuntimeStateBridge, createSliceHandle, createSystemProxy, customAction, customModelRegistryCapability, dataStoreProviderCapability, dayNightCapability, declarationOwnerNodeId, decodeVectorBase64, decoderCapability, defaultDeviceFor, defineCustomActions, deriveCameraSwitches, deriveDetailCropRect, deriveRecordingMode, describeModelVariant, detectionPipelineCapability, deviceAdoptionCapability, deviceBackendToFormat, deviceCustomAction, deviceDiscoveryCapability, deviceExportCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceStateCapability, deviceStatusCapability, doorbellCapability, egressTranscodeSharingKey, egressTransportFromRequest, embeddingEncoderCapability, emitDownForOwnedCaps, emitReadiness, encodeProfileFromStreamShape, encodeVectorBase64, enumSensorCapability, enumerateInferenceDevices, enumerateItemArrayFields, enumerateSchemaFields, errMsg, evaluateAst, evaluateExpressionSource, evaluateZoneRules, event, eventEmitterCapability, eventsCapability, expandCapMethods, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, fanControlCapability, featureProbeCapability, filesystemBrowseCapability, findTimezone, floodCapability, formatForBackend, formatForRuntime, gasCapability, generateAutomationBlock, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getTaxonomyEntry, hasMotionTrigger, hfModelUrl, htmlToText, humidifierCapability, humiditySensorCapability, hydrateSchema, imageCapability, imageSettingsCapability, integrationsCapability, intercomCapability, invocationFromEncodeProfile, isAgentOnlyPlacement, isArrayOutputSchema, isBaseConditionKey, isCollectionArrayMethod, isDeployableToAgent, isDeviceConfigCap, isDeviceScopedCap, isEvent, isNode, isObjectInput, isSameAddonId, isScheduleActive, isSoftwareDecode, isVoidInput, jobKindSchema, kebabToCamel, knownValues, lawnMowerControlCapability, lifecycleJobSchema, lifecycleJobScopeSchema, lifecycleJobStateSchema, lifecycleTaskSchema, llmCapability, llmRuntimeCapability, localNetworkCapability, locationSimilarity, lockControlCapability, logBannerArgs, logDestinationCapability, logLevelAtMost, loginMethodCapability, looseSchema, makeProfileBrokerId, makeSourceBrokerId, mapAudioLabelToMacro, markdownToHtmlLite, markdownToText, maskUrlCredentials, mediaPlayerCapability, mergeSourceInfo, meshNetworkCapability, method, metricsProviderCapability, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, motionCapability, motionDetectionCapability, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, networkAccessCapability, networkQualityCapability, nodePin, nodesCapability, normalizeAddonInitResult, normalizeUnit, notificationOutputCapability, notificationRulesCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, objectInputDeclaresAddonId, osdCapability, osdManagerCapability, parseCameraStreamConfig, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseProfileBrokerId, parseStreamParamsFormPatch, petFeederCapability, pickAccessoryControl, pickDetailCropConvention, pickNativeLeaseOverride, pickPreferredRtspEntry, pickVideoEncoder, pickerForCondition, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, plateGalleryCapability, platformProbeCapability, powerMeterCapability, prepareNotification, presenceCapability, pressureSensorCapability, privacyMaskCapability, procedureAuthKey, ptzAutotrackCapability, ptzCapability, pythonScriptForBackend, readDetailCropConvention, readDeviceStateFrom, readNativeLeaseOverride, readNodePin, readinessKey, rebootCapability, recordingCapability, recordingExportCapability, rectsToCells, requiresPython, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAddonRuntime, resolveCapMount, resolveDetectionRuntime, resolveDeviceControlKind, resolveDeviceProfile, resolveEgressDecodeHwAccel, resolveFormat, resolveHydratedFieldValue, resolveModelFormat, resolveMutate, resolveRunnerId, resolveScrubThumbnailGeometry, resolveVariantModelId, runInferenceStep, runtimeDevices, sceneMonitorCapability, scopeKey, scoreRuntimes, scriptRunnerCapability, selectAssignedProfileSlots, serverManagementCapability, setByPath, settingsStoreCapability, sleep, sleepCancellable, smokeCapability, smtpProviderCapability, snapshotCapability, ssoBridgeCapability, startReachabilityPoll, stateVocabularyFor, storageCapability, storageEvictableCapability, storageProviderCapability, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, subKindsOf, summarisePrivacyAudio, supportedRuntimes, switchCapability, switchedOffIds, synthesizeSourceInfo, systemCapability, tamperCapability, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, terminalSessionCapability, textToHtml, toDeviceSummary, toExpressionValue, toNodeId, toStreamSourceEntry, toastCapability, tokenize, transcodeBody, tryConvertUnit, turnProviderCapability, unitDimension, unitsForDimension, updateCapability, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateExpressionSource, validateRecipeBounds, valveCapability, vectorDimFromBase64, vectorStoreCapability, vibrationCapability, videoclipsCapability, viewerUiCapability, waterHeaterCapability, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
|
|
39792
|
+
export { ACCESSORY_LABEL, ALEXA_EGRESS_PROFILE, ALL_CAPABILITY_DEFINITIONS, APPLE_SA_TO_MACRO, AUDIO_ANALYSIS_CAP_NAME, AUDIO_BACKEND_CHOICES, AUDIO_MACRO_LABELS, AUDIO_PRESETS, AccessoriesStatusSchema, AccessoryKind, AddBrokerInputSchema, AddonAutoUpdateSchema, AddonListItemSchema, AddonPageDeclarationSchema, AddonPageInfoSchema, AdoptInputSchema as AdoptionAdoptInputSchema, AdoptResultSchema as AdoptionAdoptResultSchema, AdoptionCandidateResultSchema, AdoptionFilterSchema, GetCandidateInputSchema as AdoptionGetCandidateInputSchema, AdoptionJobSchema, AdoptionJobStateSchema, ListCandidatesInputSchema as AdoptionListCandidatesInputSchema, ListCandidatesOutputSchema as AdoptionListCandidatesOutputSchema, AdoptionOutcomeSchema, ReleaseInputSchema as AdoptionReleaseInputSchema, AdoptionStatusSchema, AgentLoadSummarySchema, AirQualitySensorStatusSchema, AlarmArmModeSchema, AlarmPanelStatusSchema, AlarmStateSchema, AlertSchema, AlertSeveritySchema, AlertSourceSchema, AlertStatusSchema, AmbientLightSensorStatusSchema, ApiKeyRecordSchema, ApiKeySummarySchema, ArchiveEntrySchema, ArchiveManifestSchema, AttachmentMediaTypeSchema, AttachmentSchema, AudioAnalysisResultSchema, AudioAnalysisSettingsSchema, AudioChunkInputSchema, AudioClassSummarySchema, AudioClassificationLabelSchema, AudioClassificationResultSchema, AudioCodecInfoSchema, AudioDecodeSessionConfigSchema, AudioEncodeSchema, AudioEncodeSessionConfigSchema, AudioEncodedChunkSchema, AudioEventSchema, AudioLevelSchema, AudioMetricsHistoryPointSchema, AudioMetricsHistorySchema, AudioMetricsSnapshotSchema, AudioPcmChunkSchema, AuthResultSchema, AutoUpdateSettingsSchema, AutomationActionSchema, AutomationConditionOperatorSchema, AutomationConditionSchema, AutomationControlStatusSchema, AutomationRecipeSchema, AutomationTriggerSchema, AvailableIntegrationTypeSchema, BACKEND_TO_FORMAT, BASE_LIVE_EGRESS_PROFILE, BATTERY_DEVICE_PROFILE, BacklightModeSchema, BackupDestinationInfoSchema, BackupEntrySchema, BaseAddon, BaseDevice, BaseDeviceProvider, BatteryStatusSchema, BinaryStatusSchema, BoundingBoxSchema, BrightnessStatusSchema, AddInputSchema as BrokerAddInputSchema, BrokerAudioClientSchema, BrokerClientsSchema, BrokerConnectionDetailsSchema, BrokerConsumerAttributionSchema, BrokerConsumerKindSchema, BrokerDecodedClientSchema, BrokerEncodedClientSchema, GetStateInputSchema as BrokerGetStateInputSchema, BrokerInfoSchema, BrokerProviderInfoSchema, PublishInputSchema as BrokerPublishInputSchema, RegistryStatusSchema as BrokerRegistryStatusSchema, BrokerRtspClientSchema, BrokerStatsSchema, BrokerStatusEnum, BrokerStatusSchema, SubscribeInputSchema as BrokerSubscribeInputSchema, SubscribeResultSchema as BrokerSubscribeResultSchema, TestConnectionResultSchema as BrokerTestConnectionResultSchema, UnsubscribeInputSchema as BrokerUnsubscribeInputSchema, CAMERA_SWITCH_CATALOG, CAMERA_SWITCH_ORDER, CAM_PROFILE_ORDER, CAPABILITY_NAMES, CAPABILITY_ROUTER_KEYS, CAP_NAMES_WITH_STATUS, CAP_NODE_PIN_CONTEXT_KEY, CAP_PROVIDER_KIND_MAP, COCO_80_LABELS, COCO_TO_MACRO, CONNECTION_TEST_TIMEOUT_MS, CORE_BLOCKS_ADDON_ID, CORE_BLOCK_ADDON_PREFIX, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusDegradationReasonSchema, CameraStatusDegradationSchema, CameraStatusSchema, CameraStatusStageSchema, CameraStreamSchema, CameraSwitchAuthoritySchema, CameraSwitchGroupSchema, CameraSwitchIdSchema, CameraSwitchSchema, CameraSwitchUnavailableReasonSchema, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CarbonMonoxideStatusSchema, ChargingStatus, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipPlaybackSchema, ClipSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, ConnectionTestDescriptorSchema, ConnectionTestInputSchema, ConnectionTestOutcomeSchema, ConnectivityStatusSchema, ConsumableItemSchema, ConsumablesStatusSchema, ContactStatusSchema, ControlKindSchema, ControlStatusSchema, ConvertArtifactSchema, ConvertResultSchema, ConvertTargetSchema, CoreBlockCompileResultSchema, CoreBlockInputSchema, CoreBlockPlacementSchema, CoreBlockSchema, CoreBlockStatusSchema, CoverStateSchema, CoverStatusSchema, CreateApiKeyInputSchema, CreateApiKeyResultSchema, CreateIntegrationInputSchema, CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, CreateUserInputSchema, CustomActionInputSchema, CustomModelDescriptorSchema, DATAPLANE_SECRET_HEADER, DECLARED_DEVICE_SWEEP_LIMIT, DECLARED_INTEGRATION_FIXED_KEY, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_DETAIL_CROP_CONVENTION, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_NATIVE_LEASE_SETTINGS, DEFAULT_RETENTION, DEFAULT_SCRUB_THUMBNAIL_PRESET, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, DETECTION_PIPELINE_CAP_NAME, DEVICE_BACKEND_TO_FORMAT, DEVICE_CAP_NAMES, DEVICE_PROFILES, DEVICE_SCOPED_CAPS, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATE_READERS, DEVICE_STATUS_METHOD, DEVICE_TYPE_CONTROL_KIND, DEVICE_TYPE_INFO, EngineInfoSchema as DataStoreEngineInfoSchema, DayNightModeSchema, DayNightOptionsSchema, DayNightSettingsPatchSchema, DayNightStatusSchema, DeclaredDevices, DecodedAudioChunkSchema, DecodedFrameSchema, DecoderSessionConfigSchema, DecoderStatsSchema, DeleteIntegrationResultSchema, DetailCropConventionSchema, DetectionSourceSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceDiscoveryStatusSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceInfoSchema, DeviceNetworkStatsSchema, DeviceRole, DeviceRuntimeState, DeviceStatusSchema, DeviceType, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EVENTFUL_CAP_NAMES, EVENT_KIND_BY_CAP, EVENT_PAD_MS, EVENT_TAXONOMY, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, EgressEncodeSchema, EgressRateControlSchema, EgressTranscodeRequestSchema, EgressTranscodeSchema, ElementConfigStore, EmbeddingInfoSchema, EmbeddingResultSchema, EncodeProfileSchema, EncodedPacketSchema, EnrichedWidgetMetadataSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, EventCategory, EventEmitterStatusSchema, EventFireSchema, EventItemSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventKindsForDeviceSchema, EventMediaArtifactSchema, EventMediaCoverageSchema, EventMediaKindSchema, EventMediaProductionSchema, EventSourceType, ExportDownloadSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionBindingSourceSchema, ExpressionEvalError, ExpressionFieldBindingSchema, ExpressionGlobalBindingSchema, ExpressionLiteralBindingSchema, ExpressionParseError, ExpressionSourceSchema, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FloodStatusSchema, Fmp4BoxSplitter, FrameHandleFormatSchema, FrameHandleSchema, FrameInputSchema, GasStatusSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, HAP_AUDIO_BASE, HAP_AUDIO_BITRATE_KBPS, HAP_AUDIO_VBV_KBITS, HAP_KEYFRAME_INTERVAL_SEC, HF_BASE_URL, HF_REPO, HWACCEL_OPTIONS, HealthStatusSchema, HistoryPointSchema, HistoryResolutionEnum, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, ImageContractSchema, ImageContractStateSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, IngestOwnerSchema, InstalledPackageSchema, IntegrationLiteSchema, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, KNOWN_CAP_NAMES, KeyEventSchema, LOG_LEVEL_RANK, LabelAttributionSchema, LabelDefinitionSchema, LabelTierSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, LinkedDevicesModeSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmNodeModelSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmUsageRollupSchema, LlmUsageSchema, LocateSegmentResultSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogEntrySchema, LogLevelSchema, LogStreamEntrySchema, LoginMethodContributionSchema, LoginStageEnum, MACRO_LABELS, MAX_CONDITION_DEPTH, MAX_CONDITION_LEAVES, MAX_EXPRESSION_AST_NODES, MAX_EXPRESSION_BINDINGS, MAX_EXPRESSION_CALL_ARGS, MAX_EXPRESSION_EVAL_STEPS, MAX_EXPRESSION_SOURCE_LENGTH, METHOD_ACCESS_MAP, MODEL_FORMATS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, ManagedModelRefSchema, ManagedRuntimeConfigSchema, MaskGridDimsSchema, MaskGridShapeSchema, MaskLineShapeSchema, MaskPointSchema, MaskPolygonShapeSchema, MaskPolygonVerticesSchema, MaskRectShapeSchema, MaskShapeKindSchema, MaskShapeSchema, MediaFileInfoSchema, MediaFileSchema, MediaPlayerRepeatSchema, MediaPlayerStateSchema, MediaPlayerStatusSchema, MeshPeerSchema, MeshStatusSchema, MethodAccessSchema, ModelCatalogEntrySchema, ModelConvertInputSchema, ModelConvertMetadataSchema, ModelDistributeInputSchema, ModelDistributeResultSchema, ModelExtraFileSchema, ModelFormatEntrySchema, ModelFormatsSchema, ModelSubstitutionSchema, ModelVariantGroupSchema, MotionAnalysisResultSchema, MotionEventSchema, MotionOnMotionChangedDataSchema, MotionRegionSchema, MotionSourceEnum, MotionSourcesSchema, MotionStatusSchema, MotionTriggerRuntimeStateSchema, MotionTriggerStatusSchema, MotionZoneOptionsSchema, MotionZonePatchSchema, MotionZoneRegionSchema, MotionZoneStatusSchema, StatusSchema as MqttBrokerStatusSchema, MutationFilterSchema, NATIVE_LEASE_ACTIVITY_FIELD, NATIVE_LEASE_ACTIVITY_KEY, NATIVE_LEASE_ADMISSION_FIELD, NATIVE_LEASE_ADMISSION_KEY, NATIVE_LEASE_BUDGET_FIELD, NATIVE_LEASE_BUDGET_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TTL_FIELD, NATIVE_LEASE_TTL_KEY, NC_BASE_CONDITION_KEYS, NC_CONDITION_CATALOG, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_MAX_PER_TRACK_IMMEDIATE, NC_SNOOZE_MAX_MINUTES, NC_TAXONOMY, NativeCropBboxSchema, NativeCropRefSchema, NativeCropResultSchema, NativeDetectionSchema, NativeLeaseAdmissionSchema, NativeLeaseSettingsSchema, NativeObjectClassEnum, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionStatusSchema, NcAlarmConfigSchema, NcAlarmModeCoverageSchema, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, NcConditionDescriptorSchema, NcConditionsSchema, NcCrossingSchema, NcDeliverySchema, NcDeviceStateConditionSchema, NcHistoryEntrySchema, NcHistoryFilterSchema, NcHistoryRecordKindSchema, NcHistoryStatusSchema, NcHistorySubjectSchema, NcMediaFrameSchema, NcMediaPolicySchema, NcOccupancyConditionSchema, NcPlateMatcherSchema, NcRuleActionSchema, NcRuleActionSequenceSchema, NcRuleActionsSchema, NcRuleInputSchema, NcRuleNotificationButtonSchema, NcRulePatchSchema, NcRuleSchema, NcRuleTargetSchema, NcScheduleSchema, NcScheduleWindowSchema, NcSnoozeInputSchema, NcSnoozeSchema, NcSnoozeScopeSchema, NcSnoozeSuppressedSchema, NcTaxonomyEntrySchema, NcTaxonomySchema, NcTestResultSchema, NcThrottleGranularitySchema, NcThrottleSchema, NcZoneConditionSchema, NetworkAccessStatusSchema, NetworkAddressSchema, NetworkEndpointSchema, NotificationActionIconSchema, NotificationActionSchema, NotificationFormatSchema, NotificationSchema, NotifierStatusSchema, NumericSensorStatusSchema, OPS_LOG_DEFAULT_LIMIT, OPS_LOG_RING_DEFAULT_MAX, OauthIntegrationDescriptorSchema, ObjectEventSchema, OpsLogDomainSchema, OpsLogEntrySchema, OpsLogOpSchema, OpsLogQueryInputSchema, OpsLogReasonSchema, OrchestratorMetricsSchema, OsdOverlayKindEnum, OsdOverlayPatchSchema, OsdOverlaySchema, OsdPositionEnum, OsdRenderOutcomeEnum, OsdRenderResultSchema, OsdSlotBindingSchema, OsdSlotViewSchema, OsdSourceOptionSchema, OsdSourceSchema, OsdSourceValueTypeEnum, OsdStatusSchema, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PRIVACY_MASK_CAP_NAME, PROVIDER_KIND_CAP_NAMES, PYTHON_SCRIPT, PackageUpdateSchema, PackageVersionInfoSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PolygonPointSchema, PowerMeterStatusSchema, PresenceStatusSchema, PressureSensorStatusSchema, PrivacyMaskOptionsSchema, PrivacyMaskPatchSchema, PrivacyMaskRegionSchema, PrivacyMaskShapeSchema, PrivacyMaskStatusSchema, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, ProviderStatusSchema, PtzAutotrackRuntimeStateSchema, PtzAutotrackSettingsSchema, PtzAutotrackStatusSchema, PtzAutotrackTargetOptionSchema, PtzMoveCommandSchema, PtzOptionsSchema, PtzPositionSchema, PtzPresetSchema, PtzStatusSchema, QueryFilterSchema, RATE_CONTROL_RELAXED, RATE_CONTROL_TIGHT, REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, RECOGNITION_TYPES, RESERVED_BINDING_NAMES, RUNTIME_DEFAULTS, RUNTIME_TO_FORMAT, RawStateResultSchema, ReadGopBytesResultSchema, ReadSegmentBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, RecentTracksPageSchema, RecentTracksQueryInput, RecordingAvailabilitySchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingRangeSchema, RecordingRetentionSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RedirectLoginMethodSchema, RelocateFootageInputSchema, RelocateJobSchema, RelocateJobStateSchema, RelocateMediaInputSchema, RenderedAsSchema, ReportMotionInputSchema, RetrainAnnotationDraftSchema, RetrainAnnotationKindSchema, RetrainAnnotationSchema, RetrainAnnotationSourceSchema, RetrainAssistResultSchema, RetrainAssistSubjectSchema, RetrainCopyRefusalSchema, RetrainFrameCandidateSchema, RetrainFrameListSchema, RetrainFrameSchema, RetrainFrameSelectionSchema, RetrainMacroClassSchema, RetrainStatusSchema, RetrainTrackSchema, RetrainTransitionResultSchema, RingBuffer, RtpSourceSchema, RtspRestreamEntrySchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerInferenceDeviceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, SCOPE_PRESETS, SCRUB_THUMBNAIL_PRESETS, SCRUB_THUMBNAIL_PRESET_LABELS, SCRUB_THUMBNAIL_PRESET_ORDER, SENSOR_FEATURES, SENSOR_MAP, SOURCE_INFO_METADATA_KEY, STREAM_PROFILE_META, STREAM_QUALITY_LABELS, SUB_DETECTION_TYPES, SYSTEM_CAP_NAMES, SceneCheckSchema, SceneConditionSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusSchema, SceneReferenceSchema, ScopedTokenSchema, ScopedTokenSummarySchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, ScrubThumbnailPresetSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateStateSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShmRingStatsSchema, SmokeStatusSchema, SmtpStatusSchema, SnapshotImageSchema, SourceInfoSchema, SpatialDetectionSchema, SsoBridgeClaimsSchema, StartEmbeddedInputSchema, StationaryObjectSchema, AbortUploadInputSchema as StorageAbortUploadInputSchema, BeginDownloadInputSchema as StorageBeginDownloadInputSchema, BeginDownloadResultSchema as StorageBeginDownloadResultSchema, BeginUploadInputSchema as StorageBeginUploadInputSchema, BeginUploadResultSchema as StorageBeginUploadResultSchema, EndDownloadInputSchema as StorageEndDownloadInputSchema, FinalizeUploadInputSchema as StorageFinalizeUploadInputSchema, StorageLocationDeclarationSchema, StorageLocationRefSchema, StorageLocationSchema, StorageLocationTypeSchema, ProviderInfoSchema as StorageProviderInfoSchema, ReadChunkInputSchema as StorageReadChunkInputSchema, TestLocationResultSchema as StorageTestLocationResultSchema, WriteChunkInputSchema as StorageWriteChunkInputSchema, StreamCodecSchema, StreamFormatSchema, StreamNetworkStatsSchema, StreamParamsOptionsSchema, StreamParamsStatusSchema, StreamProfileConfigSchema, StreamProfileOptionsSchema, StreamProfilePatchSchema, StreamProfileSchema, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, SwitchStatusSchema, SystemMetricsSchema, SystemMirror, TAXONOMY_COLORS, TIMEZONES, TRANSCODE_DOWN_MAX_BITRATE_KBPS, TRANSCODE_DOWN_MAX_HEIGHT, TamperStatusSchema, TankStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TerminalProfileInfoSchema, TerminalSessionInfoSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestConnectionStatusEnum, TestResultSchema, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackFlagsPatchSchema, TrackFlagsSchema, TrackProjectionSchema, TrackSchema, TrackSourceSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TrainingExportDeviceTotalsSchema, TrainingExportSummarySchema, TurnServerSchema, UNIT_TABLE, BrokerInfoSchema$1 as UnifiedBrokerInfoSchema, UnitConversionError, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserSummarySchema, VacuumControlStatusSchema, VacuumStateSchema, ValveStateSchema, ValveStatusSchema, VectorDeclareIndexInputSchema, VectorDeleteByFilterInputSchema, VectorDeleteInputSchema, VectorDeleteResultSchema, VectorFilterSchema, VectorGetInputSchema, VectorGetResultSchema, VectorItemSchema, VectorMatchSchema, VectorMetadataSchema, VectorMetricSchema, VectorQueryInputSchema, VectorQueryResultSchema, VectorStatsInputSchema, VectorStatsResultSchema, VectorUpsertInputSchema, VectorUpsertResultSchema, VibrationStatusSchema, VideoEncodeSchema, WEBRTC_EGRESS_PROFILE, WELL_KNOWN_TABS, WELL_KNOWN_TAB_MAP, WaterHeaterStatusSchema, WeatherStatusSchema, WebrtcStreamChoiceSchema, WebrtcStreamTargetSchema, WhiteBalanceModeSchema, WidgetHostEnum, WidgetLoginMethodSchema, WidgetMetadataSchema, WidgetRemoteSchema, WidgetSizeEnum, YAMNET_TO_MACRO, ZoneCrossingDirectionSchema, ZoneCrossingSchema, ZoneKindEnum, ZoneRuleModeEnum, ZoneRuleSchema, ZoneRuleStageEnum, ZoneRulesArraySchema, ZoneSchema, ZoneScopeBreakdownSchema, accessoriesCapability, accessoryStableId, addonPagesCapability, addonPagesSourceCapability, addonRoutesCapability, addonSettingsCapability, addonWidgetsCapability, addonWidgetsSourceCapability, addonsCapability, adminUiCapability, airQualitySensorCapability, alarmPanelCapability, alertsCapability, ambientLightSensorCapability, asBoolean, asJsonArray, asJsonObject, asNumber, asString, audioAnalysisCapability, audioAnalyzerCapability, audioCodecCapability, audioMetricsCapability, audioPlanFromEncodeProfile, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, bareAddonId, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, buildAddonRouteProvider, buildAudioArgs, buildEventKindDescriptor, buildFfmpegArgs, buildInputArgs, buildModelVariantGroups, buildNcTaxonomy, buildStreamParamsConfigSchema, buildVideoArgs, buttonCapability, cameraCredentialsCapability, cameraPipelineConfigCapability, cameraStreamsCapability, canConvertUnit, canonicalEgressPlan, carbonMonoxideCapability, cellsToRects, classifyBearerPrincipal, classifyStream, classifyStreams, climateControlCapability, collectHydratedFieldEntries, collectHydratedFieldValues, colorCapability, colorForKind, compileExpression, compileExpressionSafe, conditionDepth, connectionTestCapability, connectivityCapability, consumablesCapability, contactCapability, controlCapability, convertUnit, coreBlockAddonId, coreBlockIdFromAddonId, coreBlocksCapability, cosineSimilarity, countConditionLeaves, coverCapability, createDeviceProxy, createDurableState, createEvent, createExpressionScope, createHwAccelCache, createLazyTrpcSource, createMirrorSource, createRuntimeStateBridge, createSliceHandle, createSystemProxy, customAction, customModelRegistryCapability, dataStoreProviderCapability, dayNightCapability, declarationOwnerNodeId, decodeVectorBase64, decoderCapability, defaultDeviceFor, defineCustomActions, deriveCameraSwitches, deriveDetailCropRect, deriveRecordingMode, describeModelVariant, detectionPipelineCapability, deviceAdoptionCapability, deviceBackendToFormat, deviceCustomAction, deviceDiscoveryCapability, deviceExportCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceStateCapability, deviceStatusCapability, doorbellCapability, egressTranscodeSharingKey, egressTransportFromRequest, embeddingEncoderCapability, emitDownForOwnedCaps, emitReadiness, encodeProfileFromStreamShape, encodeVectorBase64, enumSensorCapability, enumerateInferenceDevices, enumerateItemArrayFields, enumerateSchemaFields, errMsg, evaluateAst, evaluateExpressionSource, evaluateZoneRules, event, eventEmitterCapability, eventsCapability, expandCapMethods, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, fanControlCapability, featureProbeCapability, filesystemBrowseCapability, findTimezone, floodCapability, formatForBackend, formatForRuntime, gasCapability, generateAutomationBlock, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getTaxonomyEntry, hasMotionTrigger, hfModelUrl, htmlToText, humidifierCapability, humiditySensorCapability, hydrateSchema, imageCapability, imageSettingsCapability, integrationsCapability, intercomCapability, invocationFromEncodeProfile, isAgentOnlyPlacement, isArrayOutputSchema, isBaseConditionKey, isCollectionArrayMethod, isDeployableToAgent, isDeviceConfigCap, isDeviceScopedCap, isEvent, isNode, isObjectInput, isSameAddonId, isScheduleActive, isSoftwareDecode, isVoidInput, jobKindSchema, kebabToCamel, knownValues, lawnMowerControlCapability, lifecycleJobSchema, lifecycleJobScopeSchema, lifecycleJobStateSchema, lifecycleTaskSchema, llmCapability, llmRuntimeCapability, localNetworkCapability, locationSimilarity, lockControlCapability, logBannerArgs, logDestinationCapability, logLevelAtMost, loginMethodCapability, looseSchema, makeProfileBrokerId, makeSourceBrokerId, mapAudioLabelToMacro, markdownToHtmlLite, markdownToText, maskUrlCredentials, mediaPlayerCapability, mergeSourceInfo, meshNetworkCapability, method, methodAccessForHttpMethod, metricsProviderCapability, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, motionCapability, motionDetectionCapability, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, networkAccessCapability, networkQualityCapability, nodePin, nodesCapability, normalizeAddonInitResult, normalizeUnit, notificationOutputCapability, notificationRulesCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, objectInputDeclaresAddonId, osdCapability, osdManagerCapability, parseCameraStreamConfig, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseProfileBrokerId, parseStreamParamsFormPatch, petFeederCapability, pickAccessoryControl, pickDetailCropConvention, pickNativeLeaseOverride, pickPreferredRtspEntry, pickVideoEncoder, pickerForCondition, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, plateGalleryCapability, platformProbeCapability, powerMeterCapability, prepareNotification, presenceCapability, pressureSensorCapability, principalMayReachAddon, privacyMaskCapability, procedureAuthKey, ptzAutotrackCapability, ptzCapability, pythonScriptForBackend, readDetailCropConvention, readDeviceStateFrom, readNativeLeaseOverride, readNodePin, readinessKey, rebootCapability, recordingCapability, recordingExportCapability, rectsToCells, requiresPython, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAddonRuntime, resolveCapMount, resolveDetectionRuntime, resolveDeviceControlKind, resolveDeviceProfile, resolveEgressDecodeHwAccel, resolveFormat, resolveHydratedFieldValue, resolveModelFormat, resolveMutate, resolveRunnerId, resolveScrubThumbnailGeometry, resolveVariantModelId, runInferenceStep, runtimeDevices, sceneMonitorCapability, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, scoreRuntimes, scriptRunnerCapability, selectAssignedProfileSlots, serverManagementCapability, setByPath, settingsStoreCapability, sleep, sleepCancellable, smokeCapability, smtpProviderCapability, snapshotCapability, ssoBridgeCapability, startReachabilityPoll, stateVocabularyFor, storageCapability, storageEvictableCapability, storageProviderCapability, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, subKindsOf, summarisePrivacyAudio, supportedRuntimes, switchCapability, switchedOffIds, synthesizeSourceInfo, systemCapability, tamperCapability, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, terminalSessionCapability, textToHtml, toDeviceSummary, toExpressionValue, toNodeId, toStreamSourceEntry, toastCapability, tokenize, transcodeBody, tryConvertUnit, turnProviderCapability, unitDimension, unitsForDimension, updateCapability, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateExpressionSource, validateRecipeBounds, valveCapability, vectorDimFromBase64, vectorStoreCapability, vibrationCapability, videoclipsCapability, viewerUiCapability, waterHeaterCapability, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
|