@awarevue/api-types 2.0.22 → 2.0.23

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 +27 -0
  168. package/dist/objects/index.js +27 -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,30 @@
1
+ import { sPersonId, sZoneId } from '../../primitives';
2
+ import { z } from 'zod';
3
+ // COMMANDS
4
+ export const sCheckInPersonCommand = z.object({
5
+ command: z.literal('presence-tracker.check-in'),
6
+ params: z.object({
7
+ personId: sPersonId,
8
+ zoneId: sZoneId.nullable(),
9
+ }),
10
+ });
11
+ export const sCheckOutPersonCommand = z.object({
12
+ command: z.literal('presence-tracker.check-out'),
13
+ params: z.object({
14
+ personId: sPersonId,
15
+ zoneId: sZoneId.nullable(),
16
+ leave: z.boolean(),
17
+ }),
18
+ });
19
+ export const sTogglePresenceCommand = z.object({
20
+ command: z.literal('presence-tracker.toggle-presence'),
21
+ params: z.object({
22
+ personId: sPersonId,
23
+ zoneId: sZoneId.nullable(),
24
+ }),
25
+ });
26
+ export const presenceTrackerCommands = {
27
+ 'presence-tracker.check-in': sCheckInPersonCommand,
28
+ 'presence-tracker.check-out': sCheckOutPersonCommand,
29
+ 'presence-tracker.toggle-presence': sTogglePresenceCommand,
30
+ };
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod';
2
+ import { sDeviceParam, sMacroId, sNotificationSeverity, } from '../../primitives';
3
+ // COMMANDS
4
+ export const sRunMacroCommand = z.object({
5
+ command: z.literal('server.run-macro'),
6
+ params: z.object({
7
+ macroId: sMacroId,
8
+ }),
9
+ });
10
+ export const sNotify = z.object({
11
+ command: z.literal('server.notify'),
12
+ params: z.object({
13
+ source: sDeviceParam,
14
+ message: z.string().nonempty(),
15
+ severity: sNotificationSeverity,
16
+ metadata: z.record(z.unknown()),
17
+ notificationRef: z.string().nonempty().nullable(),
18
+ recipientId: z.string().nonempty().nullable(),
19
+ }),
20
+ });
21
+ export const serverCommands = {
22
+ 'server.run-macro': sRunMacroCommand,
23
+ 'server.notify': sNotify,
24
+ };
@@ -0,0 +1,181 @@
1
+ import { z } from 'zod';
2
+ import { sCredentialType } from '../objects/credential';
3
+ // METADATA
4
+ export const sDuplicateMeta = z.object({
5
+ subject: z.string(),
6
+ field: z.string(),
7
+ value: z.string().optional(),
8
+ existingId: z.string().optional(), // UUID or whatever
9
+ });
10
+ export const sNotFoundMeta = z.object({
11
+ subject: z.string(),
12
+ field: z.string(),
13
+ value: z.string(),
14
+ });
15
+ export const sInvalidMeta = z.object({
16
+ subject: z.string(),
17
+ fieldErrors: z.record(z.string()), // key → human msg
18
+ });
19
+ export const sConflictMeta = z.object({
20
+ subject: z.string(),
21
+ blockingSubject: z.string().optional(),
22
+ blockingId: z.string().optional(),
23
+ value: z.string().optional(),
24
+ });
25
+ export const sVoidMeta = z.object({}).strict();
26
+ export const sAccessRuleConflictMeta = z.object({
27
+ deviceSchedules: z.record(z.string(), z.array(z.string())),
28
+ });
29
+ export const sZoneAccessRuleConflictMeta = z.object({
30
+ zoneId: z.string(),
31
+ accessRuleIds: z.array(z.string()),
32
+ });
33
+ export const sTokenInvalidFormatMeta = z.object({
34
+ token: z.string(),
35
+ expectedFormat: z.string(),
36
+ });
37
+ export const sTokenLimitExceededMeta = z.object({
38
+ limit: z.number(),
39
+ type: sCredentialType,
40
+ });
41
+ // ERROR CODES
42
+ export var AppErrorCode;
43
+ (function (AppErrorCode) {
44
+ // generic
45
+ AppErrorCode["RESOURCE_ALREADY_EXISTS"] = "RESOURCE_ALREADY_EXISTS";
46
+ AppErrorCode["RESOURCE_NOT_FOUND"] = "RESOURCE_NOT_FOUND";
47
+ AppErrorCode["RESOURCE_FORBIDDEN"] = "RESOURCE_FORBIDDEN";
48
+ AppErrorCode["RESOURCE_INVALID"] = "RESOURCE_INVALID";
49
+ AppErrorCode["RESOURCE_IN_USE"] = "RESOURCE_IN_USE";
50
+ AppErrorCode["RESOURCE_NOT_SUPPORTED"] = "RESOURCE_NOT_SUPPORTED";
51
+ AppErrorCode["BAD_REFERENCE"] = "BAD_REFERENCE";
52
+ AppErrorCode["UNKNOWN"] = "UNKNOWN";
53
+ AppErrorCode["SERVER_INTERNAL_ERROR"] = "SERVER_INTERNAL_ERROR";
54
+ AppErrorCode["UNAUTHORIZED"] = "UNAUTHORIZED";
55
+ AppErrorCode["BAD_REQUEST"] = "BAD_REQUEST";
56
+ // access
57
+ AppErrorCode["ACCESS_RULE_NOT_FOUND"] = "ACCESS_RULE_NOT_FOUND";
58
+ AppErrorCode["ACCESS_RULE_PERMISSION_CONFLICT"] = "ACCESS_RULE_PERMISSION_CONFLICT";
59
+ // alarm
60
+ AppErrorCode["ALARM_NOT_FOUND"] = "ALARM_NOT_FOUND";
61
+ // auth / user
62
+ AppErrorCode["AUTH_INVALID_CREDENTIALS"] = "AUTH_INVALID_CREDENTIALS";
63
+ AppErrorCode["AUTH_CITADEL_MODE_ENABLED"] = "AUTH_CITADEL_MODE_ENABLED";
64
+ AppErrorCode["USER_NOT_FOUND"] = "USER_NOT_FOUND";
65
+ AppErrorCode["USERNAME_ALREADY_EXISTS"] = "USERNAME_ALREADY_EXISTS";
66
+ AppErrorCode["EMAIL_ALREADY_EXISTS"] = "EMAIL_ALREADY_EXISTS";
67
+ AppErrorCode["CANNOT_DELETE_ROOT_USER"] = "CANNOT_DELETE_ROOT_USER";
68
+ // person / token
69
+ AppErrorCode["PERSON_NOT_FOUND"] = "PERSON_NOT_FOUND";
70
+ AppErrorCode["PERSON_INVALID_ID"] = "PERSON_INVALID_ID";
71
+ AppErrorCode["TOKEN_NOT_SUPPORTED"] = "TOKEN_NOT_SUPPORTED";
72
+ AppErrorCode["TOKEN_INVALID_FORMAT"] = "TOKEN_INVALID_FORMAT";
73
+ AppErrorCode["TOKEN_LIMIT_EXCEEDED"] = "TOKEN_LIMIT_EXCEEDED";
74
+ AppErrorCode["TOKEN_IN_USE"] = "TOKEN_IN_USE";
75
+ // device
76
+ AppErrorCode["DEVICE_NOT_FOUND"] = "DEVICE_NOT_FOUND";
77
+ AppErrorCode["DEVICE_ALREADY_EXISTS"] = "DEVICE_ALREADY_EXISTS";
78
+ AppErrorCode["DEVICE_INVALID_ID"] = "DEVICE_INVALID_ID";
79
+ AppErrorCode["DEVICE_INVALID_TYPE"] = "DEVICE_INVALID_TYPE";
80
+ AppErrorCode["DEVICE_INVALID_RELATION_TYPE"] = "DEVICE_INVALID_RELATION_TYPE";
81
+ AppErrorCode["DEVICE_INVALID_TEMPLATE"] = "DEVICE_INVALID_TEMPLATE";
82
+ AppErrorCode["DEVICE_INVALID_PROVIDER_METADATA"] = "DEVICE_INVALID_PROVIDER_METADATA";
83
+ AppErrorCode["DEVICE_PRESET_ALREADY_EXISTS"] = "DEVICE_PRESET_ALREADY_EXISTS";
84
+ AppErrorCode["DEVICE_NOT_SUPPORTED"] = "DEVICE_NOT_SUPPORTED";
85
+ // group / zone / schedule
86
+ AppErrorCode["GROUP_NOT_FOUND"] = "GROUP_NOT_FOUND";
87
+ AppErrorCode["GROUP_ALREADY_EXISTS"] = "GROUP_ALREADY_EXISTS";
88
+ AppErrorCode["ZONE_NOT_FOUND"] = "ZONE_NOT_FOUND";
89
+ AppErrorCode["ZONE_ALREADY_EXISTS"] = "ZONE_ALREADY_EXISTS";
90
+ AppErrorCode["ZONE_IN_USE"] = "ZONE_IN_USE";
91
+ AppErrorCode["ZONE_ACCESS_RULE_CONFLICT"] = "ZONE_ACCESS_RULE_CONFLICT";
92
+ AppErrorCode["SCHEDULE_NOT_FOUND"] = "SCHEDULE_NOT_FOUND";
93
+ AppErrorCode["SCHEDULE_ALREADY_EXISTS"] = "SCHEDULE_ALREADY_EXISTS";
94
+ AppErrorCode["SCHEDULE_IN_USE"] = "SCHEDULE_IN_USE";
95
+ // permission / role
96
+ AppErrorCode["PERMISSION_ALREADY_EXISTS"] = "PERMISSION_ALREADY_EXISTS";
97
+ AppErrorCode["ROLE_ALREADY_EXISTS"] = "ROLE_ALREADY_EXISTS";
98
+ AppErrorCode["ADMIN_ROLE_CANNOT_UPDATE"] = "ADMIN_ROLE_CANNOT_UPDATE";
99
+ AppErrorCode["ADMIN_ROLE_CANNOT_DELETE"] = "ADMIN_ROLE_CANNOT_DELETE";
100
+ // automation / rules
101
+ AppErrorCode["RULE_ALREADY_EXISTS"] = "RULE_ALREADY_EXISTS";
102
+ AppErrorCode["RULE_INVALID_BODY"] = "RULE_INVALID_BODY";
103
+ AppErrorCode["RULE_MISSING_CODE"] = "RULE_MISSING_CODE";
104
+ // layout / view
105
+ AppErrorCode["LAYOUT_ALREADY_EXISTS"] = "LAYOUT_ALREADY_EXISTS";
106
+ AppErrorCode["VIEW_ALREADY_EXISTS"] = "VIEW_ALREADY_EXISTS";
107
+ // config
108
+ AppErrorCode["CONFIG_INVALID"] = "CONFIG_INVALID";
109
+ })(AppErrorCode || (AppErrorCode = {}));
110
+ export const errorMetadataSchemas = {
111
+ [AppErrorCode.RESOURCE_ALREADY_EXISTS]: sDuplicateMeta,
112
+ [AppErrorCode.RESOURCE_NOT_FOUND]: sNotFoundMeta,
113
+ [AppErrorCode.RESOURCE_INVALID]: sInvalidMeta,
114
+ [AppErrorCode.RESOURCE_IN_USE]: sConflictMeta,
115
+ [AppErrorCode.RESOURCE_NOT_SUPPORTED]: sVoidMeta,
116
+ [AppErrorCode.RESOURCE_FORBIDDEN]: sVoidMeta,
117
+ [AppErrorCode.BAD_REFERENCE]: sVoidMeta,
118
+ // access
119
+ [AppErrorCode.ACCESS_RULE_NOT_FOUND]: sNotFoundMeta,
120
+ [AppErrorCode.ACCESS_RULE_PERMISSION_CONFLICT]: sAccessRuleConflictMeta,
121
+ // alarm
122
+ [AppErrorCode.ALARM_NOT_FOUND]: sNotFoundMeta,
123
+ // auth / user
124
+ [AppErrorCode.AUTH_INVALID_CREDENTIALS]: sVoidMeta,
125
+ [AppErrorCode.AUTH_CITADEL_MODE_ENABLED]: sVoidMeta,
126
+ [AppErrorCode.USER_NOT_FOUND]: sNotFoundMeta,
127
+ [AppErrorCode.USERNAME_ALREADY_EXISTS]: sDuplicateMeta,
128
+ [AppErrorCode.EMAIL_ALREADY_EXISTS]: sDuplicateMeta,
129
+ [AppErrorCode.CANNOT_DELETE_ROOT_USER]: sVoidMeta,
130
+ // person / token
131
+ [AppErrorCode.PERSON_NOT_FOUND]: sNotFoundMeta,
132
+ [AppErrorCode.PERSON_INVALID_ID]: sInvalidMeta,
133
+ [AppErrorCode.TOKEN_NOT_SUPPORTED]: sVoidMeta,
134
+ [AppErrorCode.TOKEN_INVALID_FORMAT]: sTokenInvalidFormatMeta,
135
+ [AppErrorCode.TOKEN_LIMIT_EXCEEDED]: sTokenLimitExceededMeta,
136
+ [AppErrorCode.TOKEN_IN_USE]: sConflictMeta,
137
+ // device
138
+ [AppErrorCode.DEVICE_NOT_FOUND]: sNotFoundMeta,
139
+ [AppErrorCode.DEVICE_ALREADY_EXISTS]: sDuplicateMeta,
140
+ [AppErrorCode.DEVICE_INVALID_ID]: sInvalidMeta,
141
+ [AppErrorCode.DEVICE_INVALID_TYPE]: sInvalidMeta,
142
+ [AppErrorCode.DEVICE_INVALID_RELATION_TYPE]: sInvalidMeta,
143
+ [AppErrorCode.DEVICE_INVALID_TEMPLATE]: sInvalidMeta,
144
+ [AppErrorCode.DEVICE_INVALID_PROVIDER_METADATA]: sInvalidMeta,
145
+ [AppErrorCode.DEVICE_PRESET_ALREADY_EXISTS]: sDuplicateMeta,
146
+ [AppErrorCode.DEVICE_NOT_SUPPORTED]: sVoidMeta,
147
+ // group / zone / schedule
148
+ [AppErrorCode.GROUP_NOT_FOUND]: sNotFoundMeta,
149
+ [AppErrorCode.GROUP_ALREADY_EXISTS]: sDuplicateMeta,
150
+ [AppErrorCode.ZONE_NOT_FOUND]: sNotFoundMeta,
151
+ [AppErrorCode.ZONE_ALREADY_EXISTS]: sDuplicateMeta,
152
+ [AppErrorCode.ZONE_IN_USE]: sConflictMeta,
153
+ [AppErrorCode.ZONE_ACCESS_RULE_CONFLICT]: sZoneAccessRuleConflictMeta,
154
+ [AppErrorCode.SCHEDULE_NOT_FOUND]: sNotFoundMeta,
155
+ [AppErrorCode.SCHEDULE_ALREADY_EXISTS]: sDuplicateMeta,
156
+ [AppErrorCode.SCHEDULE_IN_USE]: sConflictMeta,
157
+ // permission / role
158
+ [AppErrorCode.PERMISSION_ALREADY_EXISTS]: sDuplicateMeta,
159
+ [AppErrorCode.ROLE_ALREADY_EXISTS]: sDuplicateMeta,
160
+ [AppErrorCode.ADMIN_ROLE_CANNOT_UPDATE]: sVoidMeta,
161
+ [AppErrorCode.ADMIN_ROLE_CANNOT_DELETE]: sVoidMeta,
162
+ // automation / rules
163
+ [AppErrorCode.RULE_ALREADY_EXISTS]: sDuplicateMeta,
164
+ [AppErrorCode.RULE_INVALID_BODY]: sInvalidMeta,
165
+ [AppErrorCode.RULE_MISSING_CODE]: sVoidMeta,
166
+ // layout / view
167
+ [AppErrorCode.LAYOUT_ALREADY_EXISTS]: sDuplicateMeta,
168
+ [AppErrorCode.VIEW_ALREADY_EXISTS]: sDuplicateMeta,
169
+ // config
170
+ [AppErrorCode.CONFIG_INVALID]: sInvalidMeta,
171
+ [AppErrorCode.UNKNOWN]: sVoidMeta,
172
+ [AppErrorCode.SERVER_INTERNAL_ERROR]: sVoidMeta,
173
+ [AppErrorCode.UNAUTHORIZED]: sVoidMeta,
174
+ [AppErrorCode.BAD_REQUEST]: sVoidMeta,
175
+ };
176
+ export function isErrorResponse(err) {
177
+ return (!!err &&
178
+ typeof err === 'object' &&
179
+ 'code' in err &&
180
+ Object.values(AppErrorCode).includes(err.code));
181
+ }
@@ -0,0 +1,52 @@
1
+ import { z } from 'zod';
2
+ // EVENTS
3
+ export const sAlarmTriggeredEvent = z.object({
4
+ kind: z.literal('alarm-triggered'),
5
+ alarmId: z.string().nonempty(),
6
+ });
7
+ export const sAlarmAcknowledgedEvent = z.object({
8
+ kind: z.literal('alarm-acknowledged'),
9
+ alarmId: z.string().nonempty(),
10
+ userId: z.string().optional(),
11
+ personId: z.string().optional(),
12
+ });
13
+ export const sAlarmArmedAllEvent = z.object({
14
+ kind: z.literal('alarm-armed-all'),
15
+ userId: z.string().optional(),
16
+ personId: z.string().optional(),
17
+ });
18
+ export const sAlarmDisarmedAllEvent = z.object({
19
+ kind: z.literal('alarm-disarmed-all'),
20
+ userId: z.string().optional(),
21
+ personId: z.string().optional(),
22
+ });
23
+ export const sAlarmArmedEvent = z.object({
24
+ kind: z.literal('alarm-armed'),
25
+ subjects: z.array(z.string().nonempty()),
26
+ userId: z.string().optional(),
27
+ personId: z.string().optional(),
28
+ });
29
+ export const sAlarmDisarmedEvent = z.object({
30
+ kind: z.literal('alarm-disarmed'),
31
+ subjects: z.array(z.string().nonempty()),
32
+ userId: z.string().optional(),
33
+ personId: z.string().optional(),
34
+ });
35
+ export const sAlarmArmReleasedEvent = z.object({
36
+ kind: z.literal('alarm-arm-released'),
37
+ userId: z.string().optional(),
38
+ personId: z.string().optional(),
39
+ });
40
+ export const sAlarmRearmedEvent = z.object({
41
+ kind: z.literal('alarm-rearmed'),
42
+ });
43
+ export const alarmEventSchemasByKind = {
44
+ 'alarm-triggered': sAlarmTriggeredEvent,
45
+ 'alarm-acknowledged': sAlarmAcknowledgedEvent,
46
+ 'alarm-armed-all': sAlarmArmedAllEvent,
47
+ 'alarm-disarmed-all': sAlarmDisarmedAllEvent,
48
+ 'alarm-armed': sAlarmArmedEvent,
49
+ 'alarm-disarmed': sAlarmDisarmedEvent,
50
+ 'alarm-arm-released': sAlarmArmReleasedEvent,
51
+ 'alarm-rearmed': sAlarmRearmedEvent,
52
+ };
@@ -9,8 +9,8 @@ import { PresenceTrackerEvent } from './presence-tracker';
9
9
  import { ReaderEvent } from './reader';
