@camstack/server 0.2.2 → 1.0.1

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 (234) hide show
  1. package/{src/agent-status-page.ts → dist/agent-status-page.js} +30 -45
  2. package/dist/api/addon-upload.js +441 -0
  3. package/dist/api/addons-custom.router.js +91 -0
  4. package/dist/api/auth-whoami.js +55 -0
  5. package/dist/api/bridge-addons.router.js +109 -0
  6. package/dist/api/capabilities.router.js +229 -0
  7. package/dist/api/core/addon-settings.router.js +117 -0
  8. package/dist/api/core/agents.router.js +73 -0
  9. package/dist/api/core/auth.router.js +286 -0
  10. package/dist/api/core/bulk-update-coordinator.js +229 -0
  11. package/dist/api/core/cap-providers.js +1124 -0
  12. package/dist/api/core/capabilities.router.js +138 -0
  13. package/dist/api/core/collection-preference.js +17 -0
  14. package/dist/api/core/event-bus-proxy.router.js +45 -0
  15. package/dist/api/core/hwaccel.router.js +91 -0
  16. package/dist/api/core/live-events.router.js +61 -0
  17. package/dist/api/core/logs.router.js +172 -0
  18. package/dist/api/core/notifications.router.js +67 -0
  19. package/dist/api/core/repl.router.js +35 -0
  20. package/dist/api/core/settings-backend.router.js +121 -0
  21. package/dist/api/core/stream-probe.router.js +58 -0
  22. package/dist/api/core/system-events.router.js +100 -0
  23. package/dist/api/health/health.routes.js +68 -0
  24. package/{src/api/oauth2/consent-page.ts → dist/api/oauth2/consent-page.js} +11 -20
  25. package/dist/api/oauth2/oauth2-routes.js +219 -0
  26. package/dist/api/trpc/cap-mount-helpers.js +194 -0
  27. package/dist/api/trpc/cap-route-error-formatter.js +133 -0
  28. package/dist/api/trpc/client-ip.js +147 -0
  29. package/dist/api/trpc/core-cap-bridge.js +115 -0
  30. package/dist/api/trpc/generated-cap-mounts.js +388 -0
  31. package/dist/api/trpc/generated-cap-routers.js +7635 -0
  32. package/dist/api/trpc/scope-access.js +93 -0
  33. package/dist/api/trpc/trpc.context.js +184 -0
  34. package/dist/api/trpc/trpc.middleware.js +139 -0
  35. package/dist/api/trpc/trpc.router.js +188 -0
  36. package/dist/auth/session-cookie.js +47 -0
  37. package/dist/boot/boot-config.js +241 -0
  38. package/dist/boot/integration-id-backfill.js +76 -0
  39. package/dist/boot/post-boot.service.js +85 -0
  40. package/dist/core/addon/addon-call-gateway.js +99 -0
  41. package/dist/core/addon/addon-package.service.js +1560 -0
  42. package/dist/core/addon/addon-registry.service.js +2739 -0
  43. package/{src/core/addon/addon-row-manifest.ts → dist/core/addon/addon-row-manifest.js} +5 -5
  44. package/dist/core/addon/addon-search.service.js +62 -0
  45. package/dist/core/addon/addon-settings-provider.js +102 -0
  46. package/dist/core/addon/addon.tokens.js +5 -0
  47. package/dist/core/addon-bridge/addon-bridge.service.js +145 -0
  48. package/dist/core/addon-pages/addon-pages.service.js +107 -0
  49. package/dist/core/addon-widgets/addon-widgets.service.js +120 -0
  50. package/dist/core/agent/agent-registry.service.js +477 -0
  51. package/dist/core/auth/auth.service.js +10 -0
  52. package/dist/core/capability/capability.service.js +58 -0
  53. package/dist/core/config/config.schema.js +7 -0
  54. package/dist/core/config/config.service.js +10 -0
  55. package/dist/core/events/event-bus.service.js +83 -0
  56. package/dist/core/feature/feature.service.js +10 -0
  57. package/dist/core/lifecycle/lifecycle-state-machine.js +6 -0
  58. package/dist/core/logging/log-ring-buffer.js +6 -0
  59. package/dist/core/logging/logging.service.js +130 -0
  60. package/dist/core/logging/scoped-logger.js +6 -0
  61. package/dist/core/moleculer/cap-call-fn.js +50 -0
  62. package/dist/core/moleculer/cap-route-authority.js +122 -0
  63. package/dist/core/moleculer/moleculer.service.js +898 -0
  64. package/dist/core/network/network-quality.service.js +7 -0
  65. package/dist/core/notification/notification-wrapper.service.js +33 -0
  66. package/dist/core/notification/toast-wrapper.service.js +25 -0
  67. package/dist/core/provider/provider.tokens.js +4 -0
  68. package/dist/core/repl/repl-engine.service.js +140 -0
  69. package/dist/core/storage/fs-storage-backend.js +6 -0
  70. package/dist/core/storage/storage-location-manager.js +6 -0
  71. package/dist/core/storage/storage.service.js +7 -0
  72. package/dist/core/streaming/stream-probe.service.js +209 -0
  73. package/dist/core/topology/topology-emitter.service.js +106 -0
  74. package/dist/launcher.js +325 -0
  75. package/dist/main.js +1098 -0
  76. package/dist/manual-boot.js +227 -0
  77. package/package.json +5 -1
  78. package/src/__tests__/addon-install-e2e.test.ts +0 -74
  79. package/src/__tests__/addon-pages-e2e.test.ts +0 -200
  80. package/src/__tests__/addon-route-session.test.ts +0 -17
  81. package/src/__tests__/addon-settings-router.spec.ts +0 -67
  82. package/src/__tests__/addon-upload.spec.ts +0 -475
  83. package/src/__tests__/agent-registry.spec.ts +0 -179
  84. package/src/__tests__/agent-status-page.spec.ts +0 -82
  85. package/src/__tests__/auth-session-cookie.test.ts +0 -48
  86. package/src/__tests__/bulk-update-coordinator.spec.ts +0 -303
  87. package/src/__tests__/cap-ownership-authority.spec.ts +0 -431
  88. package/src/__tests__/cap-providers/cap-providers-location-import.spec.ts +0 -206
  89. package/src/__tests__/cap-providers/cap-usage-graph.spec.ts +0 -37
  90. package/src/__tests__/cap-providers/compute-topology-categories.spec.ts +0 -110
  91. package/src/__tests__/cap-providers/integrations-delete-cascade.spec.ts +0 -292
  92. package/src/__tests__/cap-providers-bulk-update.spec.ts +0 -408
  93. package/src/__tests__/cap-route-adapter.spec.ts +0 -302
  94. package/src/__tests__/cap-routers/_meta.spec.ts +0 -199
  95. package/src/__tests__/cap-routers/addon-settings.router.spec.ts +0 -115
  96. package/src/__tests__/cap-routers/broker-routing.router.spec.ts +0 -177
  97. package/src/__tests__/cap-routers/cap-route-error-formatter.spec.ts +0 -125
  98. package/src/__tests__/cap-routers/capabilities-node.spec.ts +0 -68
  99. package/src/__tests__/cap-routers/device-link-overlay.spec.ts +0 -137
  100. package/src/__tests__/cap-routers/device-manager-aggregate.router.spec.ts +0 -194
  101. package/src/__tests__/cap-routers/harness.ts +0 -163
  102. package/src/__tests__/cap-routers/metrics-provider.router.spec.ts +0 -133
  103. package/src/__tests__/cap-routers/null-provider-guard.spec.ts +0 -64
  104. package/src/__tests__/cap-routers/pipeline-executor.router.spec.ts +0 -159
  105. package/src/__tests__/cap-routers/settings-store.router.spec.ts +0 -291
  106. package/src/__tests__/capability-e2e.test.ts +0 -384
  107. package/src/__tests__/cli-e2e.test.ts +0 -150
  108. package/src/__tests__/core-cap-bridge.spec.ts +0 -91
  109. package/src/__tests__/dev-bootstrap-shm-ring.spec.ts +0 -40
  110. package/src/__tests__/device-settings-contribution-dispatch.spec.ts +0 -280
  111. package/src/__tests__/embedded-deps-e2e.test.ts +0 -125
  112. package/src/__tests__/event-bus-proxy-router.spec.ts +0 -75
  113. package/src/__tests__/fixtures/mock-analysis-addon-a.ts +0 -37
  114. package/src/__tests__/fixtures/mock-analysis-addon-b.ts +0 -37
  115. package/src/__tests__/fixtures/mock-log-addon.ts +0 -37
  116. package/src/__tests__/fixtures/mock-storage-addon.ts +0 -40
  117. package/src/__tests__/framework-allowlist.spec.ts +0 -96
  118. package/src/__tests__/framework-installer-defer-restart.spec.ts +0 -165
  119. package/src/__tests__/https-e2e.test.ts +0 -124
  120. package/src/__tests__/lifecycle-e2e.test.ts +0 -189
  121. package/src/__tests__/live-events-subscription.spec.ts +0 -149
  122. package/src/__tests__/moleculer/uds-readiness.spec.ts +0 -150
  123. package/src/__tests__/moleculer/uds-topology.spec.ts +0 -418
  124. package/src/__tests__/moleculer/uds-unowned-call.spec.ts +0 -383
  125. package/src/__tests__/moleculer-register-node-idempotency.spec.ts +0 -273
  126. package/src/__tests__/native-cap-route.spec.ts +0 -427
  127. package/src/__tests__/oauth2-account-linking.spec.ts +0 -867
  128. package/src/__tests__/post-boot-restart.spec.ts +0 -161
  129. package/src/__tests__/singleton-contention.test.ts +0 -499
  130. package/src/__tests__/streaming-diagnostic.test.ts +0 -615
  131. package/src/__tests__/streaming-scale.test.ts +0 -314
  132. package/src/__tests__/uds-addon-call-wiring.spec.ts +0 -242
  133. package/src/__tests__/uds-log-ingest.spec.ts +0 -183
  134. package/src/api/__tests__/addons-custom.spec.ts +0 -148
  135. package/src/api/__tests__/capabilities.router.test.ts +0 -56
  136. package/src/api/addon-upload.ts +0 -529
  137. package/src/api/addons-custom.router.ts +0 -101
  138. package/src/api/auth-whoami.ts +0 -101
  139. package/src/api/bridge-addons.router.ts +0 -122
  140. package/src/api/capabilities.router.ts +0 -265
  141. package/src/api/core/__tests__/auth-router-totp.spec.ts +0 -297
  142. package/src/api/core/__tests__/integration-markers.spec.ts +0 -10
  143. package/src/api/core/addon-settings.router.ts +0 -127
  144. package/src/api/core/agents.router.ts +0 -86
  145. package/src/api/core/auth.router.ts +0 -322
  146. package/src/api/core/bulk-update-coordinator.ts +0 -305
  147. package/src/api/core/cap-providers.ts +0 -1339
  148. package/src/api/core/capabilities.router.ts +0 -149
  149. package/src/api/core/collection-preference.ts +0 -40
  150. package/src/api/core/event-bus-proxy.router.ts +0 -45
  151. package/src/api/core/hwaccel.router.ts +0 -108
  152. package/src/api/core/live-events.router.ts +0 -67
  153. package/src/api/core/logs.router.ts +0 -195
  154. package/src/api/core/notifications.router.ts +0 -66
  155. package/src/api/core/repl.router.ts +0 -39
  156. package/src/api/core/settings-backend.router.ts +0 -140
  157. package/src/api/core/stream-probe.router.ts +0 -57
  158. package/src/api/core/system-events.router.ts +0 -125
  159. package/src/api/health/health.routes.ts +0 -117
  160. package/src/api/oauth2/__tests__/oauth2-routes.spec.ts +0 -62
  161. package/src/api/oauth2/oauth2-routes.ts +0 -281
  162. package/src/api/trpc/__tests__/client-ip.spec.ts +0 -146
  163. package/src/api/trpc/__tests__/scope-access-device.spec.ts +0 -268
  164. package/src/api/trpc/__tests__/scope-access.spec.ts +0 -102
  165. package/src/api/trpc/__tests__/webrtc-session-ua-enrich.spec.ts +0 -136
  166. package/src/api/trpc/cap-mount-helpers.ts +0 -245
  167. package/src/api/trpc/cap-route-error-formatter.ts +0 -171
  168. package/src/api/trpc/client-ip.ts +0 -147
  169. package/src/api/trpc/core-cap-bridge.ts +0 -154
  170. package/src/api/trpc/generated-cap-mounts.ts +0 -1240
  171. package/src/api/trpc/generated-cap-routers.ts +0 -11523
  172. package/src/api/trpc/scope-access.ts +0 -110
  173. package/src/api/trpc/trpc.context.ts +0 -258
  174. package/src/api/trpc/trpc.middleware.ts +0 -146
  175. package/src/api/trpc/trpc.router.ts +0 -389
  176. package/src/auth/session-cookie.ts +0 -54
  177. package/src/boot/__tests__/integration-id-backfill.spec.ts +0 -131
  178. package/src/boot/boot-config.ts +0 -259
  179. package/src/boot/integration-id-backfill.ts +0 -109
  180. package/src/boot/post-boot.service.ts +0 -105
  181. package/src/core/addon/__tests__/addon-registry-capability.test.ts +0 -62
  182. package/src/core/addon/__tests__/addon-row-manifest.spec.ts +0 -62
  183. package/src/core/addon/addon-call-gateway.ts +0 -171
  184. package/src/core/addon/addon-package.service.ts +0 -1787
  185. package/src/core/addon/addon-registry.service.ts +0 -3130
  186. package/src/core/addon/addon-search.service.ts +0 -91
  187. package/src/core/addon/addon-settings-provider.ts +0 -220
  188. package/src/core/addon/addon.tokens.ts +0 -2
  189. package/src/core/addon-bridge/addon-bridge.service.ts +0 -130
  190. package/src/core/addon-pages/addon-pages.service.spec.ts +0 -117
  191. package/src/core/addon-pages/addon-pages.service.ts +0 -82
  192. package/src/core/addon-widgets/addon-widgets.service.ts +0 -95
  193. package/src/core/agent/agent-registry.service.ts +0 -529
  194. package/src/core/auth/auth.service.spec.ts +0 -86
  195. package/src/core/auth/auth.service.ts +0 -8
  196. package/src/core/capability/capability.service.ts +0 -66
  197. package/src/core/config/config.schema.ts +0 -3
  198. package/src/core/config/config.service.spec.ts +0 -175
  199. package/src/core/config/config.service.ts +0 -7
  200. package/src/core/events/event-bus.service.spec.ts +0 -235
  201. package/src/core/events/event-bus.service.ts +0 -89
  202. package/src/core/feature/feature.service.spec.ts +0 -99
  203. package/src/core/feature/feature.service.ts +0 -8
  204. package/src/core/lifecycle/lifecycle-state-machine.spec.ts +0 -166
  205. package/src/core/lifecycle/lifecycle-state-machine.ts +0 -3
  206. package/src/core/logging/log-ring-buffer.ts +0 -3
  207. package/src/core/logging/logging.service.spec.ts +0 -287
  208. package/src/core/logging/logging.service.ts +0 -143
  209. package/src/core/logging/scoped-logger.ts +0 -3
  210. package/src/core/moleculer/cap-call-fn.spec.ts +0 -173
  211. package/src/core/moleculer/cap-call-fn.ts +0 -107
  212. package/src/core/moleculer/cap-route-authority.ts +0 -194
  213. package/src/core/moleculer/moleculer.service.ts +0 -1072
  214. package/src/core/network/network-quality.service.spec.ts +0 -53
  215. package/src/core/network/network-quality.service.ts +0 -5
  216. package/src/core/notification/notification-wrapper.service.ts +0 -34
  217. package/src/core/notification/toast-wrapper.service.ts +0 -27
  218. package/src/core/provider/provider.tokens.ts +0 -1
  219. package/src/core/repl/repl-engine.service.spec.ts +0 -444
  220. package/src/core/repl/repl-engine.service.ts +0 -155
  221. package/src/core/storage/fs-storage-backend.spec.ts +0 -70
  222. package/src/core/storage/fs-storage-backend.ts +0 -3
  223. package/src/core/storage/storage-location-manager.spec.ts +0 -130
  224. package/src/core/storage/storage-location-manager.ts +0 -3
  225. package/src/core/storage/storage.service.spec.ts +0 -73
  226. package/src/core/storage/storage.service.ts +0 -3
  227. package/src/core/streaming/stream-probe.service.ts +0 -221
  228. package/src/core/topology/topology-emitter.service.ts +0 -105
  229. package/src/launcher.ts +0 -314
  230. package/src/main.ts +0 -1245
  231. package/src/manual-boot.ts +0 -301
  232. package/tsconfig.build.json +0 -8
  233. package/tsconfig.json +0 -33
  234. package/vitest.config.ts +0 -26
