@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.
Files changed (70) hide show
  1. package/dist/addon-runner.js +6 -6
  2. package/dist/addon-runner.mjs +3 -3
  3. package/dist/addon-utils.js +11 -11
  4. package/dist/addon-utils.mjs +1 -1
  5. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +3 -3
  6. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +2 -2
  7. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +3 -3
  8. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +2 -2
  9. package/dist/builtins/alerts/alerts.addon.js +1 -1
  10. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  11. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +8 -8
  12. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +6 -6
  13. package/dist/builtins/console-logging/index.js +1 -1
  14. package/dist/builtins/console-logging/index.mjs +1 -1
  15. package/dist/builtins/core-blocks/core-blocks.addon.js +3 -3
  16. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  17. package/dist/builtins/device-manager/adoption-job-engine.d.ts +89 -0
  18. package/dist/builtins/device-manager/device-manager.addon.d.ts +8 -0
  19. package/dist/builtins/device-manager/device-manager.addon.js +330 -3
  20. package/dist/builtins/device-manager/device-manager.addon.mjs +330 -3
  21. package/dist/builtins/device-manager/device-provider-context.d.ts +3 -0
  22. package/dist/builtins/device-manager/device-queries.d.ts +3 -0
  23. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  24. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  25. package/dist/builtins/hub-forwarder/index.js +1 -1
  26. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  27. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  28. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  29. package/dist/builtins/local-auth/index.d.ts +0 -1
  30. package/dist/builtins/local-auth/index.js +0 -1
  31. package/dist/builtins/local-auth/index.mjs +2 -2
  32. package/dist/builtins/local-auth/local-auth.addon.js +129 -173
  33. package/dist/builtins/local-auth/local-auth.addon.mjs +130 -173
  34. package/dist/builtins/local-network/local-network.addon.js +1 -1
  35. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  36. package/dist/builtins/loki-logging/index.js +1 -1
  37. package/dist/builtins/loki-logging/index.mjs +1 -1
  38. package/dist/builtins/native-metrics/native-metrics.addon.js +5 -5
  39. package/dist/builtins/native-metrics/native-metrics.addon.mjs +4 -4
  40. package/dist/builtins/platform-probe/index.js +4 -4
  41. package/dist/builtins/platform-probe/index.mjs +3 -3
  42. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  43. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  44. package/dist/builtins/snapshot/index.js +2 -2
  45. package/dist/builtins/snapshot/index.mjs +2 -2
  46. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +4 -4
  47. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +3 -3
  48. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +1 -1
  49. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -1
  50. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +3 -3
  51. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +2 -2
  52. package/dist/builtins/system-config/system-config.addon.js +1 -1
  53. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  54. package/dist/builtins/winston-logging/index.js +1 -1
  55. package/dist/builtins/winston-logging/index.mjs +1 -1
  56. package/dist/{dist-D2J8RJ7m.mjs → dist-CnQXXnK1.mjs} +296 -2
  57. package/dist/{dist-Dhpte164.js → dist-DCLoJf2T.js} +295 -7
  58. package/dist/{model-download-service-CTBHzORJ.mjs → file-data-plane-CuE_hBli.mjs} +848 -848
  59. package/dist/index.d.ts +73 -81
  60. package/dist/index.js +1379 -1346
  61. package/dist/index.mjs +1362 -1328
  62. package/dist/kernel/capability-registry.d.ts +26 -0
  63. package/dist/kernel/config-schema.d.ts +1 -1
  64. package/dist/{manifest-python-deps-Dz1ryHIN.mjs → manifest-python-deps-DKrHcUZj.mjs} +47 -47
  65. package/package.json +1 -4
  66. package/dist/builtins/local-auth/homeassistant-integration.d.ts +0 -7
  67. package/dist/{model-download-service-Caj1kaSi.js → file-data-plane-DUHPHa-Y.js} +847 -847
  68. package/dist/{manifest-python-deps-BE6l8Y4W.js → manifest-python-deps-DafB-1hp.js} +47 -47
  69. package/dist/{resource-monitor-BkP504Vq.mjs → resource-monitor-BWmQ5i-o.mjs} +1 -1
  70. package/dist/{resource-monitor-DNNomR-i.js → resource-monitor-CdnzxBLP.js} +1 -1
