@synnaxlabs/client 0.56.2 → 0.57.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (741) hide show
  1. package/dist/client-DDACDVZ-.js +14505 -0
  2. package/dist/client-DDACDVZ-.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 +91 -0
  99. package/dist/src/framer/cache/dynamic.d.ts.map +1 -0
  100. package/dist/src/framer/cache/reader.d.ts +57 -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 +39 -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 +39 -16
  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 +340 -0
  398. package/src/framer/cache/reader.ts +231 -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 +108 -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 +19 -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
@@ -9,6 +9,5 @@
9
9
 
10
10
  export * from "@/channel/client";
11
11
  export * from "@/channel/payload";
12
- export * from "@/channel/retriever";
13
12
  export * from "@/channel/types.gen";
14
13
  export * from "@/channel/writer";
@@ -19,21 +19,32 @@ import {
19
19
  type Payload,
20
20
  payloadZ,
21
21
  } from "@/channel/types.gen";
22
- import { ontology } from "@/ontology";
22
+ import { idToString } from "@/ontology/payload";
23
+ import {
24
+ analyzeParams as baseAnalyzeParams,
25
+ type ParamAnalysisResult,
26
+ } from "@/util/retrieve";
23
27
 
28
+ /** One or many channels, named by key or by name. */
24
29
  export type PrimitiveParams = Key | Name | Key[] | Name[];
25
30
 
31
+ /** Zod schema for {@link Params}, resolving every form to a key array. */
26
32
  export const paramsZ = z.union([
27
33
  zod.toArray(keyZ),
28
34
  zod.toArray(nameZ),
29
35
  zod.toArray(payloadZ).transform((p) => p.map((c) => c.key)),
30
36
  ]);
37
+ /** Anything that names one or many channels. */
31
38
  export type Params = PrimitiveParams | Payload | Payload[];
32
39
 
33
40
  const CHAR_REGEX = /[a-zA-Z0-9_]/;
34
41
 
35
42
  const VALID_NAME_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
36
43
 
44
+ /**
45
+ * Rewrites a channel name into a valid identifier, replacing every other character with
46
+ * an underscore and prefixing a leading digit.
47
+ */
37
48
  export const escapeInvalidName = (name: string, changeEmptyToUnderscore = false) => {
38
49
  if (name === "") return changeEmptyToUnderscore ? "_" : "";
39
50
  if (name.match(VALID_NAME_PATTERN)) return name;
@@ -47,5 +58,21 @@ export const escapeInvalidName = (name: string, changeEmptyToUnderscore = false)
47
58
  return result;
48
59
  };
49
60
 
50
- export const statusKey = (channel: Key): string =>
51
- ontology.idToString(ontologyID(channel));
61
+ /** @returns the key of the status that reports on the given channel. */
62
+ export const statusKey = (channel: Key): string => idToString(ontologyID(channel));
63
+
64
+ /**
65
+ * Resolves channel params into a normalized array, reporting whether the caller named
66
+ * one channel or many, and whether by key or by name.
67
+ */
68
+ export const analyzeParams = (
69
+ channels: Params,
70
+ ): ParamAnalysisResult<Key | Name, { number: "keys"; string: "names" }> => {
71
+ if (Array.isArray(channels) && channels.length > 0 && typeof channels[0] === "object")
72
+ channels = (channels as Payload[]).map((c) => c.key);
73
+ else if (typeof channels === "object" && "key" in channels) channels = [channels.key];
74
+ return baseAnalyzeParams(channels as PrimitiveParams, {
75
+ number: "keys",
76
+ string: "names",
77
+ });
78
+ };
@@ -9,11 +9,12 @@
9
9
 
10
10
  // Code generated by Oracle. DO NOT EDIT.
11
11
 
12
- import { control, status, telem, TimeSpan, zod } from "@synnaxlabs/x";
12
+ import { control, telem, TimeSpan, zod } from "@synnaxlabs/x";
13
13
  import { z } from "zod";
14
14
 
15
- import { cluster } from "@/cluster";
15
+ import { node } from "@/node";
16
16
  import { ontology } from "@/ontology";
17
+ import { status } from "@/status";
17
18
 