@@ -0,0 +1,388 @@
1
+ "use strict";
2
+ // AUTO-GENERATED by scripts/generate-cap-mounts.ts — DO NOT EDIT
3
+ // Re-run: npx tsx scripts/generate-cap-mounts.ts
4
+ //
5
+ // Mounted: 127 Skipped (legacy): 6
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.LEGACY_SHAPE_SKIP = void 0;
8
+ exports.mountAllCaps = mountAllCaps;
9
+ const cap_mount_helpers_js_1 = require("./cap-mount-helpers.js");
10
+ const generated_cap_routers_js_1 = require("./generated-cap-routers.js");
11
+ /**
12
+ * Names of caps whose mount entry is OMITTED here because their
13
+ * provider implementation does not match the canonical
14
+ * `InferProvider<typeof xCap>` contract. Exported so the drift guard
15
+ * in `scripts/codegen.ts` can verify the union of {mounted, skipped}
16
+ * covers every `createCapRouter_X` in `generated-cap-routers.ts`.
17
+ */
18
+ exports.LEGACY_SHAPE_SKIP = new Set([
19
+ 'addonRoutes',
20
+ 'authProvider',
21
+ 'logDestination',
22
+ 'restreamer',
23
+ 'streamingEngine',
24
+ 'webrtc',
25
+ ]);
26
+ /**
27
+ * Build the auto-mount map. `services` carries the registry handle
28
+ * + Moleculer service so the per-cap remote-proxy factory can route
29
+ * cross-process calls when the incoming request carries `nodeId`.
30
+ */
31
+ function mountAllCaps(services) {
32
+ const reg = services.capabilityRegistry;
33
+ // Cross-process cap routing: when a request carries a non-'hub'
34
+ // `nodeId` (DeviceProxy injects `entry.providerNodeId` for native
35
+ // device caps on forked workers) the cap-router calls this factory
36
+ // to materialise a Moleculer-bridged proxy. The factory return
37
+ // type is parametric — the runtime Proxy is structurally
38
+ // compatible with every `InferProvider<typeof cap>` shape so a
39
+ // single generic helper covers every mount.
40
+ const remoteCapProxy = (capName, nodeId) => services.moleculer.createCapabilityProxy(capName, nodeId);
41
+ return {
42
+ accessories: (0, generated_cap_routers_js_1.createCapRouter_accessories)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'accessories'), remoteCapProxy),
43
+ addonPages: (0, generated_cap_routers_js_1.createCapRouter_addonPages)((_ctx) => reg?.getSingleton('addon-pages') ?? null, remoteCapProxy),
44
+ addonPagesSource: (0, generated_cap_routers_js_1.createCapRouter_addonPagesSource)((_ctx, addonId) => {
45
+ if (!reg)
46
+ return null;
47
+ if (addonId !== undefined) {
48
+ return reg.getProviderByAddonId('addon-pages-source', addonId);
49
+ }
50
+ const entries = reg.getCollectionEntries('addon-pages-source');
51
+ if (entries.length === 0)
52
+ return null;
53
+ const providers = entries.map(([, p]) => p);
54
+ const first = providers[0];
55
+ return {
56
+ ...first,
57
+ listPages: (0, cap_mount_helpers_js_1.concatCollection)(providers, 'listPages'),
58
+ };
59
+ }, remoteCapProxy),
60
+ addonSettings: (0, generated_cap_routers_js_1.createCapRouter_addonSettings)((_ctx) => reg?.getSingleton('addon-settings') ?? null, remoteCapProxy),
61
+ addonWidgets: (0, generated_cap_routers_js_1.createCapRouter_addonWidgets)((_ctx) => reg?.getSingleton('addon-widgets') ?? null, remoteCapProxy),
62
+ addonWidgetsSource: (0, generated_cap_routers_js_1.createCapRouter_addonWidgetsSource)((_ctx, addonId) => {
63
+ if (!reg)
64
+ return null;
65
+ if (addonId !== undefined) {
66
+ return reg.getProviderByAddonId('addon-widgets-source', addonId);
67
+ }
68
+ const entries = reg.getCollectionEntries('addon-widgets-source');
69
+ if (entries.length === 0)
70
+ return null;
71
+ const providers = entries.map(([, p]) => p);
72
+ const first = providers[0];
73
+ return {
74
+ ...first,
75
+ listWidgets: (0, cap_mount_helpers_js_1.concatCollection)(providers, 'listWidgets'),
76
+ };
77
+ }, remoteCapProxy),
78
+ addons: (0, generated_cap_routers_js_1.createCapRouter_addons)((_ctx) => reg?.getSingleton('addons') ?? null, remoteCapProxy),
79
+ adminUi: (0, generated_cap_routers_js_1.createCapRouter_adminUi)((_ctx) => reg?.getSingleton('admin-ui') ?? null, remoteCapProxy),
80
+ advancedNotifier: (0, generated_cap_routers_js_1.createCapRouter_advancedNotifier)((_ctx) => reg?.getSingleton('advanced-notifier') ??
81
+ null, remoteCapProxy),
82
+ airQualitySensor: (0, generated_cap_routers_js_1.createCapRouter_airQualitySensor)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'air-quality-sensor'), remoteCapProxy),
83
+ alarmPanel: (0, generated_cap_routers_js_1.createCapRouter_alarmPanel)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'alarm-panel'), remoteCapProxy),
84
+ alerts: (0, generated_cap_routers_js_1.createCapRouter_alerts)((_ctx) => reg?.getSingleton('alerts') ?? null, remoteCapProxy),
85
+ ambientLightSensor: (0, generated_cap_routers_js_1.createCapRouter_ambientLightSensor)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'ambient-light-sensor'), remoteCapProxy),
86
+ audioAnalysis: (0, generated_cap_routers_js_1.createCapRouter_audioAnalysis)((_ctx) => reg?.getSingleton('audio-analysis') ?? null, remoteCapProxy),
87
+ audioAnalyzer: (0, generated_cap_routers_js_1.createCapRouter_audioAnalyzer)((_ctx) => reg?.getSingleton('audio-analyzer') ?? null, remoteCapProxy),
88
+ audioCodec: (0, generated_cap_routers_js_1.createCapRouter_audioCodec)((_ctx) => reg?.getSingleton('audio-codec') ?? null, remoteCapProxy),
89
+ audioMetrics: (0, generated_cap_routers_js_1.createCapRouter_audioMetrics)((_ctx) => reg?.getSingleton('audio-metrics') ?? null, remoteCapProxy),
90
+ automationControl: (0, generated_cap_routers_js_1.createCapRouter_automationControl)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'automation-control'), remoteCapProxy),
91
+ backup: (0, generated_cap_routers_js_1.createCapRouter_backup)((_ctx) => reg?.getSingleton('backup') ?? null, remoteCapProxy),
92
+ battery: (0, generated_cap_routers_js_1.createCapRouter_battery)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'battery'), remoteCapProxy),
93
+ binary: (0, generated_cap_routers_js_1.createCapRouter_binary)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'binary'), remoteCapProxy),
94
+ brightness: (0, generated_cap_routers_js_1.createCapRouter_brightness)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'brightness'), remoteCapProxy),
95
+ broker: (0, generated_cap_routers_js_1.createCapRouter_broker)((_ctx, addonId) => {
96
+ if (!reg)
97
+ return null;
98
+ if (addonId !== undefined) {
99
+ return reg.getProviderByAddonId('broker', addonId);
100
+ }
101
+ const entries = reg.getCollectionEntries('broker');
102
+ if (entries.length === 0)
103
+ return null;
104
+ const providers = entries.map(([, p]) => p);
105
+ const first = providers[0];
106
+ return {
107
+ ...first,
108
+ list: (0, cap_mount_helpers_js_1.concatCollection)(providers, 'list'),
109
+ listProviders: (0, cap_mount_helpers_js_1.concatCollection)(providers, 'listProviders'),
110
+ };
111
+ }, remoteCapProxy),
112
+ button: (0, generated_cap_routers_js_1.createCapRouter_button)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'button'), remoteCapProxy),
113
+ cameraCredentials: (0, generated_cap_routers_js_1.createCapRouter_cameraCredentials)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'camera-credentials'), remoteCapProxy),
114
+ cameraPipelineConfig: (0, generated_cap_routers_js_1.createCapRouter_cameraPipelineConfig)((_ctx) => reg?.getSingleton('camera-pipeline-config') ?? null, remoteCapProxy),
115
+ cameraStreams: (0, generated_cap_routers_js_1.createCapRouter_cameraStreams)((_ctx) => reg?.getSingleton('camera-streams') ?? null, remoteCapProxy),
116
+ carbonMonoxide: (0, generated_cap_routers_js_1.createCapRouter_carbonMonoxide)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'carbon-monoxide'), remoteCapProxy),
117
+ climateControl: (0, generated_cap_routers_js_1.createCapRouter_climateControl)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'climate-control'), remoteCapProxy),
118
+ color: (0, generated_cap_routers_js_1.createCapRouter_color)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'color'), remoteCapProxy),
119
+ connectivity: (0, generated_cap_routers_js_1.createCapRouter_connectivity)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'connectivity'), remoteCapProxy),
120
+ consumables: (0, generated_cap_routers_js_1.createCapRouter_consumables)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'consumables'), remoteCapProxy),
121
+ contact: (0, generated_cap_routers_js_1.createCapRouter_contact)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'contact'), remoteCapProxy),
122
+ control: (0, generated_cap_routers_js_1.createCapRouter_control)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'control'), remoteCapProxy),
123
+ cover: (0, generated_cap_routers_js_1.createCapRouter_cover)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'cover'), remoteCapProxy),
124
+ decoder: (0, generated_cap_routers_js_1.createCapRouter_decoder)((_ctx) => reg?.getSingleton('decoder') ?? null, remoteCapProxy),
125
+ detectionPipeline: (0, generated_cap_routers_js_1.createCapRouter_detectionPipeline)((_ctx) => reg?.getSingleton('detection-pipeline') ?? null, remoteCapProxy),
126
+ deviceAdoption: (0, generated_cap_routers_js_1.createCapRouter_deviceAdoption)((_ctx) => reg?.getSingleton('device-adoption') ??
127
+ null, remoteCapProxy),
128
+ deviceDiscovery: (0, generated_cap_routers_js_1.createCapRouter_deviceDiscovery)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'device-discovery'), remoteCapProxy),
129
+ deviceExport: (0, generated_cap_routers_js_1.createCapRouter_deviceExport)((_ctx, addonId) => {
130
+ if (!reg)
131
+ return null;
132
+ if (addonId !== undefined) {
133
+ return reg.getProviderByAddonId('device-export', addonId);
134
+ }
135
+ const entries = reg.getCollectionEntries('device-export');
136
+ if (entries.length === 0)
137
+ return null;
138
+ const providers = entries.map(([, p]) => p);
139
+ const first = providers[0];
140
+ return {
141
+ ...first,
142
+ listSupportedDeviceKinds: (0, cap_mount_helpers_js_1.concatCollection)(providers, 'listSupportedDeviceKinds'),
143
+ listExposedDevices: (0, cap_mount_helpers_js_1.concatCollection)(providers, 'listExposedDevices'),
144
+ };
145
+ }, remoteCapProxy),
146
+ deviceManager: (0, generated_cap_routers_js_1.createCapRouter_deviceManager)((_ctx) => reg?.getSingleton('device-manager') ?? null, remoteCapProxy),
147
+ deviceOps: (0, generated_cap_routers_js_1.createCapRouter_deviceOps)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'device-ops'), remoteCapProxy),
148
+ deviceProvider: (0, generated_cap_routers_js_1.createCapRouter_deviceProvider)((_ctx, addonId) => {
149
+ if (!reg)
150
+ return null;
151
+ if (addonId !== undefined) {
152
+ return reg.getProviderByAddonId('device-provider', addonId);
153
+ }
154
+ const entries = reg.getCollectionEntries('device-provider');
155
+ if (entries.length === 0)
156
+ return null;
157
+ const providers = entries.map(([, p]) => p);
158
+ const first = providers[0];
159
+ return {
160
+ ...first,
161
+ getDevices: (0, cap_mount_helpers_js_1.concatCollection)(providers, 'getDevices'),
162
+ discoverDevices: (0, cap_mount_helpers_js_1.concatCollection)(providers, 'discoverDevices'),
163
+ };
164
+ }, remoteCapProxy),
165
+ deviceState: (0, generated_cap_routers_js_1.createCapRouter_deviceState)((_ctx) => reg?.getSingleton('device-state') ?? null, remoteCapProxy),
166
+ deviceStatus: (0, generated_cap_routers_js_1.createCapRouter_deviceStatus)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'device-status'), remoteCapProxy),
167
+ doorbell: (0, generated_cap_routers_js_1.createCapRouter_doorbell)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'doorbell'), remoteCapProxy),
168
+ embeddingEncoder: (0, generated_cap_routers_js_1.createCapRouter_embeddingEncoder)((_ctx, addonId) => {
169
+ if (!reg)
170
+ return null;
171
+ if (addonId !== undefined) {
172
+ return reg.getProviderByAddonId('embedding-encoder', addonId);
173
+ }
174
+ const entries = reg.getCollectionEntries('embedding-encoder');
175
+ return entries[0]?.[1] ?? null;
176
+ }, remoteCapProxy),
177
+ enumSensor: (0, generated_cap_routers_js_1.createCapRouter_enumSensor)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'enum-sensor'), remoteCapProxy),
178
+ eventEmitter: (0, generated_cap_routers_js_1.createCapRouter_eventEmitter)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'event-emitter'), remoteCapProxy),
179
+ events: (0, generated_cap_routers_js_1.createCapRouter_events)((_ctx) => reg?.getSingleton('events') ?? null, remoteCapProxy),
180
+ faceGallery: (0, generated_cap_routers_js_1.createCapRouter_faceGallery)((_ctx) => reg?.getSingleton('face-gallery') ?? null, remoteCapProxy),
181
+ fanControl: (0, generated_cap_routers_js_1.createCapRouter_fanControl)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'fan-control'), remoteCapProxy),
182
+ featureProbe: (0, generated_cap_routers_js_1.createCapRouter_featureProbe)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'feature-probe'), remoteCapProxy),
183
+ filesystemBrowse: (0, generated_cap_routers_js_1.createCapRouter_filesystemBrowse)((_ctx) => reg?.getSingleton('filesystem-browse') ??
184
+ null, remoteCapProxy),
185
+ flood: (0, generated_cap_routers_js_1.createCapRouter_flood)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'flood'), remoteCapProxy),
186
+ gas: (0, generated_cap_routers_js_1.createCapRouter_gas)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'gas'), remoteCapProxy),
187
+ humidifier: (0, generated_cap_routers_js_1.createCapRouter_humidifier)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'humidifier'), remoteCapProxy),
188
+ humiditySensor: (0, generated_cap_routers_js_1.createCapRouter_humiditySensor)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'humidity-sensor'), remoteCapProxy),
189
+ image: (0, generated_cap_routers_js_1.createCapRouter_image)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'image'), remoteCapProxy),
190
+ integrations: (0, generated_cap_routers_js_1.createCapRouter_integrations)((_ctx) => reg?.getSingleton('integrations') ?? null, remoteCapProxy),
191
+ intercom: (0, generated_cap_routers_js_1.createCapRouter_intercom)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'intercom'), remoteCapProxy),
192
+ lawnMowerControl: (0, generated_cap_routers_js_1.createCapRouter_lawnMowerControl)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'lawn-mower-control'), remoteCapProxy),
193
+ localNetwork: (0, generated_cap_routers_js_1.createCapRouter_localNetwork)((_ctx) => reg?.getSingleton('local-network') ?? null, remoteCapProxy),
194
+ lockControl: (0, generated_cap_routers_js_1.createCapRouter_lockControl)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'lock-control'), remoteCapProxy),
195
+ mediaPlayer: (0, generated_cap_routers_js_1.createCapRouter_mediaPlayer)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'media-player'), remoteCapProxy),
196
+ meshNetwork: (0, generated_cap_routers_js_1.createCapRouter_meshNetwork)((_ctx, addonId) => {
197
+ if (!reg)
198
+ return null;
199
+ if (addonId !== undefined) {
200
+ return reg.getProviderByAddonId('mesh-network', addonId);
201
+ }
202
+ const entries = reg.getCollectionEntries('mesh-network');
203
+ return entries[0]?.[1] ?? null;
204
+ }, remoteCapProxy),
205
+ metricsProvider: (0, generated_cap_routers_js_1.createCapRouter_metricsProvider)((_ctx) => reg?.getSingleton('metrics-provider') ??
206
+ null, remoteCapProxy),
207
+ motion: (0, generated_cap_routers_js_1.createCapRouter_motion)((_ctx) => reg?.getSingleton('motion') ?? null, remoteCapProxy),
208
+ motionDetection: (0, generated_cap_routers_js_1.createCapRouter_motionDetection)((_ctx) => reg?.getSingleton('motion-detection') ??
209
+ null, remoteCapProxy),
210
+ motionTrigger: (0, generated_cap_routers_js_1.createCapRouter_motionTrigger)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'motion-trigger'), remoteCapProxy),
211
+ motionZones: (0, generated_cap_routers_js_1.createCapRouter_motionZones)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'motion-zones'), remoteCapProxy),
212
+ mqttBroker: (0, generated_cap_routers_js_1.createCapRouter_mqttBroker)((_ctx, addonId) => {
213
+ if (!reg)
214
+ return null;
215
+ if (addonId !== undefined) {
216
+ return reg.getProviderByAddonId('mqtt-broker', addonId);
217
+ }
218
+ const entries = reg.getCollectionEntries('mqtt-broker');
219
+ if (entries.length === 0)
220
+ return null;
221
+ const providers = entries.map(([, p]) => p);
222
+ const first = providers[0];
223
+ return {
224
+ ...first,
225
+ listBrokers: (0, cap_mount_helpers_js_1.concatCollection)(providers, 'listBrokers'),
226
+ };
227
+ }, remoteCapProxy),
228
+ nativeObjectDetection: (0, generated_cap_routers_js_1.createCapRouter_nativeObjectDetection)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'native-object-detection'), remoteCapProxy),
229
+ networkAccess: (0, generated_cap_routers_js_1.createCapRouter_networkAccess)((_ctx, addonId) => {
230
+ if (!reg)
231
+ return null;
232
+ if (addonId !== undefined) {
233
+ return reg.getProviderByAddonId('network-access', addonId);
234
+ }
235
+ const entries = reg.getCollectionEntries('network-access');
236
+ if (entries.length === 0)
237
+ return null;
238
+ const providers = entries.map(([, p]) => p);
239
+ const first = providers[0];
240
+ return {
241
+ ...first,
242
+ listEndpoints: (0, cap_mount_helpers_js_1.concatCollection)(providers, 'listEndpoints'),
243
+ };
244
+ }, remoteCapProxy),
245
+ networkQuality: (0, generated_cap_routers_js_1.createCapRouter_networkQuality)((_ctx) => reg?.getSingleton('network-quality') ??
246
+ null, remoteCapProxy),
247
+ nodes: (0, generated_cap_routers_js_1.createCapRouter_nodes)((_ctx) => reg?.getSingleton('nodes') ?? null, remoteCapProxy),
248
+ notificationOutput: (0, generated_cap_routers_js_1.createCapRouter_notificationOutput)((_ctx, addonId) => {
249
+ if (!reg)
250
+ return null;
251
+ if (addonId !== undefined) {
252
+ return reg.getProviderByAddonId('notification-output', addonId);
253
+ }
254
+ const entries = reg.getCollectionEntries('notification-output');
255
+ return entries[0]?.[1] ?? null;
256
+ }, remoteCapProxy),
257
+ notifier: (0, generated_cap_routers_js_1.createCapRouter_notifier)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'notifier'), remoteCapProxy),
258
+ numericSensor: (0, generated_cap_routers_js_1.createCapRouter_numericSensor)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'numeric-sensor'), remoteCapProxy),
259
+ oauthIntegration: (0, generated_cap_routers_js_1.createCapRouter_oauthIntegration)((_ctx, addonId) => {
260
+ if (!reg)
261
+ return null;
262
+ if (addonId !== undefined) {
263
+ return reg.getProviderByAddonId('oauth-integration', addonId);
264
+ }
265
+ const entries = reg.getCollectionEntries('oauth-integration');
266
+ return entries[0]?.[1] ?? null;
267
+ }, remoteCapProxy),
268
+ osd: (0, generated_cap_routers_js_1.createCapRouter_osd)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'osd'), remoteCapProxy),
269
+ pipelineAnalytics: (0, generated_cap_routers_js_1.createCapRouter_pipelineAnalytics)((_ctx) => reg?.getSingleton('pipeline-analytics') ?? null, remoteCapProxy),
270
+ pipelineExecutor: (0, generated_cap_routers_js_1.createCapRouter_pipelineExecutor)((_ctx) => reg?.getSingleton('pipeline-executor') ??
271
+ null, remoteCapProxy),
272
+ pipelineOrchestrator: (0, generated_cap_routers_js_1.createCapRouter_pipelineOrchestrator)((_ctx) => reg?.getSingleton('pipeline-orchestrator') ?? null, remoteCapProxy),
273
+ pipelineRunner: (0, generated_cap_routers_js_1.createCapRouter_pipelineRunner)((_ctx) => reg?.getSingleton('pipeline-runner') ??
274
+ null, remoteCapProxy),
275
+ plateGallery: (0, generated_cap_routers_js_1.createCapRouter_plateGallery)((_ctx) => reg?.getSingleton('plate-gallery') ?? null, remoteCapProxy),
276
+ platformProbe: (0, generated_cap_routers_js_1.createCapRouter_platformProbe)((_ctx) => reg?.getSingleton('platform-probe') ?? null, remoteCapProxy),
277
+ powerMeter: (0, generated_cap_routers_js_1.createCapRouter_powerMeter)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'power-meter'), remoteCapProxy),
278
+ presence: (0, generated_cap_routers_js_1.createCapRouter_presence)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'presence'), remoteCapProxy),
279
+ pressureSensor: (0, generated_cap_routers_js_1.createCapRouter_pressureSensor)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'pressure-sensor'), remoteCapProxy),
280
+ privacyMask: (0, generated_cap_routers_js_1.createCapRouter_privacyMask)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'privacy-mask'), remoteCapProxy),
281
+ ptz: (0, generated_cap_routers_js_1.createCapRouter_ptz)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'ptz'), remoteCapProxy),
282
+ ptzAutotrack: (0, generated_cap_routers_js_1.createCapRouter_ptzAutotrack)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'ptz-autotrack'), remoteCapProxy),
283
+ reboot: (0, generated_cap_routers_js_1.createCapRouter_reboot)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'reboot'), remoteCapProxy),
284
+ recording: (0, generated_cap_routers_js_1.createCapRouter_recording)((_ctx) => reg?.getSingleton('recording') ?? null, remoteCapProxy),
285
+ scriptRunner: (0, generated_cap_routers_js_1.createCapRouter_scriptRunner)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'script-runner'), remoteCapProxy),
286
+ settingsStore: (0, generated_cap_routers_js_1.createCapRouter_settingsStore)((_ctx) => reg?.getSingleton('settings-store') ?? null, remoteCapProxy),
287
+ smoke: (0, generated_cap_routers_js_1.createCapRouter_smoke)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'smoke'), remoteCapProxy),
288
+ smtpProvider: (0, generated_cap_routers_js_1.createCapRouter_smtpProvider)((_ctx, addonId) => {
289
+ if (!reg)
290
+ return null;
291
+ if (addonId !== undefined) {
292
+ return reg.getProviderByAddonId('smtp-provider', addonId);
293
+ }
294
+ const entries = reg.getCollectionEntries('smtp-provider');
295
+ return entries[0]?.[1] ?? null;
296
+ }, remoteCapProxy),
297
+ snapshot: (0, generated_cap_routers_js_1.createCapRouter_snapshot)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'snapshot'), remoteCapProxy),
298
+ snapshotProvider: (0, generated_cap_routers_js_1.createCapRouter_snapshotProvider)((_ctx, addonId) => {
299
+ if (!reg)
300
+ return null;
301
+ if (addonId !== undefined) {
302
+ return reg.getProviderByAddonId('snapshot-provider', addonId);
303
+ }
304
+ const entries = reg.getCollectionEntries('snapshot-provider');
305
+ return entries[0]?.[1] ?? null;
306
+ }, remoteCapProxy),
307
+ ssoBridge: (0, generated_cap_routers_js_1.createCapRouter_ssoBridge)((_ctx) => reg?.getSingleton('sso-bridge') ?? null, remoteCapProxy),
308
+ storage: (0, generated_cap_routers_js_1.createCapRouter_storage)((_ctx) => reg?.getSingleton('storage') ?? null, remoteCapProxy),
309
+ storageEvictable: (0, generated_cap_routers_js_1.createCapRouter_storageEvictable)((_ctx, addonId) => {
310
+ if (!reg)
311
+ return null;
312
+ if (addonId !== undefined) {
313
+ return reg.getProviderByAddonId('storage-evictable', addonId);
314
+ }
315
+ const entries = reg.getCollectionEntries('storage-evictable');
316
+ return entries[0]?.[1] ?? null;
317
+ }, remoteCapProxy),
318
+ storageProvider: (0, generated_cap_routers_js_1.createCapRouter_storageProvider)((_ctx, addonId) => {
319
+ if (!reg)
320
+ return null;
321
+ if (addonId !== undefined) {
322
+ return reg.getProviderByAddonId('storage-provider', addonId);
323
+ }
324
+ const entries = reg.getCollectionEntries('storage-provider');
325
+ if (entries.length === 0)
326
+ return null;
327
+ const providers = entries.map(([, p]) => p);
328
+ const first = providers[0];
329
+ return {
330
+ ...first,
331
+ list: (0, cap_mount_helpers_js_1.concatCollection)(providers, 'list'),
332
+ };
333
+ }, remoteCapProxy),
334
+ streamBroker: (0, generated_cap_routers_js_1.createCapRouter_streamBroker)((_ctx) => reg?.getSingleton('stream-broker') ?? null, remoteCapProxy),
335
+ streamCatalog: (0, generated_cap_routers_js_1.createCapRouter_streamCatalog)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'stream-catalog'), remoteCapProxy),
336
+ streamParams: (0, generated_cap_routers_js_1.createCapRouter_streamParams)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'stream-params'), remoteCapProxy),
337
+ switch: (0, generated_cap_routers_js_1.createCapRouter_switch)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'switch'), remoteCapProxy),
338
+ system: (0, generated_cap_routers_js_1.createCapRouter_system)((_ctx) => reg?.getSingleton('system') ?? null, remoteCapProxy),
339
+ tamper: (0, generated_cap_routers_js_1.createCapRouter_tamper)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'tamper'), remoteCapProxy),
340
+ temperatureSensor: (0, generated_cap_routers_js_1.createCapRouter_temperatureSensor)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'temperature-sensor'), remoteCapProxy),
341
+ toast: (0, generated_cap_routers_js_1.createCapRouter_toast)((_ctx) => reg?.getSingleton('toast') ?? null, remoteCapProxy),
342
+ turnProvider: (0, generated_cap_routers_js_1.createCapRouter_turnProvider)((_ctx, addonId) => {
343
+ if (!reg)
344
+ return null;
345
+ if (addonId !== undefined) {
346
+ return reg.getProviderByAddonId('turn-provider', addonId);
347
+ }
348
+ const entries = reg.getCollectionEntries('turn-provider');
349
+ if (entries.length === 0)
350
+ return null;
351
+ const providers = entries.map(([, p]) => p);
352
+ const first = providers[0];
353
+ return {
354
+ ...first,
355
+ getTurnServers: (0, cap_mount_helpers_js_1.concatCollection)(providers, 'getTurnServers'),
356
+ };
357
+ }, remoteCapProxy),
358
+ update: (0, generated_cap_routers_js_1.createCapRouter_update)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'update'), remoteCapProxy),
359
+ userManagement: (0, generated_cap_routers_js_1.createCapRouter_userManagement)((_ctx) => reg?.getSingleton('user-management') ??
360
+ null, remoteCapProxy),
361
+ userPasskeys: (0, generated_cap_routers_js_1.createCapRouter_userPasskeys)((_ctx, addonId) => {
362
+ if (!reg)
363
+ return null;
364
+ if (addonId !== undefined) {
365
+ return reg.getProviderByAddonId('user-passkeys', addonId);
366
+ }
367
+ const entries = reg.getCollectionEntries('user-passkeys');
368
+ if (entries.length === 0)
369
+ return null;
370
+ const providers = entries.map(([, p]) => p);
371
+ const first = providers[0];
372
+ return {
373
+ ...first,
374
+ listPasskeys: (0, cap_mount_helpers_js_1.concatCollection)(providers, 'listPasskeys'),
375
+ };
376
+ }, remoteCapProxy),
377
+ vacuumControl: (0, generated_cap_routers_js_1.createCapRouter_vacuumControl)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'vacuum-control'), remoteCapProxy),
378
+ valve: (0, generated_cap_routers_js_1.createCapRouter_valve)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'valve'), remoteCapProxy),
379
+ vibration: (0, generated_cap_routers_js_1.createCapRouter_vibration)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'vibration'), remoteCapProxy),
380
+ videoclips: (0, generated_cap_routers_js_1.createCapRouter_videoclips)((_ctx) => reg?.getSingleton('videoclips') ?? null, remoteCapProxy),
381
+ waterHeater: (0, generated_cap_routers_js_1.createCapRouter_waterHeater)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'water-heater'), remoteCapProxy),
382
+ weather: (0, generated_cap_routers_js_1.createCapRouter_weather)((_ctx) => (0, cap_mount_helpers_js_1.requireDeviceScoped)(reg, 'weather'), remoteCapProxy),
383
+ webrtcSession: (0, generated_cap_routers_js_1.createCapRouter_webrtcSession)((_ctx) => reg?.getSingleton('webrtc-session') ?? null, remoteCapProxy),
384
+ zoneAnalytics: (0, generated_cap_routers_js_1.createCapRouter_zoneAnalytics)((_ctx) => reg?.getSingleton('zone-analytics') ?? null, remoteCapProxy),
385
+ zoneRules: (0, generated_cap_routers_js_1.createCapRouter_zoneRules)((_ctx) => reg?.getSingleton('zone-rules') ?? null, remoteCapProxy),
386
+ zones: (0, generated_cap_routers_js_1.createCapRouter_zones)((_ctx) => reg?.getSingleton('zones') ?? null, remoteCapProxy),
387
+ };
388
+ }