@@ -3200,6 +3200,104 @@ zod.z.object({
3200
3200
  })
3201
3201
  });
3202
3202
  /**
3203
+ * Adoption job — the background form of `device-adoption.adopt`.
3204
+ *
3205
+ * ## Why this exists
3206
+ *
3207
+ * `adopt({childNativeIds: [...]})` materialises one CamStack device per
3208
+ * candidate PLUS every accessory child, and the whole array shares ONE UDS
3209
+ * request deadline (60s). Measured on the live hub against Home Assistant:
3210
+ * each device the kernel creates costs ~450 ms — `devices.create` pre-seeds
3211
+ * meta with up to eleven SEQUENTIAL round trips (`setName`, `setType`,
3212
+ * `setRole`, … `persistConfig`) before the class is constructed — and an
3213
+ * accessory child costs the same as its parent. So the real unit of work is
3214
+ * the CHILD, not the candidate:
3215
+ *
3216
+ * - 25 candidates averaging 6 children → ~150 devices → **>60s, times out**
3217
+ * - ONE candidate with 217 children → ~217 devices → **>60s, times out**
3218
+ *
3219
+ * That second line is why this is a job and not a smaller batch. No chunking,
3220
+ * no bounded concurrency over candidates and no per-call tuning can fix a
3221
+ * shape where **N=1 already exceeds the deadline** — the count that blows the
3222
+ * budget is the source system's accessory fan-out, which the operator does not
3223
+ * choose and cannot see. A design that only works below some N is the same bug
3224
+ * deferred.
3225
+ *
3226
+ * ## What the timeout did NOT do
3227
+ *
3228
+ * It did not stop the work. The UDS deadline ends the CALLER's wait; the
3229
+ * provider's loop runs to completion. Measured: a 25-candidate adopt that
3230
+ * "failed" at 60s had adopted 17 by 87s and all 25 by ~130s. The operator saw
3231
+ * an error and had no way to learn that. Every field below exists so that
3232
+ * question has an answer.
3233
+ *
3234
+ * ## Idempotency
3235
+ *
3236
+ * Jobs are in-RAM; a restart forgets them. That is safe here because adoption
3237
+ * is keyed by a stable id (`ha:<broker>:dev:<nativeId>` and equivalents), so
3238
+ * re-running a job re-adopts nothing: an already-adopted candidate is SKIPPED
3239
+ * by the engine before any provider call and lands in `alreadyAdopted`. It is
3240
+ * never a duplicate device, and never an error the operator has to interpret.
3241
+ */
3242
+ var AdoptionJobStateSchema = zod.z.enum([
3243
+ "running",
3244
+ "done",
3245
+ "failed",
3246
+ "cancelled"
3247
+ ]);
3248
+ /**
3249
+ * Per-candidate result. Every candidate the job was asked to adopt ends in
3250
+ * exactly one of these buckets — there is no silent drop, and the operator can
3251
+ * always answer "which of my 25 landed?".
3252
+ *
3253
+ * - `adopted` — created now by this job.
3254
+ * - `already-adopted` — a device for this candidate existed before the job
3255
+ * reached it (a re-run, or a retry after a timeout). Not an error.
3256
+ * - `failed` — the provider threw; `error` carries the message.
3257
+ * - `cancelled` — the operator cancelled before this candidate was reached.
3258
+ */
3259
+ var AdoptionOutcomeSchema = zod.z.enum([
3260
+ "adopted",
3261
+ "already-adopted",
3262
+ "failed",
3263
+ "cancelled"
3264
+ ]);
3265
+ var AdoptionCandidateResultSchema = zod.z.object({
3266
+ childNativeId: zod.z.string(),
3267
+ outcome: AdoptionOutcomeSchema,
3268
+ /** The materialised parent device id — null for `failed` / `cancelled`. */
3269
+ parentDeviceId: zod.z.number().int().nonnegative().nullable(),
3270
+ /** Accessory children created for this candidate. */
3271
+ accessoryCount: zod.z.number().int().nonnegative(),
3272
+ /** Failure message; null unless `outcome === 'failed'`. */
3273
+ error: zod.z.string().nullable()
3274
+ });
3275
+ var AdoptionJobSchema = zod.z.object({
3276
+ jobId: zod.z.string(),
3277
+ /** The integration provider this job adopts through (the `addonId` pin). */
3278
+ addonId: zod.z.string(),
3279
+ integrationId: zod.z.string(),
3280
+ state: AdoptionJobStateSchema,
3281
+ /** Candidates the job was asked to adopt. Known up front, so never null. */
3282
+ total: zod.z.number().int().nonnegative(),
3283
+ /** Candidates that have reached a terminal bucket. */
3284
+ processed: zod.z.number().int().nonnegative(),
3285
+ adopted: zod.z.number().int().nonnegative(),
3286
+ alreadyAdopted: zod.z.number().int().nonnegative(),
3287
+ failed: zod.z.number().int().nonnegative(),
3288
+ /** Accessory child devices created across every candidate — the real unit
3289
+ * of work, surfaced so a slow job is legible rather than mysterious. */
3290
+ accessoriesCreated: zod.z.number().int().nonnegative(),
3291
+ /** The candidate currently being adopted; null when idle or finished. */
3292
+ currentChildNativeId: zod.z.string().nullable(),
3293
+ /** One entry per candidate, in the order they were processed. */
3294
+ results: zod.z.array(AdoptionCandidateResultSchema).readonly(),
3295
+ startedAt: zod.z.number(),
3296
+ finishedAt: zod.z.number().nullable(),
3297
+ /** Set only when the job itself broke (not a per-candidate failure). */
3298
+ error: zod.z.string().nullable()
3299
+ });
3300
+ /**
3203
3301
  * Per-camera FUNCTION SWITCHES — the one coherent on/off surface over the
3204
3302
  * pipeline functions an operator thinks in terms of.
3205
3303
  *
@@ -9484,6 +9582,31 @@ var deviceManagerCapability = {
9484
9582
  auth: "admin"
9485
9583
  }),
9486
9584
  /**
9585
+ * Start a background adoption and return its `jobId` immediately. The job
9586
+ * adopts ONE candidate per provider call, so no single request can exceed
9587
+ * the transport deadline, and it skips candidates that are already adopted
9588
+ * — which makes re-submitting a batch after a timeout safe and silent
9589
+ * rather than a wall of duplicate-stableId errors.
9590
+ */
9591
+ adoptionStartJob: method(AdoptInputSchema.extend({ addonId: zod.z.string() }), zod.z.object({ jobId: zod.z.string() }), {
9592
+ kind: "mutation",
9593
+ auth: "admin"
9594
+ }),
9595
+ /**
9596
+ * Adoption jobs for an integration, newest first. This is the answer to
9597
+ * "which of my 25 landed?" — `results` carries one entry per candidate,
9598
+ * every one of them in a named bucket.
9599
+ */
9600
+ adoptionListJobs: method(zod.z.object({
9601
+ addonId: zod.z.string(),
9602
+ integrationId: zod.z.string().optional()
9603
+ }), zod.z.array(AdoptionJobSchema).readonly(), { auth: "admin" }),
9604
+ /** Cooperative cancel: the in-flight candidate finishes, the rest never start. */
9605
+ adoptionCancelJob: method(zod.z.object({ jobId: zod.z.string() }), zod.z.object({ cancelled: zod.z.boolean() }), {
9606
+ kind: "mutation",
9607
+ auth: "admin"
9608
+ }),
9609
+ /**
9487
9610
  * Re-sync a device with its source via the device-adoption provider of the
9488
9611
  * device's OWNING addon (resolved from `camDeviceId`). Unlike the singleton
9489
9612
  * `device-adoption.resync`, this routes to the correct integration so a
@@ -12899,6 +13022,65 @@ var ScopedTokenSchema = zod.z.object({
12899
13022
  * Each provider returns a static descriptor; the core enumerates them
12900
13023
  * to validate the `integration=` query param and resolve the consent
12901
13024
  * label + the scopes baked into the issued token.
13025
+ *
13026
+ * ## Declaring one
13027
+ *
13028
+ * An OAuth client is integration-specific knowledge — who the client is, what
13029
+ * it may ask for, where it may be sent — so it is declared by the ADDON that
13030
+ * owns the integration, never by the kernel and never as a branch inside
13031
+ * `oauth2-routes.ts` ([D101](../../../../docs/decisions/adr-0101.md)). Three
13032
+ * steps, no others:
13033
+ *
13034
+ * 1. Add `{ "name": "oauth-integration" }` to the addon's `camstack.addons[]`
13035
+ * manifest entry. This is also what tells the hub, at addon-LOAD time, that
13036
+ * a descriptor is owed — see "the boot window" below.
13037
+ * 2. Return a provider from `onInitialize()`:
13038
+ *
13039
+ * ```ts
13040
+ * const provider: IOauthIntegrationProvider = {
13041
+ * getDescriptor: async () => ({
13042
+ * integrationId: 'my-thing', // the `integration=` query param
13043
+ * displayName: 'My Thing',
13044
+ * requestedScopes: [ … ], // see below
13045
+ * allowedRedirectPrefixes: ['https://callback.example/'],
13046
+ * }),
13047
+ * }
13048
+ * return [{ capability: oauthIntegrationCapability, provider }]
13049
+ * ```
13050
+ *
13051
+ * The descriptor must be **static** — it is read on the authorize path, so
13052
+ * never put an await on network or disk behind it, and never register it
13053
+ * behind one either (a provider is registered only once `onInitialize`
13054
+ * RETURNS, so anything awaited before the return delays linking).
13055
+ * 3. Nothing else. There is no allow-list to join, no id to register with the
13056
+ * core, and no per-integration branch anywhere: `/api/oauth2/authorize` and
13057
+ * `/api/oauth2/integrations` are built from this collection alone.
13058
+ *
13059
+ * **Scopes.** `requestedScopes` is baked into every token this integration is
13060
+ * ever issued and the operator consents to it once. Derive it from the tRPC
13061
+ * paths the client calls **with that token**, against `METHOD_ACCESS_MAP`, and
13062
+ * prefer a narrow `capability:` scope to a `category:` one unless the client
13063
+ * genuinely needs a whole family. A category scope grants every future member
13064
+ * of that category too. `category:system [create]` has been rejected once and
13065
+ * should stay rejected: it hands `addons.installPackage` to an integration.
13066
+ *
13067
+ * What it does NOT cover: calls the ADDON makes over `ctx.api`, which run as
13068
+ * the addon and are not scope-checked. Alexa's descriptor is narrower than
13069
+ * Home Assistant's for exactly that reason — its Lambda posts directives and
13070
+ * the addon does the work, while the Home Assistant component calls tRPC
13071
+ * directly with the token. So `requestedScopes` describes the blast radius of
13072
+ * the GRANT, not the reach of the integration; do not widen one to describe the
13073
+ * other.
13074
+ *
13075
+ * **The boot window.** An addon registers its provider after its runner forks
13076
+ * and initialises, so between hub start and that moment this collection is
13077
+ * incomplete and an `integrationId` can be legitimately absent. The core does
13078
+ * not wait, poll or cache around this ([D3](../../../../docs/decisions/adr-0003.md)):
13079
+ * it compares the manifest declarers against the registered providers and
13080
+ * answers `503 temporarily_unavailable` (with `Retry-After` and the pending
13081
+ * addon ids) instead of `400 unknown integration`, and reports
13082
+ * `complete: false` on `GET /api/oauth2/integrations`. A client should retry
13083
+ * while the list is incomplete rather than conclude the hub cannot do OAuth.
12902
13084
  */
