@awarevue/api-types 2.0.22 → 2.0.24

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 (377) hide show
  1. package/dist/_legacy/index.d.ts +2 -0
  2. package/dist/_legacy/index.js +2 -0
  3. package/dist/_legacy/milestone.js +1 -0
  4. package/dist/_legacy/orchid.js +1 -0
  5. package/dist/alarm-automation.d.ts +3 -3
  6. package/dist/alarm-automation.js +26 -37
  7. package/dist/api/agent-protocol/index.d.ts +1 -0
  8. package/dist/api/agent-protocol/index.js +1 -0
  9. package/dist/{agent-communication → api/agent-protocol}/protocol.d.ts +407 -598
  10. package/dist/api/agent-protocol/protocol.js +382 -0
  11. package/dist/api/commands/alarm.js +59 -0
  12. package/dist/{commands → api/commands}/all.d.ts +83 -83
  13. package/dist/{commands → api/commands}/all.js +22 -25
  14. package/dist/api/commands/camera-lift.js +14 -0
  15. package/dist/api/commands/camera.js +93 -0
  16. package/dist/api/commands/display.js +34 -0
  17. package/dist/api/commands/door.js +24 -0
  18. package/dist/api/commands/index.js +12 -0
  19. package/dist/api/commands/intercom-terminal.js +2 -0
  20. package/dist/api/commands/io-board.js +12 -0
  21. package/dist/api/commands/nvr-exporter.js +23 -0
  22. package/dist/api/commands/pbx.js +14 -0
  23. package/dist/api/commands/presence-tracker.js +30 -0
  24. package/dist/api/commands/server.js +24 -0
  25. package/dist/api/error.js +181 -0
  26. package/dist/api/events/alarm.js +52 -0
  27. package/dist/{events → api/events}/all.d.ts +8 -8
  28. package/dist/api/events/all.js +124 -0
  29. package/dist/api/events/camera.js +84 -0
  30. package/dist/api/events/display.js +6 -0
  31. package/dist/api/events/door.js +59 -0
  32. package/dist/api/events/index.js +12 -0
  33. package/dist/api/events/intercom-terminal.js +16 -0
  34. package/dist/api/events/io-board.js +10 -0
  35. package/dist/api/events/nvr-exporter.js +18 -0
  36. package/dist/api/events/panic-button.js +8 -0
  37. package/dist/api/events/presence-tracker.js +30 -0
  38. package/dist/api/events/reader.js +10 -0
  39. package/dist/{events → api/events}/server.d.ts +5 -5
  40. package/dist/api/events/server.js +12 -0
  41. package/dist/api/index.d.ts +9 -4
  42. package/dist/api/index.js +9 -20
  43. package/dist/api/mqtt/index.d.ts +1 -0
  44. package/dist/api/mqtt/index.js +1 -0
  45. package/dist/api/mqtt/payloads.js +18 -0
  46. package/dist/api/queries/all.js +25 -0
  47. package/dist/api/queries/camera.js +24 -0
  48. package/dist/api/queries/index.js +5 -0
  49. package/dist/api/queries/nvr-analytics-server.js +73 -0
  50. package/dist/api/queries/nvr-exporter.js +33 -0
  51. package/dist/api/queries/nvr-recorder.js +39 -0
  52. package/dist/api/rest/access-rule.d.ts +117 -0
  53. package/dist/api/rest/access-rule.js +10 -0
  54. package/dist/{access-control → api/rest}/agreement.d.ts +0 -20
  55. package/dist/api/rest/agreement.js +7 -0
  56. package/dist/api/rest/alarm.js +1 -0
  57. package/dist/{api-keys.d.ts → api/rest/api-keys.d.ts} +0 -20
  58. package/dist/api/rest/api-keys.js +11 -0
  59. package/dist/api/rest/app.js +9 -0
  60. package/dist/api/rest/auth.js +16 -0
  61. package/dist/{automation.d.ts → api/rest/automation.d.ts} +0 -217
  62. package/dist/api/rest/automation.js +14 -0
  63. package/dist/api/rest/aware-config.js +1 -0
  64. package/dist/{bookmarks.d.ts → api/rest/bookmarks.d.ts} +0 -49
  65. package/dist/api/rest/bookmarks.js +18 -0
  66. package/dist/api/rest/cast.js +7 -0
  67. package/dist/{custom-field.d.ts → api/rest/custom-field.d.ts} +1 -19
  68. package/dist/api/rest/custom-field.js +3 -0
  69. package/dist/{device-event.d.ts → api/rest/device-event.d.ts} +1 -1
  70. package/dist/api/rest/device-event.js +1 -0
  71. package/dist/{device-group.d.ts → api/rest/device-group.d.ts} +0 -23
  72. package/dist/api/rest/device-group.js +17 -0
  73. package/dist/api/rest/file.js +1 -0
  74. package/dist/api/rest/index.d.ts +34 -0
  75. package/dist/api/rest/index.js +34 -0
  76. package/dist/{device-factory.d.ts → api/rest/io-device.d.ts} +1 -1
  77. package/dist/api/rest/io-device.js +19 -0
  78. package/dist/{layout.d.ts → api/rest/layout.d.ts} +6 -107
  79. package/dist/api/rest/layout.js +19 -0
  80. package/dist/{macros.d.ts → api/rest/macros.d.ts} +0 -82
  81. package/dist/api/rest/macros.js +8 -0
  82. package/dist/api/rest/media.js +65 -0
  83. package/dist/api/rest/module-config.d.ts +19 -0
  84. package/dist/api/rest/module-config.js +1 -0
  85. package/dist/api/rest/notifications.d.ts +21 -0
  86. package/dist/api/rest/notifications.js +9 -0
  87. package/dist/api/rest/person-agreement.d.ts +15 -0
  88. package/dist/api/rest/person-agreement.js +6 -0
  89. package/dist/api/rest/person-presence.d.ts +72 -0
  90. package/dist/api/rest/person-presence.js +29 -0
  91. package/dist/{access-control → api/rest}/person-type.d.ts +1 -33
  92. package/dist/api/rest/person-type.js +8 -0
  93. package/dist/api/rest/person.d.ts +128 -0
  94. package/dist/api/rest/person.js +8 -0
  95. package/dist/api/{query.js → rest/query.js} +8 -13
  96. package/dist/api/rest/schedule.d.ts +249 -0
  97. package/dist/api/rest/schedule.js +9 -0
  98. package/dist/{security-level.d.ts → api/rest/security-level.d.ts} +0 -29
  99. package/dist/api/rest/security-level.js +5 -0
  100. package/dist/{template.d.ts → api/rest/template.d.ts} +1 -18
  101. package/dist/api/rest/template.js +12 -0
  102. package/dist/{token-conversion.d.ts → api/rest/token-conversion.d.ts} +0 -22
  103. package/dist/api/rest/token-conversion.js +5 -0
  104. package/dist/{user.d.ts → api/rest/user.d.ts} +10 -60
  105. package/dist/api/rest/user.js +32 -0
  106. package/dist/api/rest/view.d.ts +397 -0
  107. package/dist/api/rest/view.js +16 -0
  108. package/dist/api/rest/webrtc-playback.js +8 -0
  109. package/dist/{access-control → api/rest}/zone.d.ts +0 -29
  110. package/dist/api/rest/zone.js +10 -0
  111. package/dist/api/state/index.d.ts +10 -0
  112. package/dist/api/state/index.js +1 -0
  113. package/dist/api/ws/device-communication.js +55 -0
  114. package/dist/api/ws/index.js +5 -0
  115. package/dist/api/ws/notifications.js +20 -0
  116. package/dist/api/ws/progress.js +44 -0
  117. package/dist/api/ws/web-rtc-signaling.js +92 -0
  118. package/dist/api/ws/web-socket.js +2 -0
  119. package/dist/index.d.ts +1 -36
  120. package/dist/index.js +6 -57
  121. package/dist/{access-control → objects}/access-rule.d.ts +9 -78
  122. package/dist/objects/access-rule.js +36 -0
  123. package/dist/objects/agent-metadata.d.ts +192 -0
  124. package/dist/objects/agent-metadata.js +49 -0
  125. package/dist/objects/agreement.d.ts +21 -0
  126. package/dist/objects/agreement.js +8 -0
  127. package/dist/{objects.d.ts → objects/all.d.ts} +18 -11
  128. package/dist/{objects.js → objects/all.js} +4 -7
  129. package/dist/objects/api-key.d.ts +21 -0
  130. package/dist/objects/api-key.js +8 -0
  131. package/dist/objects/automation-rule.d.ts +218 -0
  132. package/dist/objects/automation-rule.js +51 -0
  133. package/dist/objects/bookmark.d.ts +50 -0
  134. package/dist/objects/bookmark.js +13 -0
  135. package/dist/objects/credential.js +11 -0
  136. package/dist/objects/custom-field.d.ts +20 -0
  137. package/dist/objects/custom-field.js +14 -0
  138. package/dist/{device → objects/device}/alarm.js +3 -6
  139. package/dist/{device → objects/device}/any-device.d.ts +510 -510
  140. package/dist/objects/device/any-device.js +239 -0
  141. package/dist/objects/device/camera-lift.js +4 -0
  142. package/dist/objects/device/camera.js +32 -0
  143. package/dist/objects/device/device-gateway.js +2 -0
  144. package/dist/{device-import.d.ts → objects/device/device-import.d.ts} +44 -44
  145. package/dist/objects/device/device-import.js +30 -0
  146. package/dist/{device-relation.js → objects/device/device-relation.js} +13 -16
  147. package/dist/objects/device/display.js +4 -0
  148. package/dist/objects/device/door.js +9 -0
  149. package/dist/{device → objects/device}/index.d.ts +2 -0
  150. package/dist/objects/device/index.js +22 -0
  151. package/dist/objects/device/intercom-operator.js +1 -0
  152. package/dist/objects/device/intercom-terminal.js +23 -0
  153. package/dist/objects/device/io-board.js +7 -0
  154. package/dist/objects/device/motion-sensor.js +4 -0
  155. package/dist/objects/device/nvr-analytics-server.js +6 -0
  156. package/dist/objects/device/nvr-exporter.js +7 -0
  157. package/dist/objects/device/nvr-recorder.js +6 -0
  158. package/dist/objects/device/panic-button.js +4 -0
  159. package/dist/objects/device/pbx.js +6 -0
  160. package/dist/objects/device/presence-tracker.js +1 -0
  161. package/dist/objects/device/reader.js +1 -0
  162. package/dist/{device → objects/device}/server.d.ts +1 -1
  163. package/dist/objects/device/server.js +1 -0
  164. package/dist/objects/device/system.js +6 -0
  165. package/dist/objects/device-group.d.ts +24 -0
  166. package/dist/objects/device-group.js +9 -0
  167. package/dist/objects/index.d.ts +28 -0
  168. package/dist/objects/index.js +28 -0
  169. package/dist/objects/layout.d.ts +102 -0
  170. package/dist/objects/layout.js +22 -0
  171. package/dist/objects/macro.d.ts +83 -0
  172. package/dist/objects/macro.js +22 -0
  173. package/dist/{module-config.d.ts → objects/module-config.d.ts} +1 -18
  174. package/dist/objects/module-config.js +1 -0
  175. package/dist/{notifications.d.ts → objects/notification.d.ts} +0 -20
  176. package/dist/objects/notification.js +13 -0
  177. package/dist/{access-control → objects}/person-agreement.d.ts +1 -15
  178. package/dist/objects/person-agreement.js +8 -0
  179. package/dist/{access-control → objects}/person-presence.d.ts +2 -73
  180. package/dist/objects/person-presence.js +35 -0
  181. package/dist/objects/person-type.d.ts +33 -0
  182. package/dist/objects/person-type.js +16 -0
  183. package/dist/{access-control → objects}/person.d.ts +74 -140
  184. package/dist/objects/person.js +42 -0
  185. package/dist/objects/role.d.ts +21 -0
  186. package/dist/objects/role.js +15 -0
  187. package/dist/{access-control → objects}/schedule.d.ts +4 -129
  188. package/dist/objects/schedule.js +53 -0
  189. package/dist/objects/security-level.d.ts +30 -0
  190. package/dist/objects/security-level.js +11 -0
  191. package/dist/objects/template.d.ts +20 -0
  192. package/dist/objects/template.js +8 -0
  193. package/dist/objects/token-conversion.d.ts +23 -0
  194. package/dist/objects/token-conversion.js +8 -0
  195. package/dist/objects/user.d.ts +31 -0
  196. package/dist/objects/user.js +12 -0
  197. package/dist/{view.d.ts → objects/view.d.ts} +3 -399
  198. package/dist/objects/view.js +64 -0
  199. package/dist/{world-objects.js → objects/world-object.js} +5 -8
  200. package/dist/objects/zone.d.ts +41 -0
  201. package/dist/objects/zone.js +15 -0
  202. package/dist/package.json +1 -1
  203. package/dist/permissions.js +146 -149
  204. package/dist/primitives.d.ts +30 -30
  205. package/dist/primitives.js +27 -30
  206. package/package.json +1 -1
  207. package/dist/access-control/access-rule.js +0 -49
  208. package/dist/access-control/agreement.js +0 -20
  209. package/dist/access-control/credential.js +0 -17
  210. package/dist/access-control/index.d.ts +0 -9
  211. package/dist/access-control/index.js +0 -25
  212. package/dist/access-control/person-agreement.js +0 -19
  213. package/dist/access-control/person-presence.js +0 -66
  214. package/dist/access-control/person-type.js +0 -29
  215. package/dist/access-control/person.js +0 -53
  216. package/dist/access-control/schedule.js +0 -65
  217. package/dist/access-control/zone.js +0 -28
  218. package/dist/agent-communication/index.d.ts +0 -2
  219. package/dist/agent-communication/index.js +0 -18
  220. package/dist/agent-communication/mqtt-payloads.js +0 -21
  221. package/dist/agent-communication/protocol.js +0 -436
  222. package/dist/api/alarm.js +0 -2
  223. package/dist/api/auth.js +0 -19
  224. package/dist/api/media.js +0 -68
  225. package/dist/api-keys.js +0 -21
  226. package/dist/app.js +0 -12
  227. package/dist/automation.js +0 -66
  228. package/dist/aware-config.js +0 -2
  229. package/dist/bookmarks.js +0 -32
  230. package/dist/cast.js +0 -13
  231. package/dist/commands/alarm.js +0 -62
  232. package/dist/commands/camera-lift.js +0 -17
  233. package/dist/commands/camera.js +0 -97
  234. package/dist/commands/display.js +0 -37
  235. package/dist/commands/door.js +0 -27
  236. package/dist/commands/index.js +0 -28
  237. package/dist/commands/intercom-terminal.js +0 -3
  238. package/dist/commands/io-board.js +0 -15
  239. package/dist/commands/nvr-exporter.js +0 -26
  240. package/dist/commands/pbx.js +0 -17
  241. package/dist/commands/presence-tracker.js +0 -33
  242. package/dist/commands/server.js +0 -27
  243. package/dist/custom-field.js +0 -19
  244. package/dist/device/any-device.js +0 -242
  245. package/dist/device/camera-lift.js +0 -7
  246. package/dist/device/camera.js +0 -35
  247. package/dist/device/device-gateway.js +0 -5
  248. package/dist/device/display.js +0 -7
  249. package/dist/device/door.js +0 -12
  250. package/dist/device/index.js +0 -36
  251. package/dist/device/intercom-operator.js +0 -4
  252. package/dist/device/intercom-terminal.js +0 -26
  253. package/dist/device/io-board.js +0 -10
  254. package/dist/device/motion-sensor.js +0 -7
  255. package/dist/device/nvr-analytics-server.js +0 -9
  256. package/dist/device/nvr-exporter.js +0 -10
  257. package/dist/device/nvr-recorder.js +0 -9
  258. package/dist/device/panic-button.js +0 -7
  259. package/dist/device/pbx.js +0 -9
  260. package/dist/device/presence-tracker.js +0 -4
  261. package/dist/device/reader.js +0 -4
  262. package/dist/device/server.js +0 -4
  263. package/dist/device/system.js +0 -9
  264. package/dist/device-event.js +0 -2
  265. package/dist/device-factory.js +0 -26
  266. package/dist/device-group.js +0 -31
  267. package/dist/device-import.js +0 -33
  268. package/dist/device-state.d.ts +0 -10
  269. package/dist/device-state.js +0 -2
  270. package/dist/error.js +0 -185
  271. package/dist/events/alarm.js +0 -55
  272. package/dist/events/all.js +0 -128
  273. package/dist/events/camera.js +0 -87
  274. package/dist/events/display.js +0 -9
  275. package/dist/events/door.js +0 -62
  276. package/dist/events/index.js +0 -28
  277. package/dist/events/intercom-terminal.js +0 -19
  278. package/dist/events/io-board.js +0 -13
  279. package/dist/events/nvr-exporter.js +0 -21
  280. package/dist/events/panic-button.js +0 -11
  281. package/dist/events/presence-tracker.js +0 -33
  282. package/dist/events/reader.js +0 -13
  283. package/dist/events/server.js +0 -15
  284. package/dist/file.js +0 -2
  285. package/dist/layout.js +0 -45
  286. package/dist/macros.js +0 -32
  287. package/dist/messages/device-communication.js +0 -63
  288. package/dist/messages/index.js +0 -21
  289. package/dist/messages/notifications.js +0 -27
  290. package/dist/messages/progress.js +0 -51
  291. package/dist/messages/web-rtc-signaling.js +0 -99
  292. package/dist/messages/web-socket.js +0 -5
  293. package/dist/milestone.js +0 -2
  294. package/dist/module-config.js +0 -2
  295. package/dist/notifications.js +0 -23
  296. package/dist/orchid.js +0 -2
  297. package/dist/queries/all.js +0 -28
  298. package/dist/queries/camera.js +0 -27
  299. package/dist/queries/index.js +0 -21
  300. package/dist/queries/nvr-analytics-server.js +0 -76
  301. package/dist/queries/nvr-exporter.js +0 -36
  302. package/dist/queries/nvr-recorder.js +0 -42
  303. package/dist/security-level.js +0 -18
  304. package/dist/template.js +0 -21
  305. package/dist/token-conversion.js +0 -15
  306. package/dist/user.js +0 -57
  307. package/dist/view.js +0 -84
  308. package/dist/webrtc-playback.js +0 -14
  309. package/dist/{milestone.d.ts → _legacy/milestone.d.ts} +0 -0
  310. package/dist/{orchid.d.ts → _legacy/orchid.d.ts} +0 -0
  311. package/dist/{commands → api/commands}/alarm.d.ts +0 -0
  312. package/dist/{commands → api/commands}/camera-lift.d.ts +0 -0
  313. package/dist/{commands → api/commands}/camera.d.ts +0 -0
  314. package/dist/{commands → api/commands}/display.d.ts +0 -0
  315. package/dist/{commands → api/commands}/door.d.ts +0 -0
  316. package/dist/{commands → api/commands}/index.d.ts +0 -0
  317. package/dist/{commands → api/commands}/intercom-terminal.d.ts +0 -0
  318. package/dist/{commands → api/commands}/io-board.d.ts +0 -0
  319. package/dist/{commands → api/commands}/nvr-exporter.d.ts +86 -86
  320. package/dist/{commands → api/commands}/pbx.d.ts +0 -0
  321. package/dist/{commands → api/commands}/presence-tracker.d.ts +0 -0
  322. package/dist/{commands → api/commands}/server.d.ts +78 -78
  323. package/dist/{error.d.ts → api/error.d.ts} +0 -0
  324. package/dist/{events → api/events}/alarm.d.ts +0 -0
  325. package/dist/{events → api/events}/camera.d.ts +0 -0
  326. package/dist/{events → api/events}/display.d.ts +0 -0
  327. package/dist/{events → api/events}/door.d.ts +0 -0
  328. package/dist/{events → api/events}/index.d.ts +0 -0
  329. package/dist/{events → api/events}/intercom-terminal.d.ts +0 -0
  330. package/dist/{events → api/events}/io-board.d.ts +0 -0
  331. package/dist/{events → api/events}/nvr-exporter.d.ts +4 -4
  332. package/dist/{events → api/events}/panic-button.d.ts +0 -0
  333. package/dist/{events → api/events}/presence-tracker.d.ts +8 -8
  334. package/dist/{events → api/events}/reader.d.ts +0 -0
  335. package/dist/{agent-communication/mqtt-payloads.d.ts → api/mqtt/payloads.d.ts} +0 -0
  336. package/dist/{queries → api/queries}/all.d.ts +83 -83
  337. package/dist/{queries → api/queries}/camera.d.ts +0 -0
  338. package/dist/{queries → api/queries}/index.d.ts +0 -0
  339. package/dist/{queries → api/queries}/nvr-analytics-server.d.ts +4 -4
  340. package/dist/{queries → api/queries}/nvr-exporter.d.ts +0 -0
  341. package/dist/{queries → api/queries}/nvr-recorder.d.ts +162 -162
  342. package/dist/api/{alarm.d.ts → rest/alarm.d.ts} +0 -0
  343. package/dist/{app.d.ts → api/rest/app.d.ts} +0 -0
  344. package/dist/api/{auth.d.ts → rest/auth.d.ts} +0 -0
  345. package/dist/{aware-config.d.ts → api/rest/aware-config.d.ts} +0 -0
  346. package/dist/{cast.d.ts → api/rest/cast.d.ts} +0 -0
  347. package/dist/{file.d.ts → api/rest/file.d.ts} +0 -0
  348. package/dist/api/{media.d.ts → rest/media.d.ts} +2 -2
  349. /package/dist/api/{query.d.ts → rest/query.d.ts} +0 -0
  350. /package/dist/{webrtc-playback.d.ts → api/rest/webrtc-playback.d.ts} +0 -0
  351. /package/dist/{messages → api/ws}/device-communication.d.ts +0 -0
  352. /package/dist/{messages → api/ws}/index.d.ts +0 -0
  353. /package/dist/{messages → api/ws}/notifications.d.ts +0 -0
  354. /package/dist/{messages → api/ws}/progress.d.ts +0 -0
  355. /package/dist/{messages → api/ws}/web-rtc-signaling.d.ts +0 -0
  356. /package/dist/{messages → api/ws}/web-socket.d.ts +0 -0
  357. /package/dist/{access-control → objects}/credential.d.ts +0 -0
  358. /package/dist/{device → objects/device}/alarm.d.ts +0 -0
  359. /package/dist/{device → objects/device}/camera-lift.d.ts +0 -0
  360. /package/dist/{device → objects/device}/camera.d.ts +0 -0
  361. /package/dist/{device → objects/device}/device-gateway.d.ts +0 -0
  362. /package/dist/{device-relation.d.ts → objects/device/device-relation.d.ts} +0 -0
  363. /package/dist/{device → objects/device}/display.d.ts +0 -0
  364. /package/dist/{device → objects/device}/door.d.ts +0 -0
  365. /package/dist/{device → objects/device}/intercom-operator.d.ts +0 -0
  366. /package/dist/{device → objects/device}/intercom-terminal.d.ts +0 -0
  367. /package/dist/{device → objects/device}/io-board.d.ts +0 -0
  368. /package/dist/{device → objects/device}/motion-sensor.d.ts +0 -0
  369. /package/dist/{device → objects/device}/nvr-analytics-server.d.ts +0 -0
  370. /package/dist/{device → objects/device}/nvr-exporter.d.ts +0 -0
  371. /package/dist/{device → objects/device}/nvr-recorder.d.ts +0 -0
  372. /package/dist/{device → objects/device}/panic-button.d.ts +0 -0
  373. /package/dist/{device → objects/device}/pbx.d.ts +0 -0
  374. /package/dist/{device → objects/device}/presence-tracker.d.ts +0 -0
  375. /package/dist/{device → objects/device}/reader.d.ts +0 -0
  376. /package/dist/{device → objects/device}/system.d.ts +0 -0
  377. /package/dist/{world-objects.d.ts → objects/world-object.d.ts} +0 -0
