@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
@@ -3,8 +3,8 @@ import { ontology } from '../ontology';
3
3
  export declare const keyZ: z.ZodUUID;
4
4
  export type Key = z.infer<typeof keyZ>;
5
5
  /**
6
- * User is an account entity representing a person accessing the Synnax system.
7
- * Users can have roles assigned for permission management.
6
+ * User is an account entity representing a person accessing the Synnax system. Users
7
+ * can have roles assigned for permission management.
8
8
  */
9
9
  export declare const userZ: z.ZodObject<{
10
10
  key: z.ZodUUID;
@@ -26,10 +26,10 @@ export interface New extends z.input<typeof newZ> {
26
26
  }
27
27
  export declare const ontologyID: ontology.CreateID<string>;
28
28
  export declare const TYPE_ONTOLOGY_ID: {
29
- type: "arc" | "builtin" | "channel" | "device" | "framer" | "group" | "label" | "lineplot" | "log" | "node" | "policy" | "rack" | "range" | "range-alias" | "role" | "schematic" | "schematic_symbol" | "status" | "table" | "task" | "user" | "view" | "workspace";
29
+ type: "arc" | "builtin" | "channel" | "device" | "framer" | "group" | "label" | "lineplot" | "log" | "node" | "panel" | "policy" | "project" | "rack" | "range" | "range-alias" | "role" | "schematic" | "schematic_symbol" | "status" | "table" | "task" | "user" | "view";
30
30
  key: string;
31
31
  } | {
32
- type: "arc" | "builtin" | "channel" | "device" | "framer" | "group" | "label" | "lineplot" | "log" | "node" | "policy" | "rack" | "range" | "range-alias" | "role" | "schematic" | "schematic_symbol" | "status" | "table" | "task" | "user" | "view" | "workspace";
32
+ type: "arc" | "builtin" | "channel" | "device" | "framer" | "group" | "label" | "lineplot" | "log" | "node" | "panel" | "policy" | "project" | "rack" | "range" | "range-alias" | "role" | "schematic" | "schematic_symbol" | "status" | "table" | "task" | "user" | "view";
33
33
  key: string;
34
34
  };
35
35
  //# sourceMappingURL=types.gen.d.ts.map
@@ -1,13 +1,13 @@
1
1
  import { primitive } from '@synnaxlabs/x';
2
2
  export type SingleParamAnalysisResult<T extends primitive.Value, K extends PartialTypeNameRecord<T>> = T extends unknown ? {
3
3
  single: true;
4
- variant: K[keyof K];
4
+ variant: K[TypeName<T>];
5
5
  normalized: T[];
6
6
  actual: T;
7
7
  } : never;
8
8
  export type MultiParamAnalysisResult<T extends primitive.Value, K extends PartialTypeNameRecord<T>> = T extends unknown ? {
9
9
  single: false;
10
- variant: K[keyof K];
10
+ variant: K[TypeName<T>];
11
11
  normalized: T[];
12
12
  actual: T[];
13
13
  } : never;
@@ -1 +1 @@
1
- {"version":3,"file":"retrieve.d.ts","sourceRoot":"","sources":["../../../src/util/retrieve.ts"],"names":[],"mappings":"AASA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAItD,MAAM,MAAM,yBAAyB,CACnC,CAAC,SAAS,SAAS,CAAC,KAAK,EACzB,CAAC,SAAS,qBAAqB,CAAC,CAAC,CAAC,IAChC,CAAC,SAAS,OAAO,GACjB;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAAC,UAAU,EAAE,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAE,GACjE,KAAK,CAAC;AAEV,MAAM,MAAM,wBAAwB,CAClC,CAAC,SAAS,SAAS,CAAC,KAAK,EACzB,CAAC,SAAS,qBAAqB,CAAC,CAAC,CAAC,IAChC,CAAC,SAAS,OAAO,GACjB;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAAC,UAAU,EAAE,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,CAAC,EAAE,CAAA;CAAE,GACpE,KAAK,CAAC;AAEV,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAC/B,QAAQ,GACR,CAAC,SAAS,MAAM,GACd,QAAQ,GACR,CAAC,SAAS,OAAO,GACf,SAAS,GACT,CAAC,SAAS,SAAS,GACjB,WAAW,GACX,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAC/B,UAAU,GACV,QAAQ,CAAC;AAErB,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,SAAS,CAAC,KAAK,IAAI,OAAO,CACpE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAC5B,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAC7B,CAAC,SAAS,SAAS,CAAC,KAAK,EACzB,CAAC,SAAS,qBAAqB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,IAC3D,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,eAAO,MAAM,aAAa,GACxB,CAAC,SAAS,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,EAC3C,CAAC,SAAS,qBAAqB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAE7D,MAAM,CAAC,SAAS,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EACzC,YAAY,CAAC,EACb,4BAAkC,oBAAyB,KAC1D,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAkB1B,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,CAAC,EAAE,CAAC,EAC9C,MAAM,MAAM,EACZ,QAAQ,CAAC,GAAG,CAAC,EAAE,EACf,SAAS,CAAC,EAAE,EACZ,UAAU,OAAO,KAChB,IAQF,CAAC"}
1
+ {"version":3,"file":"retrieve.d.ts","sourceRoot":"","sources":["../../../src/util/retrieve.ts"],"names":[],"mappings":"AASA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAItD,MAAM,MAAM,yBAAyB,CACnC,CAAC,SAAS,SAAS,CAAC,KAAK,EACzB,CAAC,SAAS,qBAAqB,CAAC,CAAC,CAAC,IAChC,CAAC,SAAS,OAAO,GACjB;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAAC,UAAU,EAAE,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAE,GACrE,KAAK,CAAC;AAEV,MAAM,MAAM,wBAAwB,CAClC,CAAC,SAAS,SAAS,CAAC,KAAK,EACzB,CAAC,SAAS,qBAAqB,CAAC,CAAC,CAAC,IAChC,CAAC,SAAS,OAAO,GACjB;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAAC,UAAU,EAAE,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,CAAC,EAAE,CAAA;CAAE,GACxE,KAAK,CAAC;AAEV,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAC/B,QAAQ,GACR,CAAC,SAAS,MAAM,GACd,QAAQ,GACR,CAAC,SAAS,OAAO,GACf,SAAS,GACT,CAAC,SAAS,SAAS,GACjB,WAAW,GACX,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAC/B,UAAU,GACV,QAAQ,CAAC;AAErB,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,SAAS,CAAC,KAAK,IAAI,OAAO,CACpE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAC5B,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAC7B,CAAC,SAAS,SAAS,CAAC,KAAK,EACzB,CAAC,SAAS,qBAAqB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,IAC3D,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,eAAO,MAAM,aAAa,GACxB,CAAC,SAAS,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,EAC3C,CAAC,SAAS,qBAAqB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAE7D,MAAM,CAAC,SAAS,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EACzC,YAAY,CAAC,EACb,4BAAkC,oBAAyB,KAC1D,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAkB1B,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,CAAC,EAAE,CAAC,EAC9C,MAAM,MAAM,EACZ,QAAQ,CAAC,GAAG,CAAC,EAAE,EACf,SAAS,CAAC,EAAE,EACZ,UAAU,OAAO,KAChB,IAQF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"telem.d.ts","sourceRoot":"","sources":["../../../src/util/telem.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAE/D,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,UAAU,QAAQ,KAAG,UAKjE,CAAC"}
1
+ {"version":3,"file":"telem.d.ts","sourceRoot":"","sources":["../../../src/util/telem.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAE/D,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,UAAU,QAAQ,KAAG,UAIjE,CAAC"}
@@ -1,5 +1,8 @@
1
1
  import { UnaryClient } from '@synnaxlabs/freighter';
2
+ import { destructor } from '@synnaxlabs/x';
2
3
  import { z } from 'zod';
4
+ import { ontology } from '../ontology';
5
+ import { query } from '../query';
3
6
  import { Key, New, View } from './types.gen';
4
7
  export declare const SET_CHANNEL_NAME = "sy_view_set";
5
8
  export declare const DELETE_CHANNEL_NAME = "sy_view_delete";
@@ -10,25 +13,38 @@ declare const retrieveRequestZ: z.ZodObject<{
10
13
  offset: z.ZodOptional<z.ZodNumber>;
11
14
  limit: z.ZodOptional<z.ZodNumber>;
12
15
  }, z.core.$strip>;
13
- declare const singleRetrieveArgsZ: z.ZodPipe<z.ZodObject<{
14
- key: z.ZodUUID;
15
- }, z.core.$strip>, z.ZodTransform<{
16
+ declare const retrieveMultiParamsZ: z.ZodUnion<[z.ZodObject<{
17
+ keys: z.ZodOptional<z.ZodArray<z.ZodUUID>>;
18
+ types: z.ZodOptional<z.ZodArray<z.ZodString>>;
19
+ searchTerm: z.ZodOptional<z.ZodString>;
20
+ offset: z.ZodOptional<z.ZodNumber>;
21
+ limit: z.ZodOptional<z.ZodNumber>;
22
+ }, z.core.$strip>, z.ZodPipe<z.ZodArray<z.ZodUUID>, z.ZodTransform<{
16
23
  keys: string[];
17
- }, {
18
- key: string;
19
- }>>;
20
- export interface RetrieveSingleParams extends z.input<typeof singleRetrieveArgsZ> {
21
- }
24
+ }, string[]>>]>;
25
+ export type RetrieveSingleParams = {
26
+ key: Key;
27
+ };
22
28
  export interface RetrieveMultipleParams extends z.input<typeof retrieveRequestZ> {
23
29
  }
24
- export declare class Client {
25
- private readonly client;
26
- constructor(client: UnaryClient);
27
- retrieve(args: RetrieveSingleParams): Promise<View>;
28
- retrieve(args: RetrieveMultipleParams): Promise<View[]>;
30
+ export interface ClientConfig {
31
+ unary: UnaryClient;
32
+ cache: query.Cache;
33
+ ontology: ontology.Client;
34
+ }
35
+ export declare class Client extends query.Retriever<typeof retrieveMultiParamsZ, Key, View> {
36
+ private readonly cfg;
37
+ private readonly store;
38
+ constructor(cfg: ClientConfig);
29
39
  create(view: New): Promise<View>;
30
40
  create(views: New[]): Promise<View[]>;
31
- delete(keys: Key | Key[]): Promise<void>;
41
+ rename(key: Key, name: string, opts?: query.WriteOptions): Promise<void>;
42
+ delete(keys: Key | Key[], opts?: query.WriteOptions): Promise<void>;
43
+ /** Subscribes to every view set delivered to the cache. */
44
+ onSet(handler: (view: View) => void): destructor.Destructor;
45
+ /** Subscribes to every view delete delivered to the cache. */
46
+ onDelete(handler: (key: Key) => void): destructor.Destructor;
47
+ private execRetrieve;
32
48
  }
33
49
  export {};
34
50
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/view/client.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,KAAK,GAAG,EAAQ,KAAK,GAAG,EAAQ,KAAK,IAAI,EAAS,MAAM,kBAAkB,CAAC;AAEpF,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAOpD,QAAA,MAAM,gBAAgB;;;;;;iBAMpB,CAAC;AAEH,QAAA,MAAM,mBAAmB;;;;;;GAEmB,CAAC;AAI7C,MAAM,WAAW,oBAAqB,SAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC;CAAG;AACpF,MAAM,WAAW,sBAAuB,SAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC;CAAG;AAInF,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBAEzB,MAAM,EAAE,WAAW;IAIzB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAevD,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAYrC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ/C"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/view/client.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAS,KAAK,UAAU,EAAa,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EACL,KAAK,GAAG,EAER,KAAK,GAAG,EAER,KAAK,IAAI,EAEV,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAOpD,QAAA,MAAM,gBAAgB;;;;;;iBAMpB,CAAC;AACH,QAAA,MAAM,oBAAoB;;;;;;;;eAA4C,CAAC;AAEvE,MAAM,MAAM,oBAAoB,GAAG;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC;AAChD,MAAM,WAAW,sBAAuB,SAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC;CAAG;AAoBnF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;CAC3B;AAED,qBAAa,MAAO,SAAQ,KAAK,CAAC,SAAS,CAAC,OAAO,oBAAoB,EAAE,GAAG,EAAE,IAAI,CAAC;IACjF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;gBAEnC,GAAG,EAAE,YAAY;IAuBvB,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAarC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,KAAK,CAAC,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB5E,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,IAAI,GAAE,KAAK,CAAC,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB7E,2DAA2D;IAC3D,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,UAAU,CAAC,UAAU;IAM3D,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,UAAU,CAAC,UAAU;YAM9C,YAAY;CAS3B"}
@@ -1,35 +1,27 @@
1
- import { record } from '@synnaxlabs/x';
2
1
  import { z } from 'zod';
3
2
  import { ontology } from '../ontology';
4
3
  export declare const keyZ: z.ZodUUID;
5
4
  export type Key = z.infer<typeof keyZ>;
6
5
  /**
7
- * View is a persisted view configuration storing visualization settings and
8
- * query parameters for line plots, tables, schematics, and other view
9
- * types.
6
+ * View is a persisted view configuration storing visualization settings and query
7
+ * parameters for line plots, tables, schematics, and other view types.
10
8
  */
11
9
  export declare const viewZ: z.ZodObject<{
12
- key: z.ZodUUID;
10
+ key: z.ZodDefault<z.ZodUUID>;
13
11
  name: z.ZodString;
14
12
  type: z.ZodString;
15
- query: z.ZodType<record.Unknown, unknown, z.core.$ZodTypeInternals<record.Unknown, unknown>>;
13
+ query: z.ZodDefault<z.ZodRecord<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodUnknown>>;
16
14
  }, z.core.$strip>;
17
15
  export interface View extends z.infer<typeof viewZ> {
18
16
  }
19
- export declare const newZ: z.ZodObject<{
20
- key: z.ZodOptional<z.ZodUUID>;
21
- name: z.ZodString;
22
- type: z.ZodString;
23
- query: z.ZodType<record.Unknown, unknown, z.core.$ZodTypeInternals<record.Unknown, unknown>>;
24
- }, z.core.$strip>;
25
- export interface New extends z.input<typeof newZ> {
17
+ export interface New extends z.input<typeof viewZ> {
26
18
  }
27
19
  export declare const ontologyID: ontology.CreateID<string>;
28
20
  export declare const TYPE_ONTOLOGY_ID: {
29
- type: "arc" | "builtin" | "channel" | "device" | "framer" | "group" | "label" | "lineplot" | "log" | "node" | "policy" | "rack" | "range" | "range-alias" | "role" | "schematic" | "schematic_symbol" | "status" | "table" | "task" | "user" | "view" | "workspace";
21
+ type: "arc" | "builtin" | "channel" | "device" | "framer" | "group" | "label" | "lineplot" | "log" | "node" | "panel" | "policy" | "project" | "rack" | "range" | "range-alias" | "role" | "schematic" | "schematic_symbol" | "status" | "table" | "task" | "user" | "view";
30
22
  key: string;
31
23
  } | {
32
- type: "arc" | "builtin" | "channel" | "device" | "framer" | "group" | "label" | "lineplot" | "log" | "node" | "policy" | "rack" | "range" | "range-alias" | "role" | "schematic" | "schematic_symbol" | "status" | "table" | "task" | "user" | "view" | "workspace";
24
+ type: "arc" | "builtin" | "channel" | "device" | "framer" | "group" | "label" | "lineplot" | "log" | "node" | "panel" | "policy" | "project" | "rack" | "range" | "range-alias" | "role" | "schematic" | "schematic_symbol" | "status" | "table" | "task" | "user" | "view";
33
25
  key: string;
34
26
  };
35
27
  //# sourceMappingURL=types.gen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.gen.d.ts","sourceRoot":"","sources":["../../../src/view/types.gen.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,eAAO,MAAM,IAAI,WAAW,CAAC;AAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;AAEvC;;;;GAIG;AACH,eAAO,MAAM,KAAK;;;;;iBAYhB,CAAC;AACH,MAAM,WAAW,IAAK,SAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC;CAAG;AAEtD,eAAO,MAAM,IAAI;;;;;iBAA+B,CAAC;AACjD,MAAM,WAAW,GAAI,SAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC;CAAG;AAEpD,eAAO,MAAM,UAAU,2BAAwC,CAAC;AAChE,eAAO,MAAM,gBAAgB;;;;;;CAAiB,CAAC"}
1
+ {"version":3,"file":"types.gen.d.ts","sourceRoot":"","sources":["../../../src/view/types.gen.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,eAAO,MAAM,IAAI,WAAW,CAAC;AAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,KAAK;;;;;iBAYhB,CAAC;AACH,MAAM,WAAW,IAAK,SAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC;CAAG;AACtD,MAAM,WAAW,GAAI,SAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC;CAAG;AAErD,eAAO,MAAM,UAAU,2BAAwC,CAAC;AAChE,eAAO,MAAM,gBAAgB;;;;;;CAAiB,CAAC"}
@@ -0,0 +1,189 @@
1
+ import { B as e, G as t, K as n, V as r, W as i, Z as a, d as o, t as s, z as c } from "./client-B08VDLSA.js";
2
+ import { DataType as l, TimeSpan as u, TimeStamp as d, array as f, errors as p, id as m } from "@synnaxlabs/x";
3
+ import { afterAll as h } from "vitest";
4
+ import { connect as g, createServer as _ } from "node:net";
5
+ //#region src/testutil/client.ts
6
+ var v = {
7
+ host: "localhost",
8
+ port: 9090,
9
+ username: "synnax",
10
+ password: "seldon",
11
+ retry: {
12
+ maxRetries: 4,
13
+ baseInterval: u.seconds(1),
14
+ scale: 1.5
15
+ }
16
+ }, y = [];
17
+ h(async () => {
18
+ let e = (await Promise.allSettled(y.map((e) => e.close()))).filter((e) => e.status === "rejected");
19
+ if (e.length > 0) throw AggregateError(e.map((e) => e.reason), "failed to close test clients");
20
+ });
21
+ var b = (e) => {
22
+ let t = new s({
23
+ ...v,
24
+ ...e
25
+ });
26
+ return y.push(t), t;
27
+ }, x = (e) => n.matches(e) || e instanceof Error && e.cause != null && x(e.cause), S = async (e, t) => {
28
+ let n = b({
29
+ username: e,
30
+ password: "test",
31
+ onInternalError: (e) => {
32
+ x(e) || console.error(e);
33
+ }
34
+ });
35
+ try {
36
+ await n.access.policies.retrieveForSubject(c(t));
37
+ } catch (e) {
38
+ if (!x(e)) throw p.fromUnknown(e);
39
+ }
40
+ return n;
41
+ }, C = async (e) => {
42
+ let t = m.create();
43
+ return {
44
+ username: t,
45
+ key: (await e.users.create({
46
+ username: t,
47
+ password: "test",
48
+ firstName: "test",
49
+ lastName: "test"
50
+ })).key
51
+ };
52
+ }, w = async (t, n) => {
53
+ let i = await C(t), a = await Promise.all(f.toArray(n).map(async (e) => await t.access.policies.create(e))), o = await t.access.roles.create({
54
+ name: "test",
55
+ description: "test"
56
+ });
57
+ return await t.ontology.addChildren(e(o.key), ...a.map(({ key: e }) => r(e))), await t.access.roles.assign({
58
+ user: i.key,
59
+ role: o.key
60
+ }), await S(i.username, i.key);
61
+ }, T = [
62
+ "Owner",
63
+ "Engineer",
64
+ "Host",
65
+ "Operator",
66
+ "Viewer"
67
+ ], E = async (e, t) => {
68
+ let n = (await e.access.roles.retrieve({})).find((e) => e.name === t);
69
+ if (n == null) throw new a(`no built-in role named ${t}`);
70
+ let r = await C(e);
71
+ return await e.access.roles.assign({
72
+ user: r.key,
73
+ role: n.key
74
+ }), await S(r.username, r.key);
75
+ }, D = class {
76
+ client;
77
+ byRole = /* @__PURE__ */ new Map();
78
+ constructor(e) {
79
+ this.client = e;
80
+ }
81
+ async get(e) {
82
+ let t = this.byRole.get(e);
83
+ if (t != null) return await t;
84
+ let n = E(this.client, e);
85
+ return this.byRole.set(e, n), await n;
86
+ }
87
+ }, O = async (e) => {
88
+ let t = await e.channels.create({
89
+ leaseholder: 1,
90
+ name: m.create(),
91
+ dataType: l.TIMESTAMP,
92
+ isIndex: !0
93
+ });
94
+ return [t, await e.channels.create({
95
+ leaseholder: 1,
96
+ name: m.create(),
97
+ dataType: l.FLOAT64,
98
+ index: t.key
99
+ })];
100
+ }, k = async (e) => {
101
+ let t = await e.channels.create({
102
+ leaseholder: 1,
103
+ name: m.create(),
104
+ dataType: l.TIMESTAMP,
105
+ isIndex: !0
106
+ });
107
+ return [t, await e.channels.create({
108
+ leaseholder: 1,
109
+ name: m.create(),
110
+ dataType: l.BOOLEAN,
111
+ index: t.key
112
+ })];
113
+ }, A = async (e) => await e.channels.create({
114
+ name: m.create(),
115
+ dataType: l.FLOAT64,
116
+ virtual: !0
117
+ }), j = async (e) => await e.channels.create({
118
+ name: m.create(),
119
+ dataType: l.BOOLEAN,
120
+ virtual: !0
121
+ }), M = async (e, t, n = u.seconds(5)) => t(e.status) ? e.status : await new Promise((r, i) => {
122
+ let a = setTimeout(() => {
123
+ o(), i(/* @__PURE__ */ Error("timed out waiting for connection status"));
124
+ }, n.milliseconds), o = e.onChange((e) => {
125
+ t(e) && (clearTimeout(a), o(), r(e));
126
+ });
127
+ }), N = async (e, t) => await M(e, ({ variant: e, details: t }) => e === "success" && t.streamLive, t), P = async (e) => {
128
+ let t = await e.projects.create({
129
+ name: `project-${m.create()}`,
130
+ layout: {}
131
+ });
132
+ return o(t.key);
133
+ }, F = {
134
+ host: "localhost",
135
+ port: 9090
136
+ }, I = {
137
+ baseInterval: u.milliseconds(10),
138
+ maxInterval: u.milliseconds(50),
139
+ scale: 1.5
140
+ }, L = async (e = {}) => {
141
+ let { host: t, port: n } = {
142
+ ...F,
143
+ ...e
144
+ }, r = /* @__PURE__ */ new Set(), i = !1, a = _((e) => {
145
+ if (i) {
146
+ e.destroy();
147
+ return;
148
+ }
149
+ let a = g(n, t);
150
+ r.add(e).add(a);
151
+ let o = () => {
152
+ r.delete(e), r.delete(a), e.destroy(), a.destroy();
153
+ };
154
+ e.on("error", o), a.on("error", o), e.on("close", o), a.on("close", o), e.pipe(a), a.pipe(e);
155
+ }), o = async (e) => await new Promise((t, n) => {
156
+ a.once("error", n), a.listen(e, () => {
157
+ a.removeListener("error", n), t();
158
+ });
159
+ });
160
+ await o(0);
161
+ let s = a.address();
162
+ if (s == null || typeof s == "string") throw Error("proxy failed to bind a port");
163
+ let c = s.port, l = async () => {
164
+ i = !0;
165
+ let e = new Promise((e) => a.close(() => e()));
166
+ r.forEach((e) => e.destroy()), r.clear(), await e;
167
+ };
168
+ return {
169
+ port: c,
170
+ sever: l,
171
+ restore: async () => {
172
+ i = !1, await o(c);
173
+ },
174
+ close: l
175
+ };
176
+ }, R = (e) => {
177
+ if (!i(e)) throw Error("expected a live cached answer");
178
+ return e;
179
+ }, z = (e) => {
180
+ if (!t.matches(e)) throw Error("expected a deleted answer");
181
+ return e;
182
+ }, B = (e, t) => Array.from({ length: t }, (t, n) => e + n).map((e) => d.seconds(e)), V = (e) => e.isVariable || e.equals(l.UINT8), H = {
183
+ resolveDataType: (e) => V(e) ? e : l.FLOAT32,
184
+ convert: (e, t) => V(e.dataType) ? e : (t == null && e.dataType.usesBigInt && e.length > 0 && (t = BigInt(e.data[0])), e.convert(l.FLOAT32, t))
185
+ };
186
+ //#endregion
187
+ export { T as BUILT_IN_ROLES, I as FAST_RETRY, D as RoleClients, v as TEST_CLIENT_PARAMS, P as createPanelParent, L as createSeverableProxy, b as createTestClient, w as createTestClientWithPolicy, E as createTestClientWithRole, z as expectDeleted, R as expectLive, H as glTransform, i as isLive, k as newIndexedBoolPair, O as newIndexedPair, j as newVirtualBoolChannel, A as newVirtualChannel, B as secondsLinspace, M as waitForStatus, N as waitForStreamLive };
188
+
189
+ //# sourceMappingURL=testutil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testutil.js","names":[],"sources":["../src/testutil/client.ts","../src/testutil/access.ts","../src/testutil/channels.ts","../src/testutil/connection.ts","../src/testutil/panels.ts","../src/testutil/proxy.ts","../src/testutil/query.ts","../src/testutil/telem.ts"],"sourcesContent":["// Copyright 2026 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { TimeSpan } from \"@synnaxlabs/x\";\nimport { afterAll } from \"vitest\";\n\nimport Synnax, { type SynnaxParams } from \"@/client\";\n\nexport const TEST_CLIENT_PARAMS: SynnaxParams = {\n host: \"localhost\",\n port: 9090,\n username: \"synnax\",\n password: \"seldon\",\n retry: {\n maxRetries: 4,\n baseInterval: TimeSpan.seconds(1),\n scale: 1.5,\n },\n};\n\n// A hook registered mid-test is silently dropped by vitest, so per-client afterAll\n// calls leak clients created inside test bodies. This module-level hook registers\n// during spec collection (import time) and covers every call site.\nconst openClients: Synnax[] = [];\n// Awaited so every close finishes before vitest tears down the worker; a close\n// still in flight at teardown races its logging against the closing RPC channel.\nafterAll(async () => {\n const results = await Promise.allSettled(openClients.map((client) => client.close()));\n const failures = results.filter((result) => result.status === \"rejected\");\n if (failures.length > 0)\n throw new AggregateError(\n failures.map((failure) => failure.reason),\n \"failed to close test clients\",\n );\n});\n\n/**\n * Creates a client connected to the local test cluster. The client is closed\n * automatically once every test in the current spec file has finished, so callers do\n * not need to close it themselves.\n */\nexport const createTestClient = (params?: Partial<SynnaxParams>): Synnax => {\n const client = new Synnax({ ...TEST_CLIENT_PARAMS, ...params });\n openClients.push(client);\n return client;\n};\n","// Copyright 2026 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { array, errors, id } from \"@synnaxlabs/x\";\n\nimport { policy } from \"@/access/policy\";\nimport { role } from \"@/access/role\";\nimport type Synnax from \"@/client\";\nimport { AccessDeniedError, NotFoundError } from \"@/errors\";\nimport { createTestClient } from \"@/testutil/client\";\nimport { user } from \"@/user\";\n\n/** Reports whether the error, or any error in its cause chain, is an access denial. */\nconst isDenial = (err: unknown): boolean =>\n AccessDeniedError.matches(err) ||\n (err instanceof Error && err.cause != null && isDenial(err.cause));\n\n/**\n * Connects as a new user and primes its policy cache. Denials are tolerated: the Core\n * refuses restricted subjects by design, and the change-stream refusal logs after\n * teardown, which vitest counts as an unhandled error.\n */\nconst connectAs = async (username: string, key: user.Key) => {\n const client = createTestClient({\n username,\n password: \"test\",\n onInternalError: (err) => {\n if (!isDenial(err)) console.error(err);\n },\n });\n try {\n await client.access.policies.retrieveForSubject(user.ontologyID(key));\n } catch (err) {\n if (!isDenial(err)) throw errors.fromUnknown(err);\n }\n return client;\n};\n\nconst createUser = async (client: Synnax) => {\n const username = id.create();\n const u = await client.users.create({\n username,\n password: \"test\",\n firstName: \"test\",\n lastName: \"test\",\n });\n return { username, key: u.key };\n};\n\n/**\n * Creates a client authenticated as a new user holding a role that carries the\n * policies. Pass several to grant different actions on different objects, which one\n * policy cannot express.\n */\nexport const createTestClientWithPolicy = async (\n client: Synnax,\n pol: policy.New | policy.New[],\n) => {\n const u = await createUser(client);\n const policies = await Promise.all(\n array.toArray(pol).map(async (p) => await client.access.policies.create(p)),\n );\n const r = await client.access.roles.create({\n name: \"test\",\n description: \"test\",\n });\n await client.ontology.addChildren(\n role.ontologyID(r.key),\n ...policies.map(({ key }) => policy.ontologyID(key)),\n );\n await client.access.roles.assign({ user: u.key, role: r.key });\n return await connectAs(u.username, u.key);\n};\n\n/** The roles the Core provisions on startup. */\nexport const BUILT_IN_ROLES = [\n \"Owner\",\n \"Engineer\",\n \"Host\",\n \"Operator\",\n \"Viewer\",\n] as const;\n\nexport type BuiltInRole = (typeof BUILT_IN_ROLES)[number];\n\n/**\n * Creates a client authenticated as a new user holding one of the Core's built-in\n * roles, for exercising a real role's permission set instead of a synthetic policy.\n * @param name - The built-in role to assign.\n * @throws {NotFoundError} if the Core provisions no role under the name.\n */\nexport const createTestClientWithRole = async (\n client: Synnax,\n name: BuiltInRole,\n): Promise<Synnax> => {\n const roles = await client.access.roles.retrieve({});\n const r = roles.find((r) => r.name === name);\n if (r == null) throw new NotFoundError(`no built-in role named ${name}`);\n const u = await createUser(client);\n await client.access.roles.assign({ user: u.key, role: r.key });\n return await connectAs(u.username, u.key);\n};\n\n/**\n * Caches one client per built-in role, so a spec covering many roles pays the user\n * creation cost once each. Construct one per spec file.\n */\nexport class RoleClients {\n private readonly client: Synnax;\n private readonly byRole = new Map<BuiltInRole, Promise<Synnax>>();\n\n constructor(client: Synnax) {\n this.client = client;\n }\n\n /** Returns a client authenticated as a user holding the role. */\n async get(name: BuiltInRole): Promise<Synnax> {\n const existing = this.byRole.get(name);\n if (existing != null) return await existing;\n const created = createTestClientWithRole(this.client, name);\n this.byRole.set(name, created);\n return await created;\n }\n}\n","// Copyright 2026 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { DataType, id } from \"@synnaxlabs/x\";\n\nimport { type channel } from \"@/channel\";\nimport type Synnax from \"@/client\";\n\nexport const newIndexedPair = async (\n client: Synnax,\n): Promise<[channel.Channel, channel.Channel]> => {\n const index = await client.channels.create({\n leaseholder: 1,\n name: id.create(),\n dataType: DataType.TIMESTAMP,\n isIndex: true,\n });\n const data = await client.channels.create({\n leaseholder: 1,\n name: id.create(),\n dataType: DataType.FLOAT64,\n index: index.key,\n });\n return [index, data];\n};\n\nexport const newIndexedBoolPair = async (\n client: Synnax,\n): Promise<[channel.Channel, channel.Channel]> => {\n const index = await client.channels.create({\n leaseholder: 1,\n name: id.create(),\n dataType: DataType.TIMESTAMP,\n isIndex: true,\n });\n const data = await client.channels.create({\n leaseholder: 1,\n name: id.create(),\n dataType: DataType.BOOLEAN,\n index: index.key,\n });\n return [index, data];\n};\n\nexport const newVirtualChannel = async (client: Synnax): Promise<channel.Channel> => {\n const ch = await client.channels.create({\n name: id.create(),\n dataType: DataType.FLOAT64,\n virtual: true,\n });\n return ch;\n};\n\nexport const newVirtualBoolChannel = async (\n client: Synnax,\n): Promise<channel.Channel> => {\n const ch = await client.channels.create({\n name: id.create(),\n dataType: DataType.BOOLEAN,\n virtual: true,\n });\n return ch;\n};\n","// Copyright 2026 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { TimeSpan } from \"@synnaxlabs/x\";\n\nimport { type connection } from \"@/connection\";\n\n/** Resolves once the handle's status satisfies the predicate. */\nexport const waitForStatus = async (\n handle: connection.Handle,\n predicate: (status: connection.Status) => boolean,\n timeout: TimeSpan = TimeSpan.seconds(5),\n): Promise<connection.Status> => {\n if (predicate(handle.status)) return handle.status;\n return await new Promise<connection.Status>((resolve, reject) => {\n const timer = setTimeout(() => {\n detach();\n reject(new Error(\"timed out waiting for connection status\"));\n }, timeout.milliseconds);\n const detach = handle.onChange((status) => {\n if (!predicate(status)) return;\n clearTimeout(timer);\n detach();\n resolve(status);\n });\n });\n};\n\n/**\n * Resolves once the handle's change stream is live, so every later cluster write\n * reaches the client's cache.\n */\nexport const waitForStreamLive = async (\n handle: connection.Handle,\n timeout?: TimeSpan,\n): Promise<connection.Status> =>\n await waitForStatus(\n handle,\n ({ variant, details }) => variant === \"success\" && details.streamLive,\n timeout,\n );\n","// Copyright 2026 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { id } from \"@synnaxlabs/x\";\n\nimport type Synnax from \"@/client\";\nimport { type ontology } from \"@/ontology\";\nimport { project } from \"@/project\";\n\n/**\n * Creates a throwaway project and returns its ontology ID. Panel creation requires a\n * parent, so tests that mint panels directly parent them here.\n */\nexport const createPanelParent = async (client: Synnax): Promise<ontology.ID> => {\n const proj = await client.projects.create({\n name: `project-${id.create()}`,\n layout: {},\n });\n return project.ontologyID(proj.key);\n};\n","// Copyright 2026 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { connect, createServer, type Socket } from \"node:net\";\n\nimport { type breaker, TimeSpan } from \"@synnaxlabs/x\";\n\nconst DEFAULT_TARGET = { host: \"localhost\", port: 9090 };\n\n/**\n * Retry policy for a client pointed at a severable proxy. A spec drives its own\n * retries, so the client's must finish well inside one assertion budget: the\n * default policy waits seconds per request and outlasts a single `expect.poll`\n * attempt, which reports as a timeout rather than the real answer.\n */\nexport const FAST_RETRY: breaker.Config = {\n baseInterval: TimeSpan.milliseconds(10),\n maxInterval: TimeSpan.milliseconds(50),\n scale: 1.5,\n};\n\nexport interface SeverableProxyTarget {\n host?: string;\n port?: number;\n}\n\nexport interface SeverableProxy {\n /** Port the proxy accepts connections on. Point the client here. */\n port: number;\n /** Drops every live connection and refuses new ones, as if the cluster died. */\n sever: () => Promise<void>;\n /** Accepts connections again on the same port. */\n restore: () => Promise<void>;\n /** Shuts the proxy down for good. */\n close: () => Promise<void>;\n}\n\n/**\n * Creates a TCP proxy in front of the live test cluster so specs can simulate\n * cluster downtime without touching the cluster itself. Connect a client to\n * the returned port, then sever() and restore() the link.\n */\nexport const createSeverableProxy = async (\n target: SeverableProxyTarget = {},\n): Promise<SeverableProxy> => {\n const { host, port } = { ...DEFAULT_TARGET, ...target };\n const sockets = new Set<Socket>();\n let severed = false;\n const server = createServer((downstream) => {\n // A connection the kernel accepted before the sever is still delivered after it,\n // and forwarding it would let a request through a severed link.\n if (severed) {\n downstream.destroy();\n return;\n }\n const upstream = connect(port, host);\n sockets.add(downstream).add(upstream);\n const destroy = (): void => {\n sockets.delete(downstream);\n sockets.delete(upstream);\n downstream.destroy();\n upstream.destroy();\n };\n downstream.on(\"error\", destroy);\n upstream.on(\"error\", destroy);\n downstream.on(\"close\", destroy);\n upstream.on(\"close\", destroy);\n downstream.pipe(upstream);\n upstream.pipe(downstream);\n });\n const listen = async (listenPort: number): Promise<void> =>\n await new Promise((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(listenPort, () => {\n server.removeListener(\"error\", reject);\n resolve();\n });\n });\n await listen(0);\n const address = server.address();\n if (address == null || typeof address === \"string\")\n throw new Error(\"proxy failed to bind a port\");\n const boundPort = address.port;\n const sever = async (): Promise<void> => {\n severed = true;\n const closed = new Promise<void>((resolve) => server.close(() => resolve()));\n sockets.forEach((socket) => socket.destroy());\n sockets.clear();\n await closed;\n };\n return {\n port: boundPort,\n sever,\n restore: async () => {\n severed = false;\n await listen(boundPort);\n },\n close: sever,\n };\n};\n","// Copyright 2026 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { query } from \"@/query\";\n\nexport { isLive } from \"@/query/query\";\n\n/** Asserts the cached answer is live (present and not deleted) and returns it. */\nexport const expectLive = <D extends query.Data>(\n value: query.Cached<D> | undefined,\n): D => {\n if (!query.isLive<D>(value)) throw new Error(\"expected a live cached answer\");\n return value;\n};\n\n/** Asserts the cached answer is a deletion and returns it. */\nexport const expectDeleted = <D extends query.Data>(\n value: query.Cached<D> | undefined,\n): query.Deleted<D> => {\n if (!query.Deleted.matches<D>(value)) throw new Error(\"expected a deleted answer\");\n return value;\n};\n","// Copyright 2026 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { DataType, type Series, TimeStamp } from \"@synnaxlabs/x\";\n\nimport { type framer } from \"@/framer\";\n\nexport const secondsLinspace = (start: number, n: number): TimeStamp[] =>\n Array.from({ length: n }, (_, i) => start + i).map((n) => TimeStamp.seconds(n));\n\nconst isRaw = (dt: DataType): boolean => dt.isVariable || dt.equals(DataType.UINT8);\n\n/** Narrows every numeric series to float32, anchoring bigints on an offset. Mirrors\n * the transform the visualization layer injects for WebGL rendering. */\nexport const glTransform: framer.Transform = {\n resolveDataType: (dt: DataType) => (isRaw(dt) ? dt : DataType.FLOAT32),\n convert: (series: Series, offset) => {\n if (isRaw(series.dataType)) return series;\n if (offset == null && series.dataType.usesBigInt && series.length > 0)\n offset = BigInt(series.data[0]);\n return series.convert(DataType.FLOAT32, offset);\n },\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synnaxlabs/client",
3
- "version": "0.56.1",
3
+ "version": "0.57.0",
4
4
  "description": "The Synnax Client Library",
5
5
  "keywords": [
6
6
  "synnax",
@@ -17,39 +17,62 @@
17
17
  "url": "https://github.com/synnaxlabs/synnax/issues"
18
18
  },
19
19
  "license": "BUSL-1.1",
20
- "main": "dist/client.cjs",
21
20
  "repository": {
22
21
  "type": "git",
23
22
  "url": "git+https://github.com/synnaxlabs/synnax.git",
24
23
  "directory": "client/ts"
25
24
  },
26
25
  "dependencies": {
27
- "async-mutex": "^0.5.0",
28
- "immer": "^11.1.8",
26
+ "immer": "^11.1.15",
29
27
  "zod": "^4.4.3",
30
- "@synnaxlabs/freighter": "^0.56.1",
31
- "@synnaxlabs/x": "^0.56.1"
28
+ "@synnaxlabs/alamos": "^0.57.0",
29
+ "@synnaxlabs/freighter": "^0.57.0",
30
+ "@synnaxlabs/x": "^0.57.0"
31
+ },
32
+ "peerDependencies": {
33
+ "vitest": "^4.1.10"
34
+ },
35
+ "peerDependenciesMeta": {
36
+ "vitest": {
37
+ "optional": true
38
+ }
32
39
  },
33
40
  "devDependencies": {
34
- "@vitest/coverage-v8": "^4.1.6",
35
- "@types/node": "^25.9.0",
36
- "eslint": "^10.4.0",
37
- "madge": "^8.0.0",
38
- "typescript": "^6.0.3",
39
- "vite": "^8.0.13",
40
- "vitest": "^4.1.6",
41
+ "@vitest/coverage-v8": "^4.1.10",
42
+ "@types/node": "^26.1.2",
43
+ "eslint": "^10.8.0",
44
+ "typescript": "^7.0.2",
45
+ "vite": "^8.2.0",
46
+ "vitest": "^4.1.10",
47
+ "@synnaxlabs/madge": "^0.0.0",
48
+ "@synnaxlabs/tsconfig": "^0.0.0",
41
49
  "@synnaxlabs/eslint-config": "^0.0.0",
42
- "@synnaxlabs/vite-plugin": "^0.0.0",
43
- "@synnaxlabs/tsconfig": "^0.0.0"
50
+ "@synnaxlabs/vite-plugin": "^0.0.0"
44
51
  },
45
52
  "type": "module",
46
- "types": "dist/src/index.d.ts",
47
- "module": "dist/client.js",
53
+ "files": [
54
+ "dist",
55
+ "src",
56
+ "!**/*.spec.*",
57
+ "!**/*.bench.*",
58
+ "!dist/eslint.config.*"
59
+ ],
60
+ "exports": {
61
+ ".": {
62
+ "types": "./dist/src/index.d.ts",
63
+ "default": "./dist/client.js"
64
+ },
65
+ "./testutil": {
66
+ "types": "./dist/src/testutil/index.d.ts",
67
+ "default": "./dist/testutil.js"
68
+ }
69
+ },
48
70
  "scripts": {
49
71
  "build": "tsc --noEmit && vite build",
50
72
  "check-types": "tsc --noEmit",
51
73
  "watch": "tsc --noEmit && vite build --watch",
52
74
  "test": "vitest",
75
+ "bench": "vitest bench",
53
76
  "cov": "vitest --coverage",
54
77
  "lint": "eslint",
55
78
  "fix": "eslint --fix",
@@ -9,15 +9,26 @@
9
9
 
10
10
  import { type UnaryClient } from "@synnaxlabs/freighter";
11
11
 
12
+ import { Granted } from "@/access/granted";
12
13
  import { policy } from "@/access/policy";
13
14
  import { role } from "@/access/role";
15
+ import { type ontology } from "@/ontology";
16
+ import { type query } from "@/query";
17
+
18
+ export interface ClientConfig {
19
+ unary: UnaryClient;
20
+ cache: query.Cache;
21
+ ontology: ontology.Client;
22
+ }
14
23
 
15
24
  export class Client {
16
25
  readonly policies: policy.Client;
17
26
  readonly roles: role.Client;
27
+ readonly granted: Granted;
18
28
 
19
- constructor(client: UnaryClient) {
20
- this.policies = new policy.Client(client);
21
- this.roles = new role.Client(client);
29
+ constructor(cfg: ClientConfig) {
30
+ this.policies = new policy.Client(cfg);
31
+ this.roles = new role.Client(cfg);
32
+ this.granted = new Granted({ policies: this.policies });
22
33
  }
23
34
  }
@@ -51,7 +51,6 @@ export const allowRequest = (req: Request, policies: Policy[]): boolean => {
51
51
  let allowed = false;
52
52
 
53
53
  for (const policy of policies) {
54
- // Check if every requested action is allowed by this policy
55
54
  const actionAllowed = policy.actions.includes(action);
56
55
  if (!actionAllowed) continue;
57
56
 
@@ -75,10 +74,8 @@ export const allowRequest = (req: Request, policies: Policy[]): boolean => {
75
74
  if (allowed) break;
76
75
  }
77
76
 
78
- // If any object is not allowed, the entire request fails
79
77
  if (!allowed) return false;
80
78
  }
81
79
 
82
- // All objects are allowed
83
80
  return true;
84
81
  };
@@ -10,5 +10,6 @@
10
10
  export { type Action, ACTIONS, actionZ } from "@/access/action/types.gen";
11
11
  export * from "@/access/client";
12
12
  export * from "@/access/enforce";
13
+ export * from "@/access/granted";
13
14
  export * from "@/access/policy";
14
15
  export * from "@/access/role";