18
19
  export const keyZ = z.uint32().or(
19
20
  z
@@ -32,18 +33,21 @@ export type OperationType = z.infer<typeof operationTypeZ>;
32
33
 
33
34
  /**
34
35
  * Operation defines an aggregation operation applied to channel data. Operations
35
- * calculate min, max, or average values over a time duration or triggered
36
+ * calculate min, max, average, or derivative values over a time duration or triggered
36
37
  * by a reset channel.
37
38
  */
38
39
  export const operationZ = z.object({
39
- /** type is the aggregation operation type: min, max, avg, or none. */
40
+ /** type is the aggregation operation type: min, max, avg, derivative, or none. */
40
41
  type: operationTypeZ,
41
42
  /**
42
- * resetChannel is the channel key that triggers reset of the aggregation. If 0,
43
- * duration-based reset is used.
43
+ * resetChannel is the key of a channel that resets the aggregation when it receives a
44
+ * sample. If 0, no reset channel is used.
44
45
  */
45
46
  resetChannel: keyZ.default(0),
46
- /** duration is the time window for aggregation when reset_channel is 0. */
47
+ /**
48
+ * duration is the interval at which the aggregation resets. If 0, the aggregation is
49
+ * not reset on a timer.
50
+ */
47
51
  duration: telem.timeSpanZ.default(TimeSpan.ZERO),
48
52
  });
49
53
  export interface Operation extends z.infer<typeof operationZ> {}
@@ -55,82 +59,67 @@ export const statusZ = status.statusZ();
55
59
  export type Status = z.infer<typeof statusZ>;
56
60
 
57
61
  /**
58
- * Payload is a logical collection of samples emitted by or representing values
59
- * from a single source. Channels are the fundamental unit of telemetry
60
- * storage and streaming in Synnax.
62
+ * Payload is a logical collection of samples emitted by or representing values from a
63
+ * single source. Channels are the fundamental unit of telemetry storage and streaming
64
+ * in Synnax.
61
65
  */
62
66
  export const payloadZ = z.object({
63
67
  /**
64
- * key is the unique identifier for this channel, automatically assigned
65
- * by Synnax.
68
+ * key is the unique identifier for this channel, automatically assigned by Synnax.
66
69
  */
67
- key: keyZ,
70
+ key: keyZ.default(0),
68
71
  /** name is the human-readable channel name. */
69
72
  name: nameZ,
70
73
  /**
71
- * leaseholder is the cluster node that holds the lease for this channel. Mostly
72
- * for internal use.
74
+ * leaseholder is the node that holds the lease for this channel. Mostly for internal
75
+ * use.
73
76
  */
74
- leaseholder: cluster.nodeKeyZ,
77
+ leaseholder: node.keyZ.default(0),
75
78
  /**
76
- * dataType is the data type of samples stored in this channel (e.g., Float64,
77
- * Int32, TimeStamp).
79
+ * dataType is the data type of samples stored in this channel (e.g., float64, int32,
80
+ * timestamp).
78
81
  */
79
82
  dataType: telem.dataTypeZ,
80
83
  /**
81
- * isIndex is true if this is an index channel. Index channels must have int64
82
- * values (TIMESTAMP data type) written in ascending order, and are
83
- * most commonly unix nanosecond timestamps.
84
+ * isIndex is true if this is an index channel. Index channels must have int64 values
85
+ * (TIMESTAMP data type) written in ascending order, and are most commonly Unix
86
+ * nanosecond timestamps.
84
87
  */
85
- isIndex: z.boolean(),
88
+ isIndex: z.boolean().default(false),
86
89
  /**
87
- * index is the channel used to index this channel's values, associating
88
- * each value with a timestamp.
90
+ * index is the channel used to index this channel's values, associating each value
91
+ * with a timestamp.
89
92
  */
90
- index: keyZ,
93
+ index: keyZ.default(0),
91
94
  /** alias is an optional alternate name for the channel within a specific context. */
92
95
  alias: z.string().optional(),
93
96
  /**
94
- * virtual is true if this channel does not store data in the database but can
95
- * still be used for streaming purposes.
97
+ * virtual is true if this channel does not store data in the database but can still
98
+ * be used for streaming purposes.
96
99
  */
97
100
  virtual: z.boolean().default(false),
98
101
  /** internal is true if this is a system channel hidden from normal user queries. */
99
102
  internal: z.boolean().default(false),
100
103
  /**
101
- * expression is an Arc expression for calculated channels. If set, the channel
102
- * is automatically configured as virtual.
104
+ * expression is an Arc expression for calculated channels. If set, the channel is
105
+ * automatically configured as virtual.
103
106
  */
104
107
  expression: z.string().default(""),
105
108
  /**
106
- * operations contains optional aggregation operations (min, max, avg) applied to
107
- * channel data over time or triggered by a reset channel.
109
+ * operations contains optional aggregation operations (min, max, avg, derivative)
110
+ * applied to channel data over time or triggered by a reset channel.
108
111
  */
109
- operations: zod.nullToUndefined(operationZ.array()),
112
+ operations: operationZ.array().default(() => []),
110
113
  /**
111
114
  * concurrency sets the policy for concurrent writes to the channel's data. Only
112
115
  * virtual channels can have a policy of shared concurrency.
113
116
  */
114
- concurrency: control.concurrencyZ.default(control.Concurrency.exclusive).optional(),
117
+ concurrency: control.concurrencyZ.default(control.Concurrency.exclusive),
115
118
  /** status is the current operational status of the channel. */
116
119
  status: statusZ.optional(),
117
120
  });
118
121
  export interface Payload extends z.infer<typeof payloadZ> {}
119
-
120
- export const newZ = payloadZ
121
- .omit({ leaseholder: true })
122
- .partial({
123
- key: true,
124
- index: true,
125
- isIndex: true,
126
- internal: true,
127
- virtual: true,
128
- expression: true,
129
- })
130
- .extend({
131
- leaseholder: zod.uint12.optional(),
132
- });
133
- export interface New extends z.input<typeof newZ> {}
122
+ export interface New extends z.input<typeof payloadZ> {}
134
123
 
135
124
  export const ontologyID = ontology.createIDFactory<Key>("channel");
136
125
  export const TYPE_ONTOLOGY_ID = ontologyID(0);
@@ -11,18 +11,16 @@ import { type UnaryClient } from "@synnaxlabs/freighter";
11
11
  import { type DataType } from "@synnaxlabs/x";
12
12
  import { z } from "zod";
13
13
 
14
- import { type CacheRetriever } from "@/channel/retriever";
15
14
  import {
16
15
  type Key,
17
16
  keyZ,
18
17
  nameZ,
19
18
  type New,
20
- newZ,
21
19
  type Payload,
22
20
  payloadZ,
23
21
  } from "@/channel/types.gen";
24
22
 
25
- const createReqZ = z.object({ channels: newZ.array() });
23
+ const createReqZ = z.object({ channels: payloadZ.array() });
26
24
  const createResZ = z.object({ channels: payloadZ.array() });
27
25
 
28
26
  const deleteReqZ = z.object({
@@ -39,11 +37,9 @@ export interface RenameProps extends z.input<typeof renameReqZ> {}
39
37
 
40
38
  export class Writer {
41
39
  private readonly client: UnaryClient;
42
- private readonly cache: CacheRetriever;
43
40
 
44
- constructor(client: UnaryClient, cache: CacheRetriever) {
41
+ constructor(client: UnaryClient) {
45
42
  this.client = client;
46
- this.cache = cache;
47
43
  }
48
44
 
49
45
  async create(channels: New[]): Promise<Payload[]> {
@@ -58,19 +54,14 @@ export class Writer {
58
54
  createReqZ,
59
55
  createResZ,
60
56
  );
61
- this.cache.set(created);
62
57
  return created;
63
58
  }
64
59
 
65
60
  async delete(props: DeleteProps): Promise<void> {
66
- const keys = keyZ.array().parse(props.keys ?? []);
67
61
  await this.client.send("/channel/delete", props, deleteReqZ, deleteResZ);
68
- if (keys.length > 0) this.cache.delete(keys);
69
- if (props.names != null) this.cache.delete(props.names);
70
62
  }
71
63
 
72
64
  async rename(keys: Key[], names: string[]): Promise<void> {
73
65
  await this.client.send("/channel/rename", { keys, names }, renameReqZ, renameResZ);
74
- this.cache.rename(keys, names);
75
66
  }
76
67
  }
package/src/client.ts CHANGED
@@ -7,7 +7,16 @@
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
- import { breaker, TimeSpan, TimeStamp, URL, zod } from "@synnaxlabs/x";
10
+ import {
11
+ array,
12
+ breaker,
13
+ type CrudeTimeSpan,
14
+ TimeSpan,
15
+ TimeStamp,
16
+ url,
17
+ uuid,
18
+ zod,
19
+ } from "@synnaxlabs/x";
11
20
  import { z } from "zod";
12
21
 
13
22
  import { access } from "@/access";
@@ -20,14 +29,16 @@ import { device } from "@/device";
20
29
  import { errorsMiddleware } from "@/errors";
21
30
  import { framer } from "@/framer";
22
31
  import { group } from "@/group";
32
+ import { imex } from "@/imex";
23
33
  import { label } from "@/label";
24
34
  import { lineplot } from "@/lineplot";
25
35
  import { log } from "@/log";
26
36
  import { ontology } from "@/ontology";
37
+ import { panel } from "@/panel";
38
+ import { project } from "@/project";
39
+ import { query } from "@/query";
27
40
  import { rack } from "@/rack";
28
41
  import { ranger } from "@/ranger";
29
- import { alias } from "@/ranger/alias";
30
- import { kv } from "@/ranger/kv";
31
42
  import { schematic } from "@/schematic";
32
43
  import { status } from "@/status";
33
44
  import { table } from "@/table";
@@ -35,7 +46,6 @@ import { task } from "@/task";
35
46
  import { Transport } from "@/transport";
36
47
  import { user } from "@/user";
37
48
  import { view } from "@/view";
38
- import { workspace } from "@/workspace";
39
49
 
40
50
  export const synnaxParamsZ = z.object({
41
51
  host: z.string({ error: "Host is required" }).min(1, "Host is required"),
@@ -49,6 +59,16 @@ export const synnaxParamsZ = z.object({
49
59
  secure: z.boolean().default(false),
50
60
  name: z.string().optional(),
51
61
  retry: breaker.breakerConfigZ.optional(),
62
+ cache: z.boolean().default(true),
63
+ /**
64
+ * Receives cache errors that have no caller to throw to (listener fan-out, streamer
65
+ * frame handling, background reconciliation). Defaults to console logging.
66
+ */
67
+ // output is unknown, not void: strict void validation would make a
68
+ // caller's `(e) => list.push(e)` throw at error-report time
69
+ onInternalError: z
70
+ .function({ input: z.tuple([z.instanceof(Error)]), output: z.unknown() })
71
+ .optional(),
52
72
  });
53
73
 
54
74
  export interface SynnaxParams extends z.input<typeof synnaxParamsZ> {}
@@ -56,13 +76,13 @@ export interface ParsedSynnaxParams extends z.infer<typeof synnaxParamsZ> {}
56
76
 
57
77
  /**
58
78
  * Client to perform operations against a Synnax cluster.
59
- *
60
79
  * @property channel - Channel client for creating and retrieving channels.
61
80
  * @property data - Data client for reading and writing telemetry.
62
- * @property connectivity - Client for retrieving connectivity information.
81
+ * @property connection - The connection state machine.
63
82
  * @property ontology - Client for querying the cluster's ontology.
64
83
  */
65
84
  export default class Synnax extends framer.Client {
85
+ readonly key: string;
66
86
  readonly createdAt: TimeStamp;
67
87
  readonly params: ParsedSynnaxParams;
68
88
  readonly ranges: ranger.Client;
@@ -70,9 +90,9 @@ export default class Synnax extends framer.Client {
70
90
  readonly auth: auth.Client;
71
91
  readonly users: user.Client;
72
92
  readonly access: access.Client;
73
- readonly connectivity: connection.Checker;
93
+ readonly connection: connection.Handle;
74
94
  readonly ontology: ontology.Client;
75
- readonly workspaces: workspace.Client;
95
+ readonly projects: project.Client;
76
96
  readonly labels: label.Client;
77
97
  readonly statuses: status.Client;
78
98
  readonly tasks: task.Client;
@@ -83,31 +103,31 @@ export default class Synnax extends framer.Client {
83
103
  readonly views: view.Client;
84
104
  readonly schematics: schematic.Client;
85
105
  readonly lineplots: lineplot.Client;
106
+ readonly panels: panel.Client;
86
107
  readonly logs: log.Client;
87
108
  readonly tables: table.Client;
88
109
  readonly groups: group.Client;
89
- static readonly connectivity = connection.Checker;
110
+ readonly imex: imex.Client;
111
+ private readonly cache: query.Cache;
90
112
  private readonly transport: Transport;
113
+ private readonly conn: connection.Client;
91
114
 
92
- /**
93
- * The version of the client.
94
- */
115
+ /** The version of the client. */
95
116
  readonly clientVersion: string = __VERSION__;
96
117
 
97
118
  /**
98
119
  * @param props.host - Hostname of a node in the cluster.
99
120
  * @param props.port - Port of the node in the cluster.
100
- * @param props.username - Username for authentication. Not required if the
101
- * cluster is insecure.
102
- * @param props.password - Password for authentication. Not required if the
103
- * cluster is insecure.
104
- * @param props.connectivityPollFrequency - Frequency at which to poll the
105
- * cluster for connectivity information. Defaults to 30 seconds.
106
- * @param props.secure - Whether to connect to the cluster using TLS. The cluster
107
- * must be configured to support TLS. Defaults to false.
108
- *
109
- * A Synnax client must be closed when it is no longer needed. This will stop
110
- * the client from polling the cluster for connectivity information.
121
+ * @param props.username - Username for authentication. Not required if the cluster is
122
+ * insecure.
123
+ * @param props.password - Password for authentication. Not required if the cluster is
124
+ * insecure.
125
+ * @param props.connectivityPollFrequency - Heartbeat cadence while the connection is
126
+ * healthy. Defaults to 30 seconds.
127
+ * @param props.secure - Whether to connect to the cluster using TLS. The cluster must
128
+ * be configured to support TLS. Defaults to false. A Synnax client must be closed
129
+ * when it is no longer needed. This stops the connection machine and closes the
130
+ * change stream.
111
131
  */
112
132
  constructor(params: SynnaxParams) {
113
133
  const parsedParams = zod.parse(synnaxParamsZ, params);
@@ -119,88 +139,192 @@ export default class Synnax extends framer.Client {
119
139
  connectivityPollFrequency,
120
140
  clockSkewThreshold,
121
141
  secure,
122
- retry: breaker,
142
+ retry,
123
143
  } = parsedParams;
124
144
  const transport = new Transport(
125
- new URL({ host, port: Number(port) }),
126
- breaker,
145
+ new url.URL({ host, port: Number(port) }),
146
+ retry,
127
147
  secure,
128
148
  );
129
149
  transport.use(errorsMiddleware);
130
- const chRetriever = new channel.CacheRetriever(
131
- new channel.ClusterRetriever(transport.unary),
150
+ // The arrow reads this.channels only when called, after construction completes.
151
+ const retrieveChannels: framer.ChannelRetriever = async (toRetrieve) => {
152
+ const result = await this.channels.retrieve(
153
+ array.toArray(toRetrieve) as channel.Key[] | channel.Name[],
154
+ );
155
+ return result.map((ch) => ch.payload);
156
+ };
157
+ super({ stream: transport.stream, unary: transport.unary, retrieveChannels });
158
+ const cache = new query.Cache({
159
+ openStreamer: parsedParams.cache
160
+ ? async (config) => await this.openStreamer(config)
161
+ : null,
162
+ breaker: retry,
163
+ onStreamLive: () => this.conn.notify({ type: "stream.live" }),
164
+ onStreamDrop: (error) => this.conn.notify({ type: "stream.drop", error }),
165
+ onStreamDenied: (error) => this.conn.notify({ type: "stream.denied", error }),
166
+ onError: parsedParams.onInternalError,
167
+ });
168
+ this.cache = cache;
169
+ this.conn = new connection.Client({
170
+ unary: transport.unaryNoRetry,
171
+ address: `${host}:${Number(port)}`,
172
+ name: parsedParams.name,
173
+ clockSkewThreshold: new TimeSpan(clockSkewThreshold).abs(),
174
+ requiresStream: parsedParams.cache,
175
+ retry,
176
+ heartbeatInterval: connectivityPollFrequency,
177
+ stream: {
178
+ reset: async () => await cache.reset(),
179
+ ensure: async () => await cache.ensureStreaming(),
180
+ },
181
+ onInternalError: parsedParams.onInternalError,
182
+ });
183
+ this.connection = this.conn;
184
+ cache.onEpoch((epoch) => this.conn.notify({ type: "epoch.advanced", epoch }));
185
+ transport.unary.use(this.conn.middleware());
186
+ // The auth client fails fast: login retries belong to the request that triggered
187
+ // them (the breaker-wrapped unary or the check loop), never stacked beneath it.
188
+ this.auth = new auth.Client(
189
+ transport.unaryNoRetry,
190
+ { username, password },
191
+ {
192
+ onSuccess: () => this.conn.notify({ type: "auth.success" }),
193
+ onFailure: (error) => this.conn.notify({ type: "auth.failure", error }),
194
+ },
132
195
  );
133
- super(transport.stream, transport.unary, chRetriever);
134
- this.auth = new auth.Client(transport.unary, { username, password });
135
196
  transport.use(this.auth.middleware());
136
- const chCreator = new channel.Writer(transport.unary, chRetriever);
197
+ const chCreator = new channel.Writer(transport.unary);
198
+ this.key = uuid.create();
137
199
  this.createdAt = TimeStamp.now();
138
200
  this.params = parsedParams;
139
201
  this.transport = transport;
140
- this.channels = new channel.Client(this, chRetriever, transport.unary, chCreator);
141
- this.connectivity = new connection.Checker(
142
- transport.unary,
143
- connectivityPollFrequency,
144
- this.clientVersion,
145
- parsedParams.name,
146
- clockSkewThreshold,
147
- );
148
- this.control = new control.Client(this);
149
- this.ontology = new ontology.Client(this.transport.unary);
150
- const rangeWriter = new ranger.Writer(this.transport.unary);
151
- this.labels = new label.Client(this.transport.unary);
152
- this.statuses = new status.Client(this.transport.unary);
153
- this.ranges = new ranger.Client(
154
- this,
155
- rangeWriter,
156
- this.transport.unary,
157
- chRetriever,
158
- this.labels,
159
- this.ontology,
160
- (key: ranger.Key) => new alias.Client(key, this.transport.unary),
161
- (key: ranger.Key) => new kv.Client(key, this.transport.unary),
162
- );
163
- this.access = new access.Client(this.transport.unary);
164
- this.users = new user.Client(this.transport.unary);
165
- this.workspaces = new workspace.Client(this.transport.unary);
166
- this.tasks = new task.Client(
167
- this.transport.unary,
168
- this,
169
- this.ontology,
170
- this.ranges,
171
- );
172
- this.racks = new rack.Client(this.transport.unary, this.tasks);
173
- this.devices = new device.Client(this.transport.unary);
174
- this.arcs = new arc.Client(this.transport.unary, this.transport.stream);
175
- this.views = new view.Client(this.transport.unary);
176
- this.schematics = new schematic.Client(this.transport.unary);
177
- this.lineplots = new lineplot.Client(this.transport.unary);
178
- this.logs = new log.Client(this.transport.unary);
179
- this.tables = new table.Client(this.transport.unary);
180
- this.groups = new group.Client(this.transport.unary);
202
+ const unary = this.transport.unary;
203
+ this.ontology = new ontology.Client({ unary, cache });
204
+ this.labels = new label.Client({ unary, cache, ontology: this.ontology });
205
+ this.statuses = new status.Client({
206
+ unary,
207
+ cache,
208
+ ontology: this.ontology,
209
+ labels: this.labels,
210
+ });
211
+ this.ranges = new ranger.Client({
212
+ framer: this,
213
+ unary,
214
+ channels: retrieveChannels,
215
+ labels: this.labels,
216
+ ontology: this.ontology,
217
+ cache,
218
+ });
219
+ this.channels = new channel.Client({
220
+ framer: this,
221
+ unary,
222
+ writer: chCreator,
223
+ statuses: this.statuses,
224
+ ranges: this.ranges,
225
+ cache,
226
+ ontology: this.ontology,
227
+ });
228
+ this.control = new control.Client({ unary, cache });
229
+ this.access = new access.Client({ unary, cache, ontology: this.ontology });
230
+ this.users = new user.Client({ unary, cache, ontology: this.ontology });
231
+ this.projects = new project.Client({
232
+ unary,
233
+ file: this.transport.file,
234
+ cache,
235
+ ontology: this.ontology,
236
+ });
237
+ this.tasks = new task.Client({
238
+ unary,
239
+ framer: this,
240
+ ontology: this.ontology,
241
+ ranges: this.ranges,
242
+ cache,
243
+ statusStore: this.statuses.store,
244
+ });
245
+ this.racks = new rack.Client({
246
+ unary,
247
+ tasks: this.tasks,
248
+ cache,
249
+ statusStore: this.statuses.store,
250
+ ontology: this.ontology,
251
+ });
252
+ this.devices = new device.Client({
253
+ unary,
254
+ cache,
255
+ statusStore: this.statuses.store,
256
+ ontology: this.ontology,
257
+ });
258
+ this.arcs = new arc.Client({
259
+ unary,
260
+ stream: this.transport.stream,
261
+ ontology: this.ontology,
262
+ tasks: this.tasks,
263
+ cache,
264
+ statusStore: this.statuses.store,
265
+ });
266
+ this.views = new view.Client({ unary, cache, ontology: this.ontology });
267
+ this.groups = new group.Client({
268
+ unary,
269
+ ontology: this.ontology,
270
+ cache,
271
+ });
272
+ this.schematics = new schematic.Client({
273
+ unary,
274
+ file: this.transport.file,
275
+ ontology: this.ontology,
276
+ cache,
277
+ groupStore: this.groups.store,
278
+ });
279
+ this.lineplots = new lineplot.Client({ unary, cache, ontology: this.ontology });
280
+ this.panels = new panel.Client({
281
+ unary,
282
+ ontology: this.ontology,
283
+ cache,
284
+ });
285
+ this.logs = new log.Client({ unary, cache, ontology: this.ontology });
286
+ this.tables = new table.Client({ unary, cache, ontology: this.ontology });
287
+ this.imex = new imex.Client({ file: this.transport.file });
288
+ }
289
+
290
+ /**
291
+ * Awaits the connection becoming usable: success, or warning when the cluster refuses
292
+ * live updates. Idempotent: resolves immediately when already connected.
293
+ * @throws {AuthError} on a definitive credential rejection.
294
+ * @throws {DisconnectedError} when the cluster cannot be reached after the configured
295
+ * retry budget, or when the client is closed while waiting.
296
+ * @throws {Error} if the timeout elapses first.
297
+ */
298
+ async connect({ timeout }: ConnectOptions = {}): Promise<connection.Status> {
299
+ return await this.conn.connect(timeout);
181
300
  }
182
301
 
183
- get key(): string {
184
- return this.createdAt.valueOf().toString();
302
+ /** Supplies new credentials after an auth failure and resumes connecting. */
303
+ reauthenticate(credentials: auth.Credentials): void {
304
+ this.auth.setCredentials(credentials);
305
+ this.conn.notify({ type: "credentials.replaced" });
185
306
  }
186
307
 
187
- close(): void {
188
- this.connectivity.stop();
308
+ /**
309
+ * Closes the client, stopping the connection check loop and tearing down the
310
+ * query cache and its change stream. Resolves once both are closed.
311
+ * @throws {AggregateError} carrying every underlying close failure.
312
+ */
313
+ async close(): Promise<void> {
314
+ const results = await Promise.allSettled([this.conn.close(), this.cache.close()]);
315
+ const failures = results.filter((r) => r.status === "rejected");
316
+ if (failures.length > 0)
317
+ throw new AggregateError(
318
+ failures.map((f) => f.reason),
319
+ "failed to close the client",
320
+ );
189
321
  }
190
322
  }
191
323
 
192
- export interface CheckConnectionParams extends Pick<
193
- SynnaxParams,
194
- "host" | "port" | "secure" | "retry" | "name"
195
- > {}
196
-
197
- export const checkConnection = async (params: CheckConnectionParams) =>
198
- await newConnectionChecker(params).check();
199
-
200
- export const newConnectionChecker = (params: CheckConnectionParams) => {
201
- const { host, port, secure, name, retry } = params;
202
- const retryConfig = zod.parse(breaker.breakerConfigZ.optional(), retry);
203
- const url = new URL({ host, port: Number(port) });
204
- const transport = new Transport(url, retryConfig, secure);
205
- return new connection.Checker(transport.unary, undefined, __VERSION__, name);
206
- };
324
+ export interface ConnectOptions {
325
+ /**
326
+ * Maximum time to wait before rejecting. Without it, connect rejects when
327
+ * the connection escalates to error(unreachable) after its retry budget.
328
+ */
329
+ timeout?: CrudeTimeSpan;
330
+ }