@synnaxlabs/client 0.56.1 → 0.57.0

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 (741) hide show
  1. package/dist/client-B08VDLSA.js +14463 -0
  2. package/dist/client-B08VDLSA.js.map +1 -0
  3. package/dist/client.js +1128 -14876
  4. package/dist/client.js.map +1 -0
  5. package/dist/src/access/client.d.ts +10 -1
  6. package/dist/src/access/client.d.ts.map +1 -1
  7. package/dist/src/access/enforce.d.ts.map +1 -1
  8. package/dist/src/access/external.d.ts +1 -0
  9. package/dist/src/access/external.d.ts.map +1 -1
  10. package/dist/src/access/granted.d.ts +39 -0
  11. package/dist/src/access/granted.d.ts.map +1 -0
  12. package/dist/src/access/policy/client.d.ts +136 -147
  13. package/dist/src/access/policy/client.d.ts.map +1 -1
  14. package/dist/src/access/policy/types.gen.d.ts +15 -68
  15. package/dist/src/access/policy/types.gen.d.ts.map +1 -1
  16. package/dist/src/access/role/client.d.ts +77 -58
  17. package/dist/src/access/role/client.d.ts.map +1 -1
  18. package/dist/src/access/role/types.gen.d.ts +8 -14
  19. package/dist/src/access/role/types.gen.d.ts.map +1 -1
  20. package/dist/src/actions/actions.d.ts +5 -6
  21. package/dist/src/actions/actions.d.ts.map +1 -1
  22. package/dist/src/actions/controller.d.ts +194 -0
  23. package/dist/src/actions/controller.d.ts.map +1 -0
  24. package/dist/src/actions/external.d.ts +1 -0
  25. package/dist/src/actions/external.d.ts.map +1 -1
  26. package/dist/src/arc/actions.d.ts +575 -0
  27. package/dist/src/arc/actions.d.ts.map +1 -0
  28. package/dist/src/arc/actions.gen.d.ts +1439 -0
  29. package/dist/src/arc/actions.gen.d.ts.map +1 -0
  30. package/dist/src/arc/client.d.ts +97 -13
  31. package/dist/src/arc/client.d.ts.map +1 -1
  32. package/dist/src/arc/compiler/types.gen.d.ts +3 -3
  33. package/dist/src/arc/compiler/types.gen.d.ts.map +1 -1
  34. package/dist/src/arc/external.d.ts +2 -0
  35. package/dist/src/arc/external.d.ts.map +1 -1
  36. package/dist/src/arc/graph/types.gen.d.ts +45 -597
  37. package/dist/src/arc/graph/types.gen.d.ts.map +1 -1
  38. package/dist/src/arc/ir/index.d.ts +1 -1
  39. package/dist/src/arc/ir/index.d.ts.map +1 -1
  40. package/dist/src/arc/ir/ir.d.ts +2 -0
  41. package/dist/src/arc/ir/ir.d.ts.map +1 -0
  42. package/dist/src/arc/ir/types.gen.d.ts +58 -2807
  43. package/dist/src/arc/ir/types.gen.d.ts.map +1 -1
  44. package/dist/src/arc/module/types.gen.d.ts +18 -1090
  45. package/dist/src/arc/module/types.gen.d.ts.map +1 -1
  46. package/dist/src/arc/program/types.gen.d.ts +18 -1090
  47. package/dist/src/arc/program/types.gen.d.ts.map +1 -1
  48. package/dist/src/arc/text/types.gen.d.ts +54 -1
  49. package/dist/src/arc/text/types.gen.d.ts.map +1 -1
  50. package/dist/src/arc/types/types.gen.d.ts +35 -153
  51. package/dist/src/arc/types/types.gen.d.ts.map +1 -1
  52. package/dist/src/arc/types.gen.d.ts +98 -2278
  53. package/dist/src/arc/types.gen.d.ts.map +1 -1
  54. package/dist/src/auth/auth.d.ts +14 -2
  55. package/dist/src/auth/auth.d.ts.map +1 -1
  56. package/dist/src/channel/client.d.ts +113 -75
  57. package/dist/src/channel/client.d.ts.map +1 -1
  58. package/dist/src/channel/external.d.ts +0 -1
  59. package/dist/src/channel/external.d.ts.map +1 -1
  60. package/dist/src/channel/payload.d.ts +65 -56
  61. package/dist/src/channel/payload.d.ts.map +1 -1
  62. package/dist/src/channel/types.gen.d.ts +26 -73
  63. package/dist/src/channel/types.gen.d.ts.map +1 -1
  64. package/dist/src/channel/writer.d.ts +1 -3
  65. package/dist/src/channel/writer.d.ts.map +1 -1
  66. package/dist/src/client.d.ts +55 -27
  67. package/dist/src/client.d.ts.map +1 -1
  68. package/dist/src/connection/client.d.ts +146 -0
  69. package/dist/src/connection/client.d.ts.map +1 -0
  70. package/dist/src/connection/external.d.ts +3 -0
  71. package/dist/src/connection/external.d.ts.map +1 -0
  72. package/dist/src/connection/index.d.ts +1 -1
  73. package/dist/src/connection/index.d.ts.map +1 -1
  74. package/dist/src/connection/status.d.ts +252 -0
  75. package/dist/src/connection/status.d.ts.map +1 -0
  76. package/dist/src/control/client.d.ts +31 -7
  77. package/dist/src/control/client.d.ts.map +1 -1
  78. package/dist/src/control/state.d.ts +47 -16
  79. package/dist/src/control/state.d.ts.map +1 -1
  80. package/dist/src/device/client.d.ts +59 -17
  81. package/dist/src/device/client.d.ts.map +1 -1
  82. package/dist/src/device/types.gen.d.ts +17 -67
  83. package/dist/src/device/types.gen.d.ts.map +1 -1
  84. package/dist/src/errors.d.ts +17 -20
  85. package/dist/src/errors.d.ts.map +1 -1
  86. package/dist/src/ethercat/external.d.ts +2 -0
  87. package/dist/src/ethercat/external.d.ts.map +1 -0
  88. package/dist/src/ethercat/index.d.ts +2 -0
  89. package/dist/src/ethercat/index.d.ts.map +1 -0
  90. package/dist/src/ethercat/types.gen.d.ts +243 -0
  91. package/dist/src/ethercat/types.gen.d.ts.map +1 -0
  92. package/dist/src/framer/adapter.d.ts +8 -5
  93. package/dist/src/framer/adapter.d.ts.map +1 -1
  94. package/dist/src/framer/benchutil.d.ts +19 -0
  95. package/dist/src/framer/benchutil.d.ts.map +1 -0
  96. package/dist/src/framer/cache/cache.d.ts +38 -0
  97. package/dist/src/framer/cache/cache.d.ts.map +1 -0
  98. package/dist/src/framer/cache/dynamic.d.ts +71 -0
  99. package/dist/src/framer/cache/dynamic.d.ts.map +1 -0
  100. package/dist/src/framer/cache/reader.d.ts +43 -0
  101. package/dist/src/framer/cache/reader.d.ts.map +1 -0
  102. package/dist/src/framer/cache/static.d.ts +66 -0
  103. package/dist/src/framer/cache/static.d.ts.map +1 -0
  104. package/dist/src/framer/cache/streamer.d.ts +86 -0
  105. package/dist/src/framer/cache/streamer.d.ts.map +1 -0
  106. package/dist/src/framer/cache/transform.d.ts +18 -0
  107. package/dist/src/framer/cache/transform.d.ts.map +1 -0
  108. package/dist/src/framer/cache/unary.d.ts +37 -0
  109. package/dist/src/framer/cache/unary.d.ts.map +1 -0
  110. package/dist/src/framer/client.d.ts +35 -14
  111. package/dist/src/framer/client.d.ts.map +1 -1
  112. package/dist/src/framer/codec.d.ts.map +1 -1
  113. package/dist/src/framer/deleter.d.ts +3 -2
  114. package/dist/src/framer/deleter.d.ts.map +1 -1
  115. package/dist/src/framer/external.d.ts +6 -0
  116. package/dist/src/framer/external.d.ts.map +1 -1
  117. package/dist/src/framer/feed.d.ts +40 -0
  118. package/dist/src/framer/feed.d.ts.map +1 -0
  119. package/dist/src/framer/frame.d.ts +16 -20
  120. package/dist/src/framer/frame.d.ts.map +1 -1
  121. package/dist/src/framer/hardened.d.ts +70 -0
  122. package/dist/src/framer/hardened.d.ts.map +1 -0
  123. package/dist/src/framer/iterator.d.ts +36 -43
  124. package/dist/src/framer/iterator.d.ts.map +1 -1
  125. package/dist/src/framer/reader.d.ts +3 -2
  126. package/dist/src/framer/reader.d.ts.map +1 -1
  127. package/dist/src/framer/streamer.d.ts +132 -205
  128. package/dist/src/framer/streamer.d.ts.map +1 -1
  129. package/dist/src/framer/writer.d.ts +130 -161
  130. package/dist/src/framer/writer.d.ts.map +1 -1
  131. package/dist/src/group/client.d.ts +66 -9
  132. package/dist/src/group/client.d.ts.map +1 -1
  133. package/dist/src/group/types.gen.d.ts +2 -2
  134. package/dist/src/http/external.d.ts +2 -0
  135. package/dist/src/http/external.d.ts.map +1 -0
  136. package/dist/src/http/index.d.ts +2 -0
  137. package/dist/src/http/index.d.ts.map +1 -0
  138. package/dist/src/http/types.gen.d.ts +451 -0
  139. package/dist/src/http/types.gen.d.ts.map +1 -0
  140. package/dist/src/imex/client.d.ts +88 -0
  141. package/dist/src/imex/client.d.ts.map +1 -0
  142. package/dist/src/imex/index.d.ts +2 -0
  143. package/dist/src/imex/index.d.ts.map +1 -0
  144. package/dist/src/index.d.ts +18 -5
  145. package/dist/src/index.d.ts.map +1 -1
  146. package/dist/src/label/client.d.ts +55 -36
  147. package/dist/src/label/client.d.ts.map +1 -1
  148. package/dist/src/label/external.d.ts +2 -0
  149. package/dist/src/label/external.d.ts.map +1 -1
  150. package/dist/src/label/payload.d.ts +4 -46
  151. package/dist/src/label/payload.d.ts.map +1 -1
  152. package/dist/src/label/store.d.ts +8 -0
  153. package/dist/src/label/store.d.ts.map +1 -0
  154. package/dist/src/label/types.gen.d.ts +45 -0
  155. package/dist/src/label/types.gen.d.ts.map +1 -0
  156. package/dist/src/labjack/external.d.ts +2 -0
  157. package/dist/src/labjack/external.d.ts.map +1 -0
  158. package/dist/src/labjack/index.d.ts +2 -0
  159. package/dist/src/labjack/index.d.ts.map +1 -0
  160. package/dist/src/labjack/types.gen.d.ts +442 -0
  161. package/dist/src/labjack/types.gen.d.ts.map +1 -0
  162. package/dist/src/lineplot/actions.d.ts +914 -0
  163. package/dist/src/lineplot/actions.d.ts.map +1 -0
  164. package/dist/src/lineplot/actions.gen.d.ts +4208 -0
  165. package/dist/src/lineplot/actions.gen.d.ts.map +1 -0
  166. package/dist/src/lineplot/client.d.ts +66 -16
  167. package/dist/src/lineplot/client.d.ts.map +1 -1
  168. package/dist/src/lineplot/external.d.ts +3 -0
  169. package/dist/src/lineplot/external.d.ts.map +1 -1
  170. package/dist/src/lineplot/line.d.ts +16 -0
  171. package/dist/src/lineplot/line.d.ts.map +1 -0
  172. package/dist/src/lineplot/types.gen.d.ts +837 -14
  173. package/dist/src/lineplot/types.gen.d.ts.map +1 -1
  174. package/dist/src/log/actions.d.ts +271 -0
  175. package/dist/src/log/actions.d.ts.map +1 -0
  176. package/dist/src/log/actions.gen.d.ts +1529 -0
  177. package/dist/src/log/actions.gen.d.ts.map +1 -0
  178. package/dist/src/log/client.d.ts +66 -16
  179. package/dist/src/log/client.d.ts.map +1 -1
  180. package/dist/src/log/external.d.ts +2 -0
  181. package/dist/src/log/external.d.ts.map +1 -1
  182. package/dist/src/log/types.gen.d.ts +139 -14
  183. package/dist/src/log/types.gen.d.ts.map +1 -1
  184. package/dist/src/modbus/external.d.ts +2 -0
  185. package/dist/src/modbus/external.d.ts.map +1 -0
  186. package/dist/src/modbus/index.d.ts +2 -0
  187. package/dist/src/modbus/index.d.ts.map +1 -0
  188. package/dist/src/modbus/types.gen.d.ts +280 -0
  189. package/dist/src/modbus/types.gen.d.ts.map +1 -0
  190. package/dist/src/ni/external.d.ts +2 -0
  191. package/dist/src/ni/external.d.ts.map +1 -0
  192. package/dist/src/ni/index.d.ts +2 -0
  193. package/dist/src/ni/index.d.ts.map +1 -0
  194. package/dist/src/ni/types.gen.d.ts +21029 -0
  195. package/dist/src/ni/types.gen.d.ts.map +1 -0
  196. package/dist/src/node/index.d.ts +2 -0
  197. package/dist/src/node/index.d.ts.map +1 -0
  198. package/dist/src/node/types.gen.d.ts +4 -0
  199. package/dist/src/node/types.gen.d.ts.map +1 -0
  200. package/dist/src/ontology/client.d.ts +314 -67
  201. package/dist/src/ontology/client.d.ts.map +1 -1
  202. package/dist/src/ontology/external.d.ts +1 -0
  203. package/dist/src/ontology/external.d.ts.map +1 -1
  204. package/dist/src/ontology/payload.d.ts +60 -18
  205. package/dist/src/ontology/payload.d.ts.map +1 -1
  206. package/dist/src/ontology/store.d.ts +32 -0
  207. package/dist/src/ontology/store.d.ts.map +1 -0
  208. package/dist/src/ontology/types.gen.d.ts +3 -2
  209. package/dist/src/ontology/types.gen.d.ts.map +1 -1
  210. package/dist/src/ontology/writer.d.ts +16 -10
  211. package/dist/src/ontology/writer.d.ts.map +1 -1
  212. package/dist/src/opcua/external.d.ts +2 -0
  213. package/dist/src/opcua/external.d.ts.map +1 -0
  214. package/dist/src/opcua/index.d.ts +2 -0
  215. package/dist/src/opcua/index.d.ts.map +1 -0
  216. package/dist/src/opcua/types.gen.d.ts +82 -0
  217. package/dist/src/opcua/types.gen.d.ts.map +1 -0
  218. package/dist/src/pagerduty/external.d.ts +2 -0
  219. package/dist/src/pagerduty/external.d.ts.map +1 -0
  220. package/dist/src/pagerduty/index.d.ts +2 -0
  221. package/dist/src/pagerduty/index.d.ts.map +1 -0
  222. package/dist/src/pagerduty/types.gen.d.ts +30 -0
  223. package/dist/src/pagerduty/types.gen.d.ts.map +1 -0
  224. package/dist/src/panel/actions.d.ts +273 -0
  225. package/dist/src/panel/actions.d.ts.map +1 -0
  226. package/dist/src/panel/actions.gen.d.ts +1255 -0
  227. package/dist/src/panel/actions.gen.d.ts.map +1 -0
  228. package/dist/src/panel/client.d.ts +148 -0
  229. package/dist/src/panel/client.d.ts.map +1 -0
  230. package/dist/src/panel/external.d.ts +6 -0
  231. package/dist/src/panel/external.d.ts.map +1 -0
  232. package/dist/src/panel/index.d.ts +2 -0
  233. package/dist/src/panel/index.d.ts.map +1 -0
  234. package/dist/src/panel/tree.d.ts +50 -0
  235. package/dist/src/panel/tree.d.ts.map +1 -0
  236. package/dist/src/panel/types.gen.d.ts +370 -0
  237. package/dist/src/panel/types.gen.d.ts.map +1 -0
  238. package/dist/src/project/client.d.ts +89 -0
  239. package/dist/src/project/client.d.ts.map +1 -0
  240. package/dist/src/project/external.d.ts.map +1 -0
  241. package/dist/src/project/index.d.ts +2 -0
  242. package/dist/src/project/index.d.ts.map +1 -0
  243. package/dist/src/project/types.gen.d.ts +27 -0
  244. package/dist/src/project/types.gen.d.ts.map +1 -0
  245. package/dist/src/query/cache.d.ts +132 -0
  246. package/dist/src/query/cache.d.ts.map +1 -0
  247. package/dist/src/query/deleted.d.ts +20 -0
  248. package/dist/src/query/deleted.d.ts.map +1 -0
  249. package/dist/src/query/derived.d.ts +33 -0
  250. package/dist/src/query/derived.d.ts.map +1 -0
  251. package/dist/src/query/external.d.ts +10 -0
  252. package/dist/src/query/external.d.ts.map +1 -0
  253. package/dist/src/query/index.d.ts +2 -0
  254. package/dist/src/query/index.d.ts.map +1 -0
  255. package/dist/src/query/query.d.ts +235 -0
  256. package/dist/src/query/query.d.ts.map +1 -0
  257. package/dist/src/query/retriever.d.ts +135 -0
  258. package/dist/src/query/retriever.d.ts.map +1 -0
  259. package/dist/src/query/streamer.d.ts +67 -0
  260. package/dist/src/query/streamer.d.ts.map +1 -0
  261. package/dist/src/query/table.d.ts +219 -0
  262. package/dist/src/query/table.d.ts.map +1 -0
  263. package/dist/src/query/types.d.ts +35 -0
  264. package/dist/src/query/types.d.ts.map +1 -0
  265. package/dist/src/query/write.d.ts +21 -0
  266. package/dist/src/query/write.d.ts.map +1 -0
  267. package/dist/src/rack/client.d.ts +58 -20
  268. package/dist/src/rack/client.d.ts.map +1 -1
  269. package/dist/src/rack/types.gen.d.ts +11 -12
  270. package/dist/src/rack/types.gen.d.ts.map +1 -1
  271. package/dist/src/range/alias/types.gen.d.ts +2 -3
  272. package/dist/src/range/alias/types.gen.d.ts.map +1 -1
  273. package/dist/src/ranger/client.d.ts +138 -27
  274. package/dist/src/ranger/client.d.ts.map +1 -1
  275. package/dist/src/ranger/kv/client.d.ts +7 -4
  276. package/dist/src/ranger/kv/client.d.ts.map +1 -1
  277. package/dist/src/ranger/payload.d.ts +3 -0
  278. package/dist/src/ranger/payload.d.ts.map +1 -1
  279. package/dist/src/ranger/types.gen.d.ts +45 -101
  280. package/dist/src/ranger/types.gen.d.ts.map +1 -1
  281. package/dist/src/ranger/writer.d.ts +2 -74
  282. package/dist/src/ranger/writer.d.ts.map +1 -1
  283. package/dist/src/schematic/actions.d.ts +90 -33
  284. package/dist/src/schematic/actions.d.ts.map +1 -1
  285. package/dist/src/schematic/actions.gen.d.ts +207 -114
  286. package/dist/src/schematic/actions.gen.d.ts.map +1 -1
  287. package/dist/src/schematic/client.d.ts +70 -68
  288. package/dist/src/schematic/client.d.ts.map +1 -1
  289. package/dist/src/schematic/symbol/client.d.ts +133 -27
  290. package/dist/src/schematic/symbol/client.d.ts.map +1 -1
  291. package/dist/src/schematic/symbol/types.gen.d.ts +258 -153
  292. package/dist/src/schematic/symbol/types.gen.d.ts.map +1 -1
  293. package/dist/src/schematic/types.gen.d.ts +17 -96
  294. package/dist/src/schematic/types.gen.d.ts.map +1 -1
  295. package/dist/src/status/client.d.ts +69 -14
  296. package/dist/src/status/client.d.ts.map +1 -1
  297. package/dist/src/status/external.d.ts +2 -0
  298. package/dist/src/status/external.d.ts.map +1 -1
  299. package/dist/src/status/payload.d.ts +2 -36
  300. package/dist/src/status/payload.d.ts.map +1 -1
  301. package/dist/src/status/status.d.ts +65 -0
  302. package/dist/src/status/status.d.ts.map +1 -0
  303. package/dist/src/status/types.gen.d.ts +58 -0
  304. package/dist/src/status/types.gen.d.ts.map +1 -0
  305. package/dist/src/table/actions.d.ts +72 -13
  306. package/dist/src/table/actions.d.ts.map +1 -1
  307. package/dist/src/table/actions.gen.d.ts +221 -137
  308. package/dist/src/table/actions.gen.d.ts.map +1 -1
  309. package/dist/src/table/client.d.ts +64 -40
  310. package/dist/src/table/client.d.ts.map +1 -1
  311. package/dist/src/table/types.gen.d.ts +20 -55
  312. package/dist/src/table/types.gen.d.ts.map +1 -1
  313. package/dist/src/task/client.d.ts +149 -28
  314. package/dist/src/task/client.d.ts.map +1 -1
  315. package/dist/src/task/types.gen.d.ts +71 -89
  316. package/dist/src/task/types.gen.d.ts.map +1 -1
  317. package/dist/src/testutil/access.d.ts +27 -1
  318. package/dist/src/testutil/access.d.ts.map +1 -1
  319. package/dist/src/testutil/channels.d.ts +2 -0
  320. package/dist/src/testutil/channels.d.ts.map +1 -1
  321. package/dist/src/testutil/client.d.ts +5 -0
  322. package/dist/src/testutil/client.d.ts.map +1 -1
  323. package/dist/src/testutil/connection.d.ts +10 -0
  324. package/dist/src/testutil/connection.d.ts.map +1 -0
  325. package/dist/src/testutil/index.d.ts +9 -0
  326. package/dist/src/testutil/index.d.ts.map +1 -0
  327. package/dist/src/testutil/panels.d.ts +8 -0
  328. package/dist/src/testutil/panels.d.ts.map +1 -0
  329. package/dist/src/testutil/proxy.d.ts +29 -0
  330. package/dist/src/testutil/proxy.d.ts.map +1 -0
  331. package/dist/src/testutil/query.d.ts +7 -0
  332. package/dist/src/testutil/query.d.ts.map +1 -0
  333. package/dist/src/testutil/telem.d.ts +4 -0
  334. package/dist/src/testutil/telem.d.ts.map +1 -1
  335. package/dist/src/transport.d.ts +10 -4
  336. package/dist/src/transport.d.ts.map +1 -1
  337. package/dist/src/user/client.d.ts +29 -28
  338. package/dist/src/user/client.d.ts.map +1 -1
  339. package/dist/src/user/external.d.ts +1 -1
  340. package/dist/src/user/external.d.ts.map +1 -1
  341. package/dist/src/user/types.gen.d.ts +4 -4
  342. package/dist/src/util/retrieve.d.ts +2 -2
  343. package/dist/src/util/retrieve.d.ts.map +1 -1
  344. package/dist/src/util/telem.d.ts.map +1 -1
  345. package/dist/src/view/client.d.ts +30 -14
  346. package/dist/src/view/client.d.ts.map +1 -1
  347. package/dist/src/view/types.gen.d.ts +7 -15
  348. package/dist/src/view/types.gen.d.ts.map +1 -1
  349. package/dist/testutil.js +189 -0
  350. package/dist/testutil.js.map +1 -0
  351. package/package.json +40 -17
  352. package/src/access/client.ts +14 -3
  353. package/src/access/enforce.ts +0 -3
  354. package/src/access/external.ts +1 -0
  355. package/src/access/granted.ts +114 -0
  356. package/src/access/policy/client.ts +135 -43
  357. package/src/access/policy/types.gen.ts +9 -11
  358. package/src/access/role/client.ts +160 -38
  359. package/src/access/role/types.gen.ts +8 -12
  360. package/src/actions/actions.ts +5 -6
  361. package/src/actions/controller.ts +626 -0
  362. package/src/actions/external.ts +11 -0
  363. package/src/arc/actions.gen.ts +313 -0
  364. package/src/arc/actions.ts +192 -0
  365. package/src/arc/client.ts +424 -41
  366. package/src/arc/compiler/types.gen.ts +5 -6
  367. package/src/arc/external.ts +2 -0
  368. package/src/arc/graph/types.gen.ts +24 -22
  369. package/src/arc/ir/index.ts +1 -1
  370. package/{eslint.config.ts → src/arc/ir/ir.ts} +1 -4
  371. package/src/arc/ir/types.gen.ts +42 -41
  372. package/src/arc/text/types.gen.ts +21 -2
  373. package/src/arc/types/types.gen.ts +40 -32
  374. package/src/arc/types.gen.ts +31 -29
  375. package/src/auth/auth.ts +40 -8
  376. package/src/channel/client.ts +529 -132
  377. package/src/channel/external.ts +0 -1
  378. package/src/channel/payload.ts +30 -3
  379. package/src/channel/types.gen.ts +37 -48
  380. package/src/channel/writer.ts +2 -11
  381. package/src/client.ts +215 -91
  382. package/src/connection/client.ts +495 -0
  383. package/src/connection/external.ts +34 -0
  384. package/src/connection/index.ts +1 -1
  385. package/src/connection/status.ts +442 -0
  386. package/src/control/client.ts +84 -12
  387. package/src/control/state.ts +17 -36
  388. package/src/device/client.ts +293 -41
  389. package/src/device/types.gen.ts +15 -26
  390. package/src/errors.ts +45 -22
  391. package/src/{workspace → ethercat}/external.ts +1 -2
  392. package/src/{workspace → ethercat}/index.ts +1 -1
  393. package/src/ethercat/types.gen.ts +151 -0
  394. package/src/framer/adapter.ts +60 -37
  395. package/src/framer/benchutil.ts +67 -0
  396. package/src/framer/cache/cache.ts +115 -0
  397. package/src/framer/cache/dynamic.ts +279 -0
  398. package/src/framer/cache/reader.ts +160 -0
  399. package/src/framer/cache/static.ts +215 -0
  400. package/src/framer/cache/streamer.ts +391 -0
  401. package/src/framer/cache/transform.ts +31 -0
  402. package/src/framer/cache/unary.ts +104 -0
  403. package/src/framer/client.ts +71 -43
  404. package/src/framer/codec.ts +55 -18
  405. package/src/framer/deleter.ts +4 -6
  406. package/src/framer/external.ts +10 -0
  407. package/src/framer/feed.ts +108 -0
  408. package/src/framer/frame.ts +13 -23
  409. package/src/framer/hardened.ts +283 -0
  410. package/src/framer/iterator.ts +31 -42
  411. package/src/framer/reader.ts +11 -11
  412. package/src/framer/streamer.ts +18 -178
  413. package/src/framer/writer.ts +39 -59
  414. package/src/group/client.ts +158 -23
  415. package/src/http/external.ts +10 -0
  416. package/src/{cluster → http}/index.ts +1 -1
  417. package/src/http/types.gen.ts +245 -0
  418. package/src/imex/client.ts +125 -0
  419. package/src/imex/index.ts +10 -0
  420. package/src/index.ts +18 -6
  421. package/src/label/client.ts +193 -54
  422. package/src/label/external.ts +2 -0
  423. package/src/label/payload.ts +4 -9
  424. package/src/label/store.ts +28 -0
  425. package/src/label/types.gen.ts +31 -0
  426. package/src/labjack/external.ts +10 -0
  427. package/src/labjack/index.ts +10 -0
  428. package/src/labjack/types.gen.ts +251 -0
  429. package/src/lineplot/actions.gen.ts +880 -0
  430. package/src/lineplot/actions.ts +535 -0
  431. package/src/lineplot/client.ts +224 -52
  432. package/src/lineplot/external.ts +3 -0
  433. package/src/lineplot/line.ts +80 -0
  434. package/src/lineplot/types.gen.ts +225 -12
  435. package/src/log/actions.gen.ts +474 -0
  436. package/src/log/actions.ts +242 -0
  437. package/src/log/client.ts +223 -52
  438. package/src/log/external.ts +2 -0
  439. package/src/log/types.gen.ts +45 -14
  440. package/src/modbus/external.ts +10 -0
  441. package/src/modbus/index.ts +10 -0
  442. package/src/modbus/types.gen.ts +185 -0
  443. package/src/ni/external.ts +10 -0
  444. package/src/ni/index.ts +10 -0
  445. package/src/ni/types.gen.ts +1632 -0
  446. package/src/node/index.ts +10 -0
  447. package/src/{cluster → node}/types.gen.ts +2 -2
  448. package/src/ontology/client.ts +408 -99
  449. package/src/ontology/external.ts +7 -0
  450. package/src/ontology/payload.ts +48 -7
  451. package/src/ontology/store.ts +83 -0
  452. package/src/ontology/types.gen.ts +2 -1
  453. package/src/ontology/writer.ts +1 -0
  454. package/src/opcua/external.ts +10 -0
  455. package/src/opcua/index.ts +10 -0
  456. package/src/opcua/types.gen.ts +65 -0
  457. package/src/pagerduty/external.ts +10 -0
  458. package/src/pagerduty/index.ts +10 -0
  459. package/src/pagerduty/types.gen.ts +41 -0
  460. package/src/panel/actions.gen.ts +267 -0
  461. package/src/panel/actions.ts +357 -0
  462. package/src/panel/client.ts +327 -0
  463. package/src/panel/external.ts +14 -0
  464. package/src/panel/index.ts +10 -0
  465. package/src/panel/tree.ts +163 -0
  466. package/src/panel/types.gen.ts +164 -0
  467. package/src/project/client.ts +273 -0
  468. package/src/project/external.ts +11 -0
  469. package/src/project/index.ts +10 -0
  470. package/src/project/types.gen.ts +40 -0
  471. package/src/query/cache.ts +326 -0
  472. package/src/query/deleted.ts +38 -0
  473. package/src/query/derived.ts +101 -0
  474. package/src/query/external.ts +51 -0
  475. package/src/query/index.ts +10 -0
  476. package/src/query/query.ts +865 -0
  477. package/src/query/retriever.ts +308 -0
  478. package/src/query/streamer.ts +207 -0
  479. package/src/query/table.ts +625 -0
  480. package/src/query/types.ts +54 -0
  481. package/src/query/write.ts +42 -0
  482. package/src/rack/client.ts +233 -45
  483. package/src/rack/types.gen.ts +15 -16
  484. package/src/range/alias/types.gen.ts +2 -3
  485. package/src/ranger/client.ts +581 -70
  486. package/src/ranger/kv/client.ts +52 -21
  487. package/src/ranger/payload.ts +3 -0
  488. package/src/ranger/types.gen.ts +21 -23
  489. package/src/ranger/writer.ts +4 -8
  490. package/src/schematic/actions.gen.ts +62 -53
  491. package/src/schematic/actions.ts +44 -42
  492. package/src/schematic/client.ts +226 -70
  493. package/src/schematic/symbol/client.ts +277 -48
  494. package/src/schematic/symbol/types.gen.ts +22 -34
  495. package/src/schematic/types.gen.ts +22 -29
  496. package/src/status/client.ts +321 -44
  497. package/src/status/external.ts +2 -0
  498. package/src/status/payload.ts +1 -23
  499. package/src/status/status.ts +241 -0
  500. package/src/status/types.gen.ts +108 -0
  501. package/src/table/actions.gen.ts +96 -63
  502. package/src/table/actions.ts +44 -19
  503. package/src/table/client.ts +220 -56
  504. package/src/table/types.gen.ts +24 -31
  505. package/src/task/client.ts +580 -101
  506. package/src/task/types.gen.ts +68 -75
  507. package/src/testutil/access.ts +102 -6
  508. package/src/testutil/channels.ts +29 -0
  509. package/src/testutil/client.ts +27 -2
  510. package/src/testutil/connection.ts +47 -0
  511. package/src/testutil/index.ts +17 -0
  512. package/src/testutil/panels.ts +26 -0
  513. package/src/testutil/proxy.ts +106 -0
  514. package/src/testutil/query.ts +28 -0
  515. package/src/testutil/telem.ts +17 -1
  516. package/src/transport.ts +18 -7
  517. package/src/user/client.ts +165 -64
  518. package/src/user/external.ts +1 -1
  519. package/src/user/types.gen.ts +5 -5
  520. package/src/util/retrieve.ts +4 -4
  521. package/src/util/telem.ts +0 -1
  522. package/src/view/client.ts +120 -37
  523. package/src/view/types.gen.ts +8 -11
  524. package/.turbo/turbo-build.log +0 -20
  525. package/.vscode/settings.json +0 -3
  526. package/CONTRIBUTING.md +0 -47
  527. package/dist/client.cjs +0 -118
  528. package/dist/eslint.config.d.ts +0 -4
  529. package/dist/eslint.config.d.ts.map +0 -1
  530. package/dist/src/access/enforce.spec.d.ts +0 -2
  531. package/dist/src/access/enforce.spec.d.ts.map +0 -1
  532. package/dist/src/access/policy/access.spec.d.ts +0 -2
  533. package/dist/src/access/policy/access.spec.d.ts.map +0 -1
  534. package/dist/src/access/role/role.spec.d.ts +0 -2
  535. package/dist/src/access/role/role.spec.d.ts.map +0 -1
  536. package/dist/src/actions/actions.spec.d.ts +0 -2
  537. package/dist/src/actions/actions.spec.d.ts.map +0 -1
  538. package/dist/src/arc/access.spec.d.ts +0 -2
  539. package/dist/src/arc/access.spec.d.ts.map +0 -1
  540. package/dist/src/arc/arc.spec.d.ts +0 -2
  541. package/dist/src/arc/arc.spec.d.ts.map +0 -1
  542. package/dist/src/arc/lsp.spec.d.ts +0 -2
  543. package/dist/src/arc/lsp.spec.d.ts.map +0 -1
  544. package/dist/src/auth/auth.spec.d.ts +0 -2
  545. package/dist/src/auth/auth.spec.d.ts.map +0 -1
  546. package/dist/src/channel/access.spec.d.ts +0 -2
  547. package/dist/src/channel/access.spec.d.ts.map +0 -1
  548. package/dist/src/channel/batchRetriever.spec.d.ts +0 -2
  549. package/dist/src/channel/batchRetriever.spec.d.ts.map +0 -1
  550. package/dist/src/channel/channel.spec.d.ts +0 -2
  551. package/dist/src/channel/channel.spec.d.ts.map +0 -1
  552. package/dist/src/channel/payload.spec.d.ts +0 -2
  553. package/dist/src/channel/payload.spec.d.ts.map +0 -1
  554. package/dist/src/channel/retriever.d.ts +0 -64
  555. package/dist/src/channel/retriever.d.ts.map +0 -1
  556. package/dist/src/cluster/index.d.ts +0 -2
  557. package/dist/src/cluster/index.d.ts.map +0 -1
  558. package/dist/src/cluster/types.gen.d.ts +0 -4
  559. package/dist/src/cluster/types.gen.d.ts.map +0 -1
  560. package/dist/src/connection/checker.d.ts +0 -86
  561. package/dist/src/connection/checker.d.ts.map +0 -1
  562. package/dist/src/connection/connection.spec.d.ts +0 -2
  563. package/dist/src/connection/connection.spec.d.ts.map +0 -1
  564. package/dist/src/connection.spec.d.ts +0 -2
  565. package/dist/src/connection.spec.d.ts.map +0 -1
  566. package/dist/src/control/state.spec.d.ts +0 -2
  567. package/dist/src/control/state.spec.d.ts.map +0 -1
  568. package/dist/src/device/access.spec.d.ts +0 -2
  569. package/dist/src/device/access.spec.d.ts.map +0 -1
  570. package/dist/src/device/device.spec.d.ts +0 -2
  571. package/dist/src/device/device.spec.d.ts.map +0 -1
  572. package/dist/src/device/payload.spec.d.ts +0 -2
  573. package/dist/src/device/payload.spec.d.ts.map +0 -1
  574. package/dist/src/errors.spec.d.ts +0 -2
  575. package/dist/src/errors.spec.d.ts.map +0 -1
  576. package/dist/src/framer/adapter.spec.d.ts +0 -2
  577. package/dist/src/framer/adapter.spec.d.ts.map +0 -1
  578. package/dist/src/framer/client.spec.d.ts +0 -2
  579. package/dist/src/framer/client.spec.d.ts.map +0 -1
  580. package/dist/src/framer/codec.spec.d.ts +0 -2
  581. package/dist/src/framer/codec.spec.d.ts.map +0 -1
  582. package/dist/src/framer/deleter.spec.d.ts +0 -2
  583. package/dist/src/framer/deleter.spec.d.ts.map +0 -1
  584. package/dist/src/framer/frame.spec.d.ts +0 -2
  585. package/dist/src/framer/frame.spec.d.ts.map +0 -1
  586. package/dist/src/framer/iterator.spec.d.ts +0 -2
  587. package/dist/src/framer/iterator.spec.d.ts.map +0 -1
  588. package/dist/src/framer/reader.spec.d.ts +0 -2
  589. package/dist/src/framer/reader.spec.d.ts.map +0 -1
  590. package/dist/src/framer/streamer.spec.d.ts +0 -2
  591. package/dist/src/framer/streamer.spec.d.ts.map +0 -1
  592. package/dist/src/framer/writer.spec.d.ts +0 -2
  593. package/dist/src/framer/writer.spec.d.ts.map +0 -1
  594. package/dist/src/group/access.spec.d.ts +0 -2
  595. package/dist/src/group/access.spec.d.ts.map +0 -1
  596. package/dist/src/group/group.spec.d.ts +0 -2
  597. package/dist/src/group/group.spec.d.ts.map +0 -1
  598. package/dist/src/label/access.spec.d.ts +0 -2
  599. package/dist/src/label/access.spec.d.ts.map +0 -1
  600. package/dist/src/label/label.spec.d.ts +0 -2
  601. package/dist/src/label/label.spec.d.ts.map +0 -1
  602. package/dist/src/lineplot/access.spec.d.ts +0 -2
  603. package/dist/src/lineplot/access.spec.d.ts.map +0 -1
  604. package/dist/src/lineplot/lineplot.spec.d.ts +0 -2
  605. package/dist/src/lineplot/lineplot.spec.d.ts.map +0 -1
  606. package/dist/src/log/access.spec.d.ts +0 -2
  607. package/dist/src/log/access.spec.d.ts.map +0 -1
  608. package/dist/src/log/log.spec.d.ts +0 -2
  609. package/dist/src/log/log.spec.d.ts.map +0 -1
  610. package/dist/src/ontology/ontology.spec.d.ts +0 -2
  611. package/dist/src/ontology/ontology.spec.d.ts.map +0 -1
  612. package/dist/src/rack/access.spec.d.ts +0 -2
  613. package/dist/src/rack/access.spec.d.ts.map +0 -1
  614. package/dist/src/rack/rack.spec.d.ts +0 -2
  615. package/dist/src/rack/rack.spec.d.ts.map +0 -1
  616. package/dist/src/ranger/access.spec.d.ts +0 -2
  617. package/dist/src/ranger/access.spec.d.ts.map +0 -1
  618. package/dist/src/ranger/alias/payload.spec.d.ts +0 -2
  619. package/dist/src/ranger/alias/payload.spec.d.ts.map +0 -1
  620. package/dist/src/ranger/ranger.spec.d.ts +0 -2
  621. package/dist/src/ranger/ranger.spec.d.ts.map +0 -1
  622. package/dist/src/schematic/access.spec.d.ts +0 -2
  623. package/dist/src/schematic/access.spec.d.ts.map +0 -1
  624. package/dist/src/schematic/actions.spec.d.ts +0 -2
  625. package/dist/src/schematic/actions.spec.d.ts.map +0 -1
  626. package/dist/src/schematic/schematic.spec.d.ts +0 -2
  627. package/dist/src/schematic/schematic.spec.d.ts.map +0 -1
  628. package/dist/src/schematic/symbol/access.spec.d.ts +0 -2
  629. package/dist/src/schematic/symbol/access.spec.d.ts.map +0 -1
  630. package/dist/src/schematic/symbol/client.spec.d.ts +0 -2
  631. package/dist/src/schematic/symbol/client.spec.d.ts.map +0 -1
  632. package/dist/src/status/access.spec.d.ts +0 -2
  633. package/dist/src/status/access.spec.d.ts.map +0 -1
  634. package/dist/src/status/status.spec.d.ts +0 -2
  635. package/dist/src/status/status.spec.d.ts.map +0 -1
  636. package/dist/src/table/access.spec.d.ts +0 -2
  637. package/dist/src/table/access.spec.d.ts.map +0 -1
  638. package/dist/src/table/table.spec.d.ts +0 -2
  639. package/dist/src/table/table.spec.d.ts.map +0 -1
  640. package/dist/src/task/access.spec.d.ts +0 -2
  641. package/dist/src/task/access.spec.d.ts.map +0 -1
  642. package/dist/src/task/payload.spec.d.ts +0 -2
  643. package/dist/src/task/payload.spec.d.ts.map +0 -1
  644. package/dist/src/task/task.spec.d.ts +0 -2
  645. package/dist/src/task/task.spec.d.ts.map +0 -1
  646. package/dist/src/user/access.spec.d.ts +0 -2
  647. package/dist/src/user/access.spec.d.ts.map +0 -1
  648. package/dist/src/user/user.spec.d.ts +0 -2
  649. package/dist/src/user/user.spec.d.ts.map +0 -1
  650. package/dist/src/util/retrieve.spec.d.ts +0 -2
  651. package/dist/src/util/retrieve.spec.d.ts.map +0 -1
  652. package/dist/src/view/view.spec.d.ts +0 -2
  653. package/dist/src/view/view.spec.d.ts.map +0 -1
  654. package/dist/src/workspace/access.spec.d.ts +0 -2
  655. package/dist/src/workspace/access.spec.d.ts.map +0 -1
  656. package/dist/src/workspace/client.d.ts +0 -36
  657. package/dist/src/workspace/client.d.ts.map +0 -1
  658. package/dist/src/workspace/external.d.ts.map +0 -1
  659. package/dist/src/workspace/index.d.ts +0 -2
  660. package/dist/src/workspace/index.d.ts.map +0 -1
  661. package/dist/src/workspace/types.gen.d.ts +0 -34
  662. package/dist/src/workspace/types.gen.d.ts.map +0 -1
  663. package/dist/src/workspace/workspace.spec.d.ts +0 -2
  664. package/dist/src/workspace/workspace.spec.d.ts.map +0 -1
  665. package/examples/node/basicReadWrite.js +0 -86
  666. package/examples/node/createChannels.js +0 -50
  667. package/examples/node/createRange.js +0 -67
  668. package/examples/node/package-lock.json +0 -133
  669. package/examples/node/package.json +0 -17
  670. package/examples/node/readLatest.js +0 -76
  671. package/examples/node/seriesAndFrames.js +0 -173
  672. package/examples/node/streamRead.js +0 -50
  673. package/examples/node/streamWrite.js +0 -87
  674. package/src/access/enforce.spec.ts +0 -188
  675. package/src/access/policy/access.spec.ts +0 -147
  676. package/src/access/role/role.spec.ts +0 -95
  677. package/src/actions/actions.spec.ts +0 -229
  678. package/src/arc/access.spec.ts +0 -149
  679. package/src/arc/arc.spec.ts +0 -44
  680. package/src/arc/lsp.spec.ts +0 -717
  681. package/src/auth/auth.spec.ts +0 -101
  682. package/src/channel/access.spec.ts +0 -116
  683. package/src/channel/batchRetriever.spec.ts +0 -115
  684. package/src/channel/channel.spec.ts +0 -352
  685. package/src/channel/payload.spec.ts +0 -117
  686. package/src/channel/retriever.ts +0 -252
  687. package/src/connection/checker.ts +0 -203
  688. package/src/connection/connection.spec.ts +0 -152
  689. package/src/connection.spec.ts +0 -145
  690. package/src/control/state.spec.ts +0 -22
  691. package/src/device/access.spec.ts +0 -159
  692. package/src/device/device.spec.ts +0 -461
  693. package/src/device/payload.spec.ts +0 -142
  694. package/src/errors.spec.ts +0 -71
  695. package/src/framer/adapter.spec.ts +0 -620
  696. package/src/framer/client.spec.ts +0 -180
  697. package/src/framer/codec.spec.ts +0 -383
  698. package/src/framer/deleter.spec.ts +0 -103
  699. package/src/framer/frame.spec.ts +0 -973
  700. package/src/framer/iterator.spec.ts +0 -169
  701. package/src/framer/reader.spec.ts +0 -865
  702. package/src/framer/streamer.spec.ts +0 -871
  703. package/src/framer/writer.spec.ts +0 -486
  704. package/src/group/access.spec.ts +0 -77
  705. package/src/group/group.spec.ts +0 -65
  706. package/src/label/access.spec.ts +0 -109
  707. package/src/label/label.spec.ts +0 -83
  708. package/src/lineplot/access.spec.ts +0 -134
  709. package/src/lineplot/lineplot.spec.ts +0 -120
  710. package/src/log/access.spec.ts +0 -132
  711. package/src/log/log.spec.ts +0 -106
  712. package/src/ontology/ontology.spec.ts +0 -521
  713. package/src/rack/access.spec.ts +0 -102
  714. package/src/rack/rack.spec.ts +0 -171
  715. package/src/ranger/access.spec.ts +0 -115
  716. package/src/ranger/alias/payload.spec.ts +0 -52
  717. package/src/ranger/ranger.spec.ts +0 -343
  718. package/src/schematic/access.spec.ts +0 -134
  719. package/src/schematic/actions.spec.ts +0 -699
  720. package/src/schematic/schematic.spec.ts +0 -340
  721. package/src/schematic/symbol/access.spec.ts +0 -172
  722. package/src/schematic/symbol/client.spec.ts +0 -160
  723. package/src/status/access.spec.ts +0 -129
  724. package/src/status/status.spec.ts +0 -448
  725. package/src/table/access.spec.ts +0 -128
  726. package/src/table/table.spec.ts +0 -651
  727. package/src/task/access.spec.ts +0 -131
  728. package/src/task/payload.spec.ts +0 -113
  729. package/src/task/task.spec.ts +0 -657
  730. package/src/user/access.spec.ts +0 -107
  731. package/src/user/user.spec.ts +0 -290
  732. package/src/util/retrieve.spec.ts +0 -49
  733. package/src/view/view.spec.ts +0 -165
  734. package/src/workspace/access.spec.ts +0 -108
  735. package/src/workspace/client.ts +0 -112
  736. package/src/workspace/types.gen.ts +0 -46
  737. package/src/workspace/workspace.spec.ts +0 -111
  738. package/tsconfig.json +0 -5
  739. package/tsconfig.vite.json +0 -4
  740. package/vite.config.ts +0 -29
  741. /package/dist/src/{workspace → project}/external.d.ts +0 -0
