@camstack/system 1.2.68 → 1.2.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon-runner.js +6 -6
- package/dist/addon-runner.mjs +3 -3
- package/dist/addon-utils.js +11 -11
- package/dist/addon-utils.mjs +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +3 -3
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +2 -2
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +3 -3
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +2 -2
- package/dist/builtins/alerts/alerts.addon.js +1 -1
- package/dist/builtins/alerts/alerts.addon.mjs +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +8 -8
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +6 -6
- package/dist/builtins/console-logging/index.js +1 -1
- package/dist/builtins/console-logging/index.mjs +1 -1
- package/dist/builtins/core-blocks/core-blocks.addon.js +3 -3
- package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
- package/dist/builtins/device-manager/adoption-job-engine.d.ts +89 -0
- package/dist/builtins/device-manager/device-manager.addon.d.ts +8 -0
- package/dist/builtins/device-manager/device-manager.addon.js +330 -3
- package/dist/builtins/device-manager/device-manager.addon.mjs +330 -3
- package/dist/builtins/device-manager/device-provider-context.d.ts +3 -0
- package/dist/builtins/device-manager/device-queries.d.ts +3 -0
- package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
- package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
- package/dist/builtins/hub-forwarder/index.js +1 -1
- package/dist/builtins/hub-forwarder/index.mjs +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
- package/dist/builtins/local-auth/index.d.ts +0 -1
- package/dist/builtins/local-auth/index.js +0 -1
- package/dist/builtins/local-auth/index.mjs +2 -2
- package/dist/builtins/local-auth/local-auth.addon.js +129 -173
- package/dist/builtins/local-auth/local-auth.addon.mjs +130 -173
- package/dist/builtins/local-network/local-network.addon.js +1 -1
- package/dist/builtins/local-network/local-network.addon.mjs +1 -1
- package/dist/builtins/loki-logging/index.js +1 -1
- package/dist/builtins/loki-logging/index.mjs +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.js +5 -5
- package/dist/builtins/native-metrics/native-metrics.addon.mjs +4 -4
- package/dist/builtins/platform-probe/index.js +4 -4
- package/dist/builtins/platform-probe/index.mjs +3 -3
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
- package/dist/builtins/snapshot/index.js +2 -2
- package/dist/builtins/snapshot/index.mjs +2 -2
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +4 -4
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +3 -3
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -1
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +3 -3
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +2 -2
- package/dist/builtins/system-config/system-config.addon.js +1 -1
- package/dist/builtins/system-config/system-config.addon.mjs +1 -1
- package/dist/builtins/winston-logging/index.js +1 -1
- package/dist/builtins/winston-logging/index.mjs +1 -1
- package/dist/{dist-D2J8RJ7m.mjs → dist-CnQXXnK1.mjs} +296 -2
- package/dist/{dist-Dhpte164.js → dist-DCLoJf2T.js} +295 -7
- package/dist/{model-download-service-CTBHzORJ.mjs → file-data-plane-CuE_hBli.mjs} +848 -848
- package/dist/index.d.ts +73 -81
- package/dist/index.js +1379 -1346
- package/dist/index.mjs +1362 -1328
- package/dist/kernel/capability-registry.d.ts +26 -0
- package/dist/kernel/config-schema.d.ts +1 -1
- package/dist/{manifest-python-deps-Dz1ryHIN.mjs → manifest-python-deps-DKrHcUZj.mjs} +47 -47
- package/package.json +1 -4
- package/dist/builtins/local-auth/homeassistant-integration.d.ts +0 -7
- package/dist/{model-download-service-Caj1kaSi.js → file-data-plane-DUHPHa-Y.js} +847 -847
- package/dist/{manifest-python-deps-BE6l8Y4W.js → manifest-python-deps-DafB-1hp.js} +47 -47
- package/dist/{resource-monitor-BkP504Vq.mjs → resource-monitor-BWmQ5i-o.mjs} +1 -1
- package/dist/{resource-monitor-DNNomR-i.js → resource-monitor-CdnzxBLP.js} +1 -1
package/dist/addon-runner.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-Cek0wNdY.js");
|
|
2
|
-
const require_manifest_python_deps = require("./manifest-python-deps-
|
|
2
|
+
const require_manifest_python_deps = require("./manifest-python-deps-DafB-1hp.js");
|
|
3
3
|
const require_custom_action_registry = require("./custom-action-registry-jY0NOZK8.js");
|
|
4
|
-
let node_v8 = require("node:v8");
|
|
5
|
-
node_v8 = require_chunk.__toESM(node_v8);
|
|
6
|
-
let node_fs = require("node:fs");
|
|
7
|
-
node_fs = require_chunk.__toESM(node_fs);
|
|
8
4
|
let node_path = require("node:path");
|
|
9
5
|
node_path = require_chunk.__toESM(node_path);
|
|
10
|
-
let
|
|
6
|
+
let node_fs = require("node:fs");
|
|
7
|
+
node_fs = require_chunk.__toESM(node_fs);
|
|
11
8
|
let node_module = require("node:module");
|
|
9
|
+
let node_v8 = require("node:v8");
|
|
10
|
+
node_v8 = require_chunk.__toESM(node_v8);
|
|
11
|
+
let _camstack_types_addon = require("@camstack/types/addon");
|
|
12
12
|
let node_url = require("node:url");
|
|
13
13
|
//#region src/kernel/moleculer/worker-device-restore.ts
|
|
14
14
|
/**
|
package/dist/addon-runner.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { I as createUdsLoggerWithControl, L as LocalChildClient, at as setWorkerNativeCapsChangeListener, bt as installManifestNativeDeps, i as createUdsAddonContext, nt as getWorkerNativeCapProvider, rt as getWorkerNativeCapSnapshot, st as validateProviderRegistrations, t as installManifestPythonDeps, xt as resolveAddonClass } from "./manifest-python-deps-DKrHcUZj.mjs";
|
|
2
2
|
import { t as CustomActionRegistry } from "./custom-action-registry-F__gp_VX.mjs";
|
|
3
3
|
import { register } from "node:module";
|
|
4
|
-
import * as v8 from "node:v8";
|
|
5
|
-
import * as fs from "node:fs";
|
|
6
4
|
import * as path$1 from "node:path";
|
|
5
|
+
import * as fs from "node:fs";
|
|
6
|
+
import * as v8 from "node:v8";
|
|
7
7
|
import { ReadinessRegistry, ReadinessTimeoutError, errMsg, isCollectionArrayMethodName, normalizeAddonInitResult } from "@camstack/types/addon";
|
|
8
8
|
import { pathToFileURL } from "node:url";
|
|
9
9
|
//#region src/kernel/moleculer/worker-device-restore.ts
|
package/dist/addon-utils.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("./chunk-Cek0wNdY.js");
|
|
3
|
-
const
|
|
3
|
+
const require_file_data_plane = require("./file-data-plane-DUHPHa-Y.js");
|
|
4
4
|
const require_custom_action_registry = require("./custom-action-registry-jY0NOZK8.js");
|
|
5
5
|
exports.CustomActionRegistry = require_custom_action_registry.CustomActionRegistry;
|
|
6
|
-
exports.ModelDownloadService =
|
|
7
|
-
exports.collectModelFiles =
|
|
8
|
-
exports.contentTypeFor =
|
|
9
|
-
exports.createFileDataPlaneHandler =
|
|
10
|
-
exports.deleteModelFromDisk =
|
|
11
|
-
exports.downloadFile =
|
|
12
|
-
exports.ensureModel =
|
|
13
|
-
exports.getModelFilePath =
|
|
14
|
-
exports.isModelDownloaded =
|
|
15
|
-
exports.parseRangeHeader =
|
|
6
|
+
exports.ModelDownloadService = require_file_data_plane.ModelDownloadService;
|
|
7
|
+
exports.collectModelFiles = require_file_data_plane.collectModelFiles;
|
|
8
|
+
exports.contentTypeFor = require_file_data_plane.contentTypeFor;
|
|
9
|
+
exports.createFileDataPlaneHandler = require_file_data_plane.createFileDataPlaneHandler;
|
|
10
|
+
exports.deleteModelFromDisk = require_file_data_plane.deleteModelFromDisk;
|
|
11
|
+
exports.downloadFile = require_file_data_plane.downloadFile;
|
|
12
|
+
exports.ensureModel = require_file_data_plane.ensureModel;
|
|
13
|
+
exports.getModelFilePath = require_file_data_plane.getModelFilePath;
|
|
14
|
+
exports.isModelDownloaded = require_file_data_plane.isModelDownloaded;
|
|
15
|
+
exports.parseRangeHeader = require_file_data_plane.parseRangeHeader;
|
package/dist/addon-utils.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { c as
|
|
1
|
+
import { c as collectModelFiles, f as ensureModel, h as isModelDownloaded, i as parseRangeHeader, l as deleteModelFromDisk, m as getModelFilePath, n as contentTypeFor, s as ModelDownloadService, t as createFileDataPlaneHandler, u as downloadFile } from "./file-data-plane-CuE_hBli.mjs";
|
|
2
2
|
import { t as CustomActionRegistry } from "./custom-action-registry-F__gp_VX.mjs";
|
|
3
3
|
export { CustomActionRegistry, ModelDownloadService, collectModelFiles, contentTypeFor, createFileDataPlaneHandler, deleteModelFromDisk, downloadFile, ensureModel, getModelFilePath, isModelDownloaded, parseRangeHeader };
|
|
@@ -3,13 +3,13 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-DCLoJf2T.js");
|
|
7
7
|
const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
|
|
8
8
|
let node_crypto = require("node:crypto");
|
|
9
|
-
let node_fs = require("node:fs");
|
|
10
|
-
node_fs = require_chunk.__toESM(node_fs);
|
|
11
9
|
let node_path = require("node:path");
|
|
12
10
|
node_path = require_chunk.__toESM(node_path);
|
|
11
|
+
let node_fs = require("node:fs");
|
|
12
|
+
node_fs = require_chunk.__toESM(node_fs);
|
|
13
13
|
//#region src/builtins/addon-pages-aggregator/dedupe-pages.ts
|
|
14
14
|
/** Stable identity for an addon page, independent of which node reported it. */
|
|
15
15
|
function pageKey(info) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Rt as EventCategory, _ as addonPagesCapability, dt as errMsg, ft as BaseAddon } from "../../dist-CnQXXnK1.mjs";
|
|
2
2
|
import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
|
|
3
3
|
import { createHash, randomUUID } from "node:crypto";
|
|
4
|
-
import * as fs from "node:fs";
|
|
5
4
|
import * as path$1 from "node:path";
|
|
5
|
+
import * as fs from "node:fs";
|
|
6
6
|
//#region src/builtins/addon-pages-aggregator/dedupe-pages.ts
|
|
7
7
|
/** Stable identity for an addon page, independent of which node reported it. */
|
|
8
8
|
function pageKey(info) {
|
|
@@ -3,13 +3,13 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-DCLoJf2T.js");
|
|
7
7
|
const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
|
|
8
8
|
let node_crypto = require("node:crypto");
|
|
9
|
-
let node_fs = require("node:fs");
|
|
10
|
-
node_fs = require_chunk.__toESM(node_fs);
|
|
11
9
|
let node_path = require("node:path");
|
|
12
10
|
node_path = require_chunk.__toESM(node_path);
|
|
11
|
+
let node_fs = require("node:fs");
|
|
12
|
+
node_fs = require_chunk.__toESM(node_fs);
|
|
13
13
|
//#region src/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.ts
|
|
14
14
|
/**
|
|
15
15
|
* Addon Widgets Aggregator — hub-local builtin that owns the singleton
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Rt as EventCategory, dt as errMsg, ft as BaseAddon, y as addonWidgetsCapability } from "../../dist-CnQXXnK1.mjs";
|
|
2
2
|
import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
|
|
3
3
|
import { createHash, randomUUID } from "node:crypto";
|
|
4
|
-
import * as fs from "node:fs";
|
|
5
4
|
import * as path$1 from "node:path";
|
|
5
|
+
import * as fs from "node:fs";
|
|
6
6
|
//#region src/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.ts
|
|
7
7
|
/**
|
|
8
8
|
* Addon Widgets Aggregator — hub-local builtin that owns the singleton
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-DCLoJf2T.js");
|
|
7
7
|
//#region src/builtins/alerts/prune-policy.ts
|
|
8
8
|
/**
|
|
9
9
|
* Ids older than `cutoffMs`, oldest first.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Rt as EventCategory, Tt as createEvent, b as alertsCapability, dt as errMsg, ft as BaseAddon, n as AlertSchema } from "../../dist-CnQXXnK1.mjs";
|
|
2
2
|
//#region src/builtins/alerts/prune-policy.ts
|
|
3
3
|
/**
|
|
4
4
|
* Ids older than `cutoffMs`, oldest first.
|
|
@@ -3,20 +3,20 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-DCLoJf2T.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
|
-
let
|
|
9
|
-
let
|
|
10
|
-
|
|
8
|
+
let buffer = require("buffer");
|
|
9
|
+
let node_fs_promises = require("node:fs/promises");
|
|
10
|
+
let node_fs_promises$1 = require_chunk.__toESM(node_fs_promises, 1);
|
|
11
|
+
node_fs_promises = require_chunk.__toESM(node_fs_promises);
|
|
11
12
|
let node_path = require("node:path");
|
|
12
13
|
let node_path$1 = require_chunk.__toESM(node_path, 1);
|
|
13
14
|
node_path = require_chunk.__toESM(node_path);
|
|
15
|
+
let node_fs = require("node:fs");
|
|
16
|
+
let node_fs$1 = require_chunk.__toESM(node_fs, 1);
|
|
17
|
+
node_fs = require_chunk.__toESM(node_fs);
|
|
14
18
|
let node_zlib = require("node:zlib");
|
|
15
19
|
node_zlib = require_chunk.__toESM(node_zlib);
|
|
16
|
-
let node_fs_promises = require("node:fs/promises");
|
|
17
|
-
let node_fs_promises$1 = require_chunk.__toESM(node_fs_promises, 1);
|
|
18
|
-
node_fs_promises = require_chunk.__toESM(node_fs_promises);
|
|
19
|
-
let buffer = require("buffer");
|
|
20
20
|
let node_events = require("node:events");
|
|
21
21
|
let node_stream = require("node:stream");
|
|
22
22
|
node_stream = require_chunk.__toESM(node_stream, 1);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Rt as EventCategory, S as backupCapability, ft as BaseAddon } from "../../dist-CnQXXnK1.mjs";
|
|
2
2
|
import { randomBytes, randomUUID } from "node:crypto";
|
|
3
|
-
import
|
|
4
|
-
import
|
|
3
|
+
import { Buffer as Buffer$1 } from "buffer";
|
|
4
|
+
import * as fsp from "node:fs/promises";
|
|
5
|
+
import jn from "node:fs/promises";
|
|
5
6
|
import * as path$1 from "node:path";
|
|
6
7
|
import path, { basename, join, posix, win32 } from "node:path";
|
|
8
|
+
import * as fs from "node:fs";
|
|
9
|
+
import Kt from "node:fs";
|
|
7
10
|
import * as zlib from "node:zlib";
|
|
8
|
-
import * as fsp from "node:fs/promises";
|
|
9
|
-
import jn from "node:fs/promises";
|
|
10
|
-
import { Buffer as Buffer$1 } from "buffer";
|
|
11
11
|
import { EventEmitter } from "node:events";
|
|
12
12
|
import As from "node:stream";
|
|
13
13
|
import { StringDecoder } from "node:string_decoder";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-DCLoJf2T.js");
|
|
7
7
|
const require_formatter = require("../../formatter-DqAKDlvN.js");
|
|
8
8
|
//#region src/builtins/console-logging/console-destination.ts
|
|
9
9
|
var LEVEL_RANK = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ft as BaseAddon, q as logDestinationCapability } from "../../dist-CnQXXnK1.mjs";
|
|
2
2
|
import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
|
|
3
3
|
//#region src/builtins/console-logging/console-destination.ts
|
|
4
4
|
var LEVEL_RANK = {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
3
|
-
const require_dist = require("../../dist-
|
|
3
|
+
const require_dist = require("../../dist-DCLoJf2T.js");
|
|
4
4
|
let node_crypto = require("node:crypto");
|
|
5
|
-
let node_path = require("node:path");
|
|
6
|
-
node_path = require_chunk.__toESM(node_path);
|
|
7
5
|
let node_fs_promises = require("node:fs/promises");
|
|
8
6
|
node_fs_promises = require_chunk.__toESM(node_fs_promises);
|
|
7
|
+
let node_path = require("node:path");
|
|
8
|
+
node_path = require_chunk.__toESM(node_path);
|
|
9
9
|
//#region src/builtins/core-blocks/block-package.ts
|
|
10
10
|
/**
|
|
11
11
|
* Turning a stored block into something the addon runner can fork.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { D as coreBlocksCapability, E as coreBlockIdFromAddonId, T as coreBlockAddonId, c as CoreBlockSchema,
|
|
1
|
+
import { D as coreBlocksCapability, E as coreBlockIdFromAddonId, T as coreBlockAddonId, c as CoreBlockSchema, ft as BaseAddon, l as DeclaredDevices, o as CORE_BLOCKS_ADDON_ID, s as CORE_BLOCK_ADDON_PREFIX } from "../../dist-CnQXXnK1.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
|
-
import * as path$1 from "node:path";
|
|
4
3
|
import * as fs from "node:fs/promises";
|
|
4
|
+
import * as path$1 from "node:path";
|
|
5
5
|
//#region src/builtins/core-blocks/block-package.ts
|
|
6
6
|
/**
|
|
7
7
|
* Turning a stored block into something the addon runner can fork.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { AdoptionJob, IScopedLogger } from '@camstack/types';
|
|
2
|
+
/**
|
|
3
|
+
* The slice of a `device-adoption` provider this engine drives. Structural on
|
|
4
|
+
* purpose: the real provider satisfies it, and a spec can exercise the whole
|
|
5
|
+
* loop without standing up a registry.
|
|
6
|
+
*/
|
|
7
|
+
export interface AdoptionJobProvider {
|
|
8
|
+
listCandidates(input: {
|
|
9
|
+
integrationId: string;
|
|
10
|
+
page: number;
|
|
11
|
+
pageSize: number;
|
|
12
|
+
filter?: string;
|
|
13
|
+
}): Promise<{
|
|
14
|
+
readonly candidates: readonly {
|
|
15
|
+
readonly childNativeId: string;
|
|
16
|
+
readonly alreadyAdopted?: boolean;
|
|
17
|
+
}[];
|
|
18
|
+
}>;
|
|
19
|
+
adopt(input: {
|
|
20
|
+
integrationId: string;
|
|
21
|
+
childNativeIds: readonly string[];
|
|
22
|
+
filter?: string;
|
|
23
|
+
importLocations?: boolean;
|
|
24
|
+
perCandidate?: Record<string, {
|
|
25
|
+
name?: string;
|
|
26
|
+
hiddenChildIds?: string[];
|
|
27
|
+
}>;
|
|
28
|
+
}): Promise<{
|
|
29
|
+
readonly adopted: readonly {
|
|
30
|
+
readonly childNativeId: string;
|
|
31
|
+
readonly parentDeviceId: number;
|
|
32
|
+
readonly accessoryDeviceIds: readonly number[];
|
|
33
|
+
}[];
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
36
|
+
export interface AdoptionJobEngineDeps {
|
|
37
|
+
/** Resolve the integration's adoption provider for an `addonId` pin. */
|
|
38
|
+
resolveProvider(addonId: string): Promise<AdoptionJobProvider>;
|
|
39
|
+
readonly logger: IScopedLogger;
|
|
40
|
+
readonly now?: () => number;
|
|
41
|
+
readonly newId?: () => string;
|
|
42
|
+
}
|
|
43
|
+
export interface StartAdoptionJobInput {
|
|
44
|
+
readonly addonId: string;
|
|
45
|
+
readonly integrationId: string;
|
|
46
|
+
readonly childNativeIds: readonly string[];
|
|
47
|
+
readonly filter?: string;
|
|
48
|
+
readonly importLocations?: boolean;
|
|
49
|
+
readonly perCandidate?: Record<string, {
|
|
50
|
+
name?: string;
|
|
51
|
+
hiddenChildIds?: string[];
|
|
52
|
+
}>;
|
|
53
|
+
}
|
|
54
|
+
export declare class AdoptionJobEngine {
|
|
55
|
+
private readonly deps;
|
|
56
|
+
private readonly jobs;
|
|
57
|
+
private seq;
|
|
58
|
+
constructor(deps: AdoptionJobEngineDeps);
|
|
59
|
+
private now;
|
|
60
|
+
private newId;
|
|
61
|
+
/**
|
|
62
|
+
* Accept the batch and return immediately. The provider is resolved BEFORE
|
|
63
|
+
* returning so an unroutable `addonId` is refused at the call the operator
|
|
64
|
+
* made, not buried in a job they have to go looking for.
|
|
65
|
+
*/
|
|
66
|
+
start(input: StartAdoptionJobInput): Promise<{
|
|
67
|
+
jobId: string;
|
|
68
|
+
}>;
|
|
69
|
+
get(jobId: string): AdoptionJob | null;
|
|
70
|
+
list(filter: {
|
|
71
|
+
addonId?: string;
|
|
72
|
+
integrationId?: string;
|
|
73
|
+
}): readonly AdoptionJob[];
|
|
74
|
+
/** Cooperative cancel — the in-flight candidate finishes, the rest do not start. */
|
|
75
|
+
cancel(jobId: string): boolean;
|
|
76
|
+
/** Test-only: await the detached loop. Never called by production code. */
|
|
77
|
+
waitForTest(jobId: string): Promise<void>;
|
|
78
|
+
private prune;
|
|
79
|
+
private run;
|
|
80
|
+
/**
|
|
81
|
+
* One `listCandidates` snapshot at job start. A read that FAILS must not be
|
|
82
|
+
* read as "nothing is adopted" — that would send every candidate to the
|
|
83
|
+
* provider and turn a safe retry back into a wall of duplicate-stableId
|
|
84
|
+
* errors — so a failure yields an empty set AND a warning, and the
|
|
85
|
+
* per-candidate failure path stays the backstop.
|
|
86
|
+
*/
|
|
87
|
+
private alreadyAdopted;
|
|
88
|
+
private adoptOne;
|
|
89
|
+
}
|
|
@@ -48,6 +48,8 @@ export declare class DeviceManagerAddon extends BaseAddon {
|
|
|
48
48
|
* the D3 re-handshake after device restore is the reliable replacement.
|
|
49
49
|
*/
|
|
50
50
|
private remoteNativeCaps;
|
|
51
|
+
/** Background adoption jobs — lazily constructed (needs `ctx.logger`). */
|
|
52
|
+
private adoptionJobEngine;
|
|
51
53
|
/** The runtime-state mirror, asserted present (constructed in onInitialize). */
|
|
52
54
|
private get stateMirror();
|
|
53
55
|
/** Build the `ProviderHost` the extracted provider-method modules
|
|
@@ -57,6 +59,12 @@ export declare class DeviceManagerAddon extends BaseAddon {
|
|
|
57
59
|
* `remoteNativeCaps` is mutated in place (never reassigned) so a direct
|
|
58
60
|
* reference preserves the live semantics. */
|
|
59
61
|
private get providerHost();
|
|
62
|
+
/**
|
|
63
|
+
* Background adoption jobs. In-RAM and process-lifetime: a restart forgets
|
|
64
|
+
* them, which is safe because adoption is keyed by a stable id — re-running a
|
|
65
|
+
* job re-adopts nothing (see `AdoptionJobEngine`).
|
|
66
|
+
*/
|
|
67
|
+
private get adoptionJobsImpl();
|
|
60
68
|
/** Wait for a device-provider by addonId, returning null on timeout. */
|
|
61
69
|
private waitDeviceProvider;
|
|
62
70
|
/** Require a device-provider by addonId — throws if not found. */
|