10
10
  import { ServerEvent } from './server';
11
11
  import { NvrExporterEvent } from './nvr-exporter';
12
- import { DeviceType } from '../device';
13
- import { NotificationSeverity } from 'src/primitives';
12
+ import { DeviceType } from '../../objects/device';
13
+ import { NotificationSeverity } from '../../primitives';
14
14
  export declare const sDeviceCommandTriggered: z.ZodObject<{
15
15
  kind: z.ZodLiteral<"device-command">;
16
16
  userId: z.ZodOptional<z.ZodString>;
@@ -141,12 +141,12 @@ export declare const eventSchemaByKind: {
141
141
  requestId: z.ZodString;
142
142
  }, "strip", z.ZodTypeAny, {
143
143
  kind: "nvr-export-started";
144
- requestId: string;
145
144
  exportId: string;
145
+ requestId: string;
146
146
  }, {
147
147
  kind: "nvr-export-started";
148
- requestId: string;
149
148
  exportId: string;
149
+ requestId: string;
150
150
  }>;
151
151
  'nvr-export-deleted': z.ZodObject<{
152
152
  kind: z.ZodLiteral<"nvr-export-deleted">;
@@ -188,22 +188,22 @@ export declare const eventSchemaByKind: {
188
188
  kind: "person-in";
189
189
  personId: string;
190
190
  securityChecked: boolean;
191
- zoneId: string | null;
192
191
  personType: string;
193
192
  personFirstName: string;
194
193
  personLastName: string;
195
194
  personAvatarId: string | null;
196
195
  personPosition: string | null;
196
+ zoneId: string | null;
197
197
  }, {
198
198
  kind: "person-in";
199
199
  personId: string;
200
200
  securityChecked: boolean;
201
- zoneId: string | null;
202
201
  personType: string;
203
202
  personFirstName: string;
204
203
  personLastName: string;
205
204
  personAvatarId: string | null;
206
205
  personPosition: string | null;
206
+ zoneId: string | null;
207
207
  }>;
208
208
  'person-out': z.ZodObject<{
209
209
  kind: z.ZodLiteral<"person-out">;
@@ -221,23 +221,23 @@ export declare const eventSchemaByKind: {
221
221
  personId: string;
222
222
  securityChecked: boolean;
223
223
  isLeave: boolean;
224
- zoneId: string | null;
225
224
  personType: string;
226
225
  personFirstName: string;
227
226
  personLastName: string;
228
227
  personAvatarId: string | null;
229
228
  personPosition: string | null;
229
+ zoneId: string | null;
230
230
  }, {
231
231
  kind: "person-out";
232
232
  personId: string;
233
233
  securityChecked: boolean;
234
234
  isLeave: boolean;
235
- zoneId: string | null;
236
235
  personType: string;
237
236
  personFirstName: string;
238
237
  personLastName: string;
239
238
  personAvatarId: string | null;
240
239
  personPosition: string | null;
240
+ zoneId: string | null;
241
241
  }>;
242
242
  'panic-button-pressed': z.ZodObject<{
243
243
  kind: z.ZodLiteral<"panic-button-pressed">;
@@ -0,0 +1,124 @@
1
+ import { z } from 'zod';
2
+ import { alarmEventSchemasByKind } from './alarm';
3
+ import { cameraEventSchemasByKind } from './camera';
4
+ import { doorEventSchemaByKind } from './door';
5
+ import { intercomTerminalEventSchemaByKind, } from './intercom-terminal';
6
+ import { ioBoardEventSchemaByKind } from './io-board';
7
+ import { panicButtonEventSchemaByKind } from './panic-button';
8
+ import { presenceTrackerEventSchemaByKind, } from './presence-tracker';
9
+ import { readerEventSchemaByKind } from './reader';
10
+ import { nvrExporterEventSchemasByKind, } from './nvr-exporter';
11
+ export const sDeviceCommandTriggered = z.object({
12
+ kind: z.literal('device-command'),
13
+ userId: z.string().nonempty().optional(),
14
+ command: z.string().nonempty(),
15
+ args: z.record(z.unknown()),
16
+ });
17
+ export const sMotionDetected = z.object({
18
+ kind: z.literal('motion-detected'),
19
+ });
20
+ export const sDeviceConnectedEvent = z.object({
21
+ kind: z.literal('device-connected'),
22
+ clientId: z.number().int().positive().optional(),
23
+ });
24
+ export const sDeviceDisconnectedEvent = z.object({
25
+ kind: z.literal('device-disconnected'),
26
+ clientId: z.number().int().positive().optional(),
27
+ });
28
+ export const sEventHeader = z.object({
29
+ id: z.string().nonempty(),
30
+ timestamp: z.number().int().positive(),
31
+ deviceId: z.string().nonempty(),
32
+ observedBy: z.string().optional(),
33
+ });
34
+ export const eventKindLabels = {
35
+ 'door-access': 'Door Access',
36
+ 'door-force': 'Force-Opened',
37
+ 'door-tamper': 'Tampered',
38
+ 'door-left-open': 'Left Open',
39
+ 'alarm-triggered': 'Alarm Triggered',
40
+ 'alarm-acknowledged': 'Alarm Acknowledged',
41
+ 'door-relock': 'Relocked',
42
+ 'door-mains-failed': 'Mains Failed',
43
+ 'door-acu-not-responding': 'ACU Not Responding',
44
+ 'door-acu-online': 'ACU Online',
45
+ 'door-mains-restored': 'Mains Restored',
46
+ 'door-tamper-restored': 'Tamper Restored',
47
+ 'motion-detected': 'Motion Detected',
48
+ 'device-command': 'Device Command',
49
+ 'reader-auth': 'Reader Authorized',
50
+ 'alarm-arm-released': 'Alarm Arm Released',
51
+ 'alarm-rearmed': 'Alarm Rearmed',
52
+ 'alarm-armed': 'Alarm Armed',
53
+ 'alarm-disarmed': 'Alarm Disarmed',
54
+ 'alarm-armed-all': 'Alarm Armed All',
55
+ 'alarm-disarmed-all': 'Alarm Disarmed All',
56
+ 'panic-button-pressed': 'Panic Button Pressed',
57
+ 'device-connected': 'Device Connected',
58
+ 'device-disconnected': 'Device Disconnected',
59
+ 'call-state-changed': 'Call State Changed',
60
+ 'object-created': 'Object Created',
61
+ 'object-updated': 'Object Updated',
62
+ 'object-deleted': 'Object Deleted',
63
+ 'ptz-preset-saved': 'PTZ Preset Saved on Device',
64
+ 'person-in': 'Person Checked In',
65
+ 'person-out': 'Person Checked Out',
66
+ 'object-detection-started': 'Object Detection Started',
67
+ 'object-detection-updated': 'Object Detection Updated',
68
+ 'object-detection-ended': 'Object Detection Ended',
69
+ 'scene-created': 'Scene Created',
70
+ 'scene-updated': 'Scene Updated',
71
+ 'scene-ended': 'Scene Ended',
72
+ 'io-board-input-changed': 'IO Board Input Changed',
73
+ 'agent-started': 'Agent Started',
74
+ 'agent-stopped': 'Agent Stopped',
75
+ 'door-opened': 'Door Opened',
76
+ 'door-closed': 'Door Closed',
77
+ 'nvr-export-started': 'NVR Export Started',
78
+ 'nvr-export-deleted': 'NVR Export Deleted',
79
+ 'notification-created': 'Notification Created',
80
+ 'notification-acknowledged': 'Notification Acknowledged',
81
+ };
82
+ export const eventSchemaByKind = {
83
+ ...alarmEventSchemasByKind,
84
+ ...cameraEventSchemasByKind,
85
+ ...doorEventSchemaByKind,
86
+ ...intercomTerminalEventSchemaByKind,
87
+ ...ioBoardEventSchemaByKind,
88
+ ...panicButtonEventSchemaByKind,
89
+ ...presenceTrackerEventSchemaByKind,
90
+ ...readerEventSchemaByKind,
91
+ ...nvrExporterEventSchemasByKind,
92
+ 'motion-detected': sMotionDetected,
93
+ 'device-command': sDeviceCommandTriggered,
94
+ 'device-connected': sDeviceConnectedEvent,
95
+ 'device-disconnected': sDeviceDisconnectedEvent,
96
+ };
97
+ export const eventsByDeviceType = {
98
+ camera: [
99
+ ...Object.keys(cameraEventSchemasByKind),
100
+ 'motion-detected',
101
+ ],
102
+ door: Object.keys(doorEventSchemaByKind),
103
+ 'io-board': Object.keys(ioBoardEventSchemaByKind),
104
+ 'panic-button': Object.keys(panicButtonEventSchemaByKind),
105
+ 'presence-tracker': Object.keys(presenceTrackerEventSchemaByKind),
106
+ reader: Object.keys(readerEventSchemaByKind),
107
+ 'motion-sensor': ['motion-detected'],
108
+ 'nvr-exporter': Object.keys(nvrExporterEventSchemasByKind),
109
+ };
110
+ export const isDeviceEvent = (event) => {
111
+ if (typeof event !== 'object' || event === null)
112
+ return false;
113
+ if (!('kind' in event))
114
+ return false;
115
+ if (typeof event.kind !== 'string')
116
+ return false;
117
+ const schema = eventSchemaByKind[event.kind];
118
+ if (!schema)
119
+ return false;
120
+ const result = schema.safeParse(event);
121
+ if (!result.success)
122
+ return false;
123
+ return true;
124
+ };
@@ -0,0 +1,84 @@
1
+ import { sCameraPresetInfo } from '../../primitives';
2
+ import { z } from 'zod';
3
+ // EVENTS
4
+ export const sCameraPtzPresetSaved = z.object({
5
+ kind: z.literal('ptz-preset-saved'),
6
+ presetId: z.string().nonempty(),
7
+ presetInfo: sCameraPresetInfo,
8
+ assignedRef: z.string().nullable(),
9
+ });
10
+ export const sBoxLocator = z.object({
11
+ locatorKind: z.literal('box'),
12
+ x1: z.number(),
13
+ y1: z.number(),
14
+ x2: z.number(),
15
+ y2: z.number(),
16
+ });
17
+ export const sObjectLocator = sBoxLocator;
18
+ export const sObjectDetectionData = z
19
+ .object({
20
+ objectKind: z.string().nullable(),
21
+ probability: z.number(),
22
+ identifiedObjectId: z.string().nullable(),
23
+ frameTime: z.number(),
24
+ startTime: z.number(),
25
+ endTime: z.number().nullable(),
26
+ })
27
+ .and(sObjectLocator);
28
+ export const sObjectDetectionStarted = z
29
+ .object({
30
+ kind: z.literal('object-detection-started'),
31
+ providerAssignedRef: z.string().nonempty(),
32
+ detectionProvider: z.string().nonempty(),
33
+ })
34
+ .and(sObjectDetectionData);
35
+ export const sObjectDetectionUpdated = z
36
+ .object({
37
+ kind: z.literal('object-detection-updated'),
38
+ providerAssignedRef: z.string().nonempty(),
39
+ detectionProvider: z.string().nonempty(),
40
+ })
41
+ .and(sObjectDetectionData);
42
+ export const sObjectDetectionEnded = z
43
+ .object({
44
+ kind: z.literal('object-detection-ended'),
45
+ providerAssignedRef: z.string().nonempty(),
46
+ detectionProvider: z.string().nonempty(),
47
+ })
48
+ .and(sObjectDetectionData);
49
+ export const sSceneData = z.object({
50
+ detections: z.array(z.string()),
51
+ clipUrl: z.string().optional(),
52
+ startTime: z.number(),
53
+ endTime: z.number().nullable(),
54
+ });
55
+ export const sSceneCreated = z
56
+ .object({
57
+ kind: z.literal('scene-created'),
58
+ providerAssignedRef: z.string().nonempty(),
59
+ detectionProvider: z.string().nonempty(),
60
+ })
61
+ .and(sSceneData);
62
+ export const sSceneUpdated = z
63
+ .object({
64
+ kind: z.literal('scene-updated'),
65
+ providerAssignedRef: z.string().nonempty(),
66
+ detectionProvider: z.string().nonempty(),
67
+ })
68
+ .and(sSceneData);
69
+ export const sSceneEnded = z
70
+ .object({
71
+ kind: z.literal('scene-ended'),
72
+ providerAssignedRef: z.string().nonempty(),
73
+ detectionProvider: z.string().nonempty(),
74
+ })
75
+ .and(sSceneData);
76
+ export const cameraEventSchemasByKind = {
77
+ 'ptz-preset-saved': sCameraPtzPresetSaved,
78
+ 'object-detection-started': sObjectDetectionStarted,
79
+ 'object-detection-updated': sObjectDetectionUpdated,
80
+ 'object-detection-ended': sObjectDetectionEnded,
81
+ 'scene-created': sSceneCreated,
82
+ 'scene-updated': sSceneUpdated,
83
+ 'scene-ended': sSceneEnded,
84
+ };
@@ -0,0 +1,6 @@
1
+ import { z } from 'zod';
2
+ // EVENTS
3
+ export const sDisplayUnitOfflineEvent = z.object({
4
+ kind: z.literal('display-unit-offline'),
5
+ });
6
+ //Could report on other events in the future like bad streams, high cpu usage, etc.
@@ -0,0 +1,59 @@
1
+ import { sCredentialType } from '../../objects/credential';
2
+ import { z } from 'zod';
3
+ // EVENTS
4
+ export const sDoorAccessEvent = z.object({
5
+ kind: z.literal('door-access'),
6
+ personId: z.string().optional(),
7
+ token: z.string().nullable(),
8
+ tokenType: sCredentialType.nullable(),
9
+ allowed: z.boolean(),
10
+ doorExit: z.boolean(),
11
+ description: z.string(),
12
+ });
13
+ export const sDoorOpened = z.object({
14
+ kind: z.literal('door-opened'),
15
+ });
16
+ export const sDoorClosed = z.object({
17
+ kind: z.literal('door-closed'),
18
+ });
19
+ export const sDoorForceEvent = z.object({
20
+ kind: z.literal('door-force'),
21
+ });
22
+ export const sDoorTamperEvent = z.object({
23
+ kind: z.literal('door-tamper'),
24
+ });
25
+ export const sDoorLeftOpenEvent = z.object({
26
+ kind: z.literal('door-left-open'),
27
+ });
28
+ export const sDoorRelockEvent = z.object({
29
+ kind: z.literal('door-relock'),
30
+ });
31
+ export const sDoorMainsFailedEvent = z.object({
32
+ kind: z.literal('door-mains-failed'),
33
+ });
34
+ export const sDoorAcuNotRespondingEvent = z.object({
35
+ kind: z.literal('door-acu-not-responding'),
36
+ });
37
+ export const sDoorMainsRestoredEvent = z.object({
38
+ kind: z.literal('door-mains-restored'),
39
+ });
40
+ export const sDoorAcuOnlineEvent = z.object({
41
+ kind: z.literal('door-acu-online'),
42
+ });
43
+ export const sDoorTamperRestoredEvent = z.object({
44
+ kind: z.literal('door-tamper-restored'),
45
+ });
46
+ export const doorEventSchemaByKind = {
47
+ 'door-access': sDoorAccessEvent,
48
+ 'door-opened': sDoorOpened,
49
+ 'door-closed': sDoorClosed,
50
+ 'door-force': sDoorForceEvent,
51
+ 'door-tamper': sDoorTamperEvent,
52
+ 'door-left-open': sDoorLeftOpenEvent,
53
+ 'door-relock': sDoorRelockEvent,
54
+ 'door-mains-failed': sDoorMainsFailedEvent,
55
+ 'door-acu-not-responding': sDoorAcuNotRespondingEvent,
56
+ 'door-mains-restored': sDoorMainsRestoredEvent,
57
+ 'door-acu-online': sDoorAcuOnlineEvent,
58
+ 'door-tamper-restored': sDoorTamperRestoredEvent,
59
+ };
@@ -0,0 +1,12 @@
1
+ export * from './camera';
2
+ export * from './door';
3
+ export * from './io-board';
4
+ export * from './intercom-terminal';
5
+ export * from './panic-button';
6
+ export * from './server';
7
+ export * from './reader';
8
+ export * from './alarm';
9
+ export * from './presence-tracker';
10
+ export * from './display';
11
+ export * from './nvr-exporter';
12
+ export * from './all';
@@ -0,0 +1,16 @@
1
+ import { sCallDirection, sCallState } from '../../primitives';
2
+ import { z } from 'zod';
3
+ // EVENTS
4
+ export const sCallStateChanged = z.object({
5
+ kind: z.literal('call-state-changed'),
6
+ userId: z.string().optional(),
7
+ callId: z.string().nonempty(),
8
+ state: sCallState,
9
+ peer: z.string().optional(),
10
+ sipAccount: z.string().optional(),
11
+ sipCallId: z.string().optional(),
12
+ direction: sCallDirection,
13
+ });
14
+ export const intercomTerminalEventSchemaByKind = {
15
+ 'call-state-changed': sCallStateChanged,
16
+ };