@@ -8,7 +8,7 @@
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
10
  import { type UnaryClient } from "@synnaxlabs/freighter";
11
- import { array, type record, zod } from "@synnaxlabs/x";
11
+ import { array, type destructor, primitive, type record, zod } from "@synnaxlabs/x";
12
12
  import { z } from "zod";
13
13
 
14
14
  import {
@@ -18,23 +18,27 @@ import {
18
18
  type Key,
19
19
  keyZ,
20
20
  type New,
21
- newZ,
22
21
  ontologyID,
22
+ statusZ,
23
23
  } from "@/device/types.gen";
24
24
  import { ontology } from "@/ontology";
25
+ import { query } from "@/query";
25
26
  import { keyZ as rackKeyZ } from "@/rack/types.gen";
27
+ import { type status } from "@/status";
26
28
  import { checkForMultipleOrNoResults } from "@/util/retrieve";
27
29
 
28
30
  export const SET_CHANNEL_NAME = "sy_device_set";
29
31
  export const DELETE_CHANNEL_NAME = "sy_device_delete";
30
32
 
33
+ const genericDeviceZ = deviceZ();
34
+
31
35
  const createReqZ = <
32
36
  Properties extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
33
37
  Make extends z.ZodType<string> = z.ZodString,
34
38
  Model extends z.ZodType<string> = z.ZodString,
35
39
  >(
36
40
  schemas?: DeviceSchemas<Properties, Make, Model>,
37
- ) => z.object({ devices: zod.toArray(newZ(schemas)) });
41
+ ) => z.object({ devices: zod.toArray(deviceZ(schemas)) });
38
42
 