@@ -0,0 +1,382 @@
1
+ import { sDeviceDiscoveryDto } from '../../objects/device/device-import';
2
+ import { z } from 'zod';
3
+ import { sCreateAccessRuleRequest, sCreatePersonRequest, sCreateScheduleRequest, sCreateZoneRequest, } from '../rest';
4
+ import { sAgentDeviceInfo } from '../../primitives';
5
+ import { sProviderSpecs, sAccessControlCapabilityReport, sAccessObjectKind, } from '../../objects/agent-metadata';
6
+ // PROTOCOL ENVELOPE
7
+ export const sMessageHeader = z.object({
8
+ version: z.number().describe('Protocol version'),
9
+ id: z.string().nonempty('ID is required').describe('Unique message ID'),
10
+ from: z
11
+ .string()
12
+ .nonempty('Agent name required')
13
+ .describe("Sender ID (Agent ID or 'server')"),
14
+ on: z.number().describe('Timestamp in milliseconds since epoch'),
15
+ });
16
+ export const sMessageWithPayload = (sPayload) => sMessageHeader.and(sPayload).describe('Message with payload');
17
+ export const sResponsePayload = (kind, sPayload) =>
18
+ // success branch
19
+ z.object({ requestId: z.string().nonempty(), kind }).and(sPayload);
20
+ export const sAgentErrorCode = z.enum(['NOT_SUPPORTED', 'TIMEOUT']);
21
+ export const sErrorPayload = sResponsePayload(z.literal('error-rs'), z.object({
22
+ error: z.string().nonempty().describe('Error message if request failed'),
23
+ code: sAgentErrorCode.optional().describe('Optional error code'),
24
+ }));
25
+ // REGISTER
26
+ export const sRegisterRq = z.object({
27
+ kind: z.literal('register'),
28
+ providers: z
29
+ .record(sProviderSpecs)
30
+ .describe('Map of providers and their specs, ones that the agent can handle'),
31
+ accessControlProviders: z.record(sAccessControlCapabilityReport).optional(),
32
+ });
33
+ export const sRegisterRs = sResponsePayload(z.literal('register-rs'), z.object({}));
34
+ // UNREGISTER
35
+ export const sUnregister = z
36
+ .object({
37
+ kind: z.literal('unregister'),
38
+ provider: z.string().nonempty(),
39
+ })
40
+ .describe('Request to unregister a provider');
41
+ // VALIDATE PROVIDER CONFIG
42
+ export const sValidateProviderConfigRq = z.object({
43
+ kind: z.literal('validate-config'),
44
+ provider: z.string().nonempty(),
45
+ config: z.record(z.unknown()),
46
+ });
47
+ export const sConfigurationIssue = z
48
+ .object({
49
+ paths: z.array(z.string()),
50
+ message: z.string(),
51
+ })
52
+ .describe('A configuration issue that can be reported by agents');
53
+ export const sValidateProviderConfigRs = sResponsePayload(z.literal('validate-config-rs'), z.object({
54
+ issues: z.array(sConfigurationIssue),
55
+ })).describe('Validation result for provider configuration');
56
+ // START SERVICE
57
+ export const sStartServiceRq = z
58
+ .object({
59
+ kind: z.literal('start'),
60
+ provider: z.string().nonempty(),
61
+ config: z.record(z.unknown()),
62
+ lastEventForeignRef: z
63
+ .string()
64
+ .nullable()
65
+ .describe('Last event foreign reference that the agent should start from'),
66
+ lastEventTimestamp: z
67
+ .number()
68
+ .nullable()
69
+ .describe('Last event timestamp that the agent should start from'),
70
+ })
71
+ .describe('Request to start a service for a provider');
72
+ export const sStartServiceRs = sResponsePayload(z.literal('start-rs'), z.object({})).describe('Response for starting a service for a provider');
73
+ // STOP SERVICE
74
+ export const sStopServiceRq = z
75
+ .object({
76
+ kind: z.literal('stop'),
77
+ provider: z.string().nonempty(),
78
+ })
79
+ .describe('Request to stop a service for a provider');
80
+ export const sStopServiceRs = sResponsePayload(z.literal('stop-rs'), z.object({})).describe('Response for starting a service for a provider');
81
+ // RUN COMMAND
82
+ export const sRunCommandRq = z
83
+ .object({
84
+ kind: z.literal('command'),
85
+ device: sAgentDeviceInfo,
86
+ command: z.string().nonempty(),
87
+ batchId: z
88
+ .string()
89
+ .optional()
90
+ .describe('Batch ID for the command of the command was part of a macro'),
91
+ params: z.record(z.unknown()).optional(),
92
+ })
93
+ .describe('Request to run a device command');
94
+ export const sRunCommandRs = sResponsePayload(z.literal('command-rs'), z.object({})).describe('Response for running a device command');
95
+ // QUERIES
96
+ export const sQueryRq = z.object({
97
+ kind: z.literal('query'),
98
+ query: z.string().nonempty(),
99
+ device: sAgentDeviceInfo,
100
+ args: z.unknown().describe('Query arguments, depends on the query type'),
101
+ });
102
+ export const sQueryRs = sResponsePayload(z.literal('query-rs'), z.object({
103
+ result: z.unknown().describe('Query result, depends on the query type'),
104
+ })).describe('Response for a query');
105
+ // FILE PUSH INSTRUCTIONS
106
+ export const sPushFile = z
107
+ .object({
108
+ kind: z.literal('push-file'),
109
+ query: z.string().nonempty(),
110
+ device: sAgentDeviceInfo,
111
+ args: z.unknown().describe('Query arguments, depends on the query type'),
112
+ url: z.string().nonempty().describe('URL to pull the file from'),
113
+ })
114
+ .describe('Instruction to push a file from an agent to file relay');
115
+ // PUSH DEVICE STATE UPDATE
116
+ export const sPushStateUpdateRq = z
117
+ .object({
118
+ kind: z.literal('state'),
119
+ foreignRef: z.string().nonempty(),
120
+ provider: z.string().nonempty(),
121
+ mergeProps: z.record(z.unknown()),
122
+ removeProps: z.array(z.string().nonempty()),
123
+ })
124
+ .describe('Request to push a device state update');
125
+ export const sPushStateUpdateRs = sResponsePayload(z.literal('state-rs'), z.object({})).describe('Response for pushing a device state update');
126
+ // PUSH DEVICE EVENT
127
+ export const sPushEventRq = z
128
+ .object({
129
+ kind: z.literal('event'),
130
+ foreignRef: z.string().nonempty(),
131
+ provider: z.string().nonempty(),
132
+ eventTimestamp: z
133
+ .number()
134
+ .describe('Event timestamp in milliseconds since epoch, as reported by origin'),
135
+ eventForeignRef: z.string().nonempty(),
136
+ event: z.unknown().describe('Event data'),
137
+ })
138
+ .describe('Request to push a device event');
139
+ export const sPushEventRs = sResponsePayload(z.literal('event-rs'), z.object({})).describe('Response for pushing a device event');
140
+ // REQUEST AVAILABLE DEVICES (DISCOVERY)
141
+ export const sGetAvailableDevicesRq = z
142
+ .object({
143
+ kind: z.literal('get-available-devices'),
144
+ provider: z.string().nonempty(),
145
+ })
146
+ .describe('Request to get available devices from a provider via an agent');
147
+ export const sGetAvailableDevicesRs = sResponsePayload(z.literal('get-available-devices-rs'), sDeviceDiscoveryDto).describe('Response for getting available devices from a provider via an agent');
148
+ // ACCESS SYNC SECTION
149
+ // ————————————————————————————————————————————————————
150
+ // Merge (insert vs update) variants, all listed explicitly
151
+ // ————————————————————————————————————————————————————
152
+ export const sObjectMerge = z
153
+ .union([
154
+ // accessRule insert
155
+ z.object({
156
+ kind: z.literal('merge'),
157
+ objectId: z.string().nonempty().describe('Object ID as in backend'),
158
+ objectKind: z.literal('accessRule'),
159
+ original: z.null(),
160
+ props: sCreateAccessRuleRequest,
161
+ }),
162
+ // accessRule update
163
+ z.object({
164
+ kind: z.literal('merge'),
165
+ objectId: z.string().nonempty().describe('Object ID as in backend'),
166
+ objectKind: z.literal('accessRule'),
167
+ original: sCreateAccessRuleRequest,
168
+ props: sCreateAccessRuleRequest.partial(),
169
+ }),
170
+ // schedule insert
171
+ z.object({
172
+ kind: z.literal('merge'),
173
+ objectId: z.string().nonempty().describe('Object ID as in backend'),
174
+ objectKind: z.literal('schedule'),
175
+ original: z.null(),
176
+ props: sCreateScheduleRequest,
177
+ }),
178
+ // schedule update
179
+ z.object({
180
+ kind: z.literal('merge'),
181
+ objectId: z.string().nonempty().describe('Object ID as in backend'),
182
+ objectKind: z.literal('schedule'),
183
+ original: sCreateScheduleRequest,
184
+ props: sCreateScheduleRequest.partial(),
185
+ }),
186
+ // person insert
187
+ z.object({
188
+ kind: z.literal('merge'),
189
+ objectId: z.string().nonempty().describe('Object ID as in backend'),
190
+ objectKind: z.literal('person'),
191
+ original: z.null(),
192
+ props: sCreatePersonRequest,
193
+ }),
194
+ // person update
195
+ z.object({
196
+ kind: z.literal('merge'),
197
+ objectId: z.string().nonempty().describe('Object ID as in backend'),
198
+ objectKind: z.literal('person'),
199
+ original: sCreatePersonRequest,
200
+ props: sCreatePersonRequest.partial(),
201
+ }),
202
+ // zone insert
203
+ z.object({
204
+ kind: z.literal('merge'),
205
+ objectId: z.string().nonempty().describe('Object ID as in backend'),
206
+ objectKind: z.literal('zone'),
207
+ original: z.null(),
208
+ props: sCreateZoneRequest,
209
+ }),
210
+ // zone update
211
+ z.object({
212
+ kind: z.literal('merge'),
213
+ objectId: z.string().nonempty().describe('Object ID as in backend'),
214
+ objectKind: z.literal('zone'),
215
+ original: sCreateZoneRequest,
216
+ props: sCreateZoneRequest.partial(),
217
+ }),
218
+ ])
219
+ .describe('Object merge request');
220
+ // ————————————————————————————————————————————————————
221
+ // Delete variants, also fully expanded
222
+ // ————————————————————————————————————————————————————
223
+ export const sObjectDelete = z
224
+ .union([
225
+ z.object({
226
+ kind: z.literal('delete'),
227
+ objectId: z.string().nonempty().describe('Object ID as in backend'),
228
+ objectKind: z.literal('accessRule'),
229
+ original: sCreateAccessRuleRequest,
230
+ }),
231
+ z.object({
232
+ kind: z.literal('delete'),
233
+ objectId: z.string().nonempty().describe('Object ID as in backend'),
234
+ objectKind: z.literal('schedule'),
235
+ original: sCreateScheduleRequest,
236
+ }),
237
+ z.object({
238
+ kind: z.literal('delete'),
239
+ objectId: z.string().nonempty().describe('Object ID as in backend'),
240
+ objectKind: z.literal('person'),
241
+ original: sCreatePersonRequest,
242
+ }),
243
+ z.object({
244
+ kind: z.literal('delete'),
245
+ objectId: z.string().nonempty().describe('Object ID as in backend'),
246
+ objectKind: z.literal('zone'),
247
+ original: sCreateZoneRequest,
248
+ }),
249
+ ])
250
+ .describe('Object delete request');
251
+ export const sAccessMutation = z
252
+ .union([sObjectMerge, sObjectDelete])
253
+ .describe('Access object change description');
254
+ export const sDeviceMap = z
255
+ .record(z.record(z.unknown()))
256
+ .describe('Map of devices (readers) and their stashed provider metadata');
257
+ export const sRefMap = z
258
+ .record(z.record(z.array(z.string().nonempty())))
259
+ .describe('Map of foreign references to object IDs');
260
+ // A. VALIDATE ACCESS CHANGES
261
+ export const sValidateChangeRq = z
262
+ .object({
263
+ kind: z.literal('validate-change'),
264
+ provider: z.string().nonempty(),
265
+ devices: sDeviceMap,
266
+ refMap: sRefMap,
267
+ mutations: z.array(sAccessMutation),
268
+ })
269
+ .describe('Request to validate access changes');
270
+ export const sChangeIssueCode = z.enum([
271
+ 'BAD_REFERENCE',
272
+ 'NOT_FOUND',
273
+ 'NOT_UNIQUE',
274
+ 'INVALID',
275
+ 'NOT_SUPPORTED',
276
+ ]);
277
+ export const sChangeIssue = z
278
+ .object({
279
+ objectId: z.string().optional().describe('Object ID as in backend'),
280
+ objectKind: sAccessObjectKind.optional(),
281
+ code: sChangeIssueCode
282
+ .optional()
283
+ .describe('Issue code that describes the issue to UI agent(s) or bots'),
284
+ path: z
285
+ .string()
286
+ .optional()
287
+ .describe('Path - inside object referenced by ObjectID, points to a field or a related object'),
288
+ index: z
289
+ .number()
290
+ .optional()
291
+ .describe('Index ofa value in field pointed at by path'),
292
+ message: z
293
+ .string()
294
+ .optional()
295
+ .describe('Message that describes the issue to user or the details of what went wrong'),
296
+ })
297
+ .describe('Access change issue description');
298
+ export const sValidateChangeRs = sResponsePayload(z.literal('validate-change-rs'), z.object({
299
+ issues: z.array(sChangeIssue),
300
+ })).describe('Response for validating access changes');
301
+ // B. APPLY ACCESS CHANGES
302
+ export const sApplyChange = z
303
+ .object({
304
+ kind: z.literal('apply-change'),
305
+ provider: z.string().nonempty(),
306
+ devices: sDeviceMap,
307
+ refMap: sRefMap,
308
+ mutations: z.array(sAccessMutation),
309
+ })
310
+ .describe('Request to apply access changes');
311
+ export const sApplyChangeRs = sResponsePayload(z.literal('apply-change-rs'), z.object({
312
+ requestId: z.string().nonempty(),
313
+ //error: z.string().optional().describe('Error message if request failed'),
314
+ refs: sRefMap,
315
+ })).describe('Response for applying access changes');
316
+ export const sApplyChangeProgress = z
317
+ .object({
318
+ kind: z.literal('apply-change-progress'),
319
+ requestId: z.string().nonempty(),
320
+ mutationIndex: z
321
+ .number()
322
+ .describe('Index of the finished mutation in the batch'),
323
+ // total: z.number().describe('Progress of the access changes'),
324
+ // completed: z.number().describe('Progress of the access changes'),
325
+ })
326
+ .describe('Progress of the access changes');
327
+ // C. ABORT CHANGES
328
+ export const sAbortChange = z
329
+ .object({
330
+ kind: z.literal('abort-change'),
331
+ provider: z.string().nonempty(),
332
+ policyVersion: z.number().describe('Version of the access changes'),
333
+ })
334
+ .describe('Request to abort access changes');
335
+ const fromAgentSchemaByKind = {
336
+ register: sRegisterRq,
337
+ unregister: sUnregister,
338
+ 'validate-config-rs': sValidateProviderConfigRs,
339
+ 'start-rs': sStartServiceRs,
340
+ 'stop-rs': sStopServiceRs,
341
+ 'command-rs': sRunCommandRs,
342
+ 'query-rs': sQueryRs,
343
+ state: sPushStateUpdateRq,
344
+ event: sPushEventRq,
345
+ 'get-available-devices-rs': sGetAvailableDevicesRs,
346
+ 'validate-change-rs': sValidateChangeRs,
347
+ 'apply-change-rs': sApplyChangeRs,
348
+ 'apply-change-progress': sApplyChangeProgress,
349
+ 'error-rs': sErrorPayload,
350
+ };
351
+ export const getAgentMessageIssues = (message) => {
352
+ const result = sMessageHeader.safeParse(message);
353
+ if (!result.success) {
354
+ return result.error.errors.map((e) => `${e.path.map((p) => p.toString()).join('.')} - ${e.message}`);
355
+ }
356
+ const { kind } = message;
357
+ const schema = fromAgentSchemaByKind[kind];
358
+ if (!schema) {
359
+ return [`Unknown message kind: ${kind}`];
360
+ }
361
+ const result2 = schema.safeParse(message);
362
+ if (!result2.success) {
363
+ return result2.error.errors.map((e) => `${e.path.map((p) => p.toString()).join('.')} - ${e.message}`);
364
+ }
365
+ return [];
366
+ };
367
+ export const isMessageFromAgent = (message) => {
368
+ if (typeof message !== 'object' || message === null) {
369
+ return false;
370
+ }
371
+ const headerResult = sMessageHeader.safeParse(message);
372
+ if (!headerResult.success) {
373
+ return false;
374
+ }
375
+ const { kind } = message;
376
+ const schema = fromAgentSchemaByKind[kind];
377
+ if (!schema) {
378
+ return false;
379
+ }
380
+ const result = schema.safeParse(message);
381
+ return result.success;
382
+ };
@@ -0,0 +1,59 @@
1
+ import { sDeviceEvent, sDeviceId, sDuration } from '../../primitives';
2
+ import { z } from 'zod';
3
+ // COMMANDS
4
+ export const sArmCommand = z.object({
5
+ command: z.literal('alarm.arm'),
6
+ params: z.object({
7
+ deviceId: sDeviceId,
8
+ }),
9
+ });
10
+ export const sDisarmCommand = z.object({
11
+ command: z.literal('alarm.disarm'),
12
+ params: z.object({
13
+ deviceId: sDeviceId,
14
+ duration: sDuration.optional().describe('Duration in milliseconds'),
15
+ }),
16
+ });
17
+ export const sBypassCommand = z.object({
18
+ command: z.literal('alarm.bypass'),
19
+ params: z.object({
20
+ deviceId: sDeviceId,
21
+ }),
22
+ });
23
+ export const sUnbypassCommand = z.object({
24
+ command: z.literal('alarm.unbypass'),
25
+ params: z.object({
26
+ deviceId: sDeviceId,
27
+ }),
28
+ });
29
+ export const sArmAllCommand = z.object({
30
+ command: z.literal('alarm.arm-all'),
31
+ params: z.object({}),
32
+ });
33
+ export const sDisarmAllCommand = z.object({
34
+ command: z.literal('alarm.disarm-all'),
35
+ params: z.object({
36
+ duration: sDuration.optional().describe('Duration in milliseconds'),
37
+ }),
38
+ });
39
+ export const sAcknowledgeCommand = z.object({
40
+ command: z.literal('alarm.acknowledge'),
41
+ params: z.object({}),
42
+ });
43
+ export const sSetTriggerCommand = z.object({
44
+ command: z.literal('alarm.set-trigger'),
45
+ params: z.object({
46
+ event: sDeviceEvent,
47
+ onlyIfArmed: z.boolean().describe('Set only if the device is armed'),
48
+ }),
49
+ });
50
+ export const alarmCommandSchemas = {
51
+ 'alarm.arm': sArmCommand,
52
+ 'alarm.disarm': sDisarmCommand,
53
+ 'alarm.arm-all': sArmAllCommand,
54
+ 'alarm.disarm-all': sDisarmAllCommand,
55
+ 'alarm.acknowledge': sAcknowledgeCommand,
56
+ 'alarm.set-trigger': sSetTriggerCommand,
57
+ 'alarm.bypass': sBypassCommand,
58
+ 'alarm.unbypass': sUnbypassCommand,
59
+ };