12903
13085
  var OauthIntegrationDescriptorSchema = zod.z.object({
12904
13086
  /** Stable id used as the `integration=` query param, e.g. 'export-alexa'. */
@@ -19797,6 +19979,45 @@ onColorChanged: { data: zod.z.object({
19797
19979
  */
19798
19980
  runtimeState: ColorStatusSchema
19799
19981
  };
19982
+ var ConnectionTestOutcomeSchema = zod.z.discriminatedUnion("outcome", [
19983
+ zod.z.object({
19984
+ outcome: zod.z.literal("validated"),
19985
+ /** Round-trip of the sign-in, when the provider measured it. */
19986
+ latencyMs: zod.z.number().nonnegative().optional(),
19987
+ /** Optional human detail worth showing next to the tick
19988
+ * ("3 devices visible on this account"). */
19989
+ detail: zod.z.string().optional()
19990
+ }).strict(),
19991
+ zod.z.object({
19992
+ outcome: zod.z.literal("rejected"),
19993
+ error: zod.z.string()
19994
+ }).strict(),
19995
+ zod.z.object({
19996
+ outcome: zod.z.literal("inconclusive"),
19997
+ error: zod.z.string()
19998
+ }).strict()
19999
+ ]);
20000
+ var ConnectionTestInputSchema = zod.z.object({
20001
+ /** Candidate integration settings, exactly as the create form collected them. */
20002
+ settings: zod.z.record(zod.z.string(), zod.z.unknown()) });
20003
+ /**
20004
+ * What the provider's test actually DOES, so the UI can say it in words before
20005
+ * the operator presses the button ("Signs in to the Dreo cloud"). Purely
20006
+ * descriptive — it never changes routing.
20007
+ */
20008
+ var ConnectionTestDescriptorSchema = zod.z.object({ label: zod.z.string() });
20009
+ var connectionTestCapability = {
20010
+ name: "connection-test",
20011
+ scope: "system",
20012
+ mode: "collection",
20013
+ methods: {
20014
+ testSettings: method(ConnectionTestInputSchema, ConnectionTestOutcomeSchema, {
20015
+ kind: "mutation",
20016
+ auth: "admin"
20017
+ }),
20018
+ describeTest: method(zod.z.void(), ConnectionTestDescriptorSchema, { auth: "admin" })
20019
+ }
20020
+ };
19800
20021
  /**
19801
20022
  * Upstream-system connectivity sensor — distinct from `device-status`,
19802
20023
  * which is the kernel-managed online/offline flag for the device's
@@ -21240,15 +21461,57 @@ var AvailableIntegrationTypeSchema = zod.z.object({
21240
21461
  * flow can import (e.g. HA areas). Drives the adopt modal's "import
21241
21462
  * locations" checkbox. Provider-declared in the addon manifest. */
21242
21463
  supportsLocationImport: zod.z.boolean(),
21464
+ /**
21465
+ * True when this integration DECLARES a pre-creation test (the
21466
+ * `connection-test` cap, or a broker whose settings it stores). Drives the
21467
+ * Test button: an integration that cannot be tested must say so up front
21468
+ * rather than offering a button that always answers the same nonsense.
21469
+ */
21470
+ canTest: zod.z.boolean(),
21243
21471
  existingInstances: zod.z.array(zod.z.object({
21244
21472
  id: zod.z.string(),
21245
21473
  name: zod.z.string()
21246
21474
  })),
21247
21475
  canAdd: zod.z.boolean()
21248
21476
  });
21477
+ /**
21478
+ * Why a test could not be answered as a plain boolean.
21479
+ *
21480
+ * `success` alone collapsed four different situations into one red box, and the
21481
+ * one that mattered most — "nobody ever asked the remote anything" — looked
21482
+ * exactly like "the remote said no". The status is the discriminator:
21483
+ *
21484
+ * - `validated` — a provider-declared test ran and the remote ACCEPTED.
21485
+ * - `rejected` — a provider-declared test ran and the remote REFUSED.
21486
+ * The only status that blocks `integrations.create`.
21487
+ * - `inconclusive` — a test IS declared but could not complete (timeout,
21488
+ * DNS, 5xx). Nothing was observed; not a failure.
21489
+ * - `unsupported` — this integration declares NO test. Nothing was
21490
+ * observed either; not a failure, and not a pass.
21491
+ *
21492
+ * `unsupported` and `inconclusive` both carry `success: false` so an older
21493
+ * client can never read them as a green tick, and both carry an `error` string
21494
+ * that SAYS the test did not run rather than inventing a failure.
21495
+ */
21496
+ var TestConnectionStatusEnum = zod.z.enum([
21497
+ "validated",
21498
+ "rejected",
21499
+ "inconclusive",
21500
+ "unsupported"
21501
+ ]);
21249
21502
  var TestConnectionResultSchema$1 = zod.z.object({
21503
+ /** True ONLY for `validated`. Never true for a test that did not run. */
21250
21504
  success: zod.z.boolean(),
21251
- error: zod.z.string().optional()
21505
+ error: zod.z.string().optional(),
21506
+ /** Optional for wire back-compat with clients built before the tri-state;
21507
+ * the server always sets it. */
21508
+ status: TestConnectionStatusEnum.optional(),
21509
+ /** Addon id whose declared test answered — `null` when none did. Lets the UI
21510
+ * attribute a result instead of blaming "the integration". */
21511
+ testedBy: zod.z.string().nullable().optional(),
21512
+ latencyMs: zod.z.number().nonnegative().optional(),
21513
+ /** Human detail from a `validated` result ("3 devices on this account"). */
21514
+ detail: zod.z.string().optional()
21252
21515
  });
21253
21516
  var CreateIntegrationInputSchema = zod.z.object({
21254
21517
  addonId: zod.z.string(),
@@ -27046,6 +27309,7 @@ var ALL_CAPABILITY_DEFINITIONS = [
27046
27309
  carbonMonoxideCapability,
27047
27310
  climateControlCapability,
27048
27311
  colorCapability,
27312
+ connectionTestCapability,
27049
27313
  connectivityCapability,
27050
27314
  consumablesCapability,
27051
27315
  contactCapability,
@@ -27938,6 +28202,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
27938
28202
  addonId: null,
27939
28203
  access: "create"
27940
28204
  },
28205
+ "connectionTest.describeTest": {
28206
+ capName: "connection-test",
28207
+ capScope: "system",
28208
+ addonId: null,
28209
+ access: "view"
28210
+ },
28211
+ "connectionTest.testSettings": {
28212
+ capName: "connection-test",
28213
+ capScope: "system",
28214
+ addonId: null,
28215
+ access: "create"
28216
+ },
27941
28217
  "consumables.reset": {
27942
28218
  capName: "consumables",
27943
28219
  capScope: "device",
@@ -28328,6 +28604,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
28328
28604
  addonId: null,
28329
28605
  access: "create"
28330
28606
  },
28607
+ "deviceManager.adoptionCancelJob": {
28608
+ capName: "device-manager",
28609
+ capScope: "system",
28610
+ addonId: null,
28611
+ access: "create"
28612
+ },
28331
28613
  "deviceManager.adoptionListCandidateFilters": {
28332
28614
  capName: "device-manager",
28333
28615
  capScope: "system",
@@ -28340,6 +28622,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
28340
28622
  addonId: null,
28341
28623
  access: "view"
28342
28624
  },
28625
+ "deviceManager.adoptionListJobs": {
28626
+ capName: "device-manager",
28627
+ capScope: "system",
28628
+ addonId: null,
28629
+ access: "view"
28630
+ },
28343
28631
  "deviceManager.adoptionRefresh": {
28344
28632
  capName: "device-manager",
28345
28633
  capScope: "system",
@@ -28358,6 +28646,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
28358
28646
  addonId: null,
28359
28647
  access: "create"
28360
28648
  },
28649
+ "deviceManager.adoptionStartJob": {
28650
+ capName: "device-manager",
28651
+ capScope: "system",
28652
+ addonId: null,
28653
+ access: "create"
28654
+ },
28361
28655
  "deviceManager.allocateDeviceId": {
28362
28656
  capName: "device-manager",
28363
28657
  capScope: "system",
@@ -33382,12 +33676,6 @@ Object.defineProperty(exports, "normalizeUnit", {
33382
33676
  return normalizeUnit;
33383
33677
  }
33384
33678
  });
33385
- Object.defineProperty(exports, "oauthIntegrationCapability", {
33386
- enumerable: true,
33387
- get: function() {
33388
- return oauthIntegrationCapability;
33389
- }
33390
- });
33391
33679
  Object.defineProperty(exports, "objectInputDeclaresAddonId", {
33392
33680
  enumerable: true,
33393
33681
  get: function() {