39
43
  const createResZ = <
40
44
  Properties extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
@@ -60,6 +64,7 @@ const retrieveRequestZ = z.object({
60
64
  includeStatus: z.boolean().optional(),
61
65
  includeParent: z.boolean().optional(),
62
66
  });
67
+ const retrieveMultiParamsZ = retrieveRequestZ.or(query.keyListZ(keyZ));
63
68
 
64
69
  const retrieveResZ = <
65
70
  Properties extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
@@ -67,9 +72,14 @@ const retrieveResZ = <
67
72
  Model extends z.ZodType<string> = z.ZodString,
68
73
  >(
69
74
  schemas?: DeviceSchemas<Properties, Make, Model>,
70
- ) => z.object({ devices: array.nullishToEmpty(deviceZ(schemas)) });
75
+ ) =>
76
+ z.object({
77
+ devices: deviceZ(schemas)
78
+ .array()
79
+ .default(() => []),
80
+ });
71
81
 
72
- const singleRetrieveArgsZ = z
82
+ const singleRetrieveParamsZ = z
73
83
  .object({
74
84
  key: keyZ,
75
85
  includeStatus: z.boolean().optional(),
@@ -79,12 +89,16 @@ const singleRetrieveArgsZ = z
79
89
  includeStatus,
80
90
  }));
