@camstack/addon-export-hap 0.1.2 → 0.1.4
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/export-hap.addon.js +155 -268
- package/dist/export-hap.addon.js.map +1 -1
- package/dist/export-hap.addon.mjs +155 -268
- package/dist/export-hap.addon.mjs.map +1 -1
- package/package.json +3 -29
- package/dist/@mf-types/compiled-types/page/HomeKitOverviewPage.d.ts +0 -24
- package/dist/@mf-types/compiled-types/page/HomeKitOverviewPage.d.ts.map +0 -1
- package/dist/@mf-types/compiled-types/page/page.d.ts +0 -12
- package/dist/@mf-types/compiled-types/page/page.d.ts.map +0 -1
- package/dist/@mf-types/page.d.ts +0 -2
- package/dist/@mf-types.d.ts +0 -3
- package/dist/@mf-types.zip +0 -0
- package/dist/__mfe_internal__addon_export_hap_page__loadShare___mf_0_camstack_mf_1_sdk__loadShare__.mjs-B7qZNHZC.mjs +0 -12
- package/dist/__mfe_internal__addon_export_hap_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.mjs-B3wGuKgV.mjs +0 -12
- package/dist/__mfe_internal__addon_export_hap_page__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.mjs-D4zYQtXk.mjs +0 -73
- package/dist/__mfe_internal__addon_export_hap_page__loadShare___mf_0_trpc_mf_1_client__loadShare__.mjs-DrrRnQpW.mjs +0 -42
- package/dist/__mfe_internal__addon_export_hap_page__loadShare___mf_0_trpc_mf_1_react_mf_2_query__loadShare__.mjs-BEeMNLCX.mjs +0 -46
- package/dist/__mfe_internal__addon_export_hap_page__loadShare__react__loadShare__.mjs-BPYrKf_3.mjs +0 -56
- package/dist/__mfe_internal__addon_export_hap_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.mjs-x684zh94.mjs +0 -18
- package/dist/__mfe_internal__addon_export_hap_page__loadShare__react_mf_2_dom__loadShare__.mjs-CHMNar3q.mjs +0 -28
- package/dist/__mfe_internal__addon_export_hap_page__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs-CM8j15CX.mjs +0 -18
- package/dist/_stub.js +0 -3223
- package/dist/_virtual_mf-localSharedImportMap___mfe_internal__addon_export_hap_page-DtbdD5CL.mjs +0 -156
- package/dist/addon-export-hap.css +0 -3
- package/dist/browser-i_dCVxwk.mjs +0 -1227
- package/dist/client-COVrSAyU.mjs +0 -7592
- package/dist/dist-B4EgL9KT.mjs +0 -12922
- package/dist/dist-BLWGlNFD.mjs +0 -2483
- package/dist/dist-DOK7aZoj.mjs +0 -662
- package/dist/dist-DvB1ylHP.mjs +0 -1275
- package/dist/dist-RCwIG6iQ.mjs +0 -2229
- package/dist/dist-v8qx0EEt.mjs +0 -17192
- package/dist/getErrorShape-BPSzUA7W-m6tLWUI0.mjs +0 -189
- package/dist/hostInit-CWjIaYbZ.mjs +0 -144
- package/dist/jsx-runtime-C-bO5vlp.mjs +0 -22
- package/dist/modern-DN59UY0v.mjs +0 -2184
- package/dist/react-Bl6eCS2o.mjs +0 -293
- package/dist/react-dom-lYY58-MR.mjs +0 -131
- package/dist/remoteEntry.js +0 -83
- package/dist/rolldown-runtime-DC4cgjXG.mjs +0 -20
- package/dist/schemas-DswVYZsq.mjs +0 -3483
- package/dist/virtualExposes-Biq8M5a-.mjs +0 -27
package/dist/export-hap.addon.js
CHANGED
|
@@ -4659,7 +4659,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4659
4659
|
return inst;
|
|
4660
4660
|
}
|
|
4661
4661
|
//#endregion
|
|
4662
|
-
//#region ../types/dist/index-
|
|
4662
|
+
//#region ../types/dist/index-CWhQOnm9.mjs
|
|
4663
4663
|
var MODEL_FORMATS = [
|
|
4664
4664
|
"onnx",
|
|
4665
4665
|
"coreml",
|
|
@@ -7331,14 +7331,35 @@ var StatusSchema = object({
|
|
|
7331
7331
|
embeddedRunning: boolean()
|
|
7332
7332
|
});
|
|
7333
7333
|
method(_void(), array(BrokerInfoSchema)), method(IdInputSchema, BrokerConnectionDetailsSchema), method(AddBrokerInputSchema, AddBrokerResultSchema, { kind: "mutation" }), method(IdInputSchema, _void(), { kind: "mutation" }), method(IdInputSchema, TestResultSchema, { kind: "mutation" }), method(StartEmbeddedInputSchema, StartEmbeddedResultSchema, { kind: "mutation" }), method(IdInputSchema, _void(), { kind: "mutation" }), method(_void(), StatusSchema);
|
|
7334
|
+
var LinkStateSchema = _enum([
|
|
7335
|
+
"unlinked",
|
|
7336
|
+
"linked",
|
|
7337
|
+
"error"
|
|
7338
|
+
]);
|
|
7339
|
+
var ExportSetupFieldSchema = object({
|
|
7340
|
+
label: string(),
|
|
7341
|
+
value: string(),
|
|
7342
|
+
/** Mask the value by default + render a reveal toggle (client id, secrets). */
|
|
7343
|
+
secret: boolean().optional()
|
|
7344
|
+
});
|
|
7345
|
+
var ExportSetupSchema = object({
|
|
7346
|
+
/** A string to render as a scannable QR — HAP `X-HM://…` URI, a pairing URL, etc. Omitted when there's nothing to scan. */
|
|
7347
|
+
qr: string().optional(),
|
|
7348
|
+
/** Label/value rows shown with a copy button (HAP setup code, OAuth URLs, client id, linked-account count, …). */
|
|
7349
|
+
fields: array(ExportSetupFieldSchema).readonly().optional(),
|
|
7350
|
+
/** Free-form operator instructions rendered above the fields. */
|
|
7351
|
+
note: string().optional()
|
|
7352
|
+
});
|
|
7334
7353
|
var DeviceExportStatusSchema = object({
|
|
7335
|
-
linkState:
|
|
7336
|
-
"unlinked",
|
|
7337
|
-
"linked",
|
|
7338
|
-
"error"
|
|
7339
|
-
]),
|
|
7354
|
+
linkState: LinkStateSchema,
|
|
7340
7355
|
exposedDeviceCount: number(),
|
|
7341
|
-
error: string().optional()
|
|
7356
|
+
error: string().optional(),
|
|
7357
|
+
/**
|
|
7358
|
+
* Optional pairing/account info the panel renders in a generic
|
|
7359
|
+
* "Setup" section. Addon-agnostic — the addon id identifies the
|
|
7360
|
+
* export target, never an `ecosystem` key here.
|
|
7361
|
+
*/
|
|
7362
|
+
setup: ExportSetupSchema.optional()
|
|
7342
7363
|
});
|
|
7343
7364
|
var DeviceKindSchema = string();
|
|
7344
7365
|
var ExposedDeviceSchema = object({
|
|
@@ -7413,13 +7434,7 @@ var AddonPageDeclarationSchema = object({
|
|
|
7413
7434
|
*/
|
|
7414
7435
|
bundle: string()
|
|
7415
7436
|
});
|
|
7416
|
-
|
|
7417
|
-
name: "addon-pages-source",
|
|
7418
|
-
scope: "system",
|
|
7419
|
-
mode: "collection",
|
|
7420
|
-
internal: true,
|
|
7421
|
-
methods: { listPages: method(_void(), array(AddonPageDeclarationSchema).readonly()) }
|
|
7422
|
-
};
|
|
7437
|
+
method(_void(), array(AddonPageDeclarationSchema).readonly());
|
|
7423
7438
|
var WidgetHostEnum = _enum([
|
|
7424
7439
|
"device-tab",
|
|
7425
7440
|
"dashboard",
|
|
@@ -8283,42 +8298,6 @@ method(object({
|
|
|
8283
8298
|
username: string(),
|
|
8284
8299
|
password: string()
|
|
8285
8300
|
}), AuthResultSchema.nullable(), { kind: "mutation" }), method(object({ state: string() }), string()), method(record(string(), string()), AuthResultSchema, { kind: "mutation" }), method(object({ token: string() }), AuthResultSchema.nullable());
|
|
8286
|
-
var AuthProviderInfoSchema = object({
|
|
8287
|
-
/** Stable id matching the addon id (used for `getLoginUrl({addonId,…})`). */
|
|
8288
|
-
addonId: string(),
|
|
8289
|
-
/**
|
|
8290
|
-
* Per-instance id when one addon registers multiple "logical"
|
|
8291
|
-
* providers (e.g. OIDC with Google + Microsoft + custom). The login
|
|
8292
|
-
* URL becomes `/addon/${addonId}/${instanceId}/start` — handler reads
|
|
8293
|
-
* `:instanceId` from the route. Empty/unset means the addon is a
|
|
8294
|
-
* single-instance provider; the URL is `/addon/${addonId}/start`.
|
|
8295
|
-
*/
|
|
8296
|
-
instanceId: string().optional(),
|
|
8297
|
-
/** Display label shown on the login button + admin row. */
|
|
8298
|
-
displayName: string(),
|
|
8299
|
-
/** Optional iconography hint (lucide-react icon name OR emoji). */
|
|
8300
|
-
icon: string().optional(),
|
|
8301
|
-
/** When true, the provider exposes a redirect-based login flow
|
|
8302
|
-
* (`getLoginUrl` returns a URL the browser navigates to). */
|
|
8303
|
-
hasRedirectFlow: boolean(),
|
|
8304
|
-
/** When true, the provider exposes a credential-form login flow
|
|
8305
|
-
* (`validateCredentials` accepts username + password). */
|
|
8306
|
-
hasCredentialFlow: boolean(),
|
|
8307
|
-
/** Provider kind, drives admin-UI hint dispatch (oidc / saml / totp / …). */
|
|
8308
|
-
kind: string().optional(),
|
|
8309
|
-
/** Operator-facing status string (e.g. "Connected to https://login.acme.com"). */
|
|
8310
|
-
status: string().optional(),
|
|
8311
|
-
/** When false, the provider is registered but disabled by config; the
|
|
8312
|
-
* UI surfaces it as inactive without enumerating it for login. */
|
|
8313
|
-
enabled: boolean()
|
|
8314
|
-
});
|
|
8315
|
-
method(_void(), array(AuthProviderInfoSchema).readonly()), method(object({
|
|
8316
|
-
addonId: string(),
|
|
8317
|
-
enabled: boolean()
|
|
8318
|
-
}), object({ success: literal(true) }), {
|
|
8319
|
-
kind: "mutation",
|
|
8320
|
-
auth: "admin"
|
|
8321
|
-
});
|
|
8322
8301
|
var NetworkEndpointSchema = object({
|
|
8323
8302
|
url: string(),
|
|
8324
8303
|
hostname: string(),
|
|
@@ -8344,33 +8323,6 @@ var NetworkEndpointEntrySchema = NetworkEndpointSchema.extend({
|
|
|
8344
8323
|
sourcePort: number().optional()
|
|
8345
8324
|
});
|
|
8346
8325
|
method(_void(), NetworkEndpointSchema, { kind: "mutation" }), method(_void(), _void(), { kind: "mutation" }), method(_void(), NetworkEndpointSchema.nullable()), method(_void(), NetworkAccessStatusSchema), method(_void(), array(NetworkEndpointEntrySchema).readonly());
|
|
8347
|
-
var RemoteAccessEndpointSchema = object({
|
|
8348
|
-
url: string(),
|
|
8349
|
-
hostname: string(),
|
|
8350
|
-
port: number(),
|
|
8351
|
-
protocol: _enum(["http", "https"])
|
|
8352
|
-
});
|
|
8353
|
-
var RemoteAccessProviderInfoSchema = object({
|
|
8354
|
-
/** Stable id matching the addon id. */
|
|
8355
|
-
addonId: string(),
|
|
8356
|
-
/** Display label shown on the admin row — sourced from the addon manifest. */
|
|
8357
|
-
displayName: string(),
|
|
8358
|
-
/** When false, the provider is registered but disabled. */
|
|
8359
|
-
enabled: boolean(),
|
|
8360
|
-
/** True when the underlying tunnel/connection is up. */
|
|
8361
|
-
connected: boolean(),
|
|
8362
|
-
/** Public-facing endpoint, when connected. Null otherwise. */
|
|
8363
|
-
endpoint: RemoteAccessEndpointSchema.nullable(),
|
|
8364
|
-
/** Last error message (when connected=false), if available. */
|
|
8365
|
-
error: string().optional()
|
|
8366
|
-
});
|
|
8367
|
-
method(_void(), array(RemoteAccessProviderInfoSchema).readonly()), method(object({ addonId: string() }), RemoteAccessEndpointSchema, {
|
|
8368
|
-
kind: "mutation",
|
|
8369
|
-
auth: "admin"
|
|
8370
|
-
}), method(object({ addonId: string() }), object({ success: literal(true) }), {
|
|
8371
|
-
kind: "mutation",
|
|
8372
|
-
auth: "admin"
|
|
8373
|
-
});
|
|
8374
8326
|
var TurnServerSchema = object({
|
|
8375
8327
|
/** Single URL or list of URLs (e.g. "turn:turn.example.com:3478?transport=udp"). */
|
|
8376
8328
|
urls: union([string(), array(string())]),
|
|
@@ -8378,33 +8330,6 @@ var TurnServerSchema = object({
|
|
|
8378
8330
|
credential: string().optional()
|
|
8379
8331
|
});
|
|
8380
8332
|
method(_void(), array(TurnServerSchema).readonly());
|
|
8381
|
-
var TurnProviderInfoSchema = object({
|
|
8382
|
-
/** Stable id matching the addon id. */
|
|
8383
|
-
addonId: string(),
|
|
8384
|
-
/** Display label shown on the admin row — sourced from the addon manifest. */
|
|
8385
|
-
displayName: string(),
|
|
8386
|
-
/** When false, the provider is registered but disabled. */
|
|
8387
|
-
enabled: boolean(),
|
|
8388
|
-
/** Number of servers this provider is currently exposing. */
|
|
8389
|
-
serverCount: number(),
|
|
8390
|
-
/**
|
|
8391
|
-
* Flat list of every TURN/STUN URL this provider currently exposes.
|
|
8392
|
-
* One row per URL (multi-URL ICE server entries are flattened). The
|
|
8393
|
-
* admin UI shows this in a compact per-provider list so operators
|
|
8394
|
-
* can verify what's actually being negotiated without having to dig
|
|
8395
|
-
* into the combined `getAllServers` output.
|
|
8396
|
-
*/
|
|
8397
|
-
urls: array(string()).readonly(),
|
|
8398
|
-
/** Last fetch error (when serverCount=0 due to API failure), if any. */
|
|
8399
|
-
error: string().optional()
|
|
8400
|
-
});
|
|
8401
|
-
method(_void(), array(TurnProviderInfoSchema).readonly()), method(_void(), array(TurnServerSchema).readonly()), method(object({
|
|
8402
|
-
addonId: string(),
|
|
8403
|
-
enabled: boolean()
|
|
8404
|
-
}), object({ success: literal(true) }), {
|
|
8405
|
-
kind: "mutation",
|
|
8406
|
-
auth: "admin"
|
|
8407
|
-
});
|
|
8408
8333
|
var SnapshotImageSchema = object({
|
|
8409
8334
|
base64: string(),
|
|
8410
8335
|
contentType: string()
|
|
@@ -9498,7 +9423,7 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
9498
9423
|
* tunnel always emits `https://` regardless. */
|
|
9499
9424
|
scheme: _enum(["http", "https"]).optional()
|
|
9500
9425
|
}), GetConnectionEndpointsResultSchema), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" });
|
|
9501
|
-
var MeshEndpointSchema
|
|
9426
|
+
var MeshEndpointSchema = object({
|
|
9502
9427
|
/** Stable identifier within the provider (e.g. `mesh-ipv4`, `magicdns`, `funnel`). */
|
|
9503
9428
|
id: string(),
|
|
9504
9429
|
/** Operator-facing label (e.g. "Mesh IPv4", "MagicDNS"). */
|
|
@@ -9575,7 +9500,7 @@ var MeshStatusSchema = object({
|
|
|
9575
9500
|
/** Number of peers visible to this host (excluding self). */
|
|
9576
9501
|
peerCount: number(),
|
|
9577
9502
|
/** Every endpoint this provider exposes for the current host. */
|
|
9578
|
-
endpoints: array(MeshEndpointSchema
|
|
9503
|
+
endpoints: array(MeshEndpointSchema).readonly(),
|
|
9579
9504
|
/** Last error from the daemon, when not joined. */
|
|
9580
9505
|
error: string().optional(),
|
|
9581
9506
|
/**
|
|
@@ -9607,7 +9532,24 @@ var MeshStatusSchema = object({
|
|
|
9607
9532
|
* doesn't rotate keys for the bound host. Operator-facing surface
|
|
9608
9533
|
* for "your access expires on …" banners.
|
|
9609
9534
|
*/
|
|
9610
|
-
keyExpiry: number().nullable()
|
|
9535
|
+
keyExpiry: number().nullable(),
|
|
9536
|
+
/**
|
|
9537
|
+
* When the provider runs its OWN mesh daemon (e.g. the Tailscale
|
|
9538
|
+
* client addon in `onboard` mode spawns a private `tailscaled`),
|
|
9539
|
+
* this carries the local control-socket path. Companion addons that
|
|
9540
|
+
* must drive the SAME daemon — chiefly `tailscale-ingress` for
|
|
9541
|
+
* Serve/Funnel — read it to point their CLI at the right socket
|
|
9542
|
+
* instead of the system default. Empty when the provider uses the
|
|
9543
|
+
* host's system daemon (or doesn't have the concept).
|
|
9544
|
+
*/
|
|
9545
|
+
daemonSocket: string().optional(),
|
|
9546
|
+
/**
|
|
9547
|
+
* Path to the mesh CLI binary the provider downloaded for onboard
|
|
9548
|
+
* mode. Companion addons reuse it so they don't need a system
|
|
9549
|
+
* install when the operator chose a fully self-contained mesh.
|
|
9550
|
+
* Empty in host mode.
|
|
9551
|
+
*/
|
|
9552
|
+
daemonCliPath: string().optional()
|
|
9611
9553
|
});
|
|
9612
9554
|
method(_void(), MeshStatusSchema), method(object({
|
|
9613
9555
|
/** Provider-specific auth key. For Tailscale this is the
|
|
@@ -9633,51 +9575,6 @@ authKey: string().optional() }), object({
|
|
|
9633
9575
|
/** Human-readable error when `ok: false`. */
|
|
9634
9576
|
error: string().optional()
|
|
9635
9577
|
}), { kind: "mutation" });
|
|
9636
|
-
var MeshEndpointSchema = object({
|
|
9637
|
-
id: string(),
|
|
9638
|
-
label: string(),
|
|
9639
|
-
scope: _enum(["mesh", "public"]),
|
|
9640
|
-
url: string(),
|
|
9641
|
-
hostname: string(),
|
|
9642
|
-
port: number(),
|
|
9643
|
-
protocol: _enum(["http", "https"])
|
|
9644
|
-
});
|
|
9645
|
-
var MeshProviderInfoSchema = object({
|
|
9646
|
-
/** Stable id matching the addon id. */
|
|
9647
|
-
addonId: string(),
|
|
9648
|
-
/** Display label shown on the admin row — sourced from the addon manifest. */
|
|
9649
|
-
displayName: string(),
|
|
9650
|
-
/** True when the host is joined to this provider's mesh. */
|
|
9651
|
-
joined: boolean(),
|
|
9652
|
-
/** Local mesh IP (empty when not joined). */
|
|
9653
|
-
meshIp: string(),
|
|
9654
|
-
/** MagicDNS / mesh hostname (empty when not configured). */
|
|
9655
|
-
magicDnsHostname: string(),
|
|
9656
|
-
/** Peer count (excluding self). */
|
|
9657
|
-
peerCount: number(),
|
|
9658
|
-
/** Active endpoints (mesh IP + MagicDNS + optional public Funnel). */
|
|
9659
|
-
endpoints: array(MeshEndpointSchema).readonly(),
|
|
9660
|
-
/** Last error reported by the provider. */
|
|
9661
|
-
error: string().optional(),
|
|
9662
|
-
/** Tenant / tailnet / network display name. Empty pre-join. */
|
|
9663
|
-
tenantName: string(),
|
|
9664
|
-
/** Mesh DNS suffix (e.g. tailXXXX.ts.net). Empty when not configured. */
|
|
9665
|
-
magicDnsSuffix: string(),
|
|
9666
|
-
/** Authenticated user / account login. Null for token-only providers. */
|
|
9667
|
-
userLogin: string().nullable(),
|
|
9668
|
-
/** Provider control-plane URL. */
|
|
9669
|
-
controlPlaneUrl: string(),
|
|
9670
|
-
/** Machine-key expiry (epoch ms). Null when keys don't rotate. */
|
|
9671
|
-
keyExpiry: number().nullable()
|
|
9672
|
-
});
|
|
9673
|
-
method(_void(), array(MeshProviderInfoSchema).readonly()), method(object({
|
|
9674
|
-
addonId: string(),
|
|
9675
|
-
authKey: string().min(8),
|
|
9676
|
-
hostname: string().optional()
|
|
9677
|
-
}), object({ joined: literal(true) }), { kind: "mutation" }), method(object({ addonId: string() }), object({ success: literal(true) }), { kind: "mutation" }), method(object({
|
|
9678
|
-
addonId: string(),
|
|
9679
|
-
hostname: string().optional()
|
|
9680
|
-
}), object({ loginUrl: string() }), { kind: "mutation" }), method(object({ addonId: string() }), object({ loggedOut: literal(true) }), { kind: "mutation" }), method(object({ addonId: string() }), object({ peers: array(MeshPeerSchema).readonly() }));
|
|
9681
9578
|
var MethodAccessSchema = _enum([
|
|
9682
9579
|
"view",
|
|
9683
9580
|
"create",
|
|
@@ -10289,6 +10186,21 @@ var AddonAutoUpdateSchema = ChannelWithInheritSchema;
|
|
|
10289
10186
|
var RestartAddonResultSchema = unknown();
|
|
10290
10187
|
var InstallPackageResultSchema = unknown();
|
|
10291
10188
|
var ReloadPackagesResultSchema = unknown();
|
|
10189
|
+
var UpdateFrameworkPackageResultSchema = object({
|
|
10190
|
+
packageName: string(),
|
|
10191
|
+
fromVersion: string(),
|
|
10192
|
+
toVersion: string(),
|
|
10193
|
+
/** Ms-epoch the server scheduled its self-restart. */
|
|
10194
|
+
restartingAt: number()
|
|
10195
|
+
});
|
|
10196
|
+
var FrameworkPackageStatusSchema = object({
|
|
10197
|
+
packageName: string(),
|
|
10198
|
+
currentVersion: string(),
|
|
10199
|
+
latestVersion: string().nullable(),
|
|
10200
|
+
hasUpdate: boolean(),
|
|
10201
|
+
/** Optional manifest description for the row tooltip. */
|
|
10202
|
+
description: string().optional()
|
|
10203
|
+
});
|
|
10292
10204
|
var LogStreamEntrySchema = object({
|
|
10293
10205
|
timestamp: string(),
|
|
10294
10206
|
level: string(),
|
|
@@ -10320,21 +10232,50 @@ method(_void(), array(AddonListItemSchema).readonly()), method(object({
|
|
|
10320
10232
|
}), method(_void(), ReloadPackagesResultSchema, {
|
|
10321
10233
|
kind: "mutation",
|
|
10322
10234
|
auth: "admin"
|
|
10323
|
-
}), method(object({ query: string().optional() }), array(SearchResultSchema)), method(
|
|
10235
|
+
}), method(object({ query: string().optional() }), array(SearchResultSchema)), method(object({ nodeId: string().optional() }), array(PackageUpdateSchema).readonly(), { auth: "admin" }), method(object({
|
|
10324
10236
|
name: string().min(1),
|
|
10325
|
-
version: string().optional()
|
|
10237
|
+
version: string().optional(),
|
|
10238
|
+
nodeId: string().optional()
|
|
10326
10239
|
}), unknown(), {
|
|
10327
10240
|
kind: "mutation",
|
|
10328
10241
|
auth: "admin"
|
|
10329
10242
|
}), method(object({ name: string().min(1) }), object({ rolledBackTo: string().nullable() }), {
|
|
10330
10243
|
kind: "mutation",
|
|
10331
10244
|
auth: "admin"
|
|
10332
|
-
}), method(
|
|
10245
|
+
}), method(object({ nodeId: string().optional() }), unknown(), {
|
|
10333
10246
|
kind: "mutation",
|
|
10334
10247
|
auth: "admin"
|
|
10335
10248
|
}), method(object({ confirm: literal(true) }), unknown(), {
|
|
10336
10249
|
kind: "mutation",
|
|
10337
10250
|
auth: "admin"
|
|
10251
|
+
}), method(_void(), object({
|
|
10252
|
+
kind: _enum([
|
|
10253
|
+
"framework-update",
|
|
10254
|
+
"manual",
|
|
10255
|
+
"system"
|
|
10256
|
+
]),
|
|
10257
|
+
packageName: string().optional(),
|
|
10258
|
+
fromVersion: string().optional(),
|
|
10259
|
+
toVersion: string().optional(),
|
|
10260
|
+
requestedBy: string().optional(),
|
|
10261
|
+
requestedAt: number()
|
|
10262
|
+
}).nullable(), { auth: "admin" }), method(_void(), array(FrameworkPackageStatusSchema).readonly(), { auth: "admin" }), method(object({ capName: string().min(1) }), array(object({
|
|
10263
|
+
addonId: string(),
|
|
10264
|
+
mode: _enum(["singleton", "collection"]),
|
|
10265
|
+
isActive: boolean()
|
|
10266
|
+
})).readonly()), method(object({
|
|
10267
|
+
capName: string().min(1),
|
|
10268
|
+
addonId: string().min(1),
|
|
10269
|
+
enabled: boolean()
|
|
10270
|
+
}), object({ success: literal(true) }), {
|
|
10271
|
+
kind: "mutation",
|
|
10272
|
+
auth: "admin"
|
|
10273
|
+
}), method(object({
|
|
10274
|
+
packageName: string().min(1),
|
|
10275
|
+
version: string().optional()
|
|
10276
|
+
}), UpdateFrameworkPackageResultSchema, {
|
|
10277
|
+
kind: "mutation",
|
|
10278
|
+
auth: "admin"
|
|
10338
10279
|
}), method(object({ name: string() }), array(PackageVersionInfoSchema).readonly()), method(object({ addonId: string() }), RestartAddonResultSchema, {
|
|
10339
10280
|
kind: "mutation",
|
|
10340
10281
|
auth: "admin"
|
|
@@ -10366,6 +10307,7 @@ var EventCategory = /* @__PURE__ */ ((EventCategory2) => {
|
|
|
10366
10307
|
EventCategory2["SystemBoot"] = "system.boot";
|
|
10367
10308
|
EventCategory2["SystemAddonsReady"] = "system.addons-ready";
|
|
10368
10309
|
EventCategory2["SystemRestarting"] = "system.restarting";
|
|
10310
|
+
EventCategory2["SystemRestartCompleted"] = "system.restart-completed";
|
|
10369
10311
|
EventCategory2["SystemReadyState"] = "system.ready-state";
|
|
10370
10312
|
EventCategory2["AddonStarted"] = "addon.started";
|
|
10371
10313
|
EventCategory2["AddonStopped"] = "addon.stopped";
|
|
@@ -10896,6 +10838,12 @@ Object.freeze({
|
|
|
10896
10838
|
addonId: null,
|
|
10897
10839
|
access: "view"
|
|
10898
10840
|
},
|
|
10841
|
+
"addons.getLastRestart": {
|
|
10842
|
+
capName: "addons",
|
|
10843
|
+
capScope: "system",
|
|
10844
|
+
addonId: null,
|
|
10845
|
+
access: "view"
|
|
10846
|
+
},
|
|
10899
10847
|
"addons.getLogs": {
|
|
10900
10848
|
capName: "addons",
|
|
10901
10849
|
capScope: "system",
|
|
@@ -10932,6 +10880,18 @@ Object.freeze({
|
|
|
10932
10880
|
addonId: null,
|
|
10933
10881
|
access: "view"
|
|
10934
10882
|
},
|
|
10883
|
+
"addons.listCapabilityProviders": {
|
|
10884
|
+
capName: "addons",
|
|
10885
|
+
capScope: "system",
|
|
10886
|
+
addonId: null,
|
|
10887
|
+
access: "view"
|
|
10888
|
+
},
|
|
10889
|
+
"addons.listFrameworkPackages": {
|
|
10890
|
+
capName: "addons",
|
|
10891
|
+
capScope: "system",
|
|
10892
|
+
addonId: null,
|
|
10893
|
+
access: "view"
|
|
10894
|
+
},
|
|
10935
10895
|
"addons.listPackages": {
|
|
10936
10896
|
capName: "addons",
|
|
10937
10897
|
capScope: "system",
|
|
@@ -11004,12 +10964,24 @@ Object.freeze({
|
|
|
11004
10964
|
addonId: null,
|
|
11005
10965
|
access: "create"
|
|
11006
10966
|
},
|
|
10967
|
+
"addons.setCapabilityProviderEnabled": {
|
|
10968
|
+
capName: "addons",
|
|
10969
|
+
capScope: "system",
|
|
10970
|
+
addonId: null,
|
|
10971
|
+
access: "create"
|
|
10972
|
+
},
|
|
11007
10973
|
"addons.uninstallPackage": {
|
|
11008
10974
|
capName: "addons",
|
|
11009
10975
|
capScope: "system",
|
|
11010
10976
|
addonId: null,
|
|
11011
10977
|
access: "delete"
|
|
11012
10978
|
},
|
|
10979
|
+
"addons.updateFrameworkPackage": {
|
|
10980
|
+
capName: "addons",
|
|
10981
|
+
capScope: "system",
|
|
10982
|
+
addonId: null,
|
|
10983
|
+
access: "create"
|
|
10984
|
+
},
|
|
11013
10985
|
"addons.updatePackage": {
|
|
11014
10986
|
capName: "addons",
|
|
11015
10987
|
capScope: "system",
|
|
@@ -11250,18 +11222,6 @@ Object.freeze({
|
|
|
11250
11222
|
addonId: null,
|
|
11251
11223
|
access: "view"
|
|
11252
11224
|
},
|
|
11253
|
-
"authentication.listProviders": {
|
|
11254
|
-
capName: "authentication",
|
|
11255
|
-
capScope: "system",
|
|
11256
|
-
addonId: null,
|
|
11257
|
-
access: "view"
|
|
11258
|
-
},
|
|
11259
|
-
"authentication.setProviderEnabled": {
|
|
11260
|
-
capName: "authentication",
|
|
11261
|
-
capScope: "system",
|
|
11262
|
-
addonId: null,
|
|
11263
|
-
access: "create"
|
|
11264
|
-
},
|
|
11265
11225
|
"authProvider.getLoginUrl": {
|
|
11266
11226
|
capName: "auth-provider",
|
|
11267
11227
|
capScope: "system",
|
|
@@ -12108,42 +12068,6 @@ Object.freeze({
|
|
|
12108
12068
|
addonId: null,
|
|
12109
12069
|
access: "create"
|
|
12110
12070
|
},
|
|
12111
|
-
"meshOrchestrator.joinProvider": {
|
|
12112
|
-
capName: "mesh-orchestrator",
|
|
12113
|
-
capScope: "system",
|
|
12114
|
-
addonId: null,
|
|
12115
|
-
access: "create"
|
|
12116
|
-
},
|
|
12117
|
-
"meshOrchestrator.leaveProvider": {
|
|
12118
|
-
capName: "mesh-orchestrator",
|
|
12119
|
-
capScope: "system",
|
|
12120
|
-
addonId: null,
|
|
12121
|
-
access: "create"
|
|
12122
|
-
},
|
|
12123
|
-
"meshOrchestrator.listProviderPeers": {
|
|
12124
|
-
capName: "mesh-orchestrator",
|
|
12125
|
-
capScope: "system",
|
|
12126
|
-
addonId: null,
|
|
12127
|
-
access: "view"
|
|
12128
|
-
},
|
|
12129
|
-
"meshOrchestrator.listProviders": {
|
|
12130
|
-
capName: "mesh-orchestrator",
|
|
12131
|
-
capScope: "system",
|
|
12132
|
-
addonId: null,
|
|
12133
|
-
access: "view"
|
|
12134
|
-
},
|
|
12135
|
-
"meshOrchestrator.logoutProvider": {
|
|
12136
|
-
capName: "mesh-orchestrator",
|
|
12137
|
-
capScope: "system",
|
|
12138
|
-
addonId: null,
|
|
12139
|
-
access: "create"
|
|
12140
|
-
},
|
|
12141
|
-
"meshOrchestrator.startLoginProvider": {
|
|
12142
|
-
capName: "mesh-orchestrator",
|
|
12143
|
-
capScope: "system",
|
|
12144
|
-
addonId: null,
|
|
12145
|
-
access: "create"
|
|
12146
|
-
},
|
|
12147
12071
|
"metricsProvider.collectSnapshot": {
|
|
12148
12072
|
capName: "metrics-provider",
|
|
12149
12073
|
capScope: "system",
|
|
@@ -13170,24 +13094,6 @@ Object.freeze({
|
|
|
13170
13094
|
addonId: null,
|
|
13171
13095
|
access: "create"
|
|
13172
13096
|
},
|
|
13173
|
-
"remoteAccess.listProviders": {
|
|
13174
|
-
capName: "remote-access",
|
|
13175
|
-
capScope: "system",
|
|
13176
|
-
addonId: null,
|
|
13177
|
-
access: "view"
|
|
13178
|
-
},
|
|
13179
|
-
"remoteAccess.startProvider": {
|
|
13180
|
-
capName: "remote-access",
|
|
13181
|
-
capScope: "system",
|
|
13182
|
-
addonId: null,
|
|
13183
|
-
access: "create"
|
|
13184
|
-
},
|
|
13185
|
-
"remoteAccess.stopProvider": {
|
|
13186
|
-
capName: "remote-access",
|
|
13187
|
-
capScope: "system",
|
|
13188
|
-
addonId: null,
|
|
13189
|
-
access: "create"
|
|
13190
|
-
},
|
|
13191
13097
|
"restreamer.getExposedResources": {
|
|
13192
13098
|
capName: "restreamer",
|
|
13193
13099
|
capScope: "system",
|
|
@@ -13746,24 +13652,6 @@ Object.freeze({
|
|
|
13746
13652
|
addonId: null,
|
|
13747
13653
|
access: "view"
|
|
13748
13654
|
},
|
|
13749
|
-
"turnOrchestrator.getAllServers": {
|
|
13750
|
-
capName: "turn-orchestrator",
|
|
13751
|
-
capScope: "system",
|
|
13752
|
-
addonId: null,
|
|
13753
|
-
access: "view"
|
|
13754
|
-
},
|
|
13755
|
-
"turnOrchestrator.listProviders": {
|
|
13756
|
-
capName: "turn-orchestrator",
|
|
13757
|
-
capScope: "system",
|
|
13758
|
-
addonId: null,
|
|
13759
|
-
access: "view"
|
|
13760
|
-
},
|
|
13761
|
-
"turnOrchestrator.setProviderEnabled": {
|
|
13762
|
-
capName: "turn-orchestrator",
|
|
13763
|
-
capScope: "system",
|
|
13764
|
-
addonId: null,
|
|
13765
|
-
access: "create"
|
|
13766
|
-
},
|
|
13767
13655
|
"turnProvider.getTurnServers": {
|
|
13768
13656
|
capName: "turn-provider",
|
|
13769
13657
|
capScope: "system",
|
|
@@ -71366,20 +71254,6 @@ var DEFAULT_CONFIG = {
|
|
|
71366
71254
|
},
|
|
71367
71255
|
exposed: []
|
|
71368
71256
|
};
|
|
71369
|
-
/**
|
|
71370
|
-
* Module-federation page declarations — picked up by the
|
|
71371
|
-
* `addon-pages-source` aggregator and surfaced on admin-ui's
|
|
71372
|
-
* Integrations page (Configure button) once the federation bundle
|
|
71373
|
-
* is built. See `src/page/HomeKitOverviewPage.tsx`.
|
|
71374
|
-
*/
|
|
71375
|
-
var HOMEKIT_OVERVIEW_PAGES = [{
|
|
71376
|
-
id: "export-hap",
|
|
71377
|
-
label: "HomeKit Export",
|
|
71378
|
-
icon: "home",
|
|
71379
|
-
path: "/addon/export-hap",
|
|
71380
|
-
remoteName: "addon_export_hap_page",
|
|
71381
|
-
bundle: "remoteEntry.js"
|
|
71382
|
-
}];
|
|
71383
71257
|
var BANNED_PINCODES = new Set([
|
|
71384
71258
|
"000-00-000",
|
|
71385
71259
|
"111-11-111",
|
|
@@ -71456,10 +71330,13 @@ var ExportHapAddon = class extends BaseAddon {
|
|
|
71456
71330
|
provider: {
|
|
71457
71331
|
getStatus: async () => {
|
|
71458
71332
|
const state = this.bridge?.getState() ?? null;
|
|
71333
|
+
const linkState = this.lastError ? "error" : state?.paired ? "linked" : "unlinked";
|
|
71334
|
+
const setup = this.buildSetupBlock();
|
|
71459
71335
|
return {
|
|
71460
|
-
linkState
|
|
71336
|
+
linkState,
|
|
71461
71337
|
exposedDeviceCount: this.exposed.size,
|
|
71462
|
-
...this.lastError ? { error: this.lastError } : {}
|
|
71338
|
+
...this.lastError ? { error: this.lastError } : {},
|
|
71339
|
+
...setup ? { setup } : {}
|
|
71463
71340
|
};
|
|
71464
71341
|
},
|
|
71465
71342
|
listSupportedDeviceKinds: async () => [...SUPPORTED_MAPPER_KINDS],
|
|
@@ -71477,12 +71354,6 @@ var ExportHapAddon = class extends BaseAddon {
|
|
|
71477
71354
|
getDeviceLiveContribution: async () => null,
|
|
71478
71355
|
applyDeviceSettingsPatch: (input) => this.applyDeviceSettingsPatch(input.deviceId, input.patch)
|
|
71479
71356
|
}
|
|
71480
|
-
}, {
|
|
71481
|
-
capability: addonPagesSourceCapability,
|
|
71482
|
-
provider: {
|
|
71483
|
-
id: "export-hap",
|
|
71484
|
-
listPages: () => HOMEKIT_OVERVIEW_PAGES
|
|
71485
|
-
}
|
|
71486
71357
|
}];
|
|
71487
71358
|
}
|
|
71488
71359
|
async onConfigChanged() {
|
|
@@ -71526,6 +71397,28 @@ var ExportHapAddon = class extends BaseAddon {
|
|
|
71526
71397
|
this.ctx.logger.info("export-hap: generated bridge identity on first boot", { meta: { username: fresh.username } });
|
|
71527
71398
|
return fresh;
|
|
71528
71399
|
}
|
|
71400
|
+
/**
|
|
71401
|
+
* Build the generic `device-export` `setup` block surfaced via
|
|
71402
|
+
* `getStatus` and rendered by the shared `DeviceExportPanel`: the
|
|
71403
|
+
* `X-HM://…` setup URI as a scannable QR, the 8-digit setup code as
|
|
71404
|
+
* a copyable field, and a short pairing instruction. Returns `null`
|
|
71405
|
+
* until the bridge has booted and produced both values.
|
|
71406
|
+
*/
|
|
71407
|
+
buildSetupBlock() {
|
|
71408
|
+
const state = this.bridge?.getState() ?? null;
|
|
71409
|
+
const setupCode = state?.identity.pincode || this.config.identity.pincode;
|
|
71410
|
+
const setupUri = state?.setupURI ?? "";
|
|
71411
|
+
if (!setupCode) return null;
|
|
71412
|
+
const paired = state?.paired === true;
|
|
71413
|
+
return {
|
|
71414
|
+
...setupUri ? { qr: setupUri } : {},
|
|
71415
|
+
fields: [{
|
|
71416
|
+
label: "Setup code",
|
|
71417
|
+
value: setupCode
|
|
71418
|
+
}],
|
|
71419
|
+
note: paired ? "This bridge is currently paired. To re-pair, scan the QR in the iOS Home app (+ → Add Accessory) or enter the setup code manually." : "Open the iOS Home app, tap + → Add Accessory, then scan this QR — or enter the setup code manually."
|
|
71420
|
+
};
|
|
71421
|
+
}
|
|
71529
71422
|
async exposeDevice(deviceId, capabilities) {
|
|
71530
71423
|
if (this.exposed.has(deviceId)) {
|
|
71531
71424
|
this.ctx.logger.debug("export-hap: device already exposed — refreshing capabilities", { meta: { deviceId } });
|
|
@@ -71619,15 +71512,9 @@ var ExportHapAddon = class extends BaseAddon {
|
|
|
71619
71512
|
return this.schema({ sections: [{
|
|
71620
71513
|
id: "export-hap",
|
|
71621
71514
|
title: "HomeKit Export",
|
|
71622
|
-
description: "Publishes a HomeKit bridge. After the addon boots,
|
|
71515
|
+
description: "Publishes a HomeKit bridge. After the addon boots, scan the pairing QR (or enter the setup code) from the Exported devices panel in the iOS Home app. After pairing, mark individual devices as \"Expose to HomeKit\" on each device's settings page.",
|
|
71623
71516
|
columns: 1,
|
|
71624
71517
|
fields: [
|
|
71625
|
-
{
|
|
71626
|
-
type: "info",
|
|
71627
|
-
key: "__pair-instructions",
|
|
71628
|
-
label: "Pairing",
|
|
71629
|
-
content: "Setup code + QR are surfaced via the \"HomeKit Export\" integration page once the bridge has booted. Changing the bridge name or port requires a restart of the addon — handled automatically when you save."
|
|
71630
|
-
},
|
|
71631
71518
|
this.field({
|
|
71632
71519
|
type: "text",
|
|
71633
71520
|
key: "bridgeName",
|