@camstack/types 0.1.39 → 0.1.41

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 (323) hide show
  1. package/dist/addon/base-addon.d.ts +14 -2
  2. package/dist/addon/base-addon.d.ts.map +1 -1
  3. package/dist/addon/durable-state.d.ts +33 -0
  4. package/dist/addon/durable-state.d.ts.map +1 -0
  5. package/dist/capabilities/accessories.cap.d.ts +56 -8
  6. package/dist/capabilities/accessories.cap.d.ts.map +1 -1
  7. package/dist/capabilities/addon-settings.cap.d.ts +1 -0
  8. package/dist/capabilities/addon-settings.cap.d.ts.map +1 -1
  9. package/dist/capabilities/addons.cap.d.ts +187 -1
  10. package/dist/capabilities/addons.cap.d.ts.map +1 -1
  11. package/dist/capabilities/advanced-notifier.cap.d.ts +4 -0
  12. package/dist/capabilities/advanced-notifier.cap.d.ts.map +1 -1
  13. package/dist/capabilities/air-quality-sensor.cap.d.ts +56 -0
  14. package/dist/capabilities/air-quality-sensor.cap.d.ts.map +1 -0
  15. package/dist/capabilities/alarm-panel.cap.d.ts +154 -0
  16. package/dist/capabilities/alarm-panel.cap.d.ts.map +1 -0
  17. package/dist/capabilities/alerts.cap.d.ts +5 -5
  18. package/dist/capabilities/ambient-light-sensor.cap.d.ts +39 -0
  19. package/dist/capabilities/ambient-light-sensor.cap.d.ts.map +1 -0
  20. package/dist/capabilities/audio-analyzer.cap.d.ts +2 -2
  21. package/dist/capabilities/automation-control.cap.d.ts +65 -0
  22. package/dist/capabilities/automation-control.cap.d.ts.map +1 -0
  23. package/dist/capabilities/battery.cap.d.ts +30 -1
  24. package/dist/capabilities/battery.cap.d.ts.map +1 -1
  25. package/dist/capabilities/binary.cap.d.ts +40 -0
  26. package/dist/capabilities/binary.cap.d.ts.map +1 -0
  27. package/dist/capabilities/brightness.cap.d.ts +3 -2
  28. package/dist/capabilities/brightness.cap.d.ts.map +1 -1
  29. package/dist/capabilities/broker.cap.d.ts +291 -0
  30. package/dist/capabilities/broker.cap.d.ts.map +1 -0
  31. package/dist/capabilities/button.cap.d.ts +27 -0
  32. package/dist/capabilities/button.cap.d.ts.map +1 -0
  33. package/dist/capabilities/camera-credentials.cap.d.ts +1 -0
  34. package/dist/capabilities/camera-credentials.cap.d.ts.map +1 -1
  35. package/dist/capabilities/camera-pipeline-config.cap.d.ts +43 -0
  36. package/dist/capabilities/camera-pipeline-config.cap.d.ts.map +1 -0
  37. package/dist/capabilities/camera-streams.cap.d.ts +147 -10
  38. package/dist/capabilities/camera-streams.cap.d.ts.map +1 -1
  39. package/dist/capabilities/capability-definition.d.ts +15 -0
  40. package/dist/capabilities/capability-definition.d.ts.map +1 -1
  41. package/dist/capabilities/carbon-monoxide.cap.d.ts +33 -0
  42. package/dist/capabilities/carbon-monoxide.cap.d.ts.map +1 -0
  43. package/dist/capabilities/climate-control.cap.d.ts +183 -0
  44. package/dist/capabilities/climate-control.cap.d.ts.map +1 -0
  45. package/dist/capabilities/color.cap.d.ts +186 -0
  46. package/dist/capabilities/color.cap.d.ts.map +1 -0
  47. package/dist/capabilities/connectivity.cap.d.ts +37 -0
  48. package/dist/capabilities/connectivity.cap.d.ts.map +1 -0
  49. package/dist/capabilities/consumables.cap.d.ts +105 -0
  50. package/dist/capabilities/consumables.cap.d.ts.map +1 -0
  51. package/dist/capabilities/contact.cap.d.ts +41 -0
  52. package/dist/capabilities/contact.cap.d.ts.map +1 -0
  53. package/dist/capabilities/control.cap.d.ts +167 -0
  54. package/dist/capabilities/control.cap.d.ts.map +1 -0
  55. package/dist/capabilities/cover.cap.d.ts +104 -0
  56. package/dist/capabilities/cover.cap.d.ts.map +1 -0
  57. package/dist/capabilities/custom-actions.d.ts +6 -0
  58. package/dist/capabilities/custom-actions.d.ts.map +1 -1
  59. package/dist/capabilities/decoder.cap.d.ts +1 -1
  60. package/dist/capabilities/device-adoption.cap.d.ts +203 -0
  61. package/dist/capabilities/device-adoption.cap.d.ts.map +1 -0
  62. package/dist/capabilities/device-discovery.cap.d.ts +44 -143
  63. package/dist/capabilities/device-discovery.cap.d.ts.map +1 -1
  64. package/dist/capabilities/device-manager.cap.d.ts +469 -0
  65. package/dist/capabilities/device-manager.cap.d.ts.map +1 -1
  66. package/dist/capabilities/device-ops.cap.d.ts +30 -0
  67. package/dist/capabilities/device-ops.cap.d.ts.map +1 -1
  68. package/dist/capabilities/device-provider.cap.d.ts +36 -0
  69. package/dist/capabilities/device-provider.cap.d.ts.map +1 -1
  70. package/dist/capabilities/device-status.cap.d.ts +1 -0
  71. package/dist/capabilities/device-status.cap.d.ts.map +1 -1
  72. package/dist/capabilities/doorbell.cap.d.ts +1 -0
  73. package/dist/capabilities/doorbell.cap.d.ts.map +1 -1
  74. package/dist/capabilities/enum-sensor.cap.d.ts +60 -0
  75. package/dist/capabilities/enum-sensor.cap.d.ts.map +1 -0
  76. package/dist/capabilities/event-emitter.cap.d.ts +79 -0
  77. package/dist/capabilities/event-emitter.cap.d.ts.map +1 -0
  78. package/dist/capabilities/fan-control.cap.d.ts +100 -0
  79. package/dist/capabilities/fan-control.cap.d.ts.map +1 -0
  80. package/dist/capabilities/feature-probe.cap.d.ts +1 -0
  81. package/dist/capabilities/feature-probe.cap.d.ts.map +1 -1
  82. package/dist/capabilities/flood.cap.d.ts +37 -0
  83. package/dist/capabilities/flood.cap.d.ts.map +1 -0
  84. package/dist/capabilities/gas.cap.d.ts +34 -0
  85. package/dist/capabilities/gas.cap.d.ts.map +1 -0
  86. package/dist/capabilities/humidifier.cap.d.ts +82 -0
  87. package/dist/capabilities/humidifier.cap.d.ts.map +1 -0
  88. package/dist/capabilities/humidity-sensor.cap.d.ts +43 -0
  89. package/dist/capabilities/humidity-sensor.cap.d.ts.map +1 -0
  90. package/dist/capabilities/image.cap.d.ts +44 -0
  91. package/dist/capabilities/image.cap.d.ts.map +1 -0
  92. package/dist/capabilities/index.d.ts +103 -15
  93. package/dist/capabilities/index.d.ts.map +1 -1
  94. package/dist/capabilities/integrations.cap.d.ts +12 -0
  95. package/dist/capabilities/integrations.cap.d.ts.map +1 -1
  96. package/dist/capabilities/intercom.cap.d.ts +49 -9
  97. package/dist/capabilities/intercom.cap.d.ts.map +1 -1
  98. package/dist/capabilities/lawn-mower-control.cap.d.ts +83 -0
  99. package/dist/capabilities/lawn-mower-control.cap.d.ts.map +1 -0
  100. package/dist/capabilities/local-network.cap.d.ts +1 -1
  101. package/dist/capabilities/lock-control.cap.d.ts +92 -0
  102. package/dist/capabilities/lock-control.cap.d.ts.map +1 -0
  103. package/dist/capabilities/mask-shape.d.ts +99 -0
  104. package/dist/capabilities/mask-shape.d.ts.map +1 -0
  105. package/dist/capabilities/media-player.cap.d.ts +201 -0
  106. package/dist/capabilities/media-player.cap.d.ts.map +1 -0
  107. package/dist/capabilities/mesh-network.cap.d.ts +3 -3
  108. package/dist/capabilities/motion-trigger.cap.d.ts +1 -0
  109. package/dist/capabilities/motion-trigger.cap.d.ts.map +1 -1
  110. package/dist/capabilities/motion-zones.cap.d.ts +95 -13
  111. package/dist/capabilities/motion-zones.cap.d.ts.map +1 -1
  112. package/dist/capabilities/mqtt-broker.cap.d.ts +3 -3
  113. package/dist/capabilities/native-object-detection.cap.d.ts +74 -3
  114. package/dist/capabilities/native-object-detection.cap.d.ts.map +1 -1
  115. package/dist/capabilities/network-access.cap.d.ts +7 -7
  116. package/dist/capabilities/network-quality.cap.d.ts +5 -0
  117. package/dist/capabilities/network-quality.cap.d.ts.map +1 -1
  118. package/dist/capabilities/notifier.cap.d.ts +173 -0
  119. package/dist/capabilities/notifier.cap.d.ts.map +1 -0
  120. package/dist/capabilities/numeric-sensor.cap.d.ts +52 -0
  121. package/dist/capabilities/numeric-sensor.cap.d.ts.map +1 -0
  122. package/dist/capabilities/oauth-integration.cap.d.ts +4 -2
  123. package/dist/capabilities/oauth-integration.cap.d.ts.map +1 -1
  124. package/dist/capabilities/osd.cap.d.ts +1 -0
  125. package/dist/capabilities/osd.cap.d.ts.map +1 -1
  126. package/dist/capabilities/pipeline-analytics.cap.d.ts +69 -22
  127. package/dist/capabilities/pipeline-analytics.cap.d.ts.map +1 -1
  128. package/dist/capabilities/pipeline-executor.cap.d.ts +2 -2
  129. package/dist/capabilities/pipeline-orchestrator.cap.d.ts +1 -1
  130. package/dist/capabilities/pipeline-runner.cap.d.ts +4 -2
  131. package/dist/capabilities/pipeline-runner.cap.d.ts.map +1 -1
  132. package/dist/capabilities/platform-probe.cap.d.ts +25 -0
  133. package/dist/capabilities/platform-probe.cap.d.ts.map +1 -1
  134. package/dist/capabilities/power-meter.cap.d.ts +65 -0
  135. package/dist/capabilities/power-meter.cap.d.ts.map +1 -0
  136. package/dist/capabilities/presence.cap.d.ts +79 -0
  137. package/dist/capabilities/presence.cap.d.ts.map +1 -0
  138. package/dist/capabilities/pressure-sensor.cap.d.ts +43 -0
  139. package/dist/capabilities/pressure-sensor.cap.d.ts.map +1 -0
  140. package/dist/capabilities/privacy-mask.cap.d.ts +207 -0
  141. package/dist/capabilities/privacy-mask.cap.d.ts.map +1 -0
  142. package/dist/capabilities/ptz-autotrack.cap.d.ts +1 -0
  143. package/dist/capabilities/ptz-autotrack.cap.d.ts.map +1 -1
  144. package/dist/capabilities/ptz.cap.d.ts +1 -0
  145. package/dist/capabilities/ptz.cap.d.ts.map +1 -1
  146. package/dist/capabilities/reboot.cap.d.ts +1 -0
  147. package/dist/capabilities/reboot.cap.d.ts.map +1 -1
  148. package/dist/capabilities/recording.cap.d.ts +238 -32
  149. package/dist/capabilities/recording.cap.d.ts.map +1 -1
  150. package/dist/capabilities/restreamer.cap.d.ts +2 -2
  151. package/dist/capabilities/schemas/detection-shared.d.ts +14 -1
  152. package/dist/capabilities/schemas/detection-shared.d.ts.map +1 -1
  153. package/dist/capabilities/schemas/orchestrator-metrics.d.ts +2 -2
  154. package/dist/capabilities/schemas/streaming-shared.d.ts +64 -1
  155. package/dist/capabilities/schemas/streaming-shared.d.ts.map +1 -1
  156. package/dist/capabilities/script-runner.cap.d.ts +62 -0
  157. package/dist/capabilities/script-runner.cap.d.ts.map +1 -0
  158. package/dist/capabilities/settings-store.cap.d.ts +25 -0
  159. package/dist/capabilities/settings-store.cap.d.ts.map +1 -1
  160. package/dist/capabilities/smoke.cap.d.ts +38 -0
  161. package/dist/capabilities/smoke.cap.d.ts.map +1 -0
  162. package/dist/capabilities/snapshot-provider.cap.d.ts +1 -1
  163. package/dist/capabilities/snapshot.cap.d.ts +1 -0
  164. package/dist/capabilities/snapshot.cap.d.ts.map +1 -1
  165. package/dist/capabilities/sso-bridge.cap.d.ts +3 -3
  166. package/dist/capabilities/storage-evictable.cap.d.ts +54 -0
  167. package/dist/capabilities/storage-evictable.cap.d.ts.map +1 -0
  168. package/dist/capabilities/storage-provider.cap.d.ts +31 -186
  169. package/dist/capabilities/storage-provider.cap.d.ts.map +1 -1
  170. package/dist/capabilities/storage.cap.d.ts +35 -226
  171. package/dist/capabilities/storage.cap.d.ts.map +1 -1
  172. package/dist/capabilities/stream-broker.cap.d.ts +309 -25
  173. package/dist/capabilities/stream-broker.cap.d.ts.map +1 -1
  174. package/dist/capabilities/stream-catalog.cap.d.ts +85 -0
  175. package/dist/capabilities/stream-catalog.cap.d.ts.map +1 -0
  176. package/dist/capabilities/stream-params.cap.d.ts +27 -26
  177. package/dist/capabilities/stream-params.cap.d.ts.map +1 -1
  178. package/dist/capabilities/switch.cap.d.ts +1 -0
  179. package/dist/capabilities/switch.cap.d.ts.map +1 -1
  180. package/dist/capabilities/tamper.cap.d.ts +33 -0
  181. package/dist/capabilities/tamper.cap.d.ts.map +1 -0
  182. package/dist/capabilities/temperature-sensor.cap.d.ts +51 -0
  183. package/dist/capabilities/temperature-sensor.cap.d.ts.map +1 -0
  184. package/dist/capabilities/update.cap.d.ts +49 -0
  185. package/dist/capabilities/update.cap.d.ts.map +1 -0
  186. package/dist/capabilities/user-management.cap.d.ts +20 -20
  187. package/dist/capabilities/vacuum-control.cap.d.ts +229 -0
  188. package/dist/capabilities/vacuum-control.cap.d.ts.map +1 -0
  189. package/dist/capabilities/valve.cap.d.ts +93 -0
  190. package/dist/capabilities/valve.cap.d.ts.map +1 -0
  191. package/dist/capabilities/vibration.cap.d.ts +33 -0
  192. package/dist/capabilities/vibration.cap.d.ts.map +1 -0
  193. package/dist/capabilities/water-heater.cap.d.ts +78 -0
  194. package/dist/capabilities/water-heater.cap.d.ts.map +1 -0
  195. package/dist/capabilities/weather.cap.d.ts +76 -0
  196. package/dist/capabilities/weather.cap.d.ts.map +1 -0
  197. package/dist/capabilities/webrtc-session.cap.d.ts +128 -0
  198. package/dist/capabilities/webrtc-session.cap.d.ts.map +1 -1
  199. package/dist/constants.d.ts +0 -2
  200. package/dist/constants.d.ts.map +1 -1
  201. package/dist/device/base-device-provider.d.ts +11 -0
  202. package/dist/device/base-device-provider.d.ts.map +1 -1
  203. package/dist/device/base-device.d.ts +52 -0
  204. package/dist/device/base-device.d.ts.map +1 -1
  205. package/dist/device/device-context.d.ts +29 -0
  206. package/dist/device/device-context.d.ts.map +1 -1
  207. package/dist/device/device-link-transform.d.ts +6 -0
  208. package/dist/device/device-link-transform.d.ts.map +1 -0
  209. package/dist/device/device-management.d.ts +116 -4
  210. package/dist/device/device-management.d.ts.map +1 -1
  211. package/dist/device/device-type.d.ts +214 -3
  212. package/dist/device/device-type.d.ts.map +1 -1
  213. package/dist/device/device.d.ts +25 -0
  214. package/dist/device/device.d.ts.map +1 -1
  215. package/dist/device/index.d.ts +5 -1
  216. package/dist/device/index.d.ts.map +1 -1
  217. package/dist/device/path-util.d.ts +13 -0
  218. package/dist/device/path-util.d.ts.map +1 -0
  219. package/dist/device/schema-fields.d.ts +12 -0
  220. package/dist/device/schema-fields.d.ts.map +1 -0
  221. package/dist/device/source-info.d.ts +87 -0
  222. package/dist/device/source-info.d.ts.map +1 -0
  223. package/dist/device/system-mirror.d.ts +6 -2
  224. package/dist/device/system-mirror.d.ts.map +1 -1
  225. package/dist/encode-profile.d.ts +126 -0
  226. package/dist/encode-profile.d.ts.map +1 -0
  227. package/dist/enums/event-category.d.ts +92 -7
  228. package/dist/enums/event-category.d.ts.map +1 -1
  229. package/dist/generated/addon-api.d.ts +12821 -8025
  230. package/dist/generated/addon-api.d.ts.map +1 -1
  231. package/dist/generated/cap-status-types.d.ts +87 -1
  232. package/dist/generated/cap-status-types.d.ts.map +1 -1
  233. package/dist/generated/capability-router-map.d.ts +142 -7
  234. package/dist/generated/capability-router-map.d.ts.map +1 -1
  235. package/dist/generated/device-local-state.d.ts +123 -0
  236. package/dist/generated/device-local-state.d.ts.map +1 -1
  237. package/dist/generated/device-proxy.d.ts +132 -5
  238. package/dist/generated/device-proxy.d.ts.map +1 -1
  239. package/dist/generated/method-access-map.d.ts +1 -1
  240. package/dist/generated/method-access-map.d.ts.map +1 -1
  241. package/dist/generated/provider-kind-map.d.ts +1 -1
  242. package/dist/generated/provider-kind-map.d.ts.map +1 -1
  243. package/dist/generated/system-proxy.d.ts +10 -8
  244. package/dist/generated/system-proxy.d.ts.map +1 -1
  245. package/dist/health/wiring-health.d.ts +136 -0
  246. package/dist/health/wiring-health.d.ts.map +1 -0
  247. package/dist/{index-CMM1Y9W6.js → index-BSA_TBea.js} +4774 -923
  248. package/dist/index-BSA_TBea.js.map +1 -0
  249. package/dist/{index-QRlzao1I.mjs → index-Bpj3ScIH.mjs} +5142 -1291
  250. package/dist/index-Bpj3ScIH.mjs.map +1 -0
  251. package/dist/index.d.ts +23 -3
  252. package/dist/index.d.ts.map +1 -1
  253. package/dist/index.js +1498 -119
  254. package/dist/index.js.map +1 -1
  255. package/dist/index.mjs +1806 -427
  256. package/dist/index.mjs.map +1 -1
  257. package/dist/interfaces/addon-data-plane.d.ts +76 -0
  258. package/dist/interfaces/addon-data-plane.d.ts.map +1 -0
  259. package/dist/interfaces/addon.d.ts +61 -1
  260. package/dist/interfaces/addon.d.ts.map +1 -1
  261. package/dist/interfaces/advanced-notifier.d.ts +4 -0
  262. package/dist/interfaces/advanced-notifier.d.ts.map +1 -1
  263. package/dist/interfaces/capability.d.ts +59 -1
  264. package/dist/interfaces/capability.d.ts.map +1 -1
  265. package/dist/interfaces/config-ui.d.ts +70 -6
  266. package/dist/interfaces/config-ui.d.ts.map +1 -1
  267. package/dist/interfaces/device-capabilities/camera.d.ts +2 -1
  268. package/dist/interfaces/device-capabilities/camera.d.ts.map +1 -1
  269. package/dist/interfaces/event-bus.d.ts +105 -4
  270. package/dist/interfaces/event-bus.d.ts.map +1 -1
  271. package/dist/interfaces/kernel-abstractions.d.ts +10 -1
  272. package/dist/interfaces/kernel-abstractions.d.ts.map +1 -1
  273. package/dist/interfaces/network-quality.d.ts +8 -0
  274. package/dist/interfaces/network-quality.d.ts.map +1 -1
  275. package/dist/interfaces/pipeline-executor-capability.d.ts +2 -2
  276. package/dist/interfaces/pipeline-orchestrator-capability.d.ts +2 -1
  277. package/dist/interfaces/pipeline-orchestrator-capability.d.ts.map +1 -1
  278. package/dist/interfaces/pipeline-runner-capability.d.ts +7 -0
  279. package/dist/interfaces/pipeline-runner-capability.d.ts.map +1 -1
  280. package/dist/interfaces/recording-config.d.ts +91 -0
  281. package/dist/interfaces/recording-config.d.ts.map +1 -0
  282. package/dist/interfaces/rtp-egress.d.ts +2 -3
  283. package/dist/interfaces/rtp-egress.d.ts.map +1 -1
  284. package/dist/interfaces/storage-location-declaration.d.ts +34 -0
  285. package/dist/interfaces/storage-location-declaration.d.ts.map +1 -0
  286. package/dist/interfaces/storage-location.d.ts +18 -74
  287. package/dist/interfaces/storage-location.d.ts.map +1 -1
  288. package/dist/interfaces/storage.d.ts +15 -4
  289. package/dist/interfaces/storage.d.ts.map +1 -1
  290. package/dist/interfaces/stream-broker.d.ts +39 -4
  291. package/dist/interfaces/stream-broker.d.ts.map +1 -1
  292. package/dist/interfaces/timezones.d.ts +59 -0
  293. package/dist/interfaces/timezones.d.ts.map +1 -0
  294. package/dist/node.d.ts +3 -0
  295. package/dist/node.d.ts.map +1 -1
  296. package/dist/node.js +50 -8
  297. package/dist/node.js.map +1 -1
  298. package/dist/node.mjs +51 -9
  299. package/dist/node.mjs.map +1 -1
  300. package/dist/readiness/readiness-registry.d.ts.map +1 -1
  301. package/dist/schemas/auth-records.d.ts +4 -4
  302. package/dist/storage/filesystem-storage-provider.d.ts +2 -1
  303. package/dist/storage/filesystem-storage-provider.d.ts.map +1 -1
  304. package/dist/stream-selection.d.ts +85 -0
  305. package/dist/stream-selection.d.ts.map +1 -0
  306. package/dist/types/detection.d.ts +3 -3
  307. package/dist/types/io.d.ts +13 -1
  308. package/dist/types/io.d.ts.map +1 -1
  309. package/dist/util/location-match.d.ts +15 -0
  310. package/dist/util/location-match.d.ts.map +1 -0
  311. package/dist/utils/canonical-hash.d.ts +20 -0
  312. package/dist/utils/canonical-hash.d.ts.map +1 -0
  313. package/dist/utils/export-reconciler.d.ts +101 -0
  314. package/dist/utils/export-reconciler.d.ts.map +1 -0
  315. package/dist/utils/privacy-grid-raster.d.ts +48 -0
  316. package/dist/utils/privacy-grid-raster.d.ts.map +1 -0
  317. package/dist/utils/sleep.d.ts +36 -0
  318. package/dist/utils/sleep.d.ts.map +1 -0
  319. package/package.json +1 -1
  320. package/dist/capabilities/recording-engine.cap.d.ts +0 -477
  321. package/dist/capabilities/recording-engine.cap.d.ts.map +0 -1
  322. package/dist/index-CMM1Y9W6.js.map +0 -1
  323. package/dist/index-QRlzao1I.mjs.map +0 -1
@@ -84,6 +84,7 @@ export declare const webrtcSessionCapability: {
84
84
  readonly mode: "singleton";
85
85
  readonly kind: "wrapper";
86
86
  readonly defaultActive: true;
87
+ readonly preferredProvider: "stream-broker";
87
88
  readonly deviceTypes: readonly [DeviceType.Camera];
88
89
  readonly methods: {
89
90
  /**
@@ -155,6 +156,40 @@ export declare const webrtcSessionCapability: {
155
156
  downlinkMbps: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
156
157
  prefersTier: z.ZodOptional<z.ZodOptional<z.ZodString>>;
157
158
  }, z.core.$strip>>;
159
+ relayOnly: z.ZodOptional<z.ZodBoolean>;
160
+ consumerAttribution: z.ZodOptional<z.ZodReadonly<z.ZodObject<{
161
+ kind: z.ZodEnum<{
162
+ unknown: "unknown";
163
+ recording: "recording";
164
+ snapshot: "snapshot";
165
+ pipeline: "pipeline";
166
+ alexa: "alexa";
167
+ homekit: "homekit";
168
+ "webrtc-browser": "webrtc-browser";
169
+ "webrtc-mobile": "webrtc-mobile";
170
+ "webrtc-whep": "webrtc-whep";
171
+ "rtsp-listen": "rtsp-listen";
172
+ "derived-broker": "derived-broker";
173
+ warmup: "warmup";
174
+ }>;
175
+ label: z.ZodOptional<z.ZodString>;
176
+ media: z.ZodOptional<z.ZodEnum<{
177
+ video: "video";
178
+ audio: "audio";
179
+ both: "both";
180
+ }>>;
181
+ targetCodec: z.ZodOptional<z.ZodString>;
182
+ transport: z.ZodOptional<z.ZodEnum<{
183
+ passthrough: "passthrough";
184
+ repacketize: "repacketize";
185
+ transcode: "transcode";
186
+ }>>;
187
+ remoteAddr: z.ZodOptional<z.ZodString>;
188
+ userAgent: z.ZodOptional<z.ZodString>;
189
+ userId: z.ZodOptional<z.ZodString>;
190
+ sessionId: z.ZodOptional<z.ZodString>;
191
+ extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
192
+ }, z.core.$strip>>>;
158
193
  }, z.core.$strip>, z.ZodObject<{
159
194
  sessionId: z.ZodString;
160
195
  sdpOffer: z.ZodString;
@@ -189,6 +224,43 @@ export declare const webrtcSessionCapability: {
189
224
  }, z.core.$strip>], "kind">>;
190
225
  sdpOffer: z.ZodString;
191
226
  sessionId: z.ZodOptional<z.ZodString>;
227
+ relayOnly: z.ZodOptional<z.ZodBoolean>;
228
+ nonTrickle: z.ZodOptional<z.ZodBoolean>;
229
+ disableTurn: z.ZodOptional<z.ZodBoolean>;
230
+ disableIpv6: z.ZodOptional<z.ZodBoolean>;
231
+ consumerAttribution: z.ZodOptional<z.ZodReadonly<z.ZodObject<{
232
+ kind: z.ZodEnum<{
233
+ unknown: "unknown";
234
+ recording: "recording";
235
+ snapshot: "snapshot";
236
+ pipeline: "pipeline";
237
+ alexa: "alexa";
238
+ homekit: "homekit";
239
+ "webrtc-browser": "webrtc-browser";
240
+ "webrtc-mobile": "webrtc-mobile";
241
+ "webrtc-whep": "webrtc-whep";
242
+ "rtsp-listen": "rtsp-listen";
243
+ "derived-broker": "derived-broker";
244
+ warmup: "warmup";
245
+ }>;
246
+ label: z.ZodOptional<z.ZodString>;
247
+ media: z.ZodOptional<z.ZodEnum<{
248
+ video: "video";
249
+ audio: "audio";
250
+ both: "both";
251
+ }>>;
252
+ targetCodec: z.ZodOptional<z.ZodString>;
253
+ transport: z.ZodOptional<z.ZodEnum<{
254
+ passthrough: "passthrough";
255
+ repacketize: "repacketize";
256
+ transcode: "transcode";
257
+ }>>;
258
+ remoteAddr: z.ZodOptional<z.ZodString>;
259
+ userAgent: z.ZodOptional<z.ZodString>;
260
+ userId: z.ZodOptional<z.ZodString>;
261
+ sessionId: z.ZodOptional<z.ZodString>;
262
+ extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
263
+ }, z.core.$strip>>>;
192
264
  }, z.core.$strip>, z.ZodObject<{
193
265
  sessionId: z.ZodString;
194
266
  sdpAnswer: z.ZodString;
@@ -198,6 +270,38 @@ export declare const webrtcSessionCapability: {
198
270
  sessionId: z.ZodString;
199
271
  sdpAnswer: z.ZodString;
200
272
  }, z.core.$strip>, z.ZodVoid, "mutation">;
273
+ /**
274
+ * Trickle ICE — add a remote (client) ICE candidate to a live session.
275
+ * Lets the client send its SDP offer/answer IMMEDIATELY (before ICE
276
+ * gathering finishes) and deliver candidates as they arrive, so the
277
+ * connection establishes in ~0s instead of waiting for full gathering.
278
+ * The dual of `getIceCandidates` in the trickle-ICE signaling exchange.
279
+ */
280
+ readonly addIceCandidate: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
281
+ deviceId: z.ZodNumber;
282
+ sessionId: z.ZodString;
283
+ candidate: z.ZodString;
284
+ sdpMid: z.ZodOptional<z.ZodNullable<z.ZodString>>;
285
+ sdpMLineIndex: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
286
+ }, z.core.$strip>, z.ZodVoid, "mutation">;
287
+ /**
288
+ * Trickle ICE — poll the server's gathered ICE candidates for a session.
289
+ * The server answers immediately (no gathering wait) and the client polls
290
+ * this to receive host/srflx/relay candidates as werift gathers them,
291
+ * adding each to its PeerConnection. Returns all candidates gathered so
292
+ * far; the client dedupes. `done` flips true once gathering completes.
293
+ */
294
+ readonly getIceCandidates: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
295
+ deviceId: z.ZodNumber;
296
+ sessionId: z.ZodString;
297
+ }, z.core.$strip>, z.ZodObject<{
298
+ candidates: z.ZodArray<z.ZodObject<{
299
+ candidate: z.ZodString;
300
+ sdpMid: z.ZodNullable<z.ZodString>;
301
+ sdpMLineIndex: z.ZodNullable<z.ZodNumber>;
302
+ }, z.core.$strip>>;
303
+ done: z.ZodBoolean;
304
+ }, z.core.$strip>, "query">;
201
305
  readonly closeSession: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
202
306
  deviceId: z.ZodNumber;
203
307
  sessionId: z.ZodString;
@@ -211,6 +315,30 @@ export declare const webrtcSessionCapability: {
211
315
  low: "low";
212
316
  }>;
213
317
  }, z.core.$strip>, z.ZodBoolean, import("./capability-definition.js").CapabilityMethodKind>;
318
+ /** Poll the live signaling state of a session. `pendingRenegotiation` is
319
+ * non-null after an adaptive tier switch — the client re-offers on the
320
+ * same sessionId; `epoch` guards against acting on a stale poll twice. */
321
+ readonly getSessionState: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
322
+ deviceId: z.ZodNumber;
323
+ sessionId: z.ZodString;
324
+ }, z.core.$strip>, z.ZodObject<{
325
+ pendingRenegotiation: z.ZodNullable<z.ZodObject<{
326
+ target: z.ZodDiscriminatedUnion<[z.ZodObject<{
327
+ kind: z.ZodLiteral<"adaptive">;
328
+ }, z.core.$strip>, z.ZodObject<{
329
+ kind: z.ZodLiteral<"profile">;
330
+ profile: z.ZodEnum<{
331
+ high: "high";
332
+ mid: "mid";
333
+ low: "low";
334
+ }>;
335
+ }, z.core.$strip>, z.ZodObject<{
336
+ kind: z.ZodLiteral<"cam-stream">;
337
+ camStreamId: z.ZodString;
338
+ }, z.core.$strip>], "kind">;
339
+ epoch: z.ZodNumber;
340
+ }, z.core.$strip>>;
341
+ }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
214
342
  };
215
343
  };
216
344
  export type IWebrtcSessionProvider = InferProvider<typeof webrtcSessionCapability>;
@@ -1 +1 @@
1
- {"version":3,"file":"webrtc-session.cap.d.ts","sourceRoot":"","sources":["../../src/capabilities/webrtc-session.cap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAClG,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAIrD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;2BAInC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE,qDAAqD;AACrD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBnC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;QAQhC;;;;;WAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAKH;;;;;;WAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;QAUH;;;;;;;;;;;;WAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4BH,kFAAkF;;;;;;;;;;CAS7C,CAAA;AAEzC,MAAM,MAAM,sBAAsB,GAAG,aAAa,CAAC,OAAO,uBAAuB,CAAC,CAAA"}
1
+ {"version":3,"file":"webrtc-session.cap.d.ts","sourceRoot":"","sources":["../../src/capabilities/webrtc-session.cap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAClG,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAKrD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;2BAInC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE,qDAAqD;AACrD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBnC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;QAYhC;;;;;WAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAKH;;;;;;WAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+BH;;;;;;;;;;;;WAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0FH;;;;;;WAMG;;;;;;;;QAYH;;;;;;WAMG;;;;;;;;;;;;;;;;QAwBH,kFAAkF;;;;;;;;;QAQlF;;mFAE2E;;;;;;;;;;;;;;;;;;;;;;;CAatC,CAAA;AAEzC,MAAM,MAAM,sBAAsB,GAAG,aAAa,CAAC,OAAO,uBAAuB,CAAC,CAAA"}
@@ -35,8 +35,6 @@ export interface RuntimeDefaultsShape {
35
35
  'storage.provider': string;
36
36
  'storage.locations': Record<string, string>;
37
37
  'providers': RuntimeDefaultsProvider[];
38
- 'recording.segmentDurationSeconds': number;
39
- 'recording.defaultRetentionDays': number;
40
38
  'ffmpeg.binaryPath': string;
41
39
  'ffmpeg.hwAccel': string;
42
40
  'ffmpeg.threadCount': number;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,6BAA6B,CAAA;AACjD,eAAO,MAAM,WAAW,iEAAmD,CAAA;AAE3E;;;;;;;;GAQG;AACH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC;sEACkE;IAClE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,oBAAoB,EAAE,OAAO,CAAA;IAC7B,wBAAwB,EAAE,OAAO,CAAA;IACjC,0BAA0B,EAAE,OAAO,CAAA;IACnC,uBAAuB,EAAE,OAAO,CAAA;IAChC,uBAAuB,EAAE,OAAO,CAAA;IAChC,oBAAoB,EAAE,OAAO,CAAA;IAC7B,qBAAqB,EAAE,OAAO,CAAA;IAC9B,iBAAiB,EAAE,OAAO,CAAA;IAC1B,eAAe,EAAE,OAAO,CAAA;IACxB,+BAA+B,EAAE,MAAM,CAAA;IACvC,2BAA2B,EAAE,MAAM,CAAA;IACnC,eAAe,EAAE,MAAM,CAAA;IACvB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,yBAAyB,EAAE,MAAM,CAAA;IACjC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,WAAW,EAAE,uBAAuB,EAAE,CAAA;IACtC,kCAAkC,EAAE,MAAM,CAAA;IAC1C,gCAAgC,EAAE,MAAM,CAAA;IACxC,mBAAmB,EAAE,MAAM,CAAA;IAC3B,gBAAgB,EAAE,MAAM,CAAA;IACxB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,oBAuC9B,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,6BAA6B,CAAA;AACjD,eAAO,MAAM,WAAW,iEAAmD,CAAA;AAE3E;;;;;;;;GAQG;AACH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC;sEACkE;IAClE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,oBAAoB,EAAE,OAAO,CAAA;IAC7B,wBAAwB,EAAE,OAAO,CAAA;IACjC,0BAA0B,EAAE,OAAO,CAAA;IACnC,uBAAuB,EAAE,OAAO,CAAA;IAChC,uBAAuB,EAAE,OAAO,CAAA;IAChC,oBAAoB,EAAE,OAAO,CAAA;IAC7B,qBAAqB,EAAE,OAAO,CAAA;IAC9B,iBAAiB,EAAE,OAAO,CAAA;IAC1B,eAAe,EAAE,OAAO,CAAA;IACxB,+BAA+B,EAAE,MAAM,CAAA;IACvC,2BAA2B,EAAE,MAAM,CAAA;IACnC,eAAe,EAAE,MAAM,CAAA;IACvB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,yBAAyB,EAAE,MAAM,CAAA;IACjC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,WAAW,EAAE,uBAAuB,EAAE,CAAA;IACtC,mBAAmB,EAAE,MAAM,CAAA;IAC3B,gBAAgB,EAAE,MAAM,CAAA;IACxB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,oBAoC9B,CAAA"}
@@ -3,11 +3,17 @@ import { BaseAddon } from '../addon/base-addon.js';
3
3
  import { DeviceType } from './device-type.js';
4
4
  import type { CreateDeviceSpec } from './device-management.js';
5
5
  import type { DeviceConstructor } from './device-context.js';
6
+ import type { SourceInfo } from './source-info.js';
6
7
  export interface DiscoveryCandidate {
7
8
  readonly stableId: string;
8
9
  readonly type: DeviceType;
9
10
  readonly suggestedName: string;
10
11
  readonly prefilledConfig: Record<string, unknown>;
12
+ /** Optional upstream-system identity + rendering envelope. See
13
+ * `SourceInfo`. Pre-populated by providers whose discovery surface
14
+ * knows the upstream identity ahead of adoption (HA: entity_id +
15
+ * unit + device_class from `GET /api/states`). */
16
+ readonly sourceInfo?: SourceInfo;
11
17
  }
12
18
  export interface DeviceSummary {
13
19
  readonly id: number;
@@ -19,6 +25,11 @@ export interface DeviceSummary {
19
25
  readonly online: boolean;
20
26
  readonly features: readonly string[];
21
27
  readonly config: Record<string, unknown>;
28
+ /** Optional upstream-system identity + rendering envelope. See
29
+ * `SourceInfo`. Present when the device has been persisted with a
30
+ * non-synthetic source identifier (HA entities, vendor MAC, …);
31
+ * omitted when the synthetic backfill is in effect. */
32
+ readonly sourceInfo?: SourceInfo;
22
33
  }
23
34
  export interface ProviderStatus {
24
35
  readonly connected: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"base-device-provider.d.ts","sourceRoot":"","sources":["../../src/device/base-device-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,OAAO,EACR,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAI5D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAA;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAC7D;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAgB/E;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,8BAAsB,kBAAkB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,SAAS,CAAC,OAAO,CAAC;IACnH,kEAAkE;IAClE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAE3C,qDAAqD;IACrD,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;cAIhC,YAAY,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;cAK/C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAKpC,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAQhF,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC,eAAe,IAAI,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC;IAIzD,qBAAqB,CAAC,MAAM,EAAE;QAClC,SAAS,EAAE,kBAAkB,CAAA;KAC9B,GAAG,OAAO,CAAC,aAAa,CAAC;IAQpB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1C,sBAAsB,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAIzF;;;;;;;;OAQG;IACG,YAAY,CAAC,KAAK,EAAE;QACxB,IAAI,EAAE,UAAU,CAAA;QAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAChC,GAAG,OAAO,CAAC,aAAa,CAAC;IA6B1B;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAIlF,iBAAiB,CAAC,MAAM,EAAE;QAC9B,IAAI,EAAE,UAAU,CAAA;QAChB,GAAG,EAAE,MAAM,CAAA;QACX,KAAK,EAAE,OAAO,CAAA;QACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACrC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAMvB,cAAc,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IASzE;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAElG,uFAAuF;IACvF,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAExF;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAE/G;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;cACa,gBAAgB,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwDrF,uEAAuE;IACvE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa;CAGpD"}
1
+ {"version":3,"file":"base-device-provider.d.ts","sourceRoot":"","sources":["../../src/device/base-device-provider.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ import type { IDevice } from './device.js';
7
7
  import type { ConfigUISchemaWithValues } from '../interfaces/config-ui.js';
8
8
  import type { CapabilityDefinition, InferRuntimeState } from '../capabilities/capability-definition.js';
9
9
  import { type DeviceLocalState } from '../generated/device-local-state.js';
10
+ import { type SourceInfo } from './source-info.js';
11
+ import type { CustomActionSpec } from '../capabilities/custom-actions.js';
10
12
  export declare abstract class BaseDevice<T extends z.ZodObject<z.core.$ZodLooseShape> = z.ZodObject<z.ZodRawShape>> implements IDevice {
11
13
  readonly id: number;
12
14
  readonly stableId: string;
@@ -85,11 +87,26 @@ export declare abstract class BaseDevice<T extends z.ZodObject<z.core.$ZodLooseS
85
87
  * `kernel.devices.setDisabled(id, value)`.
86
88
  */
87
89
  readonly disabled: boolean;
90
+ /**
91
+ * Cached materialised `SourceInfo` — either the value persisted under
92
+ * `metadata.sourceInfo` at construction time, or a synthetic
93
+ * `{ id: stableId, system: addonId }` for providers that haven't
94
+ * migrated yet. Lazily populated on first `sourceInfo` read so the
95
+ * cost of Zod-parsing the meta blob is paid once per device boot.
96
+ * Invalidated by `updateSourceInfo()` so providers see the new value
97
+ * back through the getter without a re-fetch from the meta surface.
98
+ */
99
+ private _sourceInfoCache;
88
100
  constructor(ctx: DeviceContext, schema: T, options: {
89
101
  type: DeviceType;
90
102
  /** Optional semantic role within parent — see `DeviceRole`. */
91
103
  role?: DeviceRole;
92
104
  });
105
+ private readonly deviceActions;
106
+ /** Declare a device custom action + its typed handler. Idempotent per name. */
107
+ protected registerDeviceAction<TIn extends z.ZodType, TOut extends z.ZodType>(name: string, spec: CustomActionSpec<TIn, TOut>, handler: (input: z.infer<TIn>) => Promise<z.infer<TOut>>): void;
108
+ /** Invoke a registered device action. Validates input against the spec. */
109
+ runDeviceAction(action: string, input: unknown): Promise<unknown>;
93
110
  removeDevice(): Promise<void>;
94
111
  /**
95
112
  * Set the device's online flag. Called by `BaseDeviceProvider` after
@@ -101,6 +118,41 @@ export declare abstract class BaseDevice<T extends z.ZodObject<z.core.$ZodLooseS
101
118
  * override to gate side effects on the transition.
102
119
  */
103
120
  markOnline(online: boolean): void;
121
+ /**
122
+ * Upstream-system identity + rendering envelope for this device. See
123
+ * `SourceInfo` for the field contract. Always returns a valid object:
124
+ * if the persisted `metadata.sourceInfo` blob is absent or fails Zod
125
+ * validation, falls back to a synthetic `{ id: stableId, system: addonId }`
126
+ * so providers that haven't migrated keep working without code changes.
127
+ *
128
+ * The value is cached after the first read. `updateSourceInfo()`
129
+ * invalidates the cache so subsequent reads see the new patch. The
130
+ * returned object is frozen to prevent accidental in-place mutation —
131
+ * use `updateSourceInfo({ patch })` to change fields.
132
+ */
133
+ get sourceInfo(): Readonly<SourceInfo>;
134
+ /**
135
+ * Convenience accessor for the upstream dispatch key. Equivalent to
136
+ * `this.sourceInfo.id` — providers use this to keep a
137
+ * `Map<sourceId, IDevice>` for routing inbound push events.
138
+ */
139
+ get sourceId(): string;
140
+ /**
141
+ * Patch the device's `SourceInfo`. Shallow-merges `patch` over the
142
+ * current value, persists the merged result under
143
+ * `metadata.sourceInfo` via the `device-manager.setMetadata` cap, and
144
+ * emits `EventCategory.DeviceSourceInfoChanged` for live consumers.
145
+ *
146
+ * Safe to call from anywhere in the device's lifetime — the call is
147
+ * idempotent for `undefined` patch values (ignored) and best-effort
148
+ * for persistence (a transient device-manager error doesn't unwind
149
+ * the local cache update, so subsequent reads still see the patch).
150
+ *
151
+ * Drivers populate this on adoption + on every metadata change push
152
+ * from the upstream source. Subscribers (UI, export adapters) react
153
+ * via the `DeviceSourceInfoChanged` event without polling.
154
+ */
155
+ protected updateSourceInfo(patch: Partial<SourceInfo>): Promise<void>;
104
156
  /**
105
157
  * Re-publish the device's current `features` array to the persisted
106
158
  * meta blob. Drivers call this after a probe finishes when the live
@@ -1 +1 @@
1
- {"version":3,"file":"base-device.d.ts","sourceRoot":"","sources":["../../src/device/base-device.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-device.d.ts","sourceRoot":"","sources":["../../src/device/base-device.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import type { IKernelStreamProbe } from '../interfaces/addon.js';
6
6
  import type { AddonApi } from '../generated/addon-api.js';
7
7
  import type { DeviceProxy } from '../generated/device-proxy.js';
8
8
  import type { DeviceMeta, InitialDeviceMeta } from './device-management.js';
9
+ import type { DeviceType } from './device-type.js';
9
10
  export interface DeviceContext {
10
11
  /** Progressive, system-wide unique numeric device id. Injected from the
11
12
  * hub's `device-manager` via `DeviceManagerApi.allocateDeviceId` before
@@ -202,6 +203,34 @@ export interface DeviceManagerApi {
202
203
  * the next boot.
203
204
  */
204
205
  decommission(deviceId: number): Promise<void>;
206
+ /**
207
+ * Re-align a device's structural / mapping-derived spec and propagate the
208
+ * change to the live instance — generic, provider-agnostic, keyed only by
209
+ * `deviceId`. A provider calls this when an upstream source it owns reports
210
+ * that a device's derived shape changed (type, semantic role, or the
211
+ * mapping-derived config that selects the concrete device class).
212
+ *
213
+ * Behaviour:
214
+ * - `type` / `role` → applied via the existing meta setters.
215
+ * - `config` → merged over the persisted config (a patch). When the merge
216
+ * actually changes the blob, the live instance is rebuilt: the kernel
217
+ * tears it down with {@link decommission} (preserving the persisted
218
+ * meta/config rows, hence the operator's name/location/id), re-persists
219
+ * the merged config, then reconstructs via the device's creation factory
220
+ * so a config that maps to a different class yields the new class. No
221
+ * rebuild happens when nothing changed.
222
+ *
223
+ * The framework never interprets `config` (an opaque, provider-owned blob —
224
+ * it carries no kernel-level semantics like capabilities or device_class).
225
+ * Rebuild is only possible for devices created through `create()` or accessory
226
+ * spawn (which register a reconstruction factory); for others only the
227
+ * `type`/`role` meta updates apply.
228
+ */
229
+ applyDerivedSpec(deviceId: number, derived: {
230
+ type?: DeviceType;
231
+ role?: string;
232
+ config?: Record<string, unknown>;
233
+ }): Promise<void>;
205
234
  /** List all devices for this addon */
206
235
  getAll(): Promise<ReadonlyArray<IDevice>>;
207
236
  /** List children of a specific device */
@@ -1 +1 @@
1
- {"version":3,"file":"device-context.d.ts","sourceRoot":"","sources":["../../src/device/device-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"device-context.d.ts","sourceRoot":"","sources":["../../src/device/device-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DeviceLinkTransform } from './device-management.js';
2
+ /** Apply a link transform to a resolved source value. `identity`/undefined
3
+ * pass through; `enum-map` remaps strings (fallback or null when unknown);
4
+ * `linear` does scale*x+offset with optional clamp (null for non-numbers). */
5
+ export declare function applyTransform(value: unknown, transform: DeviceLinkTransform | undefined): unknown;
6
+ //# sourceMappingURL=device-link-transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-link-transform.d.ts","sourceRoot":"","sources":["../../src/device/device-link-transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAEjE;;+EAE+E;AAC/E,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,mBAAmB,GAAG,SAAS,GAAG,OAAO,CAqBlG"}
@@ -1,6 +1,7 @@
1
1
  import type { z } from 'zod';
2
2
  import type { DeviceType } from './device-type.js';
3
3
  import type { IDevice } from './device.js';
4
+ import type { SourceInfo } from './source-info.js';
4
5
  export interface DeviceManualCreation {
5
6
  getChildCreationSchema(type: DeviceType): z.ZodObject<z.core.$ZodLooseShape>;
6
7
  createDevice(type: DeviceType, config: unknown): Promise<IDevice>;
@@ -14,6 +15,10 @@ export interface DiscoveredDevice {
14
15
  readonly type: DeviceType;
15
16
  readonly suggestedName: string;
16
17
  readonly prefilledConfig: Record<string, unknown>;
18
+ /** Optional upstream-system identity + rendering envelope. See
19
+ * `SourceInfo`. Providers populate this when discovery already knows
20
+ * the upstream identity / unit / deviceClass (HA-style discovery). */
21
+ readonly sourceInfo?: SourceInfo;
17
22
  }
18
23
  export interface SavedDevice {
19
24
  /** Numeric id reserved at allocateDeviceId time. */
@@ -56,10 +61,9 @@ export interface SavedDevice {
56
61
  */
57
62
  /**
58
63
  * Free-form device metadata — hardware identity + driver-populated
59
- * facts the operator can both read and edit. Mirrors Scrypted's
60
- * `info: { manufacturer, model, serialNumber, ... }` device-level
61
- * surface but stored as a single JSON blob so future fields (HA
62
- * matter id, ONVIF profile token, …) don't require schema changes.
64
+ * facts the operator can both read and edit. Stored as a single JSON
65
+ * blob so future fields (HA matter id, ONVIF profile token, …) don't
66
+ * require schema changes.
63
67
  *
64
68
  * Conventional keys (drivers should populate when known):
65
69
  * - `manufacturer` e.g. 'Reolink'
@@ -74,6 +78,62 @@ export interface SavedDevice {
74
78
  * `ipAddress`, `apiPort`, …). All values must be JSON-serializable.
75
79
  */
76
80
  export type DeviceMetadata = Record<string, unknown>;
81
+ /** One child-placement directive on a container's `childLayout`. The child is
82
+ * identified by its accessory `stableIdSuffix` (the key the provider passes to
83
+ * `getAccessoryChildren()`), which is re-sync stable. Children NOT listed here
84
+ * render in the plain Overview list as today; listed children are grouped into
85
+ * collapsible accordion sections in the UI (built in a follow-up task). */
86
+ export interface ChildLayoutEntry {
87
+ readonly childKey: string;
88
+ readonly section: string;
89
+ readonly order?: number;
90
+ /** Section-level default-collapsed hint: when true, the accordion section this
91
+ * entry belongs to renders closed by default. The section is treated as
92
+ * collapsed if ANY of its entries sets `collapsed: true`; consistent values
93
+ * across a section's entries are recommended but not enforced. Absent ⇒ open
94
+ * by default. */
95
+ readonly collapsed?: boolean;
96
+ }
97
+ export type ChildLayout = readonly ChildLayoutEntry[];
98
+ /** One end of a device link: a single field on a source device's capability,
99
+ * addressed by the source's re-sync-stable accessory `stableIdSuffix`
100
+ * (`sourceKey`) — NOT a raw numeric id — so the link survives a re-sync. The
101
+ * source must be a sibling accessory under the SAME parent container as the
102
+ * target device; resolution is `${parentStableId}-${sourceKey}` (cross-parent
103
+ * links are out of scope and resolve to no source). */
104
+ export interface DeviceLinkSource {
105
+ readonly sourceKey: string;
106
+ readonly cap: string;
107
+ readonly fieldPath: string;
108
+ }
109
+ /** The target field a link writes: a dot-path into the target cap's status. */
110
+ export interface DeviceLinkTarget {
111
+ readonly cap: string;
112
+ readonly fieldPath: string;
113
+ /** Optional grouping key for array-of-items target caps (consumables); P2. */
114
+ readonly itemKey?: string;
115
+ }
116
+ /** Optional value transform applied to the resolved source value. */
117
+ export type DeviceLinkTransform = {
118
+ readonly kind: 'identity';
119
+ } | {
120
+ readonly kind: 'enum-map';
121
+ readonly mapping: Record<string, string | number | boolean>;
122
+ readonly fallback?: string | number | boolean;
123
+ } | {
124
+ readonly kind: 'linear';
125
+ readonly scale: number;
126
+ readonly offset: number;
127
+ readonly clamp?: readonly [number, number];
128
+ };
129
+ /** One operator-authored cross-device field wiring, persisted on the TARGET. */
130
+ export interface DeviceLink {
131
+ readonly id: string;
132
+ readonly source: DeviceLinkSource;
133
+ readonly target: DeviceLinkTarget;
134
+ readonly transform?: DeviceLinkTransform;
135
+ }
136
+ export type DeviceLinks = readonly DeviceLink[];
77
137
  export interface DeviceMeta {
78
138
  readonly id: number;
79
139
  readonly stableId: string;
@@ -85,6 +145,38 @@ export interface DeviceMeta {
85
145
  readonly parentDeviceId: number | null;
86
146
  /** Hardware + identity blob; null when nothing has been populated yet. */
87
147
  readonly metadata: DeviceMetadata | null;
148
+ /** Optional upstream-system identity + rendering envelope. See
149
+ * `SourceInfo`. Persisted under `metadata.sourceInfo` — this field
150
+ * is the typed projection callers consume directly. `BaseDevice`
151
+ * re-extracts via `extractSourceInfoFromMetadata()` for its own
152
+ * getter; kernel-side reader populates this from the same path. */
153
+ readonly sourceInfo?: SourceInfo;
154
+ /** Owning integration id, stamped at create — used by the core to
155
+ * cascade-delete an integration's devices. Optional: only present
156
+ * when the device was created through an integration (e.g. HA). */
157
+ readonly integrationId?: string;
158
+ /** Optional soft-link to another device id (peer of integrationId).
159
+ * Set at create; inert today — reserved for the Container→child
160
+ * passthrough. Nullable: an explicit null means "unlinked". */
161
+ readonly linkDeviceId?: number | null;
162
+ /** Durable primary-child override for a CONTAINER device, keyed on the
163
+ * chosen child's re-sync/rename-stable `entityId` (its `sourceInfo.id`,
164
+ * falling back to `stableId`). Unlike the numeric `linkDeviceId`, this
165
+ * survives a re-sync that reallocates the child's numeric id or renames
166
+ * its row. `null` explicitly clears the override → priority default.
167
+ * Absent ⇒ no override has ever been set. */
168
+ readonly primaryChildEntityId?: string | null;
169
+ /** Container-level layout hint: assigns specific child/accessory devices to
170
+ * named accordion sections (with optional intra-section order). Each entry's
171
+ * `childKey` is the child's re-sync-stable accessory `stableIdSuffix`. Set at
172
+ * create, persisted, projected, and preserved across re-register/restore —
173
+ * same lifecycle as `primaryChildEntityId`. Absent ⇒ no layout declared (all
174
+ * children render in the plain Overview list). */
175
+ readonly childLayout?: ChildLayout;
176
+ /** Operator-authored cross-device field wirings (source field → this device's
177
+ * cap field). Same create/persist/project/restore lifecycle as `childLayout`.
178
+ * Absent ⇒ no links. Overlaid onto the target cap's `getStatus` at read time. */
179
+ readonly deviceLinks?: DeviceLinks;
88
180
  }
89
181
  /**
90
182
  * Initial meta a provider supplies on `onCreateDevice`. Differs
@@ -95,6 +187,26 @@ export interface InitialDeviceMeta {
95
187
  readonly type: DeviceType;
96
188
  readonly name: string;
97
189
  readonly location?: string | null;
190
+ /** Semantic role string (`DeviceRole`) — stamped at create for
191
+ * accessory children (e.g. 'numeric-sensor', 'binary-sensor').
192
+ * Optional: only set when the device is an accessory with a known role. */
193
+ readonly role?: string;
194
+ /** Owning integration id, stamped at create — used by the core to
195
+ * cascade-delete an integration's devices. Optional: only set when
196
+ * the device is being created through an integration. */
197
+ readonly integrationId?: string;
198
+ /** Optional soft-link to another device id (peer of integrationId).
199
+ * Set at create; inert today — reserved for the Container→child
200
+ * passthrough. Nullable: an explicit null means "unlinked". */
201
+ readonly linkDeviceId?: number | null;
202
+ /** Container-level layout hint set at create — assigns specific
203
+ * child/accessory devices to named accordion sections (with optional order).
204
+ * Mirrors `DeviceMeta.childLayout`; persisted, projected, and preserved
205
+ * across re-register/restore. Optional: only set for CONTAINER devices that
206
+ * declare a layout. */
207
+ readonly childLayout?: ChildLayout;
208
+ /** Cross-device field wirings set at create. Mirrors `DeviceMeta.deviceLinks`. */
209
+ readonly deviceLinks?: DeviceLinks;
98
210
  }
99
211
  /**
100
212
  * Single-call payload returned by `BaseDeviceProvider.onCreateDevice`.
@@ -1 +1 @@
1
- {"version":3,"file":"device-management.d.ts","sourceRoot":"","sources":["../../src/device/device-management.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"device-management.d.ts","sourceRoot":"","sources":["../../src/device/device-management.ts"],"names":[],"mappings":"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"}