81
91
 
82
- export type RetrieveSingleParams = z.input<typeof singleRetrieveArgsZ>;
92
+ export type RetrieveSingleParams = z.input<typeof singleRetrieveParamsZ>;
83
93
  export type RetrieveMultipleParams = z.input<typeof retrieveRequestZ>;
84
94
 
85
- const retrieveArgsZ = z.union([singleRetrieveArgsZ, retrieveRequestZ]);
95
+ const retrieveParamsZ = z.union([singleRetrieveParamsZ, retrieveRequestZ]);
96
+
97
+ export type RetrieveParams = z.input<typeof retrieveParamsZ>;
98
+
99
+ interface RetrieveRequest extends z.infer<typeof retrieveRequestZ> {}
86
100
 
87
- export type RetrieveArgs = z.input<typeof retrieveArgsZ>;
101
+ type SingleQuery = { key: Key; includeStatus?: boolean };
88
102
 
89
103
  type RetrieveSchemas<
90
104
  Properties extends z.ZodType<record.Unknown>,
@@ -92,11 +106,136 @@ type RetrieveSchemas<
92
106
  Model extends z.ZodType<string>,
93
107
  > = { schemas: DeviceSchemas<Properties, Make, Model> };
94
108
 
95
- export class Client {
96
- private readonly client: UnaryClient;
109
+ /** Query fields only the server can evaluate. */
110
+ const SERVER_FIELDS = ["searchTerm", "limit", "offset", "includeParent"] as const;
111
+
112
+ /** Drops includeStatus when unset so equivalent queries hash identically. */
113
+ const normalizeSingle = ({ key, includeStatus }: RetrieveSingleParams): SingleQuery =>
114
+ includeStatus === true ? { key, includeStatus: true } : { key };
115
+
116
+ const singleQueryZ = z
117
+ .union([
118
+ z.strictObject({ key: keyZ, includeStatus: z.boolean().optional() }),
119
+ keyZ.transform((key) => ({ key })),
120
+ ])
121
+ .transform(normalizeSingle);
122
+
123
+ /** The table never holds statuses; the status table is their single home. */
124
+ const stripStatus = ({ status: _, ...device }: Device): Omit<Device, "status"> =>
125
+ device;
126
+
127
+ /**
128
+ * Client-side matching for a request: key, name, make, model, location, and
129
+ * rack sets. Server-computed shapes (search, pagination, parent resolution)
130
+ * never reach this filter; they refetch instead.
131
+ */
132
+ const requestFilter = (
133
+ req: RetrieveRequest,
134
+ ): ((d: Omit<Device, "status">) => boolean) => {
135
+ const keySet = primitive.isNonZero(req.keys) ? new Set(req.keys) : undefined;
136
+ const nameSet = primitive.isNonZero(req.names) ? new Set(req.names) : undefined;
137
+ const makeSet = primitive.isNonZero(req.makes) ? new Set(req.makes) : undefined;
138
+ const modelSet = primitive.isNonZero(req.models) ? new Set(req.models) : undefined;
139
+ const locationSet = primitive.isNonZero(req.locations)
140
+ ? new Set(req.locations)
141
+ : undefined;
142
+ const rackSet = primitive.isNonZero(req.racks) ? new Set(req.racks) : undefined;
143
+ return (d) => {
144
+ if (keySet != null && !keySet.has(d.key)) return false;
145
+ if (nameSet != null && !nameSet.has(d.name)) return false;
146
+ if (makeSet != null && !makeSet.has(d.make)) return false;
147
+ if (modelSet != null && !modelSet.has(d.model)) return false;
148
+ if (locationSet != null && !locationSet.has(d.location)) return false;
149
+ if (rackSet != null && !rackSet.has(d.rack)) return false;
150
+ return true;
151
+ };
152
+ };
153
+
154
+ // Device statuses live in the status table under the "device:<key>" status
155
+ // key, carrying the device key in their details.
156
+ const affectedDeviceKeys = (
157
+ event: query.TableEvent<status.Key, status.Status>,
158
+ ): Key[] | null => {
159
+ if (event.variant === "set") {
160
+ const parsed = statusZ.safeParse(event.value);
161
+ return parsed.success ? [parsed.data.details.device] : null;
162
+ }
163
+ const [type, key] = event.key.split(":");
164
+ if (type !== "device" || !primitive.isNonZero(key)) return null;
165
+ return [key];
166
+ };
167
+
168
+ export interface ClientConfig {
169
+ unary: UnaryClient;
170
+ cache: query.Cache;
171
+ statusStore: query.Table<status.Key, status.Status>;
172
+ ontology: ontology.Client;
173
+ }
174
+
175
+ export class Client extends query.Retriever<
176
+ typeof retrieveMultiParamsZ,
177
+ Key,
178
+ Omit<Device, "status">,
179
+ Device,
180
+ RetrieveSingleParams,
181
+ SingleQuery
182
+ > {
183
+ private readonly cfg: ClientConfig;
184
+ private readonly store: query.Table<Key, Omit<Device, "status">>;
97
185
 
98
- constructor(client: UnaryClient) {
99
- this.client = client;
186
+ constructor(cfg: ClientConfig) {
187
+ const { cache, statusStore } = cfg;
188
+ // Explicitly omit 'status' from the device type to make sure we aren't
189
+ // storing two copies of the statuses in the store.
190
+ const store = cache.createTable<Key, Omit<Device, "status">>({
191
+ name: "devices",
192
+ fetch: async (keys) => await this.fetchThrough({ keys }),
193
+ listen: [
194
+ query.createSetListener(SET_CHANNEL_NAME, genericDeviceZ, {
195
+ value: ({ status: _, ...device }) => device,
196
+ }),
197
+ query.createDeleteListener(DELETE_CHANNEL_NAME, keyZ),
198
+ ],
199
+ });
200
+ // Composed rows always carry status; includeStatus only gates fetch flags.
201
+ const composed = cache.derive<Key, Omit<Device, "status">, Device>({
202
+ name: "device.composed",
203
+ source: store,
204
+ compose: (record) => this.compose(record, true),
205
+ watch: [query.deriveWatch(statusStore, (event) => affectedDeviceKeys(event))],
206
+ });
207
+ const single = cache.queries<SingleQuery, Device, Key, Device>({
208
+ name: "device",
209
+ table: composed,
210
+ fetch: async (q) => [(await this.fetchSingle(q)).key],
211
+ // The composed row always carries status; the query gates whether the
212
+ // answer keeps it, mirroring the request space.
213
+ compose: (records, q) =>
214
+ q.includeStatus === true ? records[0] : stripStatus(records[0]),
215
+ keyOf: (q) => q.key,
216
+ single: true,
217
+ });
218
+ super(cache, {
219
+ name: "device",
220
+ table: store,
221
+ request: {
222
+ schema: retrieveMultiParamsZ,
223
+ fetch: async (req) => (await this.fetchThrough(req)).map(stripStatus),
224
+ matches: (d, req) => requestFilter(req)(d),
225
+ serverFields: SERVER_FIELDS,
226
+ watch: [
227
+ query.watch(statusStore, (event, q: RetrieveRequest) => {
228
+ if (q.includeStatus !== true) return null;
229
+ return affectedDeviceKeys(event);
230
+ }),
231
+ ],
232
+ },
233
+ compose: (record, q) =>
234
+ this.compose(record, (q as { includeStatus?: boolean }).includeStatus === true),
235
+ single: { schema: singleQueryZ, space: single },
236
+ });
237
+ this.cfg = cfg;
238
+ this.store = store;
100
239
  }
101
240
 
102
241
  async retrieve<
@@ -104,34 +243,37 @@ export class Client {
104
243
  Make extends z.ZodType<string>,
105
244
  Model extends z.ZodType<string>,
106
245
  >(
107
- args: RetrieveSingleParams & RetrieveSchemas<Properties, Make, Model>,
246
+ params: RetrieveSingleParams & RetrieveSchemas<Properties, Make, Model>,
108
247
  ): Promise<Device<Properties, Make, Model>>;
109
248
 
110
- async retrieve(args: RetrieveSingleParams): Promise<Device>;
249
+ async retrieve(params: Key | RetrieveSingleParams): Promise<Device>;
111
250
 
112
251
  async retrieve<
113
252
  Properties extends z.ZodType<record.Unknown>,
114
253
  Make extends z.ZodType<string>,
115
254
  Model extends z.ZodType<string>,
116
255
  >(
117
- args: RetrieveMultipleParams & RetrieveSchemas<Properties, Make, Model>,
256
+ params: RetrieveMultipleParams & RetrieveSchemas<Properties, Make, Model>,
118
257
  ): Promise<Array<Device<Properties, Make, Model>>>;
119
258
 
120
- async retrieve(args: RetrieveMultipleParams): Promise<Array<Device>>;
259
+ async retrieve(params: RetrieveMultipleParams): Promise<Array<Device>>;
121
260
 
122
261
  async retrieve(
123
- args: RetrieveArgs & { schemas?: DeviceSchemas },
262
+ rawParams: Key | (RetrieveParams & { schemas?: DeviceSchemas }),
124
263
  ): Promise<Device | Array<Device>> {
125
- const { schemas, ...rest } = args;
126
- const isSingle = typeof rest === "object" && "key" in rest;
127
- const res = await this.client.send(
128
- "/device/retrieve",
129
- rest,
130
- retrieveArgsZ,
131
- retrieveResZ(schemas),
132
- );
133
- checkForMultipleOrNoResults("Device", rest, res.devices, isSingle);
134
- return isSingle ? res.devices[0] : res.devices;
264
+ const params = typeof rawParams === "string" ? { key: rawParams } : rawParams;
265
+ const { schemas, ...rest } = params;
266
+ const isSingle = "key" in rest;
267
+ // Schemas are not hashable, so schema-typed retrieves bypass the query
268
+ // cache and hit the network, still writing records through.
269
+ if (schemas != null) {
270
+ const devices = await this.execRetrieve(rest, schemas);
271
+ checkForMultipleOrNoResults("Device", rest, devices, isSingle);
272
+ this.writeThrough(devices);
273
+ return isSingle ? devices[0] : devices;
274
+ }
275
+ if (isSingle) return await super.retrieve(rest);
276
+ return await super.retrieve(rest);
135
277
  }
136
278
 
137
279
  async create(device: New): Promise<Device>;
@@ -145,9 +287,14 @@ export class Client {
145
287
  >(
146
288
  device: New<Properties, Make, Model>,
147
289
  schemas: DeviceSchemas<Properties, Make, Model>,
290
+ opts?: query.WriteOptions,
148
291
  ): Promise<Device<Properties, Make, Model>>;
149
292
 
150
- async create(device: New, schemas?: DeviceSchemas): Promise<Device>;
293
+ async create(
294
+ device: New,
295
+ schemas?: DeviceSchemas,
296
+ opts?: query.WriteOptions,
297
+ ): Promise<Device>;
151
298
 
152
299
  async create<
153
300
  Properties extends z.ZodType<record.Unknown>,
@@ -156,31 +303,136 @@ export class Client {
156
303
  >(
157
304
  devices: New<Properties, Make, Model>[],
158
305
  schemas: DeviceSchemas<Properties, Make, Model>,
306
+ opts?: query.WriteOptions,
159
307
  ): Promise<Device<Properties, Make, Model>[]>;
160
308
 
161
- async create(devices: New[], schemas?: DeviceSchemas): Promise<Device[]>;
309
+ async create(
310
+ devices: New[],
311
+ schemas?: DeviceSchemas,
312
+ opts?: query.WriteOptions,
313
+ ): Promise<Device[]>;
162
314
 
163
315
  async create(
164
316
  devices: New | New[],
165
317
  schemas?: DeviceSchemas,
318
+ opts: query.WriteOptions = {},
166
319
  ): Promise<Device | Device[]> {
167
320
  const isSingle = !Array.isArray(devices);
168
- const res = await this.client.send(
169
- "/device/create",
170
- { devices: array.toArray(devices) },
171
- createReqZ(schemas),
172
- createResZ(schemas),
173
- );
321
+ // Filling the schema defaults up front hands the cache the same records the request
322
+ // carries. It is the schema createReqZ already applies.
323
+ const normalized = array
324
+ .toArray(devices)
325
+ .map((device) => deviceZ(schemas).parse(device) as Device);
326
+ const apply = () => [this.store.set(normalized.map(stripStatus))];
327
+ const res = await query.optimistic({
328
+ rollbacks: apply(),
329
+ onOptimistic: opts.onOptimistic,
330
+ commit: async () =>
331
+ await this.cfg.unary.send(
332
+ "/device/create",
333
+ { devices: normalized },
334
+ createReqZ(schemas),
335
+ createResZ(schemas),
336
+ ),
337
+ });
338
+ this.store.set(res.devices.map(stripStatus));
174
339
  return isSingle ? res.devices[0] : res.devices;
175
340
  }
176
341
 
177
- async delete(keys: Key | Key[]): Promise<void> {
178
- await this.client.send(
179
- "/device/delete",
180
- { keys: array.toArray(keys) },
181
- deleteReqZ,
182
- deleteResZ,
342
+ async delete(keys: Key | Key[], opts: query.WriteOptions = {}): Promise<void> {
343
+ const keysArr = array.toArray(keys);
344
+ const drop = () => [
345
+ this.cfg.ontology.cache.deleteResources(ontologyID(keysArr)),
346
+ this.store.delete(keysArr),
347
+ ];
348
+ await query.optimistic({
349
+ rollbacks: drop(),
350
+ onOptimistic: opts.onOptimistic,
351
+ commit: async () =>
352
+ await this.cfg.unary.send(
353
+ "/device/delete",
354
+ { keys: keysArr },
355
+ deleteReqZ,
356
+ deleteResZ,
357
+ ),
358
+ });
359
+ drop();
360
+ }
361
+
362
+ async rename(key: Key, name: string, opts: query.WriteOptions = {}): Promise<void> {
363
+ const dev = await this.retrieve(key);
364
+ const renamed = { ...dev, name };
365
+ await query.optimistic({
366
+ rollbacks: [this.store.set(renamed.key, stripStatus(renamed))],
367
+ onOptimistic: opts.onOptimistic,
368
+ commit: async () => {
369
+ await this.create(renamed);
370
+ },
371
+ });
372
+ }
373
+
374
+ /** Subscribes to every device set delivered to the cache. Statuses excluded. */
375
+ onSet(handler: (device: Omit<Device, "status">) => void): destructor.Destructor {
376
+ return this.store.subscribe((event) => {
377
+ if (event.variant === "set") handler(event.value);
378
+ });
379
+ }
380
+
381
+ /** Subscribes to every device delete delivered to the cache. */
382
+ onDelete(handler: (key: Key) => void): destructor.Destructor {
383
+ return this.store.subscribe((event) => {
384
+ if (event.variant === "delete") handler(event.key);
385
+ });
386
+ }
387
+
388
+ /** Rebuilds a cached device, attaching its cached status when requested. */
389
+ private compose(cached: Omit<Device, "status">, includeStatus: boolean): Device {
390
+ if (!includeStatus) return cached;
391
+ const st = this.cfg.statusStore.get(statusKey(cached.key));
392
+ if (st == null) return cached;
393
+ const parsed = statusZ.safeParse(st);
394
+ if (!parsed.success) return cached;
395
+ return { ...cached, status: parsed.data };
396
+ }
397
+
398
+ /** Writes fetched devices and their included statuses. */
399
+ private writeThrough(devices: Device[]): void {
400
+ this.store.set(devices.map(stripStatus));
401
+ devices.forEach(({ status: st }) => {
402
+ if (st != null) this.cfg.statusStore.set(st);
403
+ });
404
+ }
405
+
406
+ private async execRetrieve(
407
+ params: RetrieveParams,
408
+ schemas?: DeviceSchemas,
409
+ ): Promise<Device[]> {
410
+ const res = await this.cfg.unary.send(
411
+ "/device/retrieve",
412
+ params,
413
+ retrieveParamsZ,
414
+ retrieveResZ(schemas),
183
415
  );
416
+ return res.devices;
417
+ }
418
+
419
+ /** Fetches devices and writes their included statuses through the caches. */
420
+ private async fetchThrough(req: RetrieveRequest): Promise<Device[]> {
421
+ const devices = await this.execRetrieve(req);
422
+ this.writeThrough(devices);
423
+ return devices;
424
+ }
425
+
426
+ private async fetchSingle(q: SingleQuery): Promise<Device> {
427
+ // A status-bearing hit needs both the record and its status cached.
428
+ if (q.includeStatus !== true) {
429
+ const cached = this.store.get(q.key);
430
+ if (cached != null) return cached;
431
+ }
432
+ const devices = await this.execRetrieve(q);
433
+ checkForMultipleOrNoResults("Device", q, devices, true);
434
+ this.writeThrough(devices);
435
+ return devices[0];
184
436
  }
185
437
  }
186
438
 
@@ -9,16 +9,20 @@
9
9
 
10
10
  // Code generated by Oracle. DO NOT EDIT.
11
11
 
12
- import { type optional, record, status } from "@synnaxlabs/x";
12
+ import { type optional, record } from "@synnaxlabs/x";
13
13
  import { z } from "zod";
14
14
 
15
15
  import { ontology } from "@/ontology";
16
16
  import { rack } from "@/rack";
17
+ import { status } from "@/status";
17
18
 
18
19
  export const keyZ = z.string();
19
20
  export type Key = z.infer<typeof keyZ>;
20
21
 
21
- /** StatusDetails contains device-specific status details identifying the device and its associated rack. */
22
+ /**
23
+ * StatusDetails contains device-specific status details identifying the device and its
24
+ * associated rack.
25
+ */
22
26
  export const statusDetailsZ = z.object({
23
27
  /** rack is the key of the rack this device belongs to. */
24
28
  rack: rack.keyZ,
@@ -47,13 +51,13 @@ export const deviceZ = <
47
51
  >({ properties, make, model }: Partial<DeviceSchemas<Properties, Make, Model>> = {}) =>
48
52
  z.object({
49
53
  key: keyZ,
50
- rack: rack.keyZ,
51
- location: z.string().min(1, "Location is required"),
52
- make: make ?? z.string().min(1, "Make is required"),
53
- model: model ?? z.string().min(1, "Model is required"),
54
- name: z.string().min(1, "Name is required"),
54
+ rack: rack.keyZ.refine((v) => v !== 0, "rack is required"),
55
+ location: z.string().min(1, "location is required"),
56
+ make: make ?? z.string().min(1, "make is required"),
57
+ model: model ?? z.string().min(1, "model is required"),
58
+ name: z.string().min(1, "name is required"),
55
59
  configured: z.boolean().default(false),
56
- properties: properties ?? record.nullishToEmpty(),
60
+ properties: properties ?? record.unknownZ().default(() => ({})),
57
61
  status: statusZ.optional(),
58
62
  parent: ontology.idZ.optional(),
59
63
  });
@@ -73,28 +77,13 @@ export interface Device<
73
77
  status?: Status;
74
78
  parent?: ontology.ID;
75
79
  }
76
-
77
- export interface NewSchemas<
78
- Properties extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
79
- Make extends z.ZodType<string> = z.ZodType<string>,
80
- Model extends z.ZodType<string> = z.ZodType<string>,
81
- > {
82
- properties: Properties;
83
- make: Make;
84
- model: Model;
85
- }
86
-
87
- export const newZ = <
88
- Properties extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
89
- Make extends z.ZodType<string> = z.ZodString,
90
- Model extends z.ZodType<string> = z.ZodString,
91
- >({ properties, make, model }: Partial<NewSchemas<Properties, Make, Model>> = {}) =>
92
- deviceZ({ properties, make, model }).partial({ key: true, configured: true });
93
80
  export type New<
94
81
  Properties extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
95
82
  Make extends z.ZodType<string> = z.ZodString,
96
83
  Model extends z.ZodType<string> = z.ZodString,
97
- > = optional.Optional<Device<Properties, Make, Model>, "key" | "configured">;
84
+ > = optional.Optional<Omit<Device<Properties, Make, Model>, "status">, "configured"> & {
85
+ status?: status.New<typeof statusDetailsZ>;
86
+ };
98
87
 
99
88
  export const ontologyID = ontology.createIDFactory<Key>("device");
100
89
  export const TYPE_ONTOLOGY_ID = ontologyID("");
package/src/errors.ts CHANGED
@@ -13,9 +13,7 @@ import { z } from "zod";
13
13
 
14
14
  export class SynnaxError extends errors.createTyped("sy") {}
15
15
 
16
- /**
17
- * Raised when a validation error occurs.
18
- */
16
+ /** Raised when a validation error occurs. */
19
17
  export class ValidationError extends SynnaxError.sub("validation") {}
20
18
 
21
19
  export class PathError extends ValidationError.sub("path") {
@@ -37,25 +35,39 @@ export class PathError extends ValidationError.sub("path") {
37
35
  const decoded = PathError.encodedSchema.parse(JSON.parse(payload.data));
38
36
  return new PathError(decoded.path, errors.decode(decoded.error) as Error);
39
37
  }
38
+
39
+ static matchExact(e: unknown): e is PathError {
40
+ return (
41
+ e != null &&
42
+ typeof e === "object" &&
43
+ "path" in e &&
44
+ "error" in e &&
45
+ "type" in e &&
46
+ typeof e.type === "string" &&
47
+ e.type === PathError.TYPE
48
+ );
49
+ }
40
50
  }
41
51
 
42
- /**
43
- * AuthError is raised when an authentication error occurs.
44
- */
52
+ /** AuthError is raised when an authentication error occurs. */
45
53
  export class AuthError extends SynnaxError.sub("auth") {}
46
54
 
47
- /**
48
- * InvalidTokenError is raised when an authentication token is invalid.
49
- */
55
+ /** InvalidTokenError is raised when an authentication token is invalid. */
50
56
  export class InvalidTokenError extends AuthError.sub("invalid_token") {}
51
57
 
52
58
  export class ExpiredTokenError extends AuthError.sub("expired_token") {}
53
59
 
54
- export class AccessDeniedError extends AuthError.sub("access_denied") {}
60
+ /** Raised when the caller's policies do not permit the action. */
61
+ export class AccessDeniedError extends AuthError.sub("access_denied") {
62
+ toStatus() {
63
+ return {
64
+ message: "You do not have permission to do that",
65
+ description: this.message,
66
+ };
67
+ }
68
+ }
55
69
 
56
- /**
57
- * UnexpectedError is raised when an unexpected error occurs.
58
- */
70
+ /** UnexpectedError is raised when an unexpected error occurs. */
59
71
  export class UnexpectedError extends SynnaxError.sub("unexpected") {
60
72
  constructor(message: string) {
61
73
  super(`
@@ -68,18 +80,14 @@ export class UnexpectedError extends SynnaxError.sub("unexpected") {
68
80
  }
69
81
  }
70
82
 
71
- /**
72
- * QueryError is raised when a query error occurs.
73
- */
83
+ /** QueryError is raised when a query error occurs. */
74
84
  export class QueryError extends SynnaxError.sub("query") {}
75
85
 
76
86
  export class NotFoundError extends QueryError.sub("not_found") {}
77
87
 
78
88
  export class MultipleFoundError extends QueryError.sub("multiple_results") {}
79
89
 
80
- /**
81
- * RouteError is raised when a routing error occurs.
82
- */
90
+ /** RouteError is raised when a routing error occurs. */
83
91
  export class RouteError extends SynnaxError.sub("route") {
84
92
  path: string;
85
93
 
@@ -100,8 +108,13 @@ export class DisconnectedError extends SynnaxError.sub("disconnected") {
100
108
  }
101
109
 
102
110
  /**
103
- * Raised when time-series data is not contiguous.
111
+ * Whether the error means the Core could not be reached: a request that failed on
112
+ * the wire, or one short-circuited while the connection is known unreachable.
104
113
  */
114
+ export const isConnectionError = (err: unknown): boolean =>
115
+ Unreachable.matches(err) || DisconnectedError.matches(err);
116
+
117
+ /** Raised when time-series data is not contiguous. */
105
118
  export class ContiguityError extends SynnaxError.sub("contiguity") {}
106
119
 
107
120
  const decode = (payload: errors.Payload): Error | null => {
@@ -116,6 +129,8 @@ const decode = (payload: errors.Payload): Error | null => {
116
129
  return new InvalidTokenError(payload.data);
117
130
  if (payload.type.startsWith(ExpiredTokenError.TYPE))
118
131
  return new ExpiredTokenError(payload.data);
132
+ if (payload.type.startsWith(AccessDeniedError.TYPE))
133
+ return new AccessDeniedError(payload.data);
119
134
  return new AuthError(payload.data);
120
135
  }
121
136
 
@@ -142,8 +157,16 @@ const decode = (payload: errors.Payload): Error | null => {
142
157
  return new UnexpectedError(payload.data);
143
158
  };
144
159
 
145
- const encode = (): errors.Payload => {
146
- throw new errors.NotImplemented();
160
+ const encode: errors.Encoder = (error) => {
161
+ if (!error.type.startsWith(SynnaxError.TYPE)) return null;
162
+ if (PathError.matchExact(error)) {
163
+ const { path, error: cause } = error;
164
+ return {
165
+ type: PathError.TYPE,
166
+ data: JSON.stringify({ path, error: errors.encode(cause) }),
167
+ };
168
+ }
169
+ return { type: error.type, data: error.message };
147
170
  };
148
171
 
149
172
  errors.register({ encode, decode });
@@ -7,5 +7,4 @@
7
7
  // License, use of this software will be governed by the Apache License, Version 2.0,
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
- export * from "@/workspace/client";
11
- export * from "@/workspace/types.gen";
10
+ export * from "@/ethercat/types.gen";
@@ -7,4 +7,4 @@
7
7
  // License, use of this software will be governed by the Apache License, Version 2.0,
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
- export * as workspace from "@/workspace/external";
10
+ export * as ethercat from "@/